Image: Sascha Kohlmann , CC BY-SA 2.0
on järjestelmiä, joihin pelkillä kuolevaisilla ei ole oletusarvoisesti pääsyä. Ja Kehittäjät tällaisten järjestelmien naiivisti uskovat, että ne on suojattu tunkeutumista ja tarkka silmät tutkijoiden.
ota ainakin pankkiautomaatit (ATM). Ei ole harvinaista, että tuntemattomat ihmiset lähestyvät pankkiautomaatteja, yhdistävät kannettavan tietokoneen, ottavat rahaa ja lähtevät jättämättä mitään lokit järjestelmään. Ja Viimeaikaiset Tarinat ”cutlets” (haittaohjelma nimeltään Cutlet Maker ) vielä vahvistaa, että ei ole olemassa haavoittumattomia järjestelmiä – on alitutkittuja niistä.

aloita tutkimus

on olemassa käsitys, että ainoa tapa varastaa rahaa pankkiautomaatista on saapua kippiautolle, noutaa Pankkiautomaatti koukulla ja repiä se ulos sisälmyksillä ja käyttää sitten hiomakonetta, romua ja kaasuhitsauskonetta. Mutta on toinenkin keino.
lyhyen eBay-haun jälkeen minulla oli pöydälläni NCR USB S1-annostelijan annostelija nenäliina firmwarella. Tavoitteet olivat:

  • etsi tietokoneen USB: n kautta itse automaatille lähettämien komentojen salauksen ohitus, erityisesti setelien liikkeeseen laskemista varten
  • opettele ohittamaan fyysisen pääsyn tarve todennusta varten olevaan kassakaappiin (kasetin jongleeraus) edellisen kappaleen komentojen salausavainten luomiseksi.

Firmware

firmware on ELF-tiedosto NXP ColdFire-suorittimelle (Motorola 68040 , suosikkiprosessorini), joka toimii VxWorks v5.5.1: ssä .

vuonna ELF tiedosto kiinnostaa on kaksi pääosaa -.teksti ja .tiedot :

  • yksi niistä sisältää koodin, joka kääntyy koko pääajan (kutsutaan sitä pääohjelmistoksi), kun annostelija on kytketty ATM: n yläosassa olevaan järjestelmäyksikköön.
  • toisessa bootloader-koodi pakataan käyttäen zlib: tä (sen paikallinen nimi on USB Secure Bootloader ), joka vastaa firmwaren lataamisesta ja pääkoodin ajamisesta.

ja parasta on, että tiedostossa on leikkaamattomia hahmoja – ota se ja etsi jotain mielenkiintoista.

pääohjelmiston sisäinen laite

jos jaat koodin pääkomponentteihin, saat seuraavan järjestelmän (lähetysjärjestyksessä):

  1. virta, joka käsittelee USB-pakettien vastaanottamista ja niiden jakamista palveluiden kesken.
  2. palvelut ovat suorittavia perusyksiköitä, joista jokaisella on oma roolinsa ja jokaisella on omat tehtävänsä (luokat).
  3. luokat-tässä nämä ovat tehtäviä, joita palvelu voi suorittaa rekisterinpitäjien avulla.
  4. rekisterinpitäjät ovat itse asiassa ”työläisiä” (työntekijöitä), jotka osallistuvat heille lähetettyjen tehtävien validointiin, niiden toteuttamiseen ja vastauspakettien muodostamiseen.


koska firmwaressa on paljon koodia, päätettiin aloittaa etsimällä kaikki mahdolliset palvelut ja katsoa sitten, minne tehtävät siirretään.
tämän seurauksena todettiin, että just have to do what I ’ m looking for:
1) DispTranService (Dispenser Transaction Service : salattujen komentojen kanssa toimiminen, setelipakettien luominen, tunnistautuminen. Voit sanoa mielenkiintoisin-täällä.

2) tietoturvapalvelu: automaatin kyljessä olevan todennuksen jälkeen luodaan istuntoavain, joka lähetetään tietokoneelle salatussa muodossa tietokoneen pyynnöstä. Tällä avaimella kaikki tärkeät komennot salataan-lasketaan liikkeeseen, jolloin muodostuu kasa seteleitä.

myöhemmin toinen palvelu pisti silmään: UsbDownloadService. Sen tehtävänä on liittää annostelija tietokoneeseen ja annostelijan laiteohjelmistoversion versio, joka on tallennettu ATM-tietokoneeseen, mennä käynnistyslataajaan, jotta voidaan ladata firmware käyttöjärjestelmä pitäisi toimia (se on kansiossa toimittajan ohjelmisto tietokoneessa). Tämä palvelu pystyy myös antamaan tietoa firmware-versiosta.

fyysinen todennus

fyysinen todennus toteutetaan korkeimmalla tasolla ja se suojaa ATM: ää pelkältä USB-komentojen lähettämiseltä ilman lupaa. Tässä tapauksessa se on se, että vain avoimella kassakaapilla, jolla on rahaa, sinun täytyy suorittaa jokin seuraavista toimista:

  • poista ja aseta alempi kasetti,
  • vaihda annostelijalla telineen takaosassa olevaa vipukytkintä.


mutta kaikki tämä vaaditaan vain, jos pääsytaso on asetettu maksimiin eli fyysiseen. Niitä on kolme: USB (0), looginen (1) ja fyysinen (2). Loput kaksi käyttävät palveluntarjoajat ja Kehittäjät virheenkorjaus ja testaus firmware. No, fyysinen yksi on erittäin suositeltavaa myyjä käytettäväksi oletuksena.

haavoittuvuus

seuraavassa kuvataan kriittistä haavoittuvuutta (jonka myyjä on jo korjannut artikkelin julkaisuhetkellä), joka, jos palvelualueelle on pääsy, mutta ei pääsyä kassakaappiin (esimerkiksi pankkiautomaatin etupaneeliin tehdyn reiän kautta), suorittaa kaikki automaatin komennot, mukaan lukien käteinen.

kuten kävi ilmi, UsbDownloadService hyväksyy komentoja, jotka eivät vaadi salausta. Kuulostaa houkuttelevalta. Mutta sitten kaikki on suojattu edelleen, ja nimi Secure Bootloader oikeuttaa itsensä?
(spoileri: not justify!)

meidän täytyy mennä syvemmälle

kuten jo mainittiin, in .data-osiossa on pakattu bootloader-koodi, joka ei pitkään herättänyt kiinnostustani, ja kollegani, kun he tutkivat firmwaren, eivät kiinnittäneet huomiota siihen.

vaikka bootloaderin läsnäolo oli salainen, jäi avoimeksi kysymys: miten tietokoneen ohjelmisto täytti firmwaren? Loppujen lopuksi mitään ei löytynyt tärkein firmware.

niin, bootloader on purettu, ladattu IDA offset 0x100000 – nyt voit tutkia … Vain ei hahmoja!
sillä ei ole väliä: verrataan pääohjelmistoa bootloader – koodiin, luetaan ohjaimen datalehti-ja tietty kuva alkaa syntyä.

kävi ilmi, että laiteohjelmiston lataus, vaikka se näyttää olevan suojattu, ei todellisuudessa ole. Pitää vain osata täyttää se oikein.
melko paljon vaivaa ja aikaa kului tämän prosessin täydelliseen ymmärtämiseen (tarkempia tietoja on raportissa ” Blackbox is dead — Eläköön Blackbox!”Black Hat 2018-konferenssissa Las Vegasissa). Mikä on kustannukset juottamalla NVRAM muisti, lataamalla varmuuskopio siihen, jotta ”ripottele” koko ohjaimen … Kiitos kollega Aleksei kärsivällisyydestä!
tuloksena oli seuraava algoritmi firmwaren lataamiseksi annostelijaan:
1) Luo pari RSA-avainta ja kaada julkinen avain ohjaimeen.

2) Kirjoita peräkkäin .data ja .tekstiosuudet TONTUSTA niiden fyysisiin osoitteisiin osioiden otsikoista.

3) Laske SHA-1 tallennetuista tiedoista, salaa hajautus yksityisellä avaimella, lähetä rekisterinpitäjälle.

4) Laske ja lähetä kaikkien tallennettujen firmware-sanojen summa.

tämän jälkeen, jos kaikki lasketaan ja tallennetaan onnistuneesti, pääohjelmisto Ladataan.
kävi ilmi, että laiteohjelmistoa kirjoitettaessa on vain yksi rajoitus: laiteohjelmistoversion ei pitäisi olla nykyistä pienempi. Mutta loppujen lopuksi kukaan ei häiritse meitä korvata firmware-versio sen tiedot itse.
tämän seurauksena minun erityinen firmware kanssa antisecurity-korjauksia oli tulvii ja onnistuneesti käynnistetty!
tässä vaiheessa pääohjelmiston koodi oli hyvin tutkittu, komentoja setelien liikkeellelaskuun löytyi. Nyt ne voidaan lähettää salaamattomina, ja annostelija toteuttaa ne mielellään.

luovutus

kaiken tutkimuksen aikana koetun jälkeen (esimerkiksi oikea Pankkiautomaatti zakirpicheny) tulos oli niin miellyttävä ja kompensoiva ponnistus, että algoritmi halusi toistaa toisen suuren myyjän kanssa.

oikea Pankkiautomaatti alkoi velloa ja jakoi mielellään meille tuoreita rapeita seteleitä (tässä tapauksessa myyjän ”karkkipapereita”). Taikaa ei käytetty: vain kannettava tietokone, Aivot ja USB-johto.

havainnot

jälleen kerran olimme vakuuttuneita siitä , että turvallisuuden periaatteen mukaisesti on mahdotonta tarjota riittävää suojelua. Koodin tai laiteohjelmiston sopivuus ei tarkoita lainkaan sitä, että hyökkääjä ei pääse siihen jossain vaiheessa eikä hyödynnä löydettyjä haavoittuvuuksia. Kaikki, mikä on tarpeen itsekkäiden tavoitteiden toteuttamiseksi, voidaan hankkia tietyn rahasumman läsnä ollessa.
kehittäjien tulisi käsitellä koodia, ja tietoturva-asiantuntijoiden tulisi suojella sitä. Siksi tuottavinta näyttää olevan yhteistyö tietoturvayritysten kanssa, joilla on riittävä kokemus erilaisten järjestelmien turvallisuuden varmistamisesta, mikä auttaa rakentamaan riittävän suojan kussakin yksittäistapauksessa.
PS-toimittaja vahvisti haavoittuvuuden (aukko löytyi myös toisesta mallista – S2), joka ilmoitettiin muutetuksi vuoden 2018 helmikuun korjauksessa.
CVE-lista:

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

Kiitos

ennen minua kollegani Dima Sklyarov ja Misha Tsvetkov työstivät jo firmwarea (tosin ilman annostelulevyä) . Heidän saavutuksensa auttoivat minua paljon tutkimuksessa, mistä kiitän heitä niin paljon! ”Raudan” osalta Aleksei Stennikov auttoi minua paljon .

Vastaa

Sähköpostiosoitettasi ei julkaista.