obrázek: Sascha Kohlmann, CC BY-SA 2.0
existují systémy, pro které obyčejní smrtelníci nemají přístup ve výchozím nastavení. A vývojáři takových systémů naivně věří, že jsou chráněni před pronikáním a horlivými očima výzkumníků.
vezměte alespoň Bankomaty (ATM). Není neobvyklé, že neznámí lidé přistupují k bankomatům, připojují notebook, berou peníze a odcházejí, aniž by v systému zanechali žádné protokoly. A Nedávné příběhy s „kotlety“ (malware nazvaný Cutlet Maker ) ještě více potvrzují, že neexistují žádné nezranitelné systémy – existují nedostatečně prozkoumané.

začněte výzkum

existuje názor, že jediným způsobem, jak ukrást peníze z bankomatu, je dorazit na sklápěč, vyzvednout bankomat hákem a vytrhnout ho droby a poté použít brusku, šrot a plynový svařovací stroj. Existuje však i jiná metoda.
po krátkém hledání na Ebay jsem měl na stole kapesník NCR USB S1 Dispenser dispenser s firmwarem. Cíle byly:

  • najděte obtok šifrování příkazů odeslaných počítačem přes USB do samotného dávkovače, zejména pro vydávání bankovek
  • Naučte se, jak obejít potřebu fyzického přístupu k trezoru pro autentizaci (žonglování s kazetou)pro generování šifrovacích klíčů příkazů z předchozího odstavce.

Firmware

firmware je soubor ELF pro procesor NXP ColdFire (Motorola 68040, můj oblíbený procesor), běžící na VxWorks v5.5.1 .

v souboru ELF zájmu jsou dvě hlavní části – .text a .údaje :

  • jeden z nich obsahuje kód, který se otáčí po celou hlavní dobu (nazýváme to hlavní firmware), když je dávkovač připojen k systémové jednotce v horní části bankomatu.
  • ve druhém je Kód bootloaderu zabalen pomocí zlib (jeho místní název je USB Secure Bootloader), který je zodpovědný za nahrání firmwaru a spuštění hlavního kódu.

a nejlepší na tom je, že v souboru jsou nesestříhané znaky – vezměte si to a hledejte něco zajímavého.

interní zařízení hlavního firmwaru

pokud rozdělíte kód na hlavní komponenty, získáte následující schéma (v pořadí podání):

  1. stream, který se zabývá přijímáním balíčků USB a jejich distribucí mezi služby.
  2. služby jsou základními výkonnými jednotkami, každá z nich má svou vlastní roli a každá má své vlastní úkoly (třídy).
  3. třídy-zde jsou úkoly, které může služba provádět pomocí řadičů.
  4. řadiči jsou ve skutečnosti „pracovníci“ ( pracovníci), kteří se zabývají validací úkolů, které jim byly zaslány, jejich prováděním a vytvářením paketů odpovědí.


vzhledem k tomu, že ve firmwaru je spousta kódu, bylo rozhodnuto začít hledáním všech možných služeb a poté se podívat, kam se úkoly přenášejí.

v důsledku toho byly nalezeny následující služby, které prostě musí dělat to, co hledám:
1) DispTranService (Dispenser Transaction Service) : práce se šifrovanými příkazy, generování svazků bankovek, autentizace. Můžete říci nejzajímavější-zde.

2) securityService : po ověření na straně dávkovače je vygenerován klíč relace, který je na žádost počítače odeslán do počítače v šifrované podobě. S tímto klíčem budou všechny důležité příkazy šifrovány-vydávání, tvořící stoh bankovek.

následně mě zaujala další služba: UsbDownloadService. Jeho úkolem je připojit dávkovač k počítači a verzi firmwaru dávkovače, která je uložena v počítači ATM, přejít do bootloaderu, aby bylo možné nahrát firmware, se kterým by měl operační systém pracovat(je ve složce se softwarem dodavatele v počítači). Tato služba je také schopna poskytnout informace o verzi firmwaru.

fyzická autentizace

fyzická autentizace je implementována na nejvyšší úrovni a chrání ATM před pouhým odesláním příkazů USB k vydání bez autorizace. V tomto případě spočívá v tom, že pouze s otevřeným trezorem s penězi musíte provést jednu z následujících akcí:

  • vyjměte a vložte spodní kazetu,
  • přepněte přepínač na zadní straně stojanu pomocí dávkovače.


to vše je však nutné pouze v případě, že je úroveň přístupu nastavena na maximum, tj. Existují tři z nich: USB (0), logické (1) a fyzické (2). Zbývající dva používají poskytovatelé služeb a vývojáři pro ladění a testování firmwaru. No, fyzický je vysoce doporučeno dodavatelem pro použití ve výchozím nastavení.

zranitelnost

následující text popisuje kritickou chybu zabezpečení (již dodavatel stanovil v době zveřejnění článku), která, pokud existuje přístup do oblasti služeb, ale bez přístupu k trezoru (například otvorem vytvořeným v čelním panelu ATM), provádí všechny příkazy dávkovače, včetně hotovosti.

jak se ukázalo, UsbDownloadService přijímá příkazy, které nevyžadují šifrování. Zní to lákavě. Ale pak je vše dále chráněno a název Secure Bootloader se ospravedlní?
(Spoiler: neospravedlnit!)

musíme jít hlouběji

jak již bylo zmíněno, v.datová sekce k dispozici je zabalený kód bootloaderu, který po dlouhou dobu nevzbudil můj zájem a moji kolegové, když zkoumali firmware, mu nevěnovali pozornost.

zatímco přítomnost bootloaderu byla tajná, otázka zůstala otevřená: jak software v počítači naplnil firmware? Koneckonců, v hlavním firmwaru nebylo nic nalezeno.

bootloader je tedy rozbalen, načten do IDA v offsetu 0x100000-nyní můžete prozkoumat . .. Pouze žádné postavy!
na tom nezáleží: porovnání hlavního firmwaru s kódem bootloaderu, přečtení datového listu řadiče – a začne se objevovat určitý obrázek.


ukázalo se, že nahrávání firmwaru, i když se zdá být chráněno, ve skutečnosti není. Stačí vědět, jak jej správně vyplnit.
bylo vynaloženo velké úsilí a čas na úplné pochopení tohoto procesu(více informací naleznete ve zprávě “ Blackbox je mrtvý-Ať žije Blackbox!“Na konferenci Black Hat 2018 v Las Vegas). Jaké jsou náklady na pájení paměti NVRAM, nahrání zálohy do ní, aby se „posypal“ celý řadič … Díky kolegovi Alexeyovi za jeho trpělivost!
výsledkem byl následující algoritmus pro nahrání firmwaru do dávkovače:
1) Vygenerujte pár klíčů RSA a nalijte veřejný klíč do řadiče.

2) Napište postupně .data a .textové sekce z ELF na jejich fyzické adresy z hlaviček sekcí.

3) Vypočítejte SHA-1 ze zaznamenaných dat, zašifrujte hash soukromým klíčem a odešlete do řadiče.

4) Spočítejte a odešlete součet všech zaznamenaných slov firmwaru.

poté, pokud je vše úspěšně vypočítáno a zaznamenáno, bude stažen hlavní firmware.
ukázalo se, že při psaní firmwaru existuje pouze jedno omezení: verze firmwaru by neměla být nižší než aktuální. Ale koneckonců, nikdo nás neobtěžuje nahradit verzi firmwaru v samotných datech.
v důsledku toho byl můj speciální firmware s antisecurity-fixes zaplaven a úspěšně spuštěn!
v tomto okamžiku byl kód hlavního firmwaru dobře studován, byly nalezeny příkazy pro vydávání bankovek. Nyní mohou být zaslány nešifrované a dávkovač je šťastně provede.

vydání

po tom všem, co se během výzkumu vyskytlo (například skutečný ATM zakirpicheny), byl výsledek tak příjemný a kompenzoval úsilí, které algoritmus chtěl opakovat s jiným významným dodavatelem.

skutečný bankomat začal vířit a ochotně se s námi podělil o čerstvé ostré poznámky (v tomto případě prodejce „bonbóny“). Nebyla použita žádná magie: pouze notebook, mozek a USB kabel.

zjištění

opět jsme byli přesvědčeni, že na základě principu bezpečnosti prostřednictvím neznáma není možné poskytnout odpovídající ochranu. Vhodnost kódu nebo firmwaru vůbec neznamená, že útočník k němu nebude mít přístup V jednom bodě a nevyužije nalezených zranitelností. Vše potřebné pro realizaci sobeckých cílů lze získat za přítomnosti určitého množství peněz.
vývojáři by se měli s kódem zabývat a bezpečnostní specialisté by jej měli chránit. Proto se zdá, že nejproduktivnějším přístupem je spolupráce se společnostmi v oblasti informační bezpečnosti s dostatečnými zkušenostmi se zajištěním bezpečnosti různých systémů, které pomohou v každém konkrétním případě vybudovat odpovídající ochranu.
prodejce PS tuto zranitelnost potvrdil (porušení bylo zjištěno i u jiného modelu – S2), který byl prohlášen ve znění pozdějších předpisů v únorové opravě 2018.roku.
seznam CVE:

  • CVE-2017-17668 (dávkovač NCR S1),
  • CVE-2018-5717 (dávkovač NCR S2).

díky

přede mnou moji kolegové, Dima Sklyarov a Misha Tsvetkov, již pracovali na firmwaru (i když bez dispenserové desky) . Jejich úspěchy mi hodně pomohly ve studiu, za což jim moc děkuji! Ze strany“ železa “ mi Alexey Stennikov hodně pomohl .

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.