Bilde: Sascha Kohlmann, CC BY-SA 2.0
det finnes systemer som bare dødelige ikke har tilgang som standard. Og utviklerne av slike systemer tror naivt at de er beskyttet mot penetrasjon og forskernes ivrige øyne.
Ta Minst Minibanker (ATM). Det er ikke uvanlig for ukjente personer å nærme Seg Minibanker, koble til en bærbar pc, ta penger og gå uten å forlate noen logger i systemet. Og nyere historier med «koteletter» (malware kalt Cutlet Maker ) enda mer bekrefter at det ikke finnes uskadelige systemer – det er underforskede.

Begynn forskning

det er en oppfatning at den eneste måten å stjele penger fra EN MINIBANK er å komme til en dumper, hente EN MINIBANK med en krok og rive den ut med giblets, og bruk deretter slipemaskinen, skrap og gassveisemaskinen. Men det er en annen metode.
etter et kort søk På Ebay hadde jeg på pulten min EN NCR USB S1 Dispenser dispenser lommetørkle med firmware. Målene var:

  • finn en bypass av kryptering av kommandoer sendt av datamaskinen VIA USB til dispenseren selv, spesielt for utstedelse av sedler
  • lær hvordan du kan omgå behovet for fysisk tilgang til safe for autentisering (sjonglerer kassetten) for å generere kommandokrypteringsnøkler fra forrige avsnitt.

Firmware

fastvaren er EN ELF-fil FOR nxp ColdFire-prosessoren (Motorola 68040 , min favorittprosessor), som kjører På VxWorks v5.5.1 .

I ELF fil av interesse er to hoveddeler -.tekst og .data :

  • En av dem inneholder en kode som slår hele hovedtiden (la oss kalle det hoved firmware) når dispenseren er koblet til systemenheten øverst PÅ MINIBANKEN.
  • i det andre er bootloaderkoden pakket med zlib (dets lokale navn ER USB Secure Bootloader ), som er ansvarlig for å laste opp fastvaren og kjøre hovedkoden.

og det beste er at det er ukjente tegn i filen-ta det og se etter noe interessant.

Intern enhet av hoved firmware

hvis du deler koden i hovedkomponentene, får du følgende skjema (i rekkefølge av innsending):

  1. en strøm som omhandler å motta USB-pakker og distribuere dem blant tjenester.
  2. Tjenester er de grunnleggende utførende enhetene, hver av dem har sin egen rolle og hver har sine egne oppgaver (klasser).
  3. Klasser-her er det oppgaver som en tjeneste kan utføre ved hjelp av kontroller.
  4. kontrollerne er faktisk «arbeidere» (arbeidere ) som er engasjert i validering av oppgavene som sendes til dem, deres utførelse og dannelse av responspakker.


Siden det er mye kode i fastvaren, ble det besluttet å starte med å søke etter alle mulige tjenester, og deretter se hvor oppgavene blir overført.

som et resultat ble følgende tjenester funnet som bare må gjøre det jeg leter etter:
1) Distranservice (Dispenser Transaction Service) : arbeide med krypterte kommandoer, generere bunter av sedler, autentisering. Du kan si det mest interessante-her.

2) securityService: etter godkjenning på siden av dispenseren genereres en øktnøkkel, som sendes til datamaskinen i kryptert form ved datamaskinforespørsel. Med denne nøkkelen blir alle viktige kommandoer kryptert-utstedelse, danner en bunke med pengesedler.

Deretter fikk en annen tjeneste øye på Meg: UsbDownloadService. Dens oppgave er å koble dispenseren til datamaskinen og versjonen av dispenserens fastvareversjon som er lagret på ATM-datamaskinen, for å gå til opplasteren for å laste opp fastvaren OPERATIVSYSTEMET skal fungere med(det er i mappen med leverandørens programvare på datamaskinen). Denne tjenesten kan også gi informasjon om fastvareversjonen.

Fysisk autentisering

Fysisk autentisering er implementert på høyeste nivå og beskytter ATM fra å bare sende USB-kommandoer for å utstede uten autorisasjon. I dette tilfellet ligger det i det faktum at bare med en åpen safe med penger må du utføre en av følgende handlinger:

  • fjern og sett inn den nedre kassetten,
  • bytt bryteren på baksiden av stativet med dispenseren.


Men alt dette kreves bare hvis tilgangsnivået er satt til maksimum, det vil si fysisk. DET er tre AV DEM: USB (0), logisk (1) og fysisk (2). De resterende to brukes av tjenesteleverandører og utviklere for feilsøking og testing av fastvare. Vel, den fysiske er sterkt anbefalt av leverandøren for bruk som standard.

Sårbarhet

følgende beskriver et kritisk sikkerhetsproblem (allerede løst av leverandøren på tidspunktet for publisering av artikkelen), som, hvis det er tilgang til tjenesteområdet, men uten tilgang til safeen (for eksempel gjennom et hull i ATM-frontpanelet), utfører kommandoer fra dispenseren, inkludert kontanter.

Som det viste seg, UsbDownloadService aksepterer kommandoer som ikke krever kryptering. Det høres fristende ut. Men så er alt beskyttet videre, og Navnet Secure Bootloader vil rettferdiggjøre seg selv?
(Spoiler: ikke rettferdiggjør!)

Vi må gå dypere

som allerede nevnt, i .data-delen det er en pakket bootloader-kode, som i lang tid ikke vekket min interesse, og mine kolleger, da de undersøkte fastvaren, var ikke oppmerksom på det.

mens tilstedeværelsen av bootloaderen var hemmelig, var spørsmålet åpent: hvordan fylte programvaren på datamaskinen fastvaren? Tross alt ble ingenting funnet i hoved firmware.

så, bootloaderen er pakket ut, lastet INN I IDA ved offset 0x100000-nå kan du utforske … Bare ingen tegn!
Det spiller ingen rolle: å sammenligne hovedfastvaren med bootloader-koden, lese dataarket til kontrolleren – og et bestemt bilde begynner å dukke opp.

det viste seg at fastvareopplastingen, selv om den ser ut til å være beskyttet, egentlig ikke er. Bare trenger å vite hvordan du fyller det riktig.
Ganske mye arbeid og tid ble brukt på en full forståelse av denne prosessen (for mer informasjon, se rapporten » Blackbox er død — Lenge Leve Blackbox!»På Black Hat 2018-konferansen I Las Vegas). Hva koster det med å lodde nvrams minne, laste opp en sikkerhetskopi til den for å «drysse» hele kontrolleren … Takk Til en kollega Alexey for hans tålmodighet!
resultatet var følgende algoritme for opplasting av fastvaren til dispenseren:
1) Generer et PAR RSA-nøkler og hell den offentlige nøkkelen inn i kontrolleren.

2) Skriv suksessivt det .data og .tekst seksjoner fra ELF til deres fysiske adresser fra seksjonsoverskriftene.

3) Beregn SHA-1 fra de registrerte dataene, krypter hash med en privat nøkkel, send til kontrolleren.

4) Telle og sende summen av alle innspilte firmware ord.

Etter det, hvis alt er beregnet og registrert vellykket, vil hoved firmware bli lastet ned.
det viste seg at når du skriver fastvare, er det bare en begrensning: fastvareversjonen skal ikke være lavere enn den nåværende. Men tross alt, ingen plager oss til å erstatte fastvareversjonen i selve dataene.
som et resultat ble min spesielle firmware med antisecurity-fixes oversvømmet og vellykket lansert!
på dette tidspunktet ble koden til hoved firmware godt studert, kommandoer for utstedelse av sedler ble funnet. Nå kan de sendes ukryptert, og dispenseren vil gjerne utføre dem.

Utlevering

etter alt som ble opplevd under forskningen (for eksempel en ekte atm zakirpicheny ), var resultatet så hyggelig og kompenserende for innsatsen som algoritmen ønsket å gjenta med en annen stor leverandør.

den virkelige ATM begynte å whir og villig delt med oss friske skarpe notater(i dette tilfellet leverandør «candy wrappers»). Ingen magi ble brukt: bare en bærbar pc, en hjerne og EN USB-ledning.

funn

igjen var vi overbevist om at det, styrt av sikkerhetsprinsippet gjennom uklarhet, er umulig å gi tilstrekkelig beskyttelse. Anstendighet av en kode eller fastvare betyr ikke at en angriper ikke vil ha tilgang til det på et tidspunkt, og vil ikke dra nytte av sårbarhetene som er funnet. Alt som er nødvendig for gjennomføring av egoistiske mål, kan kjøpes i nærvær av en viss sum penger.
Utviklere bør håndtere koden, og sikkerhetsspesialister bør beskytte den. Derfor synes den mest produktive tilnærmingen å være samarbeid med informasjonssikkerhetsselskaper med tilstrekkelig erfaring med å sikre sikkerheten til ulike systemer som vil bidra til å bygge tilstrekkelig beskyttelse i hvert enkelt tilfelle.
PS-Leverandøren bekreftet sårbarheten (bruddet ble også funnet i en annen modell – S2), som ble erklært som endret i februar-reparasjonen av 2018th-året.
CVE-liste:

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

Takk

før meg jobbet mine kolleger, Dima Sklyarov Og Misha Tsvetkov , allerede på fastvaren (men uten dispenserbrett). Deres prestasjoner hjalp meg mye i studien,som jeg takker dem så mye! På den delen av «iron» Hjalp Alexey Stennikov meg mye .

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.