Cyber Security Academy · Lezione

Minacce alla supply chain

Come le dipendenze diventano vettori d'attacco.

Lezione 1 di 413 passaggi

Minacce alla supply chain è una lezione Cyber Security Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cyber Security Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cyber Security Academy include 4 lezioni in totale.

Che cos'è un attacco alla catena di approvvigionamento

Un attacco alla catena di approvvigionamento del software compromette un'organizzazione non violandola direttamente, ma corrompendo qualcosa di cui essa si fida e che utilizza: una libreria, uno strumento di build, un'immagine di base di un container o un server di aggiornamento.

Poiché il software moderno viene assemblato a partire da centinaia di componenti di terze parti, un singolo elemento avvelenato viene ereditato da ogni utilizzatore a valle. L'attaccante investe una sola volta e raggiunge molte vittime.

  • Inversione della fiducia — il perimetro di sicurezza si sposta al di fuori del Suo codice
  • Raggio d'impatto transitivo — un pacchetto compromesso si propaga in migliaia di build

L'iceberg delle dipendenze

Quando aggiunge una dipendenza diretta, spesso introduce decine di dipendenze transitive che non ha mai scelto. Una tipica applicazione Node o Python dichiara una manciata di pacchetti, ma ne risolve centinaia.

Elencare l'intero albero risolto, non solo il manifest, per vedere cosa distribuisce effettivamente:

# npm: full resolved dependency tree
npm ls --all

# Python: pinned transitive closure
pip freeze

# count transitive nodes
npm ls --all --parseable | wc -l

Typosquatting e confusione dei nomi

Gli attaccanti pubblicano pacchetti dannosi con nomi simili a quelli più diffusi, contando su un errore di battitura fatale.

  • Typosquatting — reqeusts al posto di requests
  • Combosquatting — python-requests che imita il nome reale
  • Dependency confusion — pubblicazione di un pacchetto pubblico con lo stesso nome di quello privato interno, così un resolver configurato erroneamente scarica la versione dell'attaccante

Si difenda configurando un registry interno affidabile e utilizzando pacchetti privati con scope o namespace.

Acquisizione dell'account e del controllo sul maintainer

Un pacchetto legittimo e ampiamente considerato affidabile può diventare ostile se l'account del maintainer viene compromesso o se un collaboratore malevolo ottiene i diritti di pubblicazione.

Recenti incidenti reali mostrano che gli attaccanti sottraggono con il phishing le credenziali dei maintainer, quindi pubblicano una release correttiva avvelenata che esfiltra token durante l'installazione.

  • Richieda la 2FA per tutti gli account che pubblicano pacchetti
  • Preferisca pacchetti con token di pubblicazione associati a uno scope e release protette
  • Controlli la presenza di nuovi maintainer inattesi nelle dipendenze critiche

Script di installazione malevoli

Molti ecosistemi eseguono codice durante l'installazione, prima ancora che l'applicazione venga avviata. Un npm install può eseguire un hook postinstall che sottrae variabili d'ambiente o chiavi SSH.

Disabiliti gli script di installazione arbitrari nella CI e sottoponga a verifica qualsiasi pacchetto che ne abbia bisogno:

# npm: block lifecycle scripts during install
npm ci --ignore-scripts

# inspect what a package would run
npm view <package> scripts

# pnpm equivalent
pnpm install --ignore-scripts

Strumenti di build compromessi

L'ambiente di build è di per sé un obiettivo di grande valore. Se un attaccante avvelena un compilatore, l'immagine di un runner CI o un plugin di build, ogni artefatto prodotto contiene una backdoor, anche quando il codice sorgente è integro.

Un esempio classico è un meccanismo di aggiornamento trojanizzato che firma il malware con una chiave legittima di firma del codice, inducendo le vittime ad accettarlo come autentico.

  • Tratti l'infrastruttura di build come un ambiente di produzione, applicando un hardening completo
  • Utilizzi runner di build effimeri e riproducibili
  • Tenga separate le chiavi di firma dall'host di build

Lockfile e hash di integrità

Un lockfile fissa versioni esatte e hash del contenuto, impedendo a una nuova risoluzione di sostituire silenziosamente un artefatto con uno diverso. Lo inserisca sempre nel repository e faccia in modo che la CI lo verifichi, invece di risolvere nuovamente le dipendenze senza vincoli.

Il campo di integrità contiene un hash; se il tarball scaricato non corrisponde, l'installazione non va a buon fine.

# package-lock.json integrity entry
# "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
# "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA=="

# CI must install from lock, never re-resolve
npm ci
yarn install --frozen-lockfile

Scansione delle dipendenze alla ricerca di vulnerabilità

Le versioni note per essere vulnerabili (tracciate come CVE) sono la debolezza più comune della catena di approvvigionamento. Gli strumenti di Software Composition Analysis (SCA) confrontano le dipendenze risolte con i database delle vulnerabilità.

Esegua le scansioni nella CI e interrompa le build in presenza di risultati critici:

# npm built-in audit
npm audit --audit-level=high

# OSV scanner across ecosystems
osv-scanner --lockfile=package-lock.json

# Trivy for filesystem and images
trivy fs --severity HIGH,CRITICAL .

Fissare le versioni e includere le dipendenze

Gli intervalli di versione mobili (^1.2.0) consentono alle nuove release di entrare automaticamente, una soluzione comoda che però La espone a una patch malevola.

  • Fissi le versioni esatte e valuti deliberatamente gli aggiornamenti
  • Fissi tramite digest le immagini dei container, anziché tramite tag mutabili come latest
  • Includa le dipendenze critiche nel Suo repository o mirror, così l'eliminazione da parte del progetto a monte non potrà interrompere o compromettere il Suo sistema
# pin a container image by immutable digest
FROM python:3.12-slim@sha256:1d52838af602b4b5a831beb13a0e4d073280665ea7be7f69ce2382f29c5a613f

Monitoraggio continuo e provenienza

La sicurezza della catena di approvvigionamento è un'attività continua, non una scansione una tantum. Deve sapere cosa distribuisce, da dove proviene e quando diventa vulnerabile.

  • Generi un SBOM per ogni release (nella prossima lezione)
  • Acquisisca la provenienza della build, così da poter dimostrare come è stato prodotto un artefatto
  • Si abboni agli avvisi, in modo che una nuova CVE renda necessaria una rivalutazione delle build già distribuite

Modellazione delle minacce nella pipeline

Mappi ogni fase in cui entra un input non affidabile: le macchine degli sviluppatori, il controllo del codice sorgente, i registry delle dipendenze, il sistema di build, l'archiviazione degli artefatti e il canale di aggiornamento. Ognuna è un potenziale punto di inserimento.

Per ogni fase si chieda: chi può scrivere qui, cosa potrebbe fare in caso di compromissione e come lo rileverei? In questo modo otterrà un elenco prioritizzato di controlli, anziché una checklist generica.

Verifica rapida: dependency confusion

Verifichi la Sua comprensione di una classe comune di attacchi alla catena di approvvigionamento.

Riepilogo: minacce alla catena di approvvigionamento

Ha appreso perché le dipendenze sono vettori d'attacco e come ridurre questa esposizione.

  • L'inversione della fiducia significa che la sicurezza dipende da terze parti che non controlla
  • Le minacce principali sono: typosquatting, dependency confusion, acquisizione del controllo sul maintainer, script di installazione malevoli e strumenti di build compromessi
  • Le difese fondamentali sono: lockfile con hash di integrità, scansione SCA, fissaggio esatto tramite digest, 2FA per gli account che pubblicano pacchetti e monitoraggio continuo

Successivamente inventarierà esattamente il contenuto del Suo software con un SBOM.

Gratis per iniziare

Impara Cyber Security Academy con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
76
Lezioni
303

Domande Frequenti

La lezione «Minacce alla supply chain» è gratuita?

Sì — il testo completo di «Minacce alla supply chain» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cyber Security Academy, passa a CoddyKit PRO. Il corso Cyber Security Academy include 4 lezioni in totale.

Cosa imparerò in «Minacce alla supply chain»?

Come le dipendenze diventano vettori d'attacco. Eserciti Cyber Security Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Cyber Security Academy?

Non è richiesta alcuna esperienza precedente. Cyber Security Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Minacce alla supply chain»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Cyber Security Academy?

Sì. Ogni lezione Cyber Security Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Minacce alla supply chain
  2. Software Bill of Materials (SBOM)
  3. Firma delle dipendenze e degli artefatti
  4. Proteggere le pipeline CI/CD
← Torna a Cyber Security Academy