afbeelding: Sascha Kohlmann, CC BY-SA 2.0
er zijn systemen waarvoor gewone stervelingen standaard geen toegang hebben. En de ontwikkelaars van dergelijke systemen naïef geloven dat ze worden beschermd tegen penetratie en de scherpe ogen van onderzoekers.
neem ten minste geldautomaten (ATM). Het is niet ongewoon voor onbekende mensen om geldautomaten te benaderen, sluit een laptop, neem geld en vertrekken zonder het verlaten van logs in het systeem. En recente verhalen met “koteletten” (malware genoemd kotelet Maker ) nog meer bevestigen dat er geen onkwetsbare systemen – er zijn onder-onderzocht degenen.

Begin onderzoek

men is van mening dat de enige manier om geld van een geldautomaat te stelen is om bij een dumper te komen, een geldautomaat met een haak op te pakken en er met ingewanden uit te scheuren, en vervolgens de slijp -, schroot-en gaslasmachine te gebruiken. Maar er is een andere methode.
na een korte zoektocht op Ebay, had ik op mijn bureau een NCR USB S1 Dispenser dispenser zakdoek met firmware. De doelen waren::

  • zoek een bypass van encryptie van commando ‘ s die door de computer via USB naar de dispenser zelf worden verzonden, met name voor de uitgifte van bankbiljetten
  • leer hoe de noodzaak van fysieke toegang tot de Kluis voor authenticatie te omzeilen (jongleren met de cassette) om commando-encryptiesleutels te genereren uit de vorige paragraaf.

Firmware

de firmware is een ELF-bestand voor de NXP ColdFire-processor ( Motorola 68040, mijn favoriete processor), die draait op VxWorks v5.5.1 .

in het ELF-dossier van belang zijn twee hoofdsecties – .sms en .gegevens :

  • een van hen bevat een code die draait alle main time (laten we noemen het de belangrijkste firmware) wanneer de dispenser is aangesloten op het systeem unit aan de bovenkant van de ATM.
  • in de tweede wordt de bootloader code ingepakt met behulp van zlib( de lokale naam is USB Secure Bootloader), die verantwoordelijk is voor het uploaden van de firmware en het uitvoeren van de hoofdcode.

en het beste deel is dat er ongesneden tekens in het bestand staan – neem het en zoek naar iets interessants.

intern apparaat van de belangrijkste firmware

als u de code in de belangrijkste componenten deelt, krijgt u het volgende schema (in de volgorde van indiening)):

  1. een stream die zich bezighoudt met het ontvangen van USB-pakketten en het distribueren ervan over services.
  2. diensten zijn de elementaire uitvoerende eenheden, elk van hen heeft zijn eigen rol en elk heeft zijn eigen taken (klassen).
  3. klassen – hier zijn dit taken die een service kan uitvoeren met behulp van controllers.
  4. de verwerkingsverantwoordelijken zijn in feite “werknemers” (werknemers ) die betrokken zijn bij de validatie van de hun toegezonden taken, de uitvoering ervan en de vorming van reactiepakketten.


aangezien er veel code in de firmware, werd besloten om te beginnen met het zoeken naar alle mogelijke diensten, en kijk dan waar de taken worden overgedragen.
als gevolg hiervan zijn de volgende diensten gevonden die gewoon moeten doen wat ik zoek:
1) DispTranService (Dispenser Transaction Service) : werken met versleutelde commando ‘ s, bundels bankbiljetten genereren, authenticatie. U kunt zeggen de meest interessante-hier.

2) securityService: na verificatie aan de zijkant van de dispenser wordt een sessiesleutel gegenereerd, die op verzoek van de computer in gecodeerde vorm naar de computer wordt verzonden. Met deze sleutel worden alle belangrijke opdrachten gecodeerd – uitgifte, de vorming van een stapel bankbiljetten.

vervolgens viel een andere service op: UsbDownloadService. Het is de taak om de dispenser aan te sluiten op de computer en de versie van de firmwareversie van de dispenser die is opgeslagen op de ATM-computer, om naar de bootloader te gaan om de firmware te uploaden waarmee het besturingssysteem moet werken (Het bevindt zich in de map met de software van de leverancier op de computer). Deze service is ook in staat om informatie te geven over de firmware-Versie.

fysieke authenticatie

fysieke authenticatie wordt op het hoogste niveau geïmplementeerd en beschermt de ATM tegen het eenvoudig verzenden van USB-opdrachten zonder autorisatie. In dit geval ligt het in het feit dat alleen met een open kluis met geld je nodig hebt om een van de volgende acties uit te voeren:

  • verwijder en plaats de onderste cassette,
  • schakel de tuimelschakelaar aan de achterkant van het rek met de dispenser.


maar dit alles is alleen nodig als het toegangsniveau is ingesteld op het maximum, dat wil zeggen, fysieke. Er zijn er drie: USB (0), logische (1) en fysieke (2). De overige twee worden gebruikt door serviceproviders en ontwikkelaars voor het debuggen en testen van firmware. Nou, de fysieke wordt sterk aanbevolen door de leverancier voor gebruik standaard.

kwetsbaarheid

hieronder wordt een kritieke kwetsbaarheid beschreven (die reeds door de verkoper is vastgesteld op het moment van publicatie van het artikel), die, indien er toegang is tot het servicegebied, maar zonder toegang tot de kluis (bijvoorbeeld door een gat in het ATM-voorpaneel), alle opdrachten van de dispenser uitvoert, met inbegrip van contant geld.

zoals bleek, UsbDownloadService accepteert commando ‘ s die geen encryptie vereisen. Het klinkt verleidelijk. Maar dan is alles verder beschermd, en de naam Secure Bootloader zal zichzelf rechtvaardigen?

(Spoiler: not justify!)

we moeten dieper gaan

zoals reeds vermeld in de .data sectie Er is een ingepakte bootloader code, die lange tijd niet mijn interesse gewekt, en mijn collega ‘ s, toen ze de firmware onderzocht, hebben er geen aandacht aan besteed.

hoewel de aanwezigheid van de bootloader geheim was, bleef de vraag open: hoe vulde de software op de computer de firmware? Immers, niets werd gevonden in de belangrijkste firmware.

dus, de bootloader is uitgepakt, geladen in IDA op offset 0x100000-nu kunt u verkennen … Alleen geen karakters!
het maakt niet uit: het vergelijken van de belangrijkste firmware met de bootloader code, het lezen van de datasheet van de controller – en een bepaald beeld begint te ontstaan.

het bleek dat de firmware upload, hoewel het lijkt te zijn beschermd, eigenlijk niet is. Je moet alleen weten hoe je het correct moet vullen.
er werd veel moeite en tijd besteed aan een volledig begrip van dit proces (voor meer details, zie het rapport ” Blackbox is dead-Long live Blackbox!”Op de Black Hat 2018 conferentie in Las Vegas). Wat zijn de kosten van het solderen van het geheugen van NVRAM, het uploaden van een back-up om de hele controller te “besprenkelen”… Met dank aan collega Alexey voor zijn geduld!
het resultaat was het volgende algoritme voor het uploaden van de firmware naar de dispenser:
1) Genereer een paar RSA-sleutels en giet de publieke sleutel in de controller.

2) Schrijf achtereenvolgens de .data en .tekst secties van de ELF naar hun fysieke adressen van de sectie headers.

3) Bereken SHA-1 van de opgenomen gegevens, versleutel de hash met een private sleutel, stuur naar de controller.

4) tel en stuur de som van alle opgenomen firmware woorden.

daarna, als alles met succes is berekend en opgenomen, zal de belangrijkste firmware worden gedownload.
bij het schrijven van firmware bleek er slechts één beperking te zijn: de firmwareversie mag niet lager zijn dan de huidige. Maar tenslotte, niemand stoort ons om de firmware-versie te vervangen in de gegevens zelf.
als gevolg hiervan werd mijn speciale firmware met antisecurity-fixes overspoeld en met succes gelanceerd!
op dit moment werd de code van de belangrijkste firmware goed bestudeerd en werden opdrachten voor het uitgeven van bankbiljetten gevonden. Nu kunnen ze ongecodeerd worden verzonden, en de dispenser zal ze graag uit te voeren.

uitlevering

na alles wat werd ervaren tijdens het onderzoek (bijvoorbeeld een echte ATM zakirpicheny), was het resultaat zo aangenaam en compenserend voor de inspanningen dat het algoritme wilde herhalen met een andere grote verkoper.

de echte ATM begon te janken en deelde graag verse scherpe notities met ons (in dit geval verkoper “candy wrappers”). Er werd geen magie toegepast: alleen een laptop, een brein en een USB-snoer.

bevindingen

opnieuw waren we ervan overtuigd dat, geleid door het principe van veiligheid door onduidelijkheid , het onmogelijk is om adequate bescherming te bieden. Het fatsoen van een code of firmware betekent helemaal niet dat een aanvaller op een gegeven moment geen toegang tot het zal hebben en zal niet profiteren van de kwetsbaarheden gevonden. Alles wat nodig is voor de uitvoering van zelfzuchtige doelen kan worden verworven in de aanwezigheid van een bepaalde hoeveelheid geld.
ontwikkelaars zouden de code moeten behandelen, en beveiligingsspecialisten zouden het moeten beschermen. Daarom lijkt de meest productieve aanpak samenwerking te zijn met informatiebeveiligingsbedrijven die voldoende ervaring hebben met het waarborgen van de veiligheid van verschillende systemen, die in elk afzonderlijk geval zullen helpen bij het opbouwen van een adequate bescherming.
PS-leverancier bevestigde de kwetsbaarheid (de inbreuk werd ook gevonden in een ander model-S2), die werd verklaard als gewijzigd in de Februari fix van het 2018e jaar.
CVE-lijst:

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

Dank

voor mij werkten mijn collega ‘ s, Dima Sklyarov en Misha Tsvetkov , al aan de firmware (zij het zonder dispenserbord) . Hun prestaties hebben me veel geholpen in de studie, waarvoor ik hen hartelijk dank! Van de kant van” iron ” Alexey Stennikov hielp me veel .

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.