billede: Sascha Kohlmann , CC BY-SA 2.0
der er systemer, som blotte dødelige ikke har adgang til som standard. Og udviklerne af sådanne systemer tror naivt, at de er beskyttet mod penetration og forskernes skarpe øjne.
tag mindst pengeautomater (ATM). Det er ikke ualmindeligt, at ukendte personer nærmer sig pengeautomater, tilslutter en bærbar computer, tager penge og forlader uden at efterlade logfiler i systemet. Og de seneste historier med “cutlets” (ondsindet kaldet Cutlet Maker ) bekræfter endnu mere, at der ikke er nogen uskadelige systemer – der er underundersøgte.

Begynd forskning

der er en opfattelse af, at den eneste måde at stjæle penge fra en pengeautomat er at ankomme til en dumper, hente en pengeautomat med en krog og rive den ud med giblets, og brug derefter kværn, skrot og gas svejsemaskine. Men der er en anden metode.
efter en kort søgning på Ebay havde jeg på mit skrivebord en NCR USB S1 Dispenser dispenser lommetørklæde med firma. Målene var:

  • find en bypass af kryptering af kommandoer sendt af computeren via USB til selve dispenseren, især til udstedelse af pengesedler
  • Lær at omgå behovet for fysisk adgang til sikkerheden til godkendelse (jonglering af kassetten) for at generere kommandokrypteringsnøgler fra det foregående afsnit.

programmet

er en ELF-fil til ColdFire-processoren ( Motorola 68040 , min favoritprocessor), der kører på programmet v5.5.1 .

i ELF-filen af interesse er to hovedafsnit – .tekst og .data :

  • en af dem indeholder en kode, der vender hele hovedtiden (lad os kalde det hovedfirmaet), når dispenseren er tilsluttet systemenheden øverst på ATM.
  • i det andet er bootloader-koden pakket ved hjælp af USB Secure Bootloader (dets lokale navn er USB Secure Bootloader), som er ansvarlig for at uploade firmaet og køre hovedkoden.

og det bedste er, at der er uklippede tegn i filen – tag det og kig efter noget interessant.

intern enhed af hovedfirmaet

hvis du deler koden i hovedkomponenterne, får du følgende skema (i rækkefølgen af indsendelse):

  1. en strøm, der beskæftiger sig med at modtage USB-pakker og distribuere dem blandt tjenester.
  2. tjenester er de grundlæggende udøvende enheder, hver af dem har sin egen rolle, og hver har sine egne opgaver (klasser).
  3. klasser – her er disse opgaver, som en tjeneste kan udføre ved hjælp af controllere.
  4. controllerne er faktisk “arbejdere” ( arbejdere), der er involveret i valideringen af de opgaver, der sendes til dem, deres udførelse og dannelsen af svarpakker.


da der er meget kode i firmaet, blev det besluttet at starte med at søge efter alle mulige tjenester og derefter se, hvor opgaverne overføres.

som et resultat blev følgende tjenester fundet, der bare skal gøre, hvad jeg leder efter:
1) DispTranService (Dispenser Transaction Service) : arbejde med krypterede kommandoer, generering af bundter af pengesedler, godkendelse. Du kan sige det mest interessante-her.

2) securityService : efter godkendelse på siden af dispenseren genereres en sessionsnøgle, som sendes til computeren i krypteret form efter computeranmodning. Med denne nøgle bliver alle vigtige kommandoer krypteret-udstedelse, der danner en stak pengesedler.

efterfølgende fangede en anden tjeneste mit øje: Usbdoadservice. Dens opgave er at forbinde dispenseren til computeren og versionen af dispenserens firmaprogram, der er gemt på ATM-computeren, for at gå til bootloaderen for at uploade det FIRMAPROGRAM, som operativsystemet skal arbejde med (det er i mappen med leverandørprogrammet på computeren). Denne service er også i stand til at give oplysninger om firmaprogrammet.

fysisk godkendelse

fysisk godkendelse implementeres på højeste niveau og beskytter ATM ‘ en mod blot at sende USB-kommandoer til udstedelse uden tilladelse. I dette tilfælde ligger det i, at kun med et åbent pengeskab med penge skal du udføre en af følgende handlinger:

  • fjern og indsæt den nederste kassette,
  • skift vippekontakten på bagsiden af stativet med dispenseren.


men alt dette er kun nødvendigt, hvis adgangsniveauet er indstillet til det maksimale, det vil sige fysisk. Der er tre af dem: USB (0), logisk (1) og fysisk (2). De resterende to bruges af tjenesteudbydere og udviklere til fejlfinding og test af firma. Nå, den fysiske er stærkt anbefalet af sælgeren til brug som standard.

sårbarhed

følgende beskriver en kritisk sårbarhed (allerede fastsat af sælgeren på tidspunktet for offentliggørelsen af artiklen), som, hvis der er adgang til serviceområdet, men uden adgang til pengeskabet (for eksempel gennem et hul lavet i ATM-frontpanelet), udfører kommandoer i dispenseren, inklusive kontanter.

som det viste sig, accepterer Usbdnloadservice kommandoer, der ikke kræver kryptering. Det lyder fristende. Men så er alt beskyttet yderligere, og navnet Secure Bootloader vil retfærdiggøre sig selv?
(Spoiler: ikke retfærdiggøre!)

vi er nødt til at gå dybere

som allerede nævnt, i .data sektion der er en pakket bootloader kode, som i lang tid ikke vækkede min interesse, og mine kolleger, da de undersøgte firmaet, var ikke opmærksomme på det.

mens tilstedeværelsen af bootloaderen var hemmelig, forblev spørgsmålet åbent: hvordan fyldte programmet på computeren op? Der blev trods alt ikke fundet noget i hovedfirmaet.

så er bootloaderen udpakket, indlæst i IDA på offset 0h100000-nu kan du udforske … Kun ingen tegn!
det betyder ikke noget: sammenligning af hovedfirmaet med bootloader – koden, læsning af dataarket for controlleren-og et bestemt billede begynder at dukke op.

det viste sig, at upload af firmaet, selvom det ser ud til at være beskyttet, faktisk ikke er. Bare brug for at vide, hvordan man udfylder det korrekt.
en hel del indsats og tid blev brugt på en fuld forståelse af denne proces (for flere detaljer, se rapporten ” sort boks er død — længe leve sort boks!”På Black Hat 2018-konferencen i Las Vegas). Hvad koster det at lodde NVRAMS hukommelse, uploade en sikkerhedskopi til den for at “drysse” hele controlleren … Tak til en kollega Aleksej for hans tålmodighed!
resultatet var følgende algoritme til upload af programmet til dispenseren:
1) Generer et par RSA-nøgler og hæld den offentlige nøgle i controlleren.

2) Skriv successivt .data og .tekstafsnit fra elven til deres fysiske adresser fra sektionsoverskrifterne.

3) Beregn SHA-1 fra de registrerede data, Krypter hash med en privat nøgle, send til controlleren.

4) Tæl og send summen af alle optagede ord.

efter det, hvis alt er beregnet og optaget med succes, vil hovedfirmaet blive hentet.
det viste sig, at der kun er en begrænsning, når man skriver firmapprogram: firmapprogrammet skal ikke være lavere end den nuværende. Men trods alt er der ingen, der generer os til at erstatte firmaets version i selve dataene.
som et resultat blev mit specielle firma med antisecurity-rettelser oversvømmet og lanceret med succes!
på dette tidspunkt blev koden for hovedfirmaet godt undersøgt, kommandoer til udstedelse af pengesedler blev fundet. Nu kan de sendes ukrypteret, og dispenseren vil med glæde udføre dem.

udlevering

efter alt, hvad der blev oplevet under undersøgelsen (for eksempel en rigtig pengeautomat ), var resultatet så behageligt og kompenserende for den indsats, som algoritmen ønskede at gentage med en anden større leverandør.

den virkelige ATM begyndte at hvirvle og villigt delt med os friske sprøde noter (i dette tilfælde sælger “slikpapir”). Ingen magi blev anvendt: kun en bærbar computer, en hjerne og en USB-ledning.

resultater

endnu en gang var vi overbeviste om, at det , styret af sikkerhedsprincippet gennem uklarhed, er umuligt at yde tilstrækkelig beskyttelse. Rigtigheden af en kode eller firmaprogram betyder slet ikke, at en angriber ikke har adgang til den på et tidspunkt og ikke vil drage fordel af de fundne sårbarheder. Alt, hvad der er nødvendigt for gennemførelsen af egoistiske mål, kan erhverves i nærværelse af en vis mængde penge.
udviklere skal håndtere koden, og sikkerhedsspecialister skal beskytte den. Derfor synes den mest produktive tilgang at være samarbejde med informationssikkerhedsfirmaer med tilstrækkelig erfaring med at sikre sikkerheden i forskellige systemer, der vil hjælpe med at opbygge tilstrækkelig beskyttelse i hvert enkelt tilfælde.
PS-leverandør bekræftede sårbarheden (bruddet blev også fundet i en anden model – S2), som blev erklæret som ændret i Februar-rettelsen af 2018-året.
CVE liste:

  • CVE-2017-17668 (NCR S1 Dispenser),
  • CVE-2018-5717 (NCR S2 Dispenser).

Tak

før mig arbejdede mine kolleger , Dima Sklyarov og Misha Tsvetkov allerede på firmaet (dog uden dispenserbræt) . Deres præstationer hjalp mig meget i undersøgelsen, som jeg takker dem så meget for! På den del af “jern” hjalp Aleksey Stennikov mig meget .

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.