Translated by Robert Ylitalo (KYBS2001 course assignment at JYU.FI)
♪ (38C3 intromusiikki) ♪
Korvaamme jo 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 Jager ja vieressäni on kollegani Carlo Meijer tässä 80-luvun henkisessä kuvassa.
Ja ennen kuin menemme liian pitkälle, haluamme aloittaa kiitoksella.
Suurin osa tästä työstä on saanut inspiraationsa aiemmasta CCC-esityksestä.
Fax-laitteiden hakkeroimisesta, jonka pitivät Eyal Itkin ja Yannif Balmas.
He tekivät hienoa työtä, ja se todella laittoi ajatuksen päähämme:
jos löydämme kirjan, jonka voi lukea faksin kautta, katsotaan kuinka vaikeaa se olisi ja 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 osallistuneet Pwn2Own-kilpailuun jo kolmena niistä vuosista.
Pwn2Own on nollapäiväkilpailu, jossa yritys julkaisee kohdelistan, ja kolme kuukautta etukäteen kilpailijat alkavat etsiä uusia haavoittuvuuksia.
Kilpailijat yrittävät löytää uusia nollapäivähaavoittuvuuksia, joilla saa ajettua koodia.
Pwn2Ownissa on eri kilpailusarjoja.
On työpöytäohjelmistoja kuten selaimet, virtuaalikoneet.
On autoihin liittyvä sarja, esimerkiksi autohakkerointi.
Ja sitten on IoT-sarja, jossa me kilpailimme, pääasiassa kulutuselektroniikkaa.
Syy miksi päätimme tutkia tulostimia oli se, että näimme jotain ZDI-blogissa.
Jos hakkeroit reitittimen ja siirryt toiseen laitteeseen,
kuten tulostimeen, saat 100K palkinnon.
Ajattelimme, että 100K, kuulostaa hyvältä, otetaanpa se kohteeksi.
Mutta palkintoraha ei lopu siihen.
Se ei ole pelkkä kiinteä 100K.
Pwn2Ownissa palkkio pienenee huomattavasti,
jos sinulla on sama haavoittuvuus kuin jollain toisella.
Ja tulostimilla on suuri hyökkäyspinta-ala.
Joten on epätodennäköisempää, että joku muu löytää saman bugin.
Voimme siis valita vaikeamman kohteen,
kuten muistinkorruptiobugin, vähentääksemme kilpailua
Moni voi tehdä "Command Injection"-bugin, mutta muistinkorruptio on tarkempi ja vaatii enemmän työtä.
Joten toiset eivät välttämättä tee samaa.
Meillä oli useita tulostimia valittavana, mutta valitsimme sellaisen, joka oli halpa mutta käytti salattua laiteohjelmistoa.
Joten sisääntulokynnys oli korkeampi.
Ensin piti ostaa laite, purkaa se ja samoin myös itse firmware.
Toivoimme, että muut kilpailijat...
valitsisivat helpomman kohteen eivätkä tekisi samaa kuin me.
Joten tässä on meidän päähenkilömme.
Lexmark 331 -sarja.
Se on ollut Pwn2Own-kohteena vuodesta 2021.
Aloitimme osallistumaan Pwn2Owniin vuonna 2022 ja olemme tehneet exploitin tähän jo kolme kertaa.
Se perustuu Yocto Linuxiin.
Kyseessä on varsin raskas käyttöjärjestelmä.
Siinä pyörii Rust-komponentteja ja Qt-sovelluksia.
Se on aika hieno.
Ja verrattuna muihin tulostimiin, sanoisin että Lexmark on tehnyt kohtalaista työtä
turvallisuuden suhteen.
Järjestelmässä on useita käyttäjiä.
Kaikki on melko hyvin ajan tasalla.
On myös yritetty käyttää sandboxausta systemd-komponenteilla.
Kaiken kaikkiaan suoriutuvat melko hyvin.
Silti hakkeroimme sen kolme kertaa, joten se ei ole täydellinen.
Ja mikä tärkeintä tälle päivälle, tässä laitteessa on faksituki, mitä emme valinneet tarkoituksella, mutta se vain sattui olemaan...
Sattumalta huomasimme sen.
Joten...
Rahan lisäksi, tekisimmekö tätä silti?
No, faksien kulta-aika taisi olla vuoteen 1999 asti.
Itse olen 25-vuotias, joten tuntuu että jäin fax-aikakaudesta paitsi.
En ollut koskaan lähettänyt faksia ennen tätä projektia.
Tässä vaiheessa niitä on varmaan satoja takana.
Joten miten tätä oikein lähestyisi käytännössä?
No niin.
Ensimmäinen asia mitä tarvitaan on tietenkin firmware-kuva.
Ilman sitä tämä olisi täysin arvailua.
Sen jälkeen tarvitaan debuggausmahdollisuus,
koska muistinkorruptiobugin hyväksikäyttöön tarvitsee näkymän ohjelman sisäiseen tilaan ja toimintaan.
Suunnitelmana on siis saada hyvä debuggauskyvykkyys joko koodin ajolla tai JTAG-debuggerilla.
Ja sitten näiden avulla etsitään haavoittuvuus, exploitataan sitä ja kerätään palkinto,
niin kuin juuri sanoin.
Ja siirretään tämä haavoittuvuus faksin kautta toimivaksi ja pidetään hieno CCC-esitys.
Tässä siis ollaan nyt.
Hyvä on.
Keskitytään nyt siihen, miten saadaan firmware-kuva.
Ensimmäinen paikka josta etsiä on tietenkin Lexmarkin verkkosivut.
Sieltä voi ihan vain ladata firmware-kuvan.
Ja kun sen laittaa binwalkin läpi,
sieltä tulee vain sekasotkua, joten mietimme: mitä täällä oikein tapahtuu?
Kävi ilmi, että entropia oli aika korkea.
Sanoisin, että järjettömän korkea.
Tämä on selkeä merkki siitä, että tiedosto on salattu.
Valitettavasti.
Joten tässä vaiheessa oli selvää, että kuvan tutkiminen on turhaa, koska se on salattu eikä meillä ole avaimia, joten täytyy...
palata suunnittelupöydälle.
Hauska fakta, tulostimen firmware-päivitys itse asiassa tulostetaan.
Se on upotettu PostScript-dokumenttiin ja tulostat sen tulostimeen, ja se aloittaa itse päivityksen.
Seuraava vaihe oli siis hankkia itse laite.
Tässä on kuva tulostimesta autoni takakontissa.
Eli ostimme laitteen käytettynä ja se meni suunnilleen näin:
Juttelin hetken myyjän kanssa, ja hän ystävällisesti kysyi: "Oletko varma, että haluat ostaa tämän tulostimen?"
Sanoin, että totta kai, miksi en haluaisi?
No, mustekasetit ovat loppumassa.
Jos haluat tulostaa, ne ovat kalliita ja loppuvat pian.
joten ehkä kannattaisi etsiä toista.
Tulostaa?
Miksi ihmeessä tekisin niin?
Hyvä, nyt kun tulostin oli hallussamme...
Meillä oli uusi lelu käytössämme.
Tutkimme piirilevyä ja huomasimme siinä olevan JTAG-merkinnät — loistavaa, se helpottaa elämäämme huomattavasti.
Jos JTAG ei ole tuttu, se on rajapinta, jolla voi tutkia laitteen muistia, asettaa keskeytyspisteitä, muokata rekistereitä
käytännössä unelmatyökalu exploit-kehittäjälle.
Se olisi siis kultainen standardi.
Joten elämästämme oli tulossa todella helppoa.
Ajattelimme vain, että okei, mennään taas.
Ja niin teimmekin.
Kytkimme sen Raspberry Pi:hin.
Raspberry Pi:ssä on GPIO-portit.
Voit käyttää OpenOCD:tä puhumaan JTAGia kohteelle.
Tuki toimii suoraan, kaikki toimi kauniisti.
Pystyimme lähettämään ID-koodipyynnön.
Se vastasi takaisin ARM limitediltä.
Tiesimme olevamme oikeilla jäljillä.
Signaalissa ei ollut mitään ongelmaa.
Eli emme ole hulluja.
Päivän säätämisen jälkeen tajusimme, ettei se vastannut enää mihinkään muuhun.
Mitään kiinnostavaa ei tapahtunut.
He olivat luultavasti kytkeneet jotain pois päältä jossain ei-haihtuvassa asetuksessa.
Joten taas palattiin suunnittelupöydälle.
Seuraava vaihtoehto firmware-kuvan saamiseksi oli yksinkertaisesti juottaa tallennuspiiri irti piirilevyltä.
Tämä on aika suoraviivaista.
Viedään se kuumailmajuottimelle ja irrotetaan siru.
Sen jälkeen laitetaan se yleismalliseen EEPROM-lukijaan.
Käytimme tähän B-PROG C -laitetta.
Tämä oli...
muutaman vuoden takaa, kun olin vielä opiskelija ja leikin tämän parissa, laite on yhä tallessa.
Kävi ilmi, että tämä lukija todella pitää omista, suljetuista TSOP48-sovittimistaan.
Ja tietenkin meillä oli halpa kopio eBaysta, jota se ei sitten hyväksynyt.
Ei mitään, mitä ohjelmistopaikka ei voisi korjata, mutta en kyllä suosittele tätä lähestymistapaa, ota mieluummin jotain vähemmän...
valitse laite, jossa on vähemmän kiristyksen kaltaisia vaatimuksia.
Onneksi lopulta saimme sen toimimaan ja saimme firmware-dumpin ulos.
Sehän on mukavaa.
Kävi ilmi, että he käyttävät UBI:a, eikä UBI ole kovin jännittävä.
Se on lohkonhallintajärjestelmä.
Eli vialliset lohkot, kulumantasoitus, kaikki hoidetaan ohjelmallisesti.
Se on kehys, joka on kirjoitettu erityisesti Linuxille, tietääkseni.
Siellä on squashFS-tiedostojärjestelmä, jonka voi suoraan purkaa.
Purku onnistui ja jäljelle jäi siisti root-tiedostojärjestelmä kaikilla binääreillä ja muulla sisällöllä.
Tässä vaiheessa meillä oli siis firmware-kuva.
Se on decryptoitu, mutta entä jos Lexmark julkaisee firmware-päivityksen?
Se olisi huono juttu.
Pitäisi tehdä koko homma uudelleen.
Joten löysimme myös laiteohjelmiston salausavaimet ja teimme oman purkutyökalun.
Seuraavalla kerralla kun Lexmark julkaisee päivityksen, voimme vain ladata sen, purkaa, ja kaikki toimii.
Saatat nyt miettiä, mitä tulostimelle tapahtui?
Koska siru oli irrotettu.
Tietysti juotin sen takaisin kiinni.
Ja tämä voi yllättää sinut,
mutta se toimii edelleen.
Nyt kun meillä on firmware-kuva, seuraava asia, mitä tarvitsemme, on debuggauskyvykkyys.
Kävi ilmi, että laitteessa on Secure Boot, joten emme voi vain muokata muistisirua ja lisätä siihen takaovea.
Lisäksi Lexmark ei pidä siitä, että loppukäyttäjät SSH-yhteydellä säätävät laitteen sisuskaluja, joten tarvitsimme exploitin.
Kävi ilmi, että NCC Group oli löytänyt exploitin jo vuotta aiemmin ja lähettänyt sen Pwn2Owniin sekä kirjoittanut siitä blogipostauksen.
Mutta siitä puuttui muutama tärkeä yksityiskohta.
Mutta pystyimme täydentämään puuttuvat kohdat juuri saamallamme firmware-kuvalla.
Tällä tavalla saimme root shellin itsellemme.
Jep, olimme aika tyytyväisiä siihen.
Nyt voimme tutkia firmwarea, debugata prosesseja esimerkiksi ajamalla GDB-palvelimen.
Joo, tämä on aika hyvä juttu.
Totta kai NCC Groupin bugi korjattiin uusimmassa firmware-päivityksessä.
Joten emme käyttäneet uusinta firmwarea, heti kun sen päivittää, bugi häviää ja joudut aloittamaan alusta.
Mutta sillä välin voimme käyttää tätä kyvykkyyttä löytääksemme haavoittuvuuksia, jotka toivottavasti ovat yhä olemassa seuraavassa versiossa.
Nyt kun meillä on debuggauskyky, on aika alkaa etsiä sitä varsinaista haavoittuvuutta, jonka haluamme lähettää Pwn2Owniin.
No niin, aluksi...
Ensimmäinen asia tällaisessa tilanteessa on kartoittaa koko hyökkäyspinta-ala.
Kuten diasta näkee, se on melko laaja.
On olemassa erilaisia protokollia, joita voi käyttää.
On kymmeniä ja kymmeniä skriptejä ja binäärejä, joita voi kutsua suoraan.
Vaikuttava määrä tuettuja tiedostomuotoja.
Eikä tämä edes ole koko lista, muuten.
PDF mahdollistaa myös kaikenlaisten kuvien ja tiedostojen, jopa fonttien upottamisen.
Lopulta valitsimme JBIG2-purkajan, joka on saavutettavissa PDF:n kautta.
Voit siis syöttää sisältöä siihen koodiin PDF:n kautta, tai myös faksin kautta.
Tässä vertailun vuoksi:
Tässä ovat tapaukset, jotka tiedämme viimeisten kolmen vuoden ajalta, muiden tiimien, ja ei pelkästään muiden vaan myös meidän hyökkäämät kohteet.
Kuten näette, ryhmittymiä muodostuu.
Jotkut tutkivat web-komponentteja ja CGI-skriptejä.
Jotkut taas keskittyvät PostScriptiin ja saavat siitä paljon irti.
Me suuntasimme JPX-dekooderiin, eli JPEG 2000:een.
Olemme kuulleet, että he aikovat poistaa koko komponentin tänä vuonna, koska JPEG 2000:lla on murrettu laite jo kolme kertaa peräkkäin.
Hyökkäyspinta-ala on siis käsitelty.
Siirrytäänpä pieneen yhteenvetoon.
Koska olemme murtaneet tämän laitteen nyt kolmena vuotena peräkkäin.
Halusimme antaa pienen yhteenvedon.
Ensimmäisenä vuotena teimme kaiken pohjatyön: purimme firmwaren, teimme purkutyökalun, ja hankimme pysyvyyden tulostimeen, jotta päivitys ei estäisi koodin suorittamista.
Eli saimme pysyvän pääsyn.
Mutta ensimmäisenä vuonna käytimme tulostinbugia osana ketjua, jossa ensin hakkeroitiin reititin, ja sitten tulostin.
Valitettavasti reititinbugimme "murskattiin" päivityksessä. Bugi oli yhä olemassa, mutta päivitys muutti koodia niin paljon, ettei exploit enää toiminut vakaasti.
Ja valitettavasti...
se epäonnistui lavalla, mutta opimme silti paljon tulostimen hakkeroinnista.
Käytimme siihen paljon tunteja, eikä työ mennyt hukkaan.
Seuraavana vuonna palasimme takaisin, ja tiesimme että JPEG 2000 on heikko komponentti. Jos vain ajamme AFL:ää viisi minuuttia, löydämme uuden bugin.
Mahtavaa, meillä on bugi.
Olimme siis valmiita Pwn2Owniin.
Täytin lomaketta kilpailuun, ja muutamaa tuntia ennen lähetyksen deadlinea huomasimme, että uusi päivitys oli julkaistu.
Paniikissa asensin päivityksen ja huomasimme, että se sisälsi täysin uuden kryptauksen.
Vanha purkutyökalu ei toiminut, ja mikä pahinta, emme voineet palauttaa vanhaa versiota.
Joten olimme jumissa.
Esitimme vain lomakkeessa, että meillä on exploit.
Jep, kyllä meillä on exploit...
Se toimi edelleen, mutta offsetit olivat täysin erilaisia muistinkorruption vuoksi.
Meillä oli käytännössä kaksi, kolme päivää aikaa ratkaista ongelma.
Tajusin nopeasti, ettei meillä ole mitään mahdollisuutta murtaa sitä kryptoa kolmessa päivässä.
Joten sen sijaan otin yhteyttä Bl4stieen, koska tiesin, että hänellä oli tämä tulostin viime vuoden Pwn2Ownissa.
Tänä vuonna hän ei aikonut hyökätä siihen.
Ehkä hän voisi auttaa meitä.
Pahimmassa tapauksessa hän sanoisi ei, eikö niin?
Joten otin yhteyttä ja sanoin: exploitimme meni rikki.
Pwn2Owniin on vain muutama tunti aikaa.
Voisitko auttaa meitä?
Bl4stie, kunnon tyyppi kun on, sanoi: totta kai.
Mitä tarvitsette?
Sanoin: minulla on tämä backdoor, jolla saa pysyvyyden, voin antaa sen sinulle.
Jos vain asennat sen tulostimeesi.
Se saattaa rikkoa laitteen, mutta siinä tapauksessa ostamme sinulle uuden.
Mutta se saattaa myös antaa sinulle shellin uusimmalla firmwarella.
Ja jos se toimii, voisitko vain lähettää meille kansion /usr/bin sisällön, koska emme halunneet vielä kertoa, mitä binääriä olimme murtamassa.
Lähetä vain kaikki järjestelmän binäärit, me kyllä selvitetään loput.
Bl4stie oli vähän niin kuin, okei, nyt te kyllä pyydätte aika paljon.
Mitä minä saan tästä?
Vastasin, että no, se pysyvyys on varmasti hyödyllinen sulle ensi vuonna.
Saat meidän ikuisen kiitollisuutemme ja me ostetaan sulle drinkkejä Pwn2Ownissa.
No, vähän huijasimme Bl4stieta, hän sanoi, että kuulostaa hyvältä.
Koska Pwn2Ownissa on ilmainen baari.
Joten emme oikeastaan ostaneet Bl4stielle kovin montaa juomaa.
Mutta jatkaaksemme aikajanaa: Bl4stie pelasti meidät, exploit toimi, saimme siitä 20 000.
Ja seuraavana vuonna Bl4stie ei näköjään kantanut kaunaa, vaan liittyi meidän tiimiin Pwn2Ownissa.
Bl4stie hermostui uudesta kryptosta ja murtautui siihen ihan huvikseen.
Tämän vuoden Pwn2Ownissa julkaisimme kaksi uutta exploittia: toinen niistä on juuri se, jonka lähetämme faksin kautta nyt.
Kuten sanottu, exploit liittyy JBIG:een.
JBIG2 on saavutettavissa sekä faksin että PDF:n kautta.
Se on alun perin tarkoitettu fakseille.
Lexmark teki siihen oman kirjastonsa, mikä tarkoittaa käytännössä sitä, että siinä on todennäköisesti reippaasti bugeja.
Suunnitelma oli siis kirjoittaa exploit, laittaa se PDF:ään, se oli suht helppoa, vei noin viikon tienata rahaa Pwn2Ownista ja portata se faksille.
Koska kuinka vaikeaa se nyt voi olla?
Itse bugin yksityiskohdista en voi vielä puhua, koska valmistajalla on vielä muutama viikko aikaa julkaista korjaus.
Mutta haluan nopeasti puhua JBIG2:n heap shapingista.
JBIG2:lla on maine todella monimutkaisena formaattina ja tavallaan se onkin.
NSO Group käytti sitä yhdessä exploitissaan, jossa jouduttiin rakentamaan jopa oma CPU.
Mutta koska meidän suojaukset eivät ole kovin vahvat, meidän ei tarvinnut tehdä mitään sen kaltaista.
JPEG 2 on oikeastaan aika mukava formaatti heap shapingiin.
Se ei ole yhtä hyvä kuin PostScript, sillä siinä ei ole tulkkia, mutta se mahdollistaa joustavan koon allokaatiot ja tarkan hallinnan objektien elinkaaresta, voit varata ja vapauttaa mielesi mukaan.
Se antaa paljon vapautta.
Ja jos haluat tehdä massiivisen heap sprayn, voit käyttää toista pakkausformaatia pakkausformaatin sisällä.
Kuulostaa loogiselta, eikö?
Voit siis pakata kaiken sprayattavan datasi, lähettää sen JBIG2-pakatussa streamissa, ja se puretaan kohdelaitteessa, näin säästät siirtodatassa.
Me emme itse käyttäneet tätä, mutta se voisi auttaa, jos tarvitset valtavan sprayn.
Me käytimme lähinnä laajennuksia.
Laajennukset ovat valmistajakohtaisia segmenttejä, joita voi käyttää minkä tahansa ei-standardiin tarkoitukseen JBIG2-virrassa.
Lexmark ei käytä mitään ei-standardeja ominaisuuksia.
He toteuttavat vain kommentin, mikä on hyvin yleinen tapa...
laittaa debug-dataa JBIG2-virtaan.
Nämä ovat hyviä, koska ne ovat selkeitä ja hallittuja allokaatioita.
Käytännössä jos sanot, että tässä on kommentti ja tässä on data, tuo data päätyy suoraan heapille, eikä sinun tarvitse tehdä juuri mitään sen eteen.
Se on myös helppo toteuttaa.
Kirjaimellisesti "yksi yhteen" -malli.
Ei tarvitse tehdä rasterointia, outoa matematiikkaa tai pakkausta.
Todella mukava työskennellä.
Tältä näyttävät rakenteet Lexmarkin kirjastossa.
Ne sisältävät tyypin, osoittimen dataan ja koon.
Ja jokainen segmentti, ei vain kommentit, vaan myös vaikka bitmapin piirto sisältää tällaisen otsakkeen.
Tärkeintä meille: ne sisältävät paljon pointtereita.
Jos teet muistinkorruptiota, tämä on todella kätevä tapa tehdä sitä.
Tältä näytti meidän oma kirjastomme rakenteeltaan.
Todellisuudessa exploitin toteutus oli paljon monimutkaisempi.
Mutta siitä lisää myöhemmin.
Nyt esimerkiksi: kirjoitimme pienen funktiokirjaston, jolla luotiin kommentti tietyllä ID:llä.
Parseri näkee sen vain kommenttina, jossa on ID leads ja mukana tuleva data.
Ja tuo data päätyy suoraan muistiin.
Allokaatiosta et hallitse ensimmäistä 16 tavua täysin.
Siinä on ID, koko, tyyppi ja jotain muuta.
Mutta sen jälkeen saat datasi.
Ja tuo data voi olla niin suurta kuin haluat.
Siinä ei ole oikeaa rajoitusta.
Kun kaiken tämän yhdistää, syntyy PDF, joka sisältää exploitin ja näyttää jotakuinkin tältä.
Niille, jotka eivät puhu hollantia: alussa sanoin, että "Tämä toimii varmasti heti ekalla kerralla."
Ja no, se toimi.
Tässä oli meidän tulos Pwn2Ownissa tänä vuonna.
Tulimme kolmanneksi ja tienasimme yhteensä 95K
Ei pelkästään Lexmarkin bugista.
Lexmarkin bugi oli osa sitä.
Olimme siis varsin tyytyväisiä.
Nyt kun kaikki tämä on saatu hoidettua, meidän pitää vielä vähän viritellä faksia varten.
Ensimmäinen vaatimus faksin hyödyntämiselle on tietysti analoginen puhelinlinja.
Nostakaa käsi, jos teillä on sellainen.
Jep, ei meilläkään.
Selvä.
Okei, no siis...
Olen iloinen niiden puolesta, joilla on sellainen, mutta me emme kuulu heihin.
Miten sitten kehität faksin kautta toimivaa exploittia, jos sinulla ei ole analogilinjaa?
No, paniikissa juokset ympäriinsä ja kokeilet kaikkea satunnaista ja päädyt käytettyjen tavaroiden liikkeeseen, missä näet tämän laitteen hyllyssä.
Tämä on ISP-modeemi.
Satuin olemaan heidän asiakas.
Satuin leikkimään tällä laitteella pari vuotta sitten, joten osasin vähän käyttää sitä.
Tässä laitteessa on analogiset puhelinportit takana.
Toki ne ovat hyödyttömät, koska minulla ei ole tilausta analogisiin puhelinpalveluihin.
Miksi siis ostaa tällaista, ellei aio huijata sitä jotenkin käyttämään niitä portteja?
On olemassa todella loistava blogikirjoitus tyypiltä nimeltä Dan Man.
Nosta käsi, jos olet paikalla.
Hän selvitti, missä piirilevyn linjat kulkevat.
Laite käyttää EMMC:tä puhuakseen tallennuspiirien kanssa.
Hän selvitti pinoutin, juotti siihen johtoja ja suunnitteli hienon piirilevyn microSD-kortin muotoon.
Juotti johdot kiinni, kytki kaiken yhteen.
Ja nyt modeemista tulee ulos tällainen härveli.
Sen voi laittaa SD-kortinlukijaan.
Ja sen voi vaan mountata käyttöön.
Aivan mahtava saavutus.
Kaikki kunnia hänelle.
Vuonna 2019 olin vähän mukana tässä projektissa.
Lähetin hänelle työkalun, jolla pystyi purkamaan laitteen varmenteet.
Ei liity mitenkään tähän esitykseen.
Mutta vastalahjaksi hän lähetti minulle noita hienoja SD-kortin muotoisia piirilevyjä.
Minulla on niitä vieläkin.
Eli juotin piuhat kiinni, kytkin kaiken ja mounttasin root-tiedostojärjestelmän yhden iltapäivän aikana.
Tässä laitteessa ei ole secure bootia, joten backdoor vaan sisään — ja root shell modeemilla.
Aika siistiä.
Mutta että saisimme modeemin oikeasti käyttämään analogiporttejaan ilman...
ilman että se on kytketty ISP:lle...
Se vaati paljon suostuttelua.
En todellakaan suosittele tätä kenellekään, varsinkin nyt jälkikäteen ajatellen, olisi voinut vain ostaa SIP-yhdyskäytävän sadalla dollarilla.
Mutta minä tein tämän omalla tavallani.
Lopulta se kuitenkin toimii.
Tässä on meidän kokoonpano.
Ylhäällä on Raspberry Pi, jossa pyörii Asterisk, se hoitaa koko hommaa.
Sitten on modeemi, joka puhuu Asteriskin kanssa ethernetin yli.
Vasemman puoleinen puhelinlinja on läppärimme, jossa on 56k modeemi.
Oikealla on meidän faksi.
Voit vain soittaa numeroon 101, se on numero, jonka valitsin faksia varten ja kuulet valintaäänen ja faksin piippauksen.
Tällä setillä saimme lähetettyä, no, Rick sai lähetettyä elämänsä ensimmäisen faksin.
Näytti suunnilleen tältä.
Olemme erittäin ylpeitä.
Okei.
Tänään oli suuri onnistuminen.
Joten nyt voimme lähettää fakseja.
Katsotaanpa tätä teknologian ihmettä, jonka olemme saaneet haltuumme.
Tässä Wikipedian yleiskatsaus.
Kiinnitä erityistä huomiota siihen, kuinka monta tuhatta bittiä sekunnissa voi lähettää.
Tätä pystymme nyt tekemään.
Kaikki perusasiat on kunnossa: exploit toimii, faksi toimii, mitä muuta voisi haluta?
Voimme vain lähettää exploitin.
Tässä näkyy Pwn2Own-exploittimme se oli 3,5 megatavua, eikä faksin siirtonopeus riitä, kun heap spray on noin iso.
Sen lähettäminen faksin matalilla nopeuksilla veisi noin kaksi tuntia, osittain muiden bugien vuoksi.
En usko, että demolle jäisi tilaa, eikö?
Joten meidän täytyi keksiä jotain muuta.
Päätimme kirjoittaa exploitin kokonaan uusiksi ja oikeasti miettiä heap shapingia, sen sijaan että täytetään kaikki binit.
Saimme sen kutistettua noin 9 000 tavuun...
Lähetys kesti noin 10 sekuntia, mikä vaikutti hyväksyttävältä.
Seuraava ongelma oli, että Lexmark ei toteuttanut JBIG2:ta standardin mukaisesti.
He käyttivät epästandardiominaisuutta, jolla faksivalmistajat voivat ilmoittaa: "Hei, olen tämän mallin faksi ja tuen tätä erikoiskoodausta."
Jos toinen saman valmistajan faksi lähettää faksin, ne voivat käyttää tätä erikoiskoodausta.
Kukaan muu ei tue tätä kuin toinen saman merkin faksi, eikä meitä huvittanut ostaa toista faksia hyökkäyksen lähettämiseen.
Joten kirjoitin oman faksiasiakkaan.
En suosittele tätä kenellekään.
Tai no, valehtelen vähän.
Paikkasin e-faxin, komentorivityökalun Linuxille, joka lähettää fakseja.
Se on kirjoitettu joskus vuonna 1999 — hyvä vuosi muuten.
Tarvitsimme tuen raakadatalla lähettämiseen.
Oletuksena se tukee vain juoksupituuskoodattua dataa, mikä sopii normaaliin faksaukseen, mutta exploit tarvitsee tarkempaa hallintaa.
Meidän piti myös asettaa epästandardi tila, jolla kerrotaan faksille: "Hei, olen myös Lexmark-faksi ja tuen JBIG:iä."
Meidän olisi pitänyt toteuttaa virheenkorjaustilat, koska standardi sanoo niin, muuten tulee ongelmia.
Mutta me valitsimme ongelmat ja se silti toimi.
Tämä tuo mukanaan uuden ongelman, jota kutsun nimellä "high-stakes faxing".
Kun vastaanotat faksin, se tallennetaan levylle.
Eli jos muste loppuu, virta katkeaa, paperi loppuu tai taapero sammuttaa faksin, niin faksi on silti tallessa.
Mutta jos vastaanotetaan viallinen JBIG-virta...
sen ei tarvitse olla exploit tai aiheuttaa segfaulttia, kunhan se on virheellinen...
se kaataa faksipalvelun.
Sitten tulostin huomaa kaatumisen ja käynnistyy uudelleen.
Ennen kuin ehtii poistaa faksia.
Joten kun parseri osui ensimmäistä kertaa faksin kautta...
olin itse etäyhteydellä ja aika tyytyväinen, mutta Carlo ei, koska tulostin meni boottauslooppiin.
Veikkaan, että se näytti suunnilleen tältä:
Avaa faksijono, parsi JBIG, boottaa.
Avaa jono uudelleen ja se syöksyy pimeyteen, jota en toivoisi pahimmalle vihollisellenikaan.
Faksipalvelu kaatuu, käynnistyy uudelleen, kaatuu taas ja niin edelleen... pimeää polkua pitkin.
Mutta saimme toimivan exploitin faksin kautta.
Katsotaanpa, mitä tällä voisi oikeasti tehdä, jos tarkoitus olisi aiheuttaa vahinkoa.
Eli ketkä nykyään oikeasti käyttävät faksia?
Lähinnä alat, joissa tarvitaan laillisesti sitovia tai muuten tärkeitä allekirjoituksia tai asiakirjoja.
Esimerkiksi terveydenhuolto käyttää faksia yhä resepteihin, potilastietoihin jne.
Erään kyselyn mukaan 90 % lääkärin vastaanotoista käyttää yhä faksia jollain tavalla.
Myös kiinteistönvälitys käyttää joskus edelleen faksia.
Vuokrasopimuksiin halutaan joskus oikea allekirjoitus, ei kryptografista, vaan sellaista joka menee faksilla.
Myös julkinen hallinto ja lakiala saattavat käyttää sitä lähinnä samoista syistä.
Puhelinlinjoilla on toisinaan erityistä oikeudellista suojaa.
Ja siksi fakseja edelleen käytetään.
Lopuksi myös pankkisektori käyttää faksia satunnaisesti.
Tosin kuulin, että Deutsche Bank aikoo luopua fakseista ensi vuonna.
Eli meillä on vielä pari kuukautta aikaa ajaa tämä exploit.
Hyökkääjän näkökulmasta etuja on aika paljon.
Hyökkäyspinta on edelleen iso — kyse on kuitenkin asiakirjaparsinnasta.
Mutta ei tarvitse miettiä palomuureja tai NATeja, koska...
kuka nyt suojaisi faksikoneensa palomuurilla?
Kohteet valikoituvat itsestään, koska jos joku haluaa vastaanottaa asiakirjoja faksilla, ne ovat luultavasti tärkeitä asiakirjoja.
Jos siis salakuuntelet faksilaitteen kautta dokumentteja, saat käytännössä parhaat palat.
Lisäksi tätä voi rahastaa toisellakin tavalla jos saat haltuun faksin, sillä on puhelinnumero, jolla voi soittaa maksullisiin numeroihin.
Eli jos...
Ajattele tätä matalan teknologian kryptolouhijana.
Hakkeroit kasan fakseja ja soitat maksullisiin numeroihin.
Toki haittojakin on.
Ensinnäkin, joudut kehittämään exploitin faksia varten, en suosittele sitä kenellekään.
Kenttä on sirpaleisempi ja voi olla vaikeaa tunnistaa, millainen faksi on kyseessä.
Meidänkin exploitin kohdalla voimme päätellä, että kyseessä on Lexmarkin faksi, koska neuvottelemme epästandardista laajennuksesta.
Mutta emme silti tiedä, mikä ohjelmistoversio on kyseessä. Ihmiset, jotka käyttävät faksia, eivät todennäköisesti päivitä niitä.
Ja jos käytämme väärää offsetia tässä exploitissa ja se kaatuu, faksi menee käynnistyslooppiin.
Yksi etu jäi mainitsematta: jos hakkeroit faksin, ja se on verkossa, kuten todennäköisesti on, jos sitä käytetään myös tulostimena...
...voit käyttää sitä ponnahduslautana sisäverkkoon.
Selvä, nyt on demon aika.
Oletko valmis?
Aloitetaan shellillä läppärissä ja sitten vaihdan tämän kameran näkymään.
Olen kuunnellut tätä ääntä satoja kertoja.
Ajattelin, että sinäkin voit kuulla sen kerran.
Haluatko painaa nappia?
Joo, toki.
Muutaman sekunnin kuluttua se alkaa käsitellä tehtävää.
Ne ovat eri säikeitä.
Se on jo vahvistanut, että se vastaanotti faksin.
Se käynnistyy pian, ehkä kuulette sen.
Pitäisi tapahtua hetkenä minä hyvänsä.
Todella luotettavaa teknologiaa.
Noniin, nyt se toimii.
Mutta emme ole vielä valmiita.
Kuten ehkä huomasitte, tässä on puhelin.
Mitä tapahtuisi, jos soittaisimme faksiin?
Valitaan 101.
Tietenkin täytyy olla tapa toistaa tämä.
Entä jos kokeillaan valintasävyjä?
Hyvä, suljen linjan nyt.
Tämän myötä haluan kiittää teitä osallistumisesta.
Paljon kiitoksia.
Mahtava esitys ja hieno toteutus.
Meillä on pari minuuttia aikaa, aivan todella nopeita kysymyksiä, yksi tai kaksi.
Jos sinulla on kysyttävää, tule mikrofonin luo.
Jos haluat poistua salista, tee se nopeasti.
Meillä on tiukka aikataulu, tiedättehän, aikataulusuunnitelma.
Jep, siinä kaikki.
Kysymyksiä?
Sillä välin vielä yksi asia.
Meillä on tämä faksilaitteisto esillä järjestäjien assembly-alueella CTF-hallissa ehkä tunnin kuluttua.
Jos haluat tulla pelaamaan Doomia, olet erittäin tervetullut.
Saanen esittää ehkä tyhmän kysymyksen.
Eilen näimme, että sähköinen potilastiedosto on aika sekaisin...
Ja tiedämme, että tämänkaltainen tiedonsiirto ei toimi.
Joten tiedämme myös, ettei FAX toimi.
FAX on myös täysin kelvoton terveysdatan siirtämiseen.
Mitä suosittelisit Saksan terveysministerille?
No, se on aina hankalaa. Faxilla on mielestäni tällainen erityinen laillinen asema, jota se ei todellakaan ansaitse.
Pitäisi siirtyä nykyaikaisempiin standardeihin, jotka on mahdollista suojata kunnolla.
En tunne tarkemmin mainitsemaasi sähköistä terveydenhuoltojärjestelmää, mutta faksin kanssa olen leikkinyt viime kuukausina, eikä tämä ole oikea tie.
Ei ole, kiitos.
Meillä olisi yksi kysymys sinulle.
Ole hyvä.
Hei.
Kiitos.
Kuulin huhuja, että olit vielä painimassa printterin kanssa eilen yön pikkutunneilla.
Joten kysyisin: kuinka monta tuntia nukuit viime yönä, Garda?
Yllättävän monta.
Oh!
Luulen että hävisin vedon, mutta kiitos.
Kysymys numero yksi.
Hei vaan.
Kiitos erittäin mielenkiintoisesta esityksestä.
Olet sanonut aikaisemmin, että
tarvitset analogisen linjan...
Tarkoittaako se sitä, että...
Voice over IP -faksi ei olisi altis tällaiselle hyökkäykselle?
Ei, se olisi silti altis.
Kaikki tavat, joilla voit osua tähän parseriin, ovat alttiita.
Me teimme sen PDF:n kautta.
VoIP toimii yhtä lailla.
Me vain halusimme tehdä sen analogisesti, koska se vaikutti siistiltä.
Selvä, kiitos.
Kiitos.
Kysymyksiä netistä?
Hyvä, sitten on aika päättää tämä sessio.
Tämä oli ilo.
Hyvää päivänjatkoa.
Nauttikaa kongressista.
Ja kiitos.
Näkemiin ja hyvästi.
♪ (38C3 outromusiikki) ♪
Translated by Robert Ylitalo (KYBS2001 course assignment at JYU.FI)