-
Translated by Robert Ylitalo
(KYBS2001 course assignment at JYU.fi)
-
♪ (38C3 intromusiikki) ♪
-
Ollaan jo kirimässä menetettyä aikaa.
-
Tervetuloa kaikki meidän esitykseen:
"Matka menneisyyteen: RCE faksikoneen kautta, koska miksei?"
-
Tämä projekti vaati paljon enemmän työtä kuin osasimme odottaa,
joten toivottavasti olette valmiita hyppäämään kyytiin.
-
Nimeni on Rick de Jaeger ja vieressäni on kollegani Carla Meyer tässä 80-luvun henkisessä kuvassa.
-
Ennen kuin mennään liian pitkälle, haluamme aloittaa tunnustuksella.
-
Suuri osa tästä työstä sai inspiraationsa aiemmasta CCC-esityksestä,
-
jossa Eyal Itkin ja Yaniv Balmas hakkeroivat fakseja.
-
He tekivät erinomaista työtä, ja se istutti meille ajatuksen:
-
jos joskus löydämme kirjan, jota voisi lukea faksin kautta, niin meidän pitäisi kokeilla, kuinka vaikeaa se olisi ja se tulisi olemaan hauskaa.
-
Eli vaikka uutuuden viehätys ei ollutkaan varsinainen motivaattori, miksi sitten juuri faksikone?
-
No, tämä kaunis faksilaite on ollut yksi Pwn2Own-kilpailun kohteista jo neljän vuoden ajan.
-
Olemme itse osallistuneet Pwn2Owniin kolmena vuonna.
-
Pwn2Own on nollapäivähaavoittuvuuskilpailu, jossa järjestäjä antaa listan kohteista kolme kuukautta ennen kilpailua,
-
ja osallistujien pitää löytää uusia haavoittuvuuksia, joilla saadaan suoritettua koodia kohdelaitteissa.
-
Pwn2Own-kilpailussa on eri sarjoja:
-
työpöytäsovellukset kuten selaimet ja virtuaalikoneet,
-
autohakkerointi eli automotive,
-
ja sitten IoT-laitteet eli kulutuselektroniikka, jossa me kilpailtiin.
-
Miksi me katsottiin tulostimia?
-
No, me päädyttiin tähän projektiin, kun nähtiin eräs julkaisu CDI-blogissa.
-
Siinä kerrottiin, että jos hakkeroit ensin reitittimen ja siirryt siitä esimerkiksi tulostimeen, voit voittaa 100 000 dollaria.
-
Ajattelimme, että 100K kuulostaa hyvältä, niin koitetaan sitä.
-
Mutta palkintoraha ei ole aina 100K.
-
Jos joku toinen löytää saman haavoittuvuuden, summa pienenee merkittävästi.
-
Tulostimissa hyökkäyspinta on iso, joten on vähemmän todennäköistä, että joku muu löytää saman bugin.
-
Päätettiin siis valita vaikeampi haavoittuvuus, kuten muistinkäsittelybugi.
-
Ne ovat yksityiskohtaisempia ja työläämpiä, joten muut eivät välttämättä löydä juuri samaa haavoittuvuutta.
-
Meillä oli monta tulostinta valittavana, ja strategiamme oli valita sellainen, joka oli kohtuullisen halpa
-
mutta jonka laiteohjelmisto oli salattu.
-
Eli sisäänpääsy vaatii ensin laitteen ostamista, sen purkamista ja firmwaren purkua.
-
Toivoimme, että muut kilpailijat valitsevat helpomman kohteen,
-
jotta he eivät löytäisi samaa haavoittuvuutta.
-
Tässä on siis päähenkilömme: Lexmarkin 331-sarja.
-
Se on ollut Pwn2Own-kohde vuodesta 2021.
-
Me aloitimme vuonna 2022, ja olemme kirjoittaneet siihen exploitin jo kolmesti.
-
Laite perustuu Yocto Linuxiin, joka on varsin järeä käyttöjärjestelmä.
-
Se pyörittää joitain Rust-komponentteja ja Qt-sovelluksia, eli aika moderni kokonaisuus.
-
Verrattuna muihin tulostimiin, sanoisin että Lexmark on tehnyt ihan hyvää työtä
-
tietoturvan saralla.
-
Järjestelmässä on useita käyttäjätilejä,
-
ohjelmistot ovat melko ajan tasalla,
-
ja siellä on yrityksiä hiekkalaatikointiin systemd-komponenttien avulla.
-
Eli he suoriutuvat kohtalaisen hyvin.
-
Mutta me silti hakkeroimme laitteen kolme kertaa, eli ei täydellistä.
-
Ja tärkeimpänä tämän päivän kannalta
-
tässä laitteessa on faksituki.
-
Emme valinneet sitä sen takia, mutta se vain sattui olemaan mukana.
-
Ja me satuimme sen löytämään.
-
Rahan lisäksi, miksi teemme tätä?
-
No, faksien kulta-aika oli ehkä vuoteen -99 asti.
-
Itse olen 25-vuotias, joten tuntuu, että koko faksikulttuuri meni vähän ohi.
-
Tähän projektiin asti en ollut koskaan lähettänyt yhtäkään faksia.
-
Tässä vaiheessa niitä on tullut varmasti satoja.
-
No miten tämä oikein toteutetaan?
-
Ensimmäisenä tarvitsemme tietenkin firmware-kuvan.
-
Ilman sitä tämä olisi täysin sokkona ampumista.
-
Sen jälkeen tarvitsemme jonkinlaisen debuggauksen mahdollisuuden,
-
koska jos haluat hyödyntää muistikorruptiobugia,
-
tarvitset tietoa ohjelman sisäisestä tilasta ja muusta sellaisesta.
-
Eli suunnitelmana oli saada käyttöön hyvä debuggausympäristö
-
joko koodin suorittamisen kautta tai JTAG-debugin avulla.
-
Näiden työkalujen avulla voimme löytää haavoittuvuuden,
-
hyödyntää sitä, kerätä palkkion
-
ja tuoda bugin faksitoimintoon sekä pitää tästä hyvä esitys CCC:ssä.
-
Ja tässä me nyt olemme.
-
Aloitetaan siis firmware-kuvan hankinnasta.
-
Ensimmäinen paikka, josta kannattaa katsoa, on tietenkin Lexmarkin verkkosivusto.
-
Sieltä voi ladata firmware-kuvan.
-
Mutta kun laitoimme sen binwalkin läpi, tuloksena oli pelkkää siansaksaa.
-
Mietimme, että mikäs tässä nyt mättää.
-
Kävi ilmi, että tiedoston entropia oli tosi korkea
-
oikeastaan ihan järkyttävän korkea.
-
Eli hyvin selvä merkki siitä, että kuva on salattu. Valitettavasti.
-
Tässä kohtaa oli selvää, että kuvasta ei ole hyötyä,
-
koska se on salattu emmekä tiedä avaimia.
-
Eli takaisin piirustuspöydälle.
-
Hauska nippelitieto muuten:
-
tulostimen firmwarepäivitys toimitetaan itse asiassa tulostettavana tiedostona.
-
Se on upotettu PostScript-dokumenttiin
-
ja kun tulostat sen, laite päivittää itsensä automaattisesti.
-
Seuraava vaihe oli siis hankkia itse laite.
-
Tässä on kuva tulostimesta autoni takakontissa.
-
Ostimme tämän käytettynä.
-
Kauppa meni suunnilleen näin:
-
Kävin myyjän kanssa keskustelun, ja hän ystävällisesti varoitti:
-
"Oletko varma, että haluat ostaa tämän tulostimen?"
-
Vastasin, että "Joo, miksi en haluaisi?"
-
"No, musteet on melkein lopussa. Ja jos haluat tulostaa, ne on tosi kalliita."
-
"Kannattaa ehkä miettiä toista laitetta."
-
Mutta me ei oltu kiinnostuneita tulostamisesta, joten:
-
"Printataanko? Miksi ihmeessä haluaisin tehdä niin?"
-
Tulostin oli nyt käsissämme
-
ja pääsimme tutkimaan piirilevyä.
-
Huomasimme, että siinä on JTAG-merkinnät, mikä on mahtavaa.
-
Se tekee elämästä todella helppoa.
-
Jos JTAG ei ole sinulle tuttu, se on käyttöliittymä,
-
jonka kautta voi kurkistaa laitteen muistiin,
-
asettaa breakpointteja, muuttaa rekisteriarvoja
-
käytännössä unelmatyökalu exploit-kehittäjälle.
-
Se olisi se kultainen standardi.
-
Eli elämästämme piti tulla helppoa.
-
Kytkimme siis tulostimen Raspberry Pi:hin,
-
jossa on GPIO-portit.
-
OpenOCD:llä voi puhua JTAG-protokollaa kohdelaitteelle.
-
Tuki toimii suoraan “out of the box”, joten kaikki toimi kauniisti.
-
Lähetimme ID-koodikyselyn, ja laite vastasi "ARM Limited"
-
tämä vahvisti, että signaali toimi.
-
Eli emme olleet kuvitelleet mitään.
-
Mutta päivän säätämisen jälkeen selvisi,
-
että mikään muu ei vastaa. Ei mitään mielenkiintoista.
-
Todennäköisesti jotkin toiminnot on kytketty pois päältä ei-haihtuvassa muistissa.
-
Takaisin suunnittelupöydälle siis.
-
Seuraava vaihtoehto firmware-kuvan saamiseksi:
-
juotetaan tallennuspiiri irti emolevyltä.
-
Tämä on aika suoraviivaista, kuumailma-asemalla irti,
-
sitten EEPROM-lukijaan.
-
Käytimme B-PROG C4 -lukijaa.
-
Tämä oli ajalta, jolloin olin vielä opiskelija
-
leikittelin tällä laitteella silloin ja se on yhä tallella.
-
Mutta selvisi, että tämä lukija rakastaa omia, proprietaarisia TSOP48-sovittimiaan.
-
Ja tietysti meillä oli halpa kopio eBaysta,
-
jota se ei hyväksynyt.
-
Mikään ei toki estä tekemästä softakorjausta,
-
mutta en suosittele tätä reittiä.
-
Kannattaa valita laite, jossa on vähemmän kiristyksen makua.
-
Onneksi lopulta saimme sen toimimaan,
-
ja saimme firmware-dumpin.
-
Kävi ilmi, että käytössä on UBI
-
Se ei ole erityisen jännä, mutta toimiva ratkaisu.
-
UBI on lohkonhallintakerros,
-
joka huolehtii viallisista lohkoista, kulumisesta,
-
ja se on kirjoitettu Linuxia varten.
-
Sen sisällä on squashfs-tiedostojärjestelmä,
-
jonka voi purkaa helposti.
-
Purku onnistui, ja saimme käyttöön root-fs:n,
-
joka sisältää kaikki binäärit ja sisällöt.
-
Eli nyt meillä oli dekryptattu firmware-kuva.
-
Mutta entä jos Lexmark julkaisee päivityksen?
-
Meidän pitäisi tehdä tämä koko prosessi uudelleen.
-
Löysimme myös salausavaimet,
-
ja teimme oman purkutyökalun.
-
Joten jatkossa voimme vain ladata uuden firmwaren,
-
purkaa sen itse ja jatkaa suoraan eteenpäin.
-
Mitä tapahtui tulostimelle, kun siru oli irrotettu?
-
No, tietenkin juotin sen takaisin
-
Ja tämä saattaa yllättää
-
että yllättäen se toimii.
-
Nyt kun meillä on firmware-kuva,
-
seuraava tavoite oli saada debuggausmahdollisuus.
-
Mutta laitteessa on secure boot,
-
joten emme voi vain muokata muistipiiriä ja laittaa asentaa takaporttia.
-
Lexmark ei myöskään halua, että loppukäyttäjät pääsevät SSH:lla
-
laitteeseen käsiksi.
-
Eli tarvitsemme exploitin.
-
Kävi ilmi, että NCC Group oli jo löytänyt yhden edellisenä vuonna.
-
He osallistuivat Pwn2Owniin ja kirjoittivat blogipostauksen aiheesta.
-
Mutta he jättivät oleellisia asioita kertomatta.
-
Me kuitenkin pystyimme täydentämään ne puuttuvat kohdat,
-
nyt kun meillä oli firmware itsellämme.
-
Näin saimme root-shellin käyttöön
-
mikä oli mielestämme varsin hyvä juttu.
-
Nyt voimme tutkia järjestelmää,
-
debugata prosesseja esimerkiksi lataamalla GDB-palvelimen.