Binances hændelse på 6,3 mia. USD: hvad skete der, og hvordan mindskes risikoen
En kompromitteret medarbejdercomputer kan bringe langt mere end lokale filer i fare. Vi undersøger angrebet på Binance og viser, hvordan kontrolleret automatisering med Semaphore UI kan begrænse, hvad en angriber kan nå, ændre og fortsætte med at bruge.
Overblik
Den 29. oktober 2026 fik angribere adgang til Binances systemer til signering af wallet-transaktioner. I sin foreløbige rapport fra 3. november opgjorde Binance de berørte aktiver til cirka 6,34 mia. USD, hvoraf 2,85 mia. USD var blevet indefrosset eller opsnappet. Indtrængningen begyndte på medarbejderes computere.
Det udgangspunkt er velkendt langt uden for kryptovaluta. En kompromitteret arbejdsstation kan blotlægge adgangsoplysninger til produktion, udrulningsrettigheder og interne værktøjer, der giver en vej til andre medarbejderes enheder. Den tekniske udfordring er at forhindre, at disse tilladelser forvandler én kompromitteret konto til kontrol over en kritisk tjeneste.
Sådan forløb angrebet
Binances foreløbige resultater beskriver kompromittering af medarbejdere i juni og september, efterfulgt af en bredere indtrængning gennem interne AI-værktøjer den 20. oktober. Angriberne fik adgang til to kollegers computere og fandt et token til udrulning af containere. Den 29. oktober brugte de det til at udrulle ondsindet kode, der nåede signeringssystemerne og indledte uautoriserede overførsler.
-
Manipuleret Homebrew-installationsprogram
Binance udskiftede enheden og roterede adgangsoplysningerne. Angriberen havde lært ingeniørens rolle og kolleger at kende.
-
Ondsindet opgave til jobsamtale
Et ondsindet repository gav angriberne fodfæste på en anden medarbejders computer.
-
Token til udrulning fundet
Interne AI-værktøjer hjalp angriberne med at nå kolleger og finde tokenet.
-
17:15–19:56 UTC
Ondsindet container udrullet
Det stjålne udrulningstoken gjorde det muligt for ondsindet kode at nå systemerne til signering af wallet-transaktioner.
-
20:05–20:09 UTC
Uautoriserede overførsler begynder
-
23:56 UTC
Sidste uautoriserede overførsel bekræftes
-
00:10 UTC
Ethereum-delegering tilbagekaldt
Tilladelsen på blockchainen krævede sin egen tilbagekaldelse.
Angriberne brugte også signeringstjenesten til at oprette en EIP-7702-delegering: tilladelse til, at kode under deres kontrol kunne handle på vegne af en Ethereum-wallet. Tilladelsen fandtes på blockchainen uafhængigt af Binances udbetalingssystemer. At standse udbetalingerne kunne ikke fjerne den. Binance måtte tilbagekalde den særskilt på blockchainen.
Den vigtige forskel er mellem at standse en aktivitet og at fjerne den bemyndigelse, der muliggør den. Udskiftning af en enhed, tilbagekaldelse af adgangsoplysninger til udrulning og annullering af en tilladelse i et andet system håndterer hver sin del af en indtrængning.
Hvad hændelsen viser om sikkerhed i produktion
En bærbar computer, et udrulningssystem og en følsom tjeneste udfører forskellige opgaver. Risikoen vokser, når adgang til den ene automatisk åbner den næste. Et stjålet token kan lade en angriber udskifte software. Denne software kan derefter handle med tilladelser, som medarbejderen aldrig selv havde direkte.
Fire spørgsmål hjælper med at finde ud af, hvor denne kæde kan brydes:
- Eksponering af adgangsoplysninger. Hvilken adgang til produktion kan en angriber få fra én medarbejders enhed?
- Udrulningsrettigheder. Hvem kan ændre den kode, der kører med denne adgang?
- Autorisation i tjenesten. Hvilke handlinger vil en følsom tjeneste acceptere fra denne kode?
- Vedvarende adgang. Hvilke nye tilladelser kan bestå, efter at den oprindelige konto er deaktiveret?
Målet er at begrænse, hvordan beføjelser overføres mellem systemer, samt at identificere og tilbagekalde al yderligere adgang, der oprettes under en indtrængning. De følgende afsnit gennemgår fire sikkerhedsforanstaltninger, der understøtter dette mål.
Koden arver dens tilladelser
Identificer og tilbagekald nye adgangsoplysninger og tilladelser i alle berørte systemer.
Foranstaltning 1. Reducer de adgangsoplysninger, en bærbar computer kan blotlægge
Adgangsoplysninger er nyttige for en angriber, fordi et andet system accepterer dem som bevis på en bemyndigelse. Færre adgangsoplysninger til produktion på medarbejdernes enheder reducerer, hvad der kan stjæles, når et værktøj, et repository eller en browsersession kompromitteres.
Til rutinearbejde har en medarbejder ofte brug for tilladelse til at anmode om en handling, såsom at genstarte en tjeneste. De adgangsoplysninger, der udfører handlingen, kan blive hos en separat eksekveringsidentitet. At reducere eksponeringen indebærer både at fjerne unødvendige kopier og at administrere de adgangsoplysninger, der er tilbage:
- Erstat rutinemæssig direkte adgang med snævert definerede handlinger, hvor det er praktisk muligt.
- Brug separate identiteter til forskellige ansvarsområder, og begræns deres omfang og levetid.
- Før en fortegnelse over adgangsoplysninger, deres ejere og måden at tilbagekalde dem på.
Dette anvender princippet i OWASPs vejledning om håndtering af hemmeligheder: reducer menneskers håndtering af hemmeligheder, og giv hver identitet kun den nødvendige adgang. En stjålet arbejdsstation blotlægger så færre genanvendelige adgangsoplysninger, og beredskabsteamet ved, hvem der ejer dem, der stadig skal tilbagekaldes.
Foranstaltning 2. Behandl udrulningsrettigheder som produktionsrettigheder
En hemmelighed kan være skjult for en person, men tilgængelig for den kode, personen udruller. Den, der kan ændre koden, kan muligvis læse hemmeligheden, kalde et internt API eller handle som applikationens tjenestekonto. Adgang til udrulning skal derfor vurderes ud fra tilladelserne for den resulterende arbejdsbelastning.
OWASPs vejledning om CI/CD-sikkerhed behandler ændringer i repositories, pipelinekonfiguration og eksekveringsværter som dele af det samme sikkerhedsproblem. Beskyttelsen skal omfatte koden før udrulningen og dens tilladelser efter udrulningen:
- Kræv gennemgang af produktionskode, og beskyt den repository-gren, som automatiseringen kører.
- Kontroller ændringer i opgavedefinitioner, afhængigheder og input ved start såvel som i hovedscriptet.
- Giv arbejdsbelastninger kun de adgangsoplysninger og den netværksadgang, deres funktion kræver.
To sæt foranstaltninger skal arbejde sammen. Tilladelser til repositories og udrulning bestemmer, hvem der kan ændre koden. Separate politikker for identiteter, værter og netværk begrænser, hvad koden kan gøre, når den kører. Central opbevaring af hemmeligheder reducerer eksponeringen, mens disse politikker begrænser det program, der bruger hemmeligheden.
Foranstaltning 3. Autoriser handlingen, ikke kun den, der kalder
En signeringstjeneste kan holde sin private nøgle skjult og stadig acceptere en skadelig signeringsanmodning. Den samme forskel gælder for en database eller et cloud-API: autentificering af en arbejdsbelastning identificerer den, der kalder, mens autorisation afgør, hvad vedkommende må gøre.
OWASP anbefaler at kontrollere autorisation ved hver anmodning og afvise adgang, medmindre den udtrykkeligt er tilladt. I den modtagende tjeneste betyder det, at både handlingen og dens mål skal kontrolleres: tilladte betalingsmodtagere og beløb, databaseoperationer eller infrastrukturændringer.
Resultatet bør være en tjeneste, der vurderer den ønskede handling, selv når den, der kalder, allerede er betroet. Automatiseringen styrer, hvordan arbejde anmodes om. Den modtagende tjeneste styrer, hvilke handlinger den accepterer.
Foranstaltning 4. Tilbagekald adgang, der oprettes under indtrængningen
En angriber kan bruge en legitim identitet til at tilføje yderligere adgangsoplysninger eller tildele flere tilladelser. MITRE ATT&CK dokumenterer kontomanipulation som en måde at bevare eller udvide adgang på, herunder ved at tilføje cloud-adgangsoplysninger og SSH-nøgler. Deaktivering af den oprindelige session fjerner ikke nødvendigvis disse ændringer.
Binances delegering på blockchainen illustrerer, hvorfor beredskabsteamet skal undersøge tilladelserne i selve det berørte system. Inddæmningen skal omfatte både det første fodfæste og de beføjelser, der oprettes gennem det:
- Begræns, hvilke automatiseringsidentiteter der kan oprette yderligere adgangsoplysninger eller tildele tilladelser.
- Medtag nyoprettede konti, sessioner og delegeringer i beredskabsplanen.
- Bekræft tilbagekaldelsen i det system, der håndhæver tilladelsen, i stedet for at betragte en stoppet opgave som bevis på inddæmning.
Disse trin giver beredskabsteamet et defineret sæt identiteter og tilladelser at undersøge og tilbagekalde. De gør også inddæmningen testbar: teamet kan kontrollere, om hver kendt vej til den berørte tjeneste faktisk er lukket.
Disse foranstaltninger virker på forskellige lag: medarbejderens enhed, udrulningssystemet, den modtagende tjeneste og beredskabsprocessen. Hvert lag skal have en ansvarlig og en måde at kontrollere, at dets begrænsninger holder, når et andet lag kompromitteres.
Sådan hjælper kontrolleret automatisering
Platforme til automatiseringsstyring håndterer den del af problemet, der ligger mellem en medarbejders anmodning og eksekvering i produktion. I Semaphore UI kan et team forberede en defineret opgave, styre, hvem der må køre eller ændre den, og udføre den med en separat identitet. Autorisation inde i måltjenesten og tilbagekaldelse af tilladelser oprettet andre steder er stadig disse systemers og beredskabsteamets ansvar.
Forestil dig en driftsingeniør på vagt, der skal genstarte en API-tjeneste. En vedligeholder forbereder en playbook og en Task Template, der fastlægger målværterne og fremgangsmåden for genstarten. Ingeniøren starter opgaven og læser resultatet uden at åbne en SSH-session til produktion. De to veje nedenfor udfører den samme genstart, men placerer adgangsoplysningerne til eksekvering hos forskellige parter.
Direkte adgang
Tjenesten genstarter
En kompromitteret bærbar computer kan blotlægge genanvendelige adgangsoplysninger til produktion.
Gennem Semaphore UI
Tilladelse til at køre den gemte opgave
Tjenesten genstarter
I denne konfiguration forbliver eksekveringsnøglen væk fra medarbejderens enhed. En stjålet session kan stadig køre sine tilladte opgaver.
Opbygningen af genstartsforløbet kræver fire sammenhængende trin: opret en begrænset eksekveringsidentitet, definer, hvad brugerne må køre eller ændre, vælg eksekveringsmiljøet, og gør resultatet synligt. Når de trin er på plads, kan den samme tilgang udvides til udrulninger.
Trin 1. Opret en begrænset eksekveringsidentitet
Start på målværterne. Opret en automatiseringskonto, hvis privilegerede adgang er begrænset til at genstarte API-tjenesten. Den bør ikke kunne ændre tjenestedefinitionen eller køre andre privilegerede kommandoer. Brug separate adgangsoplysninger med kun læseadgang til at hente playbookens repository. Disse begrænsninger bestemmer, hvad automatiseringen kan gøre, selv hvis dens adgangsoplysninger misbruges.
Registrer SSH-adgangsoplysningerne i projektets Key Store, og vælg dem i det produktionsinventar, der angiver målværterne. Vælg opbevaring i den lokale database, eller henvis til en beskyttet serverfil eller miljøvariabel. Ved lokal opbevaring skal du konfigurere krypteringsnøgler og beskytte nøglematerialet adskilt fra sikkerhedskopier af databasen.
Hvis teamet allerede bruger et understøttet lager til hemmeligheder, såsom OpenBao i Pro eller AWS Secrets Manager i Enterprise, skal det registreres under Key Store → Storages. Henvis derefter til den eksisterende hemmelighed, når nøglen oprettes. Begræns integrationen til de hemmeligheder, dette forløb kræver. Operatøren kan så anmode om en genstart uden at hente adgangsoplysningerne til eksekveringen.
Trin 2. Definer, hvad operatøren må køre eller ændre
Gem derefter en “Restart API”-skabelon med den gennemgåede playbook, produktionsinventaret og de nødvendige variabler. Lad vedligeholderne stå for ændringer i disse ressourcer. Vælg en projektrolle til operatørerne, som tillader eksekvering uden redigering: den indbyggede Task Runner-rolle kan køre alle skabeloner i projektet, så de skal alle være passende for denne gruppe.
Brug brugerdefinerede roller og skabelontilladelser i Enterprise til at give adgang til udvalgte skabeloner, sammen med en grundrolle, der ikke allerede tillader eksekvering i hele projektet. Tilladelserne lægges sammen, så en snæver brugerdefineret rolle ophæver ikke de bredere tilladelser, brugeren allerede har.
Det gør forskellen mulig at håndhæve: operatører må anmode om en forberedt genstart, mens vedligeholdere styrer koden, målene og adgangsoplysningerne bag den. Test de samlede tilladelser med en operatørkonto, før der gives adgang til produktion.
Trin 3. Placer eksekveringen på en begrænset runner
Installer en ekstern runner på en dedikeret vært, der kan nå API-serverne. Når operatøren starter “Restart API”, kører runneren playbooken og sender outputtet tilbage til Semaphore. Medarbejderne skal have adgang til Semaphore, mens firewallregler kan begrænse administrationsforbindelsen til produktion, så den kun kommer fra runneren.
Giv kun denne eksekveringsvært den adgang, dens tildelte opgaver kræver:
- Adskil produktionseksekvering fra mindre betroede arbejdsbelastninger og udviklingsmiljøer.
- Begræns runnerens rettigheder i operativsystemet, udgående forbindelser og monterede adgangsoplysninger. Beskyt dens autentificeringstoken, og brug HTTPS med certifikatvalidering til forbindelsen til Semaphore.
- Brug runner-tags i Pro, såsom
production, til at dirigere skabelonen til de tiltænkte runnere. Håndhæv netværksbegrænsningerne på disse værter.
Det indsnævrer, hvor produktionsadgangsoplysninger kan bruges, og hvilke systemer opgaven kan nå. En runner er ikke automatisk en sandbox: dens opgaver kan bruge de filer, adgangsoplysninger og netværk, der er tilgængelige for deres proces. Hold produktionseksekvering adskilt fra ikke-betroede job, og sikkerhedshærd og opdater både runneren og Semaphore-serveren.
Trin 4. Gennemgå kørslen, og gør misbrug synligt
Efter genstarten åbner operatøren opgavens resultat for at se status, output og repository-revision. Medtag et sundhedstjek af tjenesten i playbooken, så resultatet viser, om API’et er kommet i drift igen, og ikke kun om genstartskommandoen blev gennemført. Hold hemmeligheder ude af outputtet.
Konfigurer notifikationer om opgaveresultater til en kanal, som vagtholdet overvåger, og aftal, hvem der undersøger uventede kørsler. En vellykket opgave kan stadig være uautoriseret aktivitet. Under en undersøgelse bør eksekveringsloggen sammenholdes med logge fra værter, identitetsudbydere og lagre til hemmeligheder for at se, hvordan adgang blev opnået og brugt.
Teamet har nu en fælles registrering af den ønskede handling og dens resultat. Det gør usædvanlig aktivitet lettere at undersøge, forudsat at nogen overvåger den og har en klar beredskabsprocedure.
Anvend de samme foranstaltninger på udrulninger
En udrulning bruger den samme adgangsmodel, men installerer også software. Opret en separat “Deploy API”-skabelon med en udrulningsidentitet, hvis tilladelser er begrænset til den pågældende applikation. Konfigurationen skal begrænse både den kode, der foretager udrulningen, og den version, der installeres:
- Fastlås udrulningskoden og målet. Brug
deploy_api.ymlfra en beskyttetmain-gren og inventaretproduction-api. Deaktiver valg af gren, inventar og CLI-argumenter ved start. - Lad vedligeholderne stå for ændringer. Operatører må starte skabelonen, mens vedligeholdere styrer dens kode, adgangsoplysninger og konfiguration.
- Valider valget af version i playbooken. Kontroller hver variabel ved start, der kan påvirke versionen. Oversæt en tilladt versionsidentifikator til en uforanderlig artefakt fra den betroede byggeproces, og verificer dens oprindelse og integritet før udrulning. Afvis vilkårlige image-referencer eller ukendte input.
Disse foranstaltninger begrænser, hvad en stjålet operatørsession kan udrulle. Semaphore håndhæver adgang til opgaver. Git-gennemgang og playbooken begrænser kode og artefakter. Tilladelsen til at ændre den playbook er fortsat en produktionsrettighed.
Uanset om opgaven genstarter en tjeneste eller udruller en version, modtager operatøren resultatet uden at modtage adgangsoplysningerne til eksekvering. Teamet kan nu teste den vigtige forskel: hvilke produktionshandlinger er stadig mulige gennem den pågældende operatørs session?
Hvad en stjålet session stadig kan gøre
En stjålet operatørsession kan stadig anmode om de handlinger, kontoen har tilladelse til at køre. Selv en tilladt genstart kan forstyrre en tjeneste, hvis den gentages mange gange. Test det konfigurerede forløb med en realistisk operatørkonto i et stagingmiljø, og undersøg både dens muligheder og teamets reaktion på misbrug:
- Tilladelser til opgaver og input. Afprøv de faktiske roller og startmuligheder, herunder alternative grene, inventarer og argumenter.
- Adgang ud over den tilsigtede handling. Kontroller adgang til andre skabeloner, adgangsoplysninger og produktionssystemer, herunder hvad runnerens proces kan nå.
- Opdagelse og driftsmæssig påvirkning. Bekræft, hvem der modtager resultater, hvem der undersøger uventet aktivitet, og om gentagne kørsler kan forårsage uacceptabel forstyrrelse.
- Tilbagekaldelse. Test tilbagekaldelse af sessioner og tokens, og identificer tilladelser, som eksekveringsidentiteten kan oprette andre steder.
Dokumenter den adgang, testkontoen beholder, og luk enhver vej, der går ud over handlingens formål. Teamet bør afslutte øvelsen med viden om både, hvad en stjålet session kan gøre, og hvordan misbruget kan opdages og inddæmmes.
Sikkerhed i det daglige arbejde
Adgangskontrol arbejder sammen med endpointbeskyttelse og et team, der ved, hvordan det skal reagere. Gør det forberedte forløb så bekvemt, at folk kan bruge det uden at vende tilbage til delte nøgler og udokumenterede genveje. Understøt det med nogle få daglige vaner:
- Kør ukendte installationsprogrammer og opgaver fra jobsamtaler i midlertidige, isolerede miljøer uden virksomhedsadgangsoplysninger, monterede værtsmapper eller adgang til interne netværk.
- Gør det let at indberette mistænkelig aktivitet tidligt og uden bebrejdelser. Giv folk en tydelig kontaktperson og en vej til hændelseshåndtering.
- Gennemgå adgang, når ansvarsområder ændres, oprethold en kontrolleret procedure for nødadgang, og øv tilbagekaldelse før en hændelse.
Disse vaner forbinder forebyggelse, opdagelse og genopretning med det daglige arbejde. De hjælper med at holde adgangsmodellen korrekt, når ansvaret ændrer sig, og giver teamet en velkendt reaktion, når der opstår en mistænkelig hændelse.
Begræns rækkevidden af den næste kompromittering
Den centrale lære er at begrænse, hvor mange beføjelser én kompromitteret identitet kan samle. Færre adgangsoplysninger på bærbare computere, gennemgået automatisering, begrænsede eksekveringsværter og autorisation inde i produktionstjenester reducerer alle de veje, en angriber kan følge.
Semaphore gør flere af disse foranstaltninger til en del af et gentageligt forløb: forberedte opgaver, separate tilladelser til kørsel og redigering, centralt leverede adgangsoplysninger og synlige eksekveringsregistreringer. Operatører får de handlinger, deres arbejde kræver, mens vedligeholdere beholder kontrollen over koden og adgangsoplysningerne bag dem.
Start med én hyppigt brugt produktionshandling: forbered dens opgaveskabelon, tildel de nødvendige operatørtilladelser, og test den resulterende adgang, før den direkte forbindelse, den erstatter, udfases. Et nyttigt mål for fremskridt er, hvor lidt en angriber kan gøre med den næste konto, der kompromitteres.
Kilder
- Binance, “29 October 2026 Binance Security Incident: Initial Findings and Response Update”. URL: https://www.binance.com/en/blog/community/3229153443759566763 (tilgået: ).
- OWASP Foundation, “Secrets Management Cheat Sheet”. URL: https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html (tilgået: ).
- OWASP Foundation, “CI/CD Security Cheat Sheet”. URL: https://cheatsheetseries.owasp.org/cheatsheets/CI_CD_Security_Cheat_Sheet.html (tilgået: ).
- OWASP Foundation, “Authorization Cheat Sheet”. URL: https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html (tilgået: ).
- MITRE ATT&CK, “Account Manipulation (T1098)”. URL: https://attack.mitre.org/techniques/T1098/ (tilgået: ).
- Semaphore UI, “Task Templates”. URL: https://semaphoreui.com/docs/user-guide/task-templates (tilgået: ).
- Semaphore UI, “Key Store”. URL: https://semaphoreui.com/docs/user-guide/key-store (tilgået: ).
- Semaphore UI, “Inventory”. URL: https://semaphoreui.com/docs/user-guide/inventory (tilgået: ).
- Semaphore UI, “Encryption Keys”. URL: https://semaphoreui.com/docs/admin-guide/security/encryption (tilgået: ).
- Semaphore UI, “AWS Secrets Manager secret storage”. URL: https://semaphoreui.com/docs/user-guide/key-store/aws-secrets-manager (tilgået: ).
- Semaphore UI, “Teams”. URL: https://semaphoreui.com/docs/user-guide/team (tilgået: ).
- Semaphore UI, “Runners”. URL: https://semaphoreui.com/docs/admin-guide/runners (tilgået: ).
- Semaphore UI, “Tasks”. URL: https://semaphoreui.com/docs/user-guide/tasks (tilgået: ).
- Semaphore UI, “Alerts”. URL: https://semaphoreui.com/docs/user-guide/alerts (tilgået: ).
