L’incidente Binance da 6,3 miliardi di dollari: cosa è successo e come ridurre il rischio

Crescita del prodotto in Semaphore UI
12 min di lettura

Il computer compromesso di un dipendente può mettere a rischio molto più dei file locali. Esaminiamo l’attacco a Binance e mostriamo come l’automazione controllata con Semaphore UI possa limitare ciò che un attaccante può raggiungere, modificare e continuare a usare.

Discuti questo articolo con l’IA

Panoramica

Il 29 ottobre 2026, gli attaccanti hanno raggiunto i sistemi di firma dei wallet di Binance. Nel suo rapporto preliminare del 3 novembre, Binance ha stimato gli asset coinvolti in circa 6,34 miliardi di dollari, di cui 2,85 miliardi congelati o intercettati. L’intrusione è iniziata sui computer dei dipendenti.

Questo punto di partenza è familiare ben oltre il settore delle criptovalute. Una postazione compromessa può esporre credenziali di produzione, diritti di deployment e strumenti interni che consentono di raggiungere i dispositivi di altri dipendenti. La sfida tecnica è impedire che questi permessi trasformino un account compromesso nel controllo di un servizio critico.

Come si è svolto l’attacco

Le conclusioni preliminari di Binance descrivono compromissioni di computer dei dipendenti a giugno e settembre, seguite il 20 ottobre da un’intrusione più ampia attraverso strumenti interni di IA. Gli attaccanti hanno raggiunto i computer di due colleghi e trovato un token per distribuire container. Il 29 ottobre lo hanno usato per distribuire codice malevolo che ha raggiunto i sistemi di firma dei wallet e avviato trasferimenti non autorizzati.

  1. Installer Homebrew manomesso

    Binance ha sostituito il dispositivo e ruotato le credenziali. L’attaccante aveva scoperto il ruolo dell’ingegnere e i suoi colleghi.

  2. Esercizio di colloquio malevolo

    Un repository malevolo ha dato agli attaccanti un punto di accesso al computer di un altro dipendente.

  3. Token di deployment ottenuto

    Gli strumenti interni di IA hanno aiutato gli attaccanti a raggiungere i colleghi e trovare il token.

  4. 17:15–19:56 UTC

    Container malevolo distribuito

    Il token di deployment rubato ha consentito al codice malevolo di raggiungere i sistemi di firma dei wallet.

  5. 20:05–20:09 UTC

    Iniziano i trasferimenti non autorizzati

  6. 23:56 UTC

    Viene regolato l’ultimo trasferimento non autorizzato

  7. 00:10 UTC

    Delega Ethereum revocata

    Il permesso sulla blockchain richiedeva una revoca separata.

Cronologia dell’incidente Binance, 2026. Tutti gli orari sono espressi in UTC.

Gli attaccanti hanno usato il servizio di firma anche per creare una delega EIP-7702, ossia un’autorizzazione che consente a codice sotto il loro controllo di agire per conto di un wallet Ethereum. Questo permesso esisteva sulla blockchain, indipendentemente dai sistemi di prelievo di Binance. Sospendere i prelievi non poteva eliminarlo. Binance doveva revocarlo separatamente sulla blockchain.

La distinzione importante è tra fermare un’attività e rimuovere l’autorità che la rende possibile. Sostituire un dispositivo, revocare una credenziale di deployment e annullare un permesso in un altro sistema affrontano parti diverse dell’intrusione.

Cosa rivela l’incidente sulla sicurezza in produzione

Un portatile, un sistema di deployment e un servizio sensibile svolgono funzioni diverse. Il rischio cresce quando l’accesso a uno apre automaticamente quello successivo. Un token rubato può consentire a un attaccante di sostituire del software. Quel software può poi agire con permessi che il dipendente non ha mai avuto direttamente.

Quattro domande aiutano a individuare dove interrompere questa progressione:

  1. Esposizione delle credenziali. Quale accesso alla produzione può ottenere un attaccante dal dispositivo di un dipendente?
  2. Privilegi di deployment. Chi può modificare il codice eseguito con quell’accesso?
  3. Autorizzazione del servizio. Quali azioni accetterà un servizio sensibile da quel codice?
  4. Accesso persistente. Quali nuovi permessi potrebbero rimanere dopo la disattivazione dell’account originale?

L’obiettivo è limitare il passaggio di autorità tra i sistemi e identificare e revocare qualsiasi accesso aggiuntivo creato durante un’intrusione. Le sezioni seguenti esaminano quattro controlli che contribuiscono a questo obiettivo.

Portatile compromesso

L’attaccante controlla il dispositivo

1Limitare le credenziali
Token di deployment
Sistema di deployment

Accetta una modifica software

2Proteggere le modifiche
Codice malevolo
Carico di lavoro in esecuzione

Il codice ne eredita i permessi

Identità di servizio
Servizio sensibile

Esegue richieste privilegiate

3Autorizzare le richieste
4
Contenimento e revoca

Identificare e revocare nuove credenziali e permessi in tutti i sistemi interessati.

Un token rubato può autorizzare nuovo codice, che poi usa i permessi del carico di lavoro. I controlli 1–3 limitano questo percorso. Il controllo 4 affronta gli accessi creati in qualsiasi punto durante l’intrusione.

Controllo 1. Ridurre le credenziali che un portatile può esporre

Una credenziale è utile a un attaccante perché un altro sistema la accetta come prova di autorità. Conservare meno credenziali di produzione sui dispositivi dei dipendenti riduce ciò che può essere rubato quando uno strumento, un repository o una sessione del browser viene compromesso.

Per il lavoro ordinario, un dipendente ha spesso bisogno del permesso di richiedere un’operazione, come il riavvio di un servizio. La credenziale che la esegue può rimanere associata a un’identità di esecuzione separata. Ridurre l’esposizione significa quindi sia eliminare le copie inutili sia gestire le credenziali rimanenti:

  • Sostituire, quando possibile, l’accesso diretto ordinario con operazioni definite in modo preciso.
  • Usare identità separate per compiti diversi e limitarne ambito e durata.
  • Mantenere un inventario delle credenziali, dei loro responsabili e delle modalità di revoca.

Questo applica il principio delle linee guida OWASP sulla gestione dei segreti: ridurre la gestione manuale dei segreti e concedere solo l’accesso necessario a ciascuna identità. Una postazione compromessa espone così meno credenziali riutilizzabili e chi risponde all’incidente sa chi gestisce quelle ancora da revocare.

Controllo 2. Trattare i diritti di deployment come privilegi di produzione

Un segreto può essere nascosto a una persona ma disponibile al codice che distribuisce. Chi può modificare quel codice potrebbe leggere il segreto, chiamare un’API interna o agire come account di servizio dell’applicazione. L’accesso al deployment va quindi valutato in base ai permessi del carico di lavoro risultante.

Le linee guida OWASP sulla sicurezza CI/CD considerano modifiche al repository, configurazione delle pipeline e host di esecuzione come parti dello stesso problema di sicurezza. La protezione deve coprire il codice prima del deployment e i suoi permessi dopo:

  • Richiedere una revisione del codice di produzione e proteggere il branch del repository eseguito dall’automazione.
  • Controllare le modifiche alle definizioni delle attività, alle dipendenze e agli input di avvio, oltre che allo script principale.
  • Concedere ai carichi di lavoro solo le credenziali e l’accesso di rete necessari alla loro funzione.

Due insiemi di controlli devono operare insieme. I permessi sul repository e sul deployment determinano chi può modificare il codice. Politiche separate per identità, host e rete limitano ciò che quel codice può fare durante l’esecuzione. L’archiviazione centralizzata dei segreti riduce l’esposizione, mentre queste politiche vincolano il programma che usa il segreto.

Controllo 3. Autorizzare l’operazione, non solo il chiamante

Un servizio di firma può mantenere nascosta la chiave privata e accettare comunque una richiesta di firma dannosa. La stessa distinzione vale per un database o un’API cloud: autenticare un carico di lavoro identifica il chiamante, mentre l’autorizzazione decide cosa può fare.

OWASP raccomanda di verificare l’autorizzazione a ogni richiesta e di negare l’accesso se non è esplicitamente consentito. Nel servizio ricevente significa verificare sia l’azione sia il suo obiettivo: destinatari e importi di pagamento consentiti, operazioni sul database o modifiche all’infrastruttura.

Il risultato dovrebbe essere un servizio che valuta l’azione richiesta anche quando il chiamante è già considerato attendibile. L’automazione regola come viene richiesto il lavoro. Il servizio ricevente regola quali operazioni accettare.

Controllo 4. Revocare gli accessi creati durante l’intrusione

Un attaccante può usare un’identità legittima per aggiungere un’altra credenziale o concedere ulteriori permessi. MITRE ATT&CK documenta la manipolazione degli account come un modo per mantenere o ampliare l’accesso, anche aggiungendo credenziali cloud e chiavi SSH. Disattivare la sessione originale non elimina necessariamente queste modifiche.

La delega sulla blockchain di Binance mostra perché chi risponde all’incidente deve esaminare i permessi nel sistema interessato stesso. Il contenimento deve coprire sia il punto di accesso iniziale sia l’autorità creata attraverso di esso:

  • Limitare quali identità di automazione possono creare altre credenziali o concedere permessi.
  • Includere account, sessioni e deleghe appena creati nel piano di risposta.
  • Verificare la revoca nel sistema che applica il permesso, invece di considerare un’attività interrotta come prova del contenimento.

Seguire questi passaggi fornisce al team di risposta un insieme definito di identità e permessi da esaminare e revocare. Rende anche verificabile il contenimento: il team può controllare che ogni percorso noto verso il servizio interessato sia stato effettivamente chiuso.

Questi controlli operano su livelli diversi: il dispositivo del dipendente, il sistema di deployment, il servizio ricevente e il processo di risposta. Ognuno richiede un responsabile e un modo per verificare che le restrizioni reggano quando un altro livello viene compromesso.

Come aiuta l’automazione controllata

Le piattaforme di gestione dell’automazione affrontano la parte del problema tra la richiesta di un dipendente e l’esecuzione in produzione. In Semaphore UI, un team può preparare un’attività definita, controllare chi può eseguirla o modificarla ed eseguirla con un’identità separata. L’autorizzazione all’interno del servizio di destinazione e la revoca dei permessi creati altrove rimangono responsabilità di quei sistemi e del team di risposta.

Consideriamo un ingegnere reperibile che deve riavviare un servizio API. Un responsabile della manutenzione prepara un playbook e un Task Template che fissano gli host di destinazione e le modalità del riavvio. L’ingegnere avvia l’attività e legge il risultato senza aprire una sessione SSH in produzione. I due percorsi seguenti eseguono lo stesso riavvio, ma affidano la credenziale di esecuzione a soggetti diversi.

Accesso diretto

Portatile del dipendente Conserva la chiave di produzione
Accesso SSH diretto
Host di produzione

Il servizio si riavvia

Un portatile compromesso può esporre la credenziale riutilizzabile di produzione.

Tramite Semaphore UI

Portatile del dipendente

Permesso di eseguire l’attività salvata

Richiedere l’attività
Confine di esecuzione Server o runner Semaphore Usa una chiave ad ambito limitatoKey Store o archivio esterno di segreti
Eseguire l’operazione
Host di produzione

Il servizio si riavvia

In questa configurazione, la chiave di esecuzione resta fuori dal dispositivo del dipendente. Una sessione rubata può ancora eseguire le attività consentite.

Un riavvio, due modelli di accesso: credenziali dirette di produzione oppure il permesso di eseguire un’attività controllata.

Creare il flusso di riavvio richiede quattro passaggi collegati: creare un’identità di esecuzione limitata, definire cosa gli utenti possono eseguire o modificare, scegliere l’ambiente di esecuzione e rendere visibile il risultato. Una volta completati, lo stesso approccio può essere esteso ai deployment.

Passaggio 1. Creare un’identità di esecuzione limitata

Iniziare dagli host di destinazione. Creare un account di automazione il cui accesso privilegiato sia limitato al riavvio del servizio API. Non dovrebbe poter modificare la definizione del servizio o eseguire altri comandi privilegiati. Usare una credenziale separata e di sola lettura per recuperare il repository del playbook. Queste restrizioni determinano cosa può fare l’automazione anche se la sua credenziale viene usata impropriamente.

Nel Key Store del progetto, registrare la credenziale SSH e selezionarla nell’inventario di produzione che elenca gli host di destinazione. Scegliere l’archiviazione nel database locale oppure fare riferimento a un file protetto sul server o a una variabile d’ambiente. Per l’archiviazione locale, configurare le chiavi di cifratura e proteggere il materiale delle chiavi separatamente dai backup del database.

Se il team usa già un archivio di segreti supportato, come OpenBao in Pro o AWS Secrets Manager in Enterprise, registrarlo in Key Store → Storages e fare riferimento al segreto esistente quando si crea la chiave. Limitare l’integrazione ai segreti necessari al flusso. L’operatore può quindi richiedere il riavvio senza recuperare la credenziale di esecuzione.

Passaggio 2. Definire cosa l’operatore può eseguire o modificare

Salvare poi un modello “Restart API” con il playbook revisionato, l’inventario di produzione e le variabili necessarie. Riservare le modifiche a queste risorse ai responsabili della manutenzione. Per gli operatori, selezionare un ruolo di progetto che consenta l’esecuzione senza modifica: il ruolo integrato Task Runner può eseguire ogni modello nel progetto, quindi tutti devono essere appropriati per quel gruppo.

Per l’accesso a modelli selezionati, usare ruoli personalizzati e permessi sui modelli di Enterprise con un ruolo di base che non conceda già l’esecuzione in tutto il progetto. Queste concessioni si sommano, quindi assegnare un ruolo personalizzato limitato non annulla i permessi più ampi già posseduti dall’utente.

Questo rende applicabile la distinzione: gli operatori possono richiedere un riavvio preparato, mentre i responsabili della manutenzione controllano il codice, gli obiettivi e le credenziali sottostanti. Provare i permessi combinati con un account operatore prima di concedere accesso alla produzione.

Passaggio 3. Spostare l’esecuzione su un runner limitato

Installare un runner remoto su un host dedicato che possa raggiungere i server API. Quando l’operatore avvia “Restart API”, il runner esegue il playbook e restituisce l’output a Semaphore. I dipendenti hanno bisogno dell’accesso a Semaphore, mentre le regole del firewall possono limitare la connessione di gestione della produzione al runner.

Concedere a questo host di esecuzione solo l’accesso necessario alle attività assegnate:

  • Separare l’esecuzione in produzione dai carichi di lavoro meno attendibili e dagli ambienti di sviluppo.
  • Limitare i privilegi del sistema operativo del runner, le connessioni in uscita e le credenziali montate. Proteggere il suo token di autenticazione e usare HTTPS con verifica per collegarsi a Semaphore.
  • Usare i tag dei runner in Pro, come production, per indirizzare il modello ai runner previsti. Applicare le restrizioni di rete su quegli host.

Questo limita dove si possono usare le credenziali di produzione e quali sistemi può raggiungere l’attività. Un runner non è automaticamente una sandbox: le sue attività possono usare i file, le credenziali e la rete disponibili al loro processo. Separare l’esecuzione in produzione dai job non attendibili, rafforzare la configurazione di sicurezza e applicare le patch sia al runner sia al server Semaphore.

Passaggio 4. Verificare l’esecuzione e rendere visibili gli abusi

Dopo il riavvio, l’operatore apre il risultato dell’attività per verificarne stato, output e revisione del repository. Includere nel playbook un controllo dello stato del servizio, in modo che il risultato mostri se l’API si è ripresa, non soltanto se il comando di riavvio è terminato correttamente. Tenere i segreti fuori da quell’output.

Configurare le notifiche sui risultati delle attività per un canale monitorato dal team reperibile e concordare chi indaga sulle esecuzioni inattese. Un’attività riuscita può comunque essere un’azione non autorizzata. Durante un’indagine, correlare il registro di esecuzione con quelli degli host, del provider di identità e dell’archivio di segreti per capire come è stato ottenuto e usato l’accesso.

Il team dispone ora di una registrazione condivisa dell’operazione richiesta e del suo esito. Questo rende più facile indagare sulle attività insolite, purché qualcuno le monitori e disponga di una procedura di risposta chiara.

Applicare gli stessi controlli ai deployment

Un deployment usa lo stesso modello di accesso, ma installa anche software. Creare un modello separato “Deploy API” con un’identità di deployment i cui permessi siano limitati a quell’applicazione. La sua configurazione deve vincolare sia il codice che esegue il deployment sia la versione installata:

  • Fissare il codice di deployment e la destinazione. Usare deploy_api.yml da un branch main protetto e l’inventario production-api. Disabilitare le richieste di branch, inventario e argomenti CLI all’avvio.
  • Riservare le modifiche ai responsabili della manutenzione. Gli operatori possono avviare il modello, mentre i responsabili della manutenzione ne controllano codice, credenziali e configurazione.
  • Validare la selezione della versione nel playbook. Verificare ogni variabile di avvio che possa influire sulla versione. Risolvere un identificativo di versione consentito in un artefatto immutabile del processo di build attendibile e verificarne origine e integrità prima del deployment. Rifiutare riferimenti arbitrari a immagini o input non riconosciuti.

Questi controlli limitano ciò che può distribuire una sessione operatore rubata. Semaphore applica il controllo di accesso alle attività. La revisione Git e il playbook vincolano codice e artefatti. Il permesso di modificare quel playbook resta un privilegio di produzione.

Che l’attività riavvii un servizio o distribuisca una versione, l’operatore riceve il risultato senza ricevere la credenziale di esecuzione. Il team può ora verificare la distinzione che conta: quali azioni in produzione rimangono possibili attraverso la sessione di quell’operatore?

Cosa può ancora fare una sessione rubata

Una sessione operatore rubata può ancora richiedere le operazioni che quell’account è autorizzato a eseguire. Anche un riavvio consentito può interrompere un servizio se viene attivato ripetutamente. Provare il flusso configurato in staging con un account operatore realistico, verificando sia ciò che può fare sia come il team risponderebbe a un abuso:

  • Permessi su attività e input. Provare i ruoli reali e le opzioni di avvio, inclusi branch, inventari e argomenti alternativi.
  • Accesso oltre l’operazione prevista. Verificare l’accesso ad altri modelli, credenziali e sistemi di produzione, incluso ciò che il processo del runner può raggiungere.
  • Rilevamento e impatto operativo. Confermare chi riceve i risultati, chi indaga sulle attività inattese e se esecuzioni ripetute possono causare interruzioni inaccettabili.
  • Revoca. Provare la revoca di sessioni e token e identificare i permessi che l’identità di esecuzione potrebbe creare altrove.

Documentare l’accesso conservato dall’account di prova e chiudere ogni percorso che superi lo scopo dell’operazione. Al termine dell’esercizio, il team dovrebbe sapere sia cosa potrebbe fare una sessione rubata sia come rilevare e contenere quell’abuso.

La sicurezza nel lavoro quotidiano

I controlli di accesso operano insieme alla protezione degli endpoint e a un team che sa come rispondere. Rendere il flusso preparato abbastanza pratico da poterlo usare senza ricorrere a chiavi condivise e scorciatoie non documentate. Sostenerlo con alcune pratiche quotidiane:

  • Eseguire installer sconosciuti ed esercizi di colloquio in ambienti isolati e usa e getta, senza credenziali aziendali, mount dell’host o accesso alle reti interne.
  • Rendere facile segnalare tempestivamente attività sospette senza attribuire colpe. Fornire un contatto chiaro e una procedura di risposta agli incidenti.
  • Rivedere gli accessi quando cambiano le mansioni, mantenere una procedura controllata per l’accesso di emergenza ed esercitarsi nella revoca prima di un incidente.

Queste pratiche collegano prevenzione, rilevamento e ripristino al lavoro quotidiano. Aiutano a mantenere il modello di accesso coerente con i cambiamenti di responsabilità e offrono al team una risposta familiare quando si verifica un evento sospetto.

Limitare la portata della prossima compromissione

La lezione centrale è limitare quanta autorità possa accumulare un’identità compromessa. Meno credenziali sui portatili, automazione revisionata, host di esecuzione limitati e autorizzazione nei servizi di produzione riducono ciascuno i percorsi che un attaccante può seguire.

Semaphore integra diversi di questi controlli in un flusso ripetibile: attività preparate, permessi separati di esecuzione e modifica, credenziali fornite centralmente e registri di esecuzione visibili. Gli operatori ottengono le azioni necessarie al loro lavoro, mentre i responsabili della manutenzione mantengono il controllo su codice e credenziali sottostanti.

Iniziare da un’operazione di produzione usata spesso: preparare il relativo modello di attività, assegnare i permessi operatore necessari e provare l’accesso risultante prima di dismettere la connessione diretta che sostituisce. La misura utile del progresso è quanto poco un attaccante possa fare con il prossimo account che comprometterà.

Fonti

  1. Binance, “29 October 2026 Binance Security Incident: Initial Findings and Response Update”. URL: https://www.binance.com/en/blog/community/3229153443759566763 (consultato il: ).
  2. OWASP Foundation, “Secrets Management Cheat Sheet”. URL: https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html (consultato il: ).
  3. OWASP Foundation, “CI/CD Security Cheat Sheet”. URL: https://cheatsheetseries.owasp.org/cheatsheets/CI_CD_Security_Cheat_Sheet.html (consultato il: ).
  4. OWASP Foundation, “Authorization Cheat Sheet”. URL: https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html (consultato il: ).
  5. MITRE ATT&CK, “Account Manipulation (T1098)”. URL: https://attack.mitre.org/techniques/T1098/ (consultato il: ).
  6. Semaphore UI, “Task Templates”. URL: https://semaphoreui.com/docs/user-guide/task-templates (consultato il: ).
  7. Semaphore UI, “Key Store”. URL: https://semaphoreui.com/docs/user-guide/key-store (consultato il: ).
  8. Semaphore UI, “Inventory”. URL: https://semaphoreui.com/docs/user-guide/inventory (consultato il: ).
  9. Semaphore UI, “Encryption Keys”. URL: https://semaphoreui.com/docs/admin-guide/security/encryption (consultato il: ).
  10. Semaphore UI, “AWS Secrets Manager secret storage”. URL: https://semaphoreui.com/docs/user-guide/key-store/aws-secrets-manager (consultato il: ).
  11. Semaphore UI, “Teams”. URL: https://semaphoreui.com/docs/user-guide/team (consultato il: ).
  12. Semaphore UI, “Runners”. URL: https://semaphoreui.com/docs/admin-guide/runners (consultato il: ).
  13. Semaphore UI, “Tasks”. URL: https://semaphoreui.com/docs/user-guide/tasks (consultato il: ).
  14. Semaphore UI, “Alerts”. URL: https://semaphoreui.com/docs/user-guide/alerts (consultato il: ).