TL;DR
- Cosa imparerai: Come gli hacker nordcoreani infettano i tuoi ambienti di sviluppo tramite pacchetti npm e pip malevoli, e come rilevarli prima che sia troppo tardi.
- Tempo richiesto: 15 minuti per la lettura, 30 minuti per implementare le contromisure di base.
- Difficoltà: Intermedia. Se gestisci un server di sviluppo o un ambiente CI/CD, questo ti riguarda direttamente.
IL PROBLEMA
Stai dormendo tranquillo e il tuo server di build notturno ha appena scaricato un pacchetto npm che sembra legittimo. Due ore dopo, il tuo bucket S3 è vuoto e qualcuno ha esfiltato tutte le credenziali AWS. Non è un incubo: è successo davvero a decine di aziende.
Gli hacker nordcoreani del cluster Contagious Interview (anche noti come Famous Chollima o Hexagon) hanno fatto evolvere le loro campagne. Non mandano più email di phishing banali. Ora usano i tuoi stessi strumenti di sviluppo contro di te.
Il meccanismo è semplice e inquietante:
- Creano pacchetti npm e pip con nomi che sembrano legittimi (spesso typosquatting di pacchetti popolari)
- Li pubblicano sui registry ufficiali
- Aspettano che sviluppatori inconsapevoli li installino nei progetti
- Il codice malevolo viene eseguito durante il
npm install o pip install
Il risultato? Il malware arriva direttamente nella tua supply chain, bypassando i filtri email tradizionali perché non c'è nessuna email da filtrare.
PREREQUISITI
Prima di procedere, assicurati di avere:
- Accesso sudo al server di sviluppo o CI/CD
- Privilegi di lettura sui log di sistema (
/var/log)
- Accesso al registro npm/pip aziendale (se usate un proxy privato)
- Capacità di installare packet sniffer o analizzare traffico di rete
Se non hai almeno i primi due, passa questo articolo al tuo team di sviluppo e fagli leggere la sezione step-by-step.
STEP-BY-STEP
Step 1: Identifica i Pacchetti Sospetti nei Tuoi Progetti
Il primo problema è capire se hai già installato qualcosa di infetto. Ecco come fare una verifica rapida:
# Elenca tutti i pacchetti npm installati
npm list --all --depth=0
# Controlla pip
pip list
# Verifica pacchetti con analisi hash (esempio)
npm audit
Cerca pacchetti con nomi simili a quelli popolari ma leggermente diversi. Ad esempio:
axios vs axio (typo)
requests vs requsts
lodash vs lodas
Il problema? I pacchetti malevoli spesso usano nomi completamente nuovi che sembrano utili. Il trucco è controllare chi li ha pubblicati e quando.
Step 2: Analizza il Contenuto del Pacchetto Prima dell'Installazione
Non installare mai ciecamente. Prima di un npm install in produzione:
# Scarica il pacchetto senza installarlo
npm pack <nome-pacchetto>
# Estrai e guarda cosa c'è dentro
tar -xzf <pacchetto>.tgz
cat package/package.json
# Controlla gli script nel pacchetto
cat package/package.json | grep -A 10 '"scripts"'
Gli script postinstall sono il cavallo di Troia preferito. Se vedi roba come:
"scripts": {
"postinstall": "node -e 'eval(Buffer.from(\"...base64...\", \"base64\"))'"
}
...vai nel panico. Quello è codice che viene eseguito automaticamente dopo l'installazione, con i tuoi permessi.
Step 3: Implementa un Registry Privato con Screening
Se gestisci un team di sviluppo, non lasciare che gli sviluppatori installino direttamente da npmjs.org. Configura un proxy:
# Esempio con Verdaccio (registry privato)
npm install -g verdaccio
# Configura .npmrc per usare il registry interno
# file: ~/.npmrc
registry=http://tuo-server-interno:4873/
Il registry privato ti permette di:
- Cacheare i pacchiti approvati
- Scansionare nuovi pacchetti prima di renderli disponibili
- Bloccare pacchetti specifici con regole custom
Step 4: Monitora il Traffico di Rete Durante le Installazioni
Se qualcosa di male sta succedendo, lo vedrai in rete:
# Monitora con tcpdump (occhio, genera molto output)
sudo tcpdump -i eth0 -w /tmp/install.log &
# Dopo l'installazione, analizza
tcpdump -r /tmp/install.log | grep -E '(external|IP)'
# O usa ss per vedere connessioni sospette
ss -tnp | grep ESTAB
Cerca connessioni verso IP strani, especially verso porte non standard (non 443, non 80).
Step 5: Isola gli Ambienti di Build
Questo è il passo che la maggior parte salta e poi si pentono. Separa i tuoi ambienti:
# docker-compose.yml per build isolato
version: '3'
services:
builder:
image: node:18-alpine
volumes:
- ./code:/app
network_mode: "none" # RIATTENZIONE: rete disconnessa
# Ma serve internet per npm install? Allora:
# usa una rete dedicata con proxy filtrato
L'ideale è avere una rete dedicata per il build che passa attraverso un proxy che logga tutto. Se il pacchetto cerca di parlare con un server di comando e controllo, lo vedi.
Step 6: Configura Alert su npm/pip Anomali
Usa strumenti come Socket o npm audit plus che analizzano il comportamento dei pacchetti:
# Socket analisi statica
npx @socketsecurity/cli analyze
# Output 示例:
# ⚠️ POTENTIAL_SCRIPT_EXECUTION
# Package: suspicious-package
# File: install.js
# Risk: Script eseguito durante install
Se sei su GitHub Actions o GitLab CI, aggiungi step di scanning:
- name: Security Audit
run: |
npm audit --audit-level=high
npx @socketsecurity/cli analyze
VERIFICA
Ora testiamo che le contromisure funzionino. Crea un test semplice:
- Trova un pacchetto sospetto noto:Cerca su npmjs.com pacchetti con
postinstall che scaricano codice da fonti esterne.
- Simula un attacco in ambiente isolato:
# Crea una VM temporanea (non il tuo server di produzione!)
docker run -it node:18-alpine /bin/sh
# Prova ad installare il pacchetto sospetto
npm install <pacchetto-sospetto>
# Controlla i log
cat /var/log/syslog | grep npm
- Verifica il traffico:
# Se hai attivato il monitoraggio, cerca beaconing
tcpdump -r /tmp/install.log | awk '{print $3}' | sort | uniq -c | sort -rn
Se vedi connessioni ripetute verso lo stesso IP a intervalli regolari, hai un malware attivo.
- Checklist rapida:
- [ ] Ho controllato
npm list di recente?
- [ ] I miei ambienti CI/CD hanno logging delle installazioni?
- [ ] C'è un registry privato tra me e npmjs.org?
- [ ] Qualcuno monitora i
postinstall scripts?
Se hai almeno 3 "sì", dormi meglio. Se no, hai lavoro da fare.
TROUBLESHOOTING
D: Il mio antivirus non segnala nulla durante l'installazione. È normale?
Sì, purtroppo. I pacchetti malevoli spesso usano codice legittimo (PowerShell, curl, wget) che non viene riconosciuto come malware. Il problema è il contesto, non il binary.
D: Posso usare npm install --ignore-scripts sempre?
Puoi, ma poi devi fare il build manualmente. Molti pacchetti legittimi usano postinstall per compilare native modules. Se ignori sempre gli script, rompierai qualcosa.
D: Come faccio a sapere se un pacchetto è già stato compromesso nel mio progetto?
Guarda la cronologia git del package-lock.json. Se vedi cambiamenti che non hai fatto tu su dipendenze che non toccavi da mesi, indagano.
D: E pip? Anche pip è vulnerabile?
Assolutamente sì. Lo stesso meccanismo funziona con setup.py e pyproject.toml. Controlla sempre:
pip download <pacchetto>
unzip -l <pacchetto>.whl
D: Il mio team si lamenterà se blocco tutto. Come gestisco la friction?
Inizia con il monitoraggio, non con il blocco. Mostra ai dev cosa sta succedendo nei log. Di solito quando vedono il beaconing verso IP strani, capiscono.
CONCLUSIONE
Gli attacchi agli strumenti developer sono il nuovo normale. I gruppi come Contagious Interview non mandano email di phishing — iniettano il malware direttamente nel tuo processo di build.
La difesa non è complicata, ma richiede disciplina:
- Non installare mai ciecamente — verifica sempre i pacchetti nuovi
- Usa un registry privato — crea un layer di controllo
- Monitora il traffico — durante le installazioni, guarda cosa esce
- Isola i build — se il malware entra, che almeno non possa uscire
Se hai già un antispam cloud come MailSniper, quello blocca le email di phishing classiche. Ma questi attacchi non passano per email. Servono contromisure a livello di sviluppo e infrastruttura.
Il tuo prossimo passo? Vai sui tuoi server di build stasera e controlla npm list. Adesso. Prima che qualcuno lo faccia per te.
Risorse utili: