Translated by Esa Lammi (ITKST56 course assignment at JYU.FI) 36c3 intromusiikki Herald: Siemens päätti äskettäin lisätä turvallisuusominaisuuksia PLC:hen. Ja tänään meillä on Tobias ja Ali ja he kertovat meille mitä he ovat onnistuneet löytämään. Tämä PLC. He molemmat tulevat Ruhr yliopistosta Bachumista. Tobias on hiljattain saatu tohtoriopiskelijaksi. Ja Ali on tutkijatohtori. Joten, annetaanpa heille aplodit. aplodeja Ali: Hmm, missä meidän kalvot ovat ? Tobias: Esitystila ? ALi: Kyllä, OK. Tervetuloa esitykseemme. Syväsukellus koodin suorittamiseen Siemens S7 PLCssa. Nimeni on Ali Abbasi ja kuten mainittu olen tutkijatohtorina järjestelmäturvallisuuden osastolla Ruhr yliopistossa Boch:sa ja tässä on kollegani Tobias: Olen Tobias, tai Toby. Hauska olla täällä. Tämä on viides kertani tässä tapahtumassa ja nyt voin viimein antaa takaisin tavallaan ja olen innoissani. Joten asiaan. Ensin hieman esityksesen kulusta. Haluamme antaa teille hieman taustatietoa mitä PLCt, eli ohjel- moitavat logiikka ohjaimet ovat, miksi haluaisimme sellaisia käyttää ja minkälaisessa ympäristössä. Ja sitten sitten haluamme mennä yksityiskohtiin Siemens PLCn tapauksessa. Ensin katsomme vähän laitteistoa ja sen jälkeen ohjel- mistoja ja erilaisia löydöksiä joita teimme. Lopuksi, haluamme demonstroida mitä pystyimme saavuttamaan ja päätämme esityksen parilla kommentilla. Joten ensin, prosessiautomaatio. Me kaikki tiedämme sen. Tai teemme sitä itse tai tunnemme jonkun joka tekee sitä. Laitamme joitain laitteita älykotiimme, jos kutsumme sitä älykkääksi. Ja koitamme automatisoida eri kohteita eri asioissa tehdäksemme elä- mästämme helpompaa. Asioita kuten lämpötilan säätö ylös-alas. Emme halua tehdä tätä itse. Emme halua että on liian kuuma tai kylmä. Ja mitä teemme on, että meillä on jokin sensorijärjestelmä talossamme, kuten myös laitteita jotka vuorovaikuttavat sensorien kanssa. tässä tapauksessa meillä voisi olla termostaatti ja lämmitin ja haluamme säätää lämpötilaa termostaatin perusteella. Nämä ovat aika yksinkertaisia ratkaisuja älytaloon Mutta mitä teemme jos meillä on hyvin monimutkainen hallintasilmukka esim. Tässä näemme vasemmalla alhaalla melko monimutkaisen kuvan, muutama operointi- henkilö istumassa, mitä kutsumme HMI:n human machine interface edessä, joka on periaatteessa tiivistetty informaatio kaikesta mitä on meneillään tehtaassa, esimerkiksi. Me tarvitsemme eri sensoreita tässä tehtaassa ja meidän täytyy ohjata eri moottoreita ja sellaisia asioita. Joten tarvitsemme keskellä olevia asioita tavallaan ohjaamaan tätä kaikkea. Ja teemme tämän käyttämällä PLC:ita ja tässä näemme miltä se voisi näyttää. Joten Peri- aatteessa on syötteitä kuten puhuimme ja ulostuloja. Ja meillä on joku logiikka keskellä. Ja mitä tyypillisesti asennamme on PLC ohjelmoitava logiikka kontrolleri ja jotain logiikkaa keskellä. On erilaisia teknologioita, joita voidaan käyttää, esimerkiksi, rakenne, teksti tai tikapuulogiikka joka ladataan PLChen ja joka sitten ohjaa ulostuloja pohjautuen Sisään tuleviin syötteisiin. Voit nähdä joitain tämänkaltaisia sovellutuksia. Esimerkiksi, kemiallisessa voimalaitoksessa, kemian tehtaassa, sähköverkossa tai jossain tuotannossa. Osa noista komponen- teista ovat aika kriittisiä toiminnalle. Vaikka näkisimme ne jokapäiväisessä elämässämme ja joskus emme tosiaan näe niitä. Mutta ne ovat siellä ohjaamassa, kaikkea taustalla ja me emme todellakaan halua noiden järjestelmien hajoavan. Esimerkiksi jos menet googleen ja etsit jotain onnettomuuksista ja kemian tehtaista, voit nähdä sulaneita tehtaita vain koska joku mis... häiriö tapahtui järjestelmässä Ja emme todella halua tämän tapahtuvan. Emme vahingossa, emmekä myöskään pahantahtoisesti. Ja tästä syystä haluamme turvata kaikki prosessit jotka toimivat tehtaissa ja sellaisissa. Olemme nähneet viimeaikaisia hyökkäyksiä. Se alkoi tavallaan 1999 ensimmäisellä tiedustelu pohjaisella pääosin. Ja sen sitten olemme saaneet joitain edistyneempiä hyökkäyksiä 2010, esimerkiksi kun näimme Stuxnetin joka oli todella mutkikas operaatio. Jos ajattelet sitä tekniseltä tasolta mitä kaikkea siihen meni. Mitä eri osaamis alueita oli mukana. Se on melko vaikuttavaa. Ja sitten vielä myöhemmin meillä on ollut ongelmia Ukrainan sähköverkossa, jossa 2015 ja 2016 juuri ennen joulua joitain valoja meni pois päältä melko toviksi joissain kaupungeissa. Joten melkoinen vaikutus. Joten antaaksemme hieman vaikutusta, taustaa Siemens PLC:sta mitä tulee markkinaosuuksiin. Näemme, että yhdessä Rockwood automationin kanssa, Siemensilla on yli 50% markkinaosuus. Ja tietenkin, jos otamme joitain laitteita joissa on jotain turvallisuutta, olisi kiinostavaa katsoa niitä joilla on suurin markkinaosuus. Näin toimimme tässä Siemensin tapauksessa. Tässä näemme juuri sen PLCn johon keskitymme tässä esityksessä, se on Siemens S7-1200 PLC. Se on yksi pienemmistä PLCsta, ei silti pienin, siinä on logo myös, joka on silti enemmän opettelua varten esimerkki, mutta tämä on se joka on silti tutkijoiden saatavilla oleva, kustannusten kannalta. Se on jotain 250e PLCsta. Sitten jos tarvitset virtalähteen, se maksaa saman. Kunhan et riko montaa sellaista, spoileri, rikoimme aika monta, tai et pudota niitä tai sellaista, niin pärjäät hyvin, sinä voit saada resurssit leikkiäksesi niillä laitteilla Meillä on eri sovelluksia ja olemme puhuneet niistä aiemmin Joten tässä on miltä paketin avaaminen Siemens 7 1200 PLC tapauksessa näyttää Meillä on ylänäkymä vasemmassa kuvassa. Se on yksi piirilevyistä (PCB) Jotka on kerrostettu toistensa päälle tässä tapauksessa. Mutta taika oikeasti on ylimmässä PCBssa, joka on vihreä, jonka näemme tässä. Katsoessamme sitä tarkemmin Meillä on yläkuva vasemmalla, joka näyttää eri komponentteja joista PLC rakentuu. Otetaan esimerkiksi, ARM prosessori (CPU) joka meillä on tai eri väylät sisään-ulos joita voimme kytkeä PLChen, kuten puhuimme aiemmin, joita tarvitaan jotta voidaan ohjata eri osia järjestelmässä. Ja sitten meillä on flash siru yläosassa myös, joka on suuri flash siru sisältäen PLCn laiteohjelmiston, josta puhumme hieman tarkemmin myöhemmin Kääntöpuolella, meillä on oikeassa kuvassa alapuoli ensimmäisestä PCBsta. Ja kuten näemme tässä, tämä on se missä bootloader siru sijaitsee, joka on SPI flash siru, 4 megatavua pitäen sisällään Siemens PLC bootloaderin ohjelmakoodin. Tässä halusimme yksityiskohtaisen kuvan siitä miltä varsinainen prosessoriyksikkö oikeasti levyllä näyttää ja mitä voit tehdä jos haluat tietää on voit tehdä hieman kuorintaa. Ja sitä näemme tässä. Tulos on tässä, näemme että sen ytimessä on renesanssi ARM Cortex-R4 vuodelta 2010. Ja jos myöhemmin työskentelet enemmän ohjelmiston parissa voit haluta selvittää myös oikean revisio numeron mitä se tukee ARM standardissa. Ja mitä voit tehdä, on käyttää erityistä käskyä joka sisältyy ARM käskykantaan ja joilla voit dekoodata eri bittejä siinä, jonka teimme tässä, jonka näet tässä referenssinä. Joten jos todella haluat tietää mitä on meneillään, voit tutkia ne bitit ja varmistaa, että työskentelet sen laitteen parissa mitä oletitkin. Nyt olemme tulleet muistiosuuteen laitteistossa ja tässä vaiheessa jätän teidät Alille. Ali: Kiitos. Nyt kun Tobias on avannut PLCn meille, minä aion puhua oikuista ja ominaisuuksista PLC:ssa. Kuten mainittu, se on Cortex-R4 revisio 3. Se on big endian käskykanta ja siinä on ainoastaan MPU. Joten siinä ei ole visuaalista muistia periaatteessa. Siinä on useita RAM muisti kokoja, riippuen minä vuonna ostit sen ja minkä version S7 1200 ostit ja myös useita SPI flash ja useita eri tyyppisiä NAND flasheja. Merkittävin yksi ero on kuten RAM. jossa he käyttävät välillä Wingbond ja joskus he käyttävät Micron Technologies, hiljattain Micron Technologies RAM. Se on LPDDR1 RAM. Oletamme SPI flash bootloaderiksi. Joten jälleen, riippuen vaihtelusta välillä yhdestä neljään megatavua SPI flashia, se sisältää eri pankkeja, jokainen kooltaan 512 ktavua. Ja periaatteessa mitä bootloader tekee, on tyypillisten bootloader toimien, joita ovat laitteiston konfigurointi, varmistaa firmwaren eheys ennen kuin se ladataan. Me teimme hieman röntgen kerroskuvausta PLClle Se on periaatteessa 3D. Joten PCB pyörii tässä koska halusimme tehdä myös laitteiston takaisinmallinnusta. Ja jollain yliopistolla oli jotain, joten meidän ei tarvinnut mennä hammaslääkärille röntgeniin. Joten tässä on nopea 15 min röntgen, joka ei ole kovin hyvä. Mutta kun menet syvemmälle, lopulta sinulla on tämä ja voit oikeasti aivan kuin se olisi ohjelmisto animaatio Voit mennä PCBn sisälle ja nähdä kaikki kerrokset. Se on uskomatonta. Se on PCB kerros. Ja muuten, VCC ja GND, tarvitset kaksi kerrosta PCB yhteyksiä periaatteessa. Katsotaanpa käynnistys prosessia jälleen, käynnistetään tavallisesti Jotain laitteistoasetuksia tapahtuu. Kuten trap ohjaimen vektorointi, esimerkiksi, paljon ajureita eri ARM tiloille ja sitten CRC tarkastus itse bootloaderille joka on helposti ohitettavissa, koska voit ylikirjoittaa CRCn. Tämän jälkeen boot loader, erityisesti 2017, 2018 versioissa Siemen PLCssa, sallii sinun ylikirjoittaa SPI flashin. Ja lopuksi tarkastamme CRC tarkastussumman laiteohjalmasta ennen kuin se ladataan bootloaderin itsensä koko on 128 kbyte, todellisuudessa jopa vähemmän koska puolet siitä on vain 0xff. Siemens useita kertoja on vaihtanut, heillä on useita versioita. Luulen, että kahdessa vuodessa näimme 3 tai 4 muunnosta bootloaderista Se siis kehittyi. Se ei ollut jotain jonka olemassaolon kaikki ovat unohtaneet. Kuten yleisesti mainittu, sinulla on tässä ensimmäinen vaihe laitteiston alustamisessa ja sitten luetaan bootloader RAM muistiin ja tarkastetaan bootloaderin CRC tarkastus- summa, jotta sitä ei ole muuteltu ja tämä voidaan jälleen ohittaa. Ja sitten toinen vaihe laitteiston alustamisessa tapahtuu, Ja sillä hetkellä se odottaa tiettyä komentoa puolen sekunnin ajan ja jos se saa tämän komennon se menee toiseen moodiin josta puhumme myöhemmin Muuten se periaatteessa valmistelee CRC tarkastussumma taulukon laiteohjelmistolle ja yrittää ladata laiteohjelmiston ja lopulta yksinkertaisesti poistaa muisti eston vaiheen 1 käskyn teille jotka tunnette ARMin Ja periaatteessa siirtää laiteohjelmiston muistiin Käyttöjärjestelmän nimeä ei ollut mainittu aiemmin, se on ADONIS. Tunnemme sen erilaisilla, erilaisilla tavoilla itseasiassa. Joten ensimmäisenä referenssinä laiteohjelmistossa, näemme paljon viittauksia ADONISen, mutta se ei riittänyt meille. Joten katselimme ympärille nähdäksemme onko siihen mitään lähteitä, ja no, Linkedin on hyvä avoin lähde tiedolle. Ja oli yksi työn- tekijä joka oikeasti puhui Siemens kehittäjästä, joka puhui ADONISen toiminnnasta. En tiedä miksi hän laittoi Windowsin ja Linuxin ADONISen viereen mutta pidin siitä hänen työstään. Ja se ei ollut meille tarpeeksi. Joten ehkä joku meistä jota emme tunne. Ja katsoimme taas kauemmas ja kauemmas ja löysimme tämän, joka oli paras indikaattorimme Eli Siemens kehitysinsinööri mainitsi että hän oli työskennellyt kernel ohjelmiston kehittämiseksi ADONIS reaaliaika käyttö- järjestelmään, joka oli meille hyvä merkki Se tarkoitti, että olimme oikeassa. Nyt kun tunsimme nimen ja olimme siitä varmoja. Katsotaanpa komponentteja. Se on periaatteessa käynnistyminen 0x00040040 ja sitten alustetaan kernel ja tämän jälkeen useita rutiineja eri komponenttien alustamiseksi käyttö- järjestelmässä. En usko, että Siemens jakaa sitä tällä tavalla. Meillä ei ollut sellaista käyttöjärjestelmässä, mutta teimme sen sillä tavalla. Eli levitimme sen kahteen ryhmään. Joissain on core palvelut kuten ADONIS reaaliaika käyttöjärjestelmän palvelut ja jotkut niistä liittyvät automaatio-osaan. Joten niille ihmisille jotka ovat mukana automaatiossa, kuten kirjoittavat tikapuu logiikkaa ja sen sellaista, ne komennot ja toimintokoodit jotka ovat relevantteja Siemensille, he tuntevat nämä enemmän automaatioon liittyvät palvelut. Joten on PROFINET, AWP tai automated web programming MC7 JIT parseri tikapuu logiikkaa varten tai erilaista SD eli periaatteessa heidän oma JIT kääntäjä PLCn sisällä- Ja sinulla on myös OMS tämä konfiguraatiojärjestelmä, joka on automaatioon liittyvä ydinosa automaatiojärjestelmästä ja toki hälytys keskus kaikkea sellaista juttua joka liittyy automaatioon. Käyttö- järjestelmän puolella paljon kaikkea tavallista. Tiedostojärjestelmä, PDCFS, josta Tobias puhuu myöhemmin TCP/IP pino, joitain C / C++ kirjastoja, jotka eivät ole Siemensiltä, ne ovat Dinkumware ja Miniweb server ja MWSL parseri tai Miniweb Scripting Language parseri Ja paljon erilaisia alikomponentteja, mikä on tavallista käyttöjärjestelmässä kuin käyttöjärjestelmässä. Lisäksi siellä on joitain viittauksia CoreSight:iin. En tiedä moniko teistä tuntee CoreSight:in tai paljonko teette ARMin kanssa, mutta perus Coresight on jotain vastaavaa kuin Intelin prosess tracing tai Intelin PT seuraamaan sovelluksia ja jota voi käyttää saamaan code-coverage, esimerkiksi. Ja laitteiston osa on hyvin dokumentoitu Thomas Weberin toimesta tänä vuonna, ei vielä. mutta tänä vuonna. Black Hat aasiassa mutta minun pitää varoittaa teitä koska sain joitain sähköposteja, jotkut kyselivät siitä. Jos kytkeydyt siihen, PLC:ssa on joku vianselvitys ominaisuus, joka tun- nistaa kun sitä tutkitaan JTAG kautta ja se ylikirjoittaa NAND-flashin random jutulla. Joten tuhoat PLCn, eli kytkeydy siihen omalla riskillä. Seuraavaksi katsotaanpa CoreSIghtia nopeasti. CoreSight:ssa on periaatteessa... ennen kuin menen siihen, minun pitää mainita mainita, että Ralf Philipp:lla on myös hyvä esitys 0 night:ssa CoreSight jäljestämisestä. Joten suosittelen, että katsotte myös sen. Yleisesti, CoreSight:ssa on kolme pääosaa tai komponenttia: Lähteet, linkit ja sinkit ja sinkit ovat ne osat, joista saat trace informaation ja lähteet ovat se jolla kerrot prosessorille minkälaisista lähteistä haluat dataa ja linkit muuttavat nämä lähteet. Täytyy mainita että usein se on hyödyllistö fuzzatessa myös. Luulen, että jotkut harvat, mutta jotkut, työskentelevät asian parissa. Kattavuuden ohjaama fuzzing CoreSight kautta, ARM Coresightin. Joten on mahdollista, että vastaava implementointi tapahtuu kuin Intel PT, esimerkiksi KAFL, WinAFL tai Hingfuzz. Eli lähteet, niillä on kolme eri komponenttia. STM, PTM, ETM. ETM versio 4 on sen uusin versio Ja periaatteessa sinulla on myös linkit jotka yhdistävät eri lähteet eri, kuin eri tai yhden lähteen tai tiettyyn sink:iin Ja sitten on suppiloita CoreSightlle, anteeksi sinks, anteeksi. Sinulla on sinkeja jotka ovat eri asia. Eli on olemassa eheys prosessorille, joka on 4 kilotavua puskuri SRAM tai sinulla on järjestelmä- muisti tai jopa TPIU tai esimerkiksi JTAG DP portti High Speed JTAG portti. Nyt kun sink on käyty läpi, kuten CoreSight teimme kyselyjä S7:lle CoreSight esiinty- misestä ja kuten voit havaita ohjelmisto on jo implementoitu. Eli ohjelmistossa on viittauksia että he käyttävät tai konfiguroivat CoreSight:ia PLCssa Ja voimme nähdä, että ETM versio ei ole uusin, se on ETM versio 3. Nyt kun olen puhunut CoreSight:sta, Tobi voi puhua laiteohjelmisto dumpista. Tobi: Joten siirrytään johonkin joka on minulle paljon tutumpaa ja joka tuntuu minusta helpommalle, se on laiteohjelmisto dumpit, tai ohjelmistot yleisesti, mutta firmware dumpit, se on mistä eniten haluan puhua PLCssa tai mitä koitan ymmärtää PLCssa. Siemensin tapauksessa meillä on 13 megatavun binääri. Ja vaikka alussa se ei tunnu paljolta, mutta kun vähän pyörittelet ja hyödynnät IDA Python funktioita ja sellaista sinulla on suunnilleen 84000 funktiota joka ei ole jotain, mitä haluaisit tehdä käsin. Lisäksi 84000 funktion laiteohjelmisto image ei voita seksikkäimmän laiteohjelmiston palkintoa, eihän? Arvaan näin. Mutta tämä on se mitä näin ja mitä katsomme tarkemmin muutaman minuutin päästä. Kuten näette, meillä on eri nimiä tuolla ylhäällä. Meillä on jotain, jota kutsutaan _joku_hae_jotain_suuri_koko. Tämä on tapani sanoa, ettei minulla ole aavis- tustakaan mitä tässä funktiossa tapahtuu, mutta voimme myös nähdä joitain merki- tyksellisiä funktioita. Joten ymmärsimme joitain osia paremmin. Joitain osia huonommin, mutta katsoin joka puolelle Mennäänpä nyt paljon osoitteistoja käsittelevään osaan. Odotimme paljon yksityiskohtia, jotka olisivat kiinostavia jos alat katsomaan firmwarea ja voisin selittää miksi ne voisivat kiinnostaa. Ensinnäkin täytyy tietää, että coretex antaa bank registerin Se on toiminnallisuus joka on implementoitu pienentämään kokoa ja sallimaan saumattomat moodit sisäiselle prosessorille. Ja saamme bank pinon jokaiselle suoritus tilalle. Joten jos haluemme tietää mitä on meneillään firmwaren tilassa jollain hetkellä, haluamme ehkä katsoa eri pinoja eri tiloissa eri aikoina. Ja tämä on osoitteisto, jolta odotamme tätä Ja sitä voi käyttää lähtökohtana, mikäli alat takaisinmallintaa asioita Nyt meillä on joitain osoitteita, joitain tauluja joissa on osoitteita Ensimmäinen on RAM kartoitus, joka näyttää mitä toiminnallisuutta tai mitä voit odottaa kun katsot laite- ohjelmiston koodia, joka on yhteydessä eri osiin muistia. Jos ensin menet katsomaan ARM koodia voit nähdä vain satunnaisia yhteyksiä eri paikkoihin muistissa ja voit haluta ottaa selvää mitä se oikeasti tekee. Ja se näyttää tylsältä, se on vain osoite ja sitä kysellään, etkä tiedä mitä tapahtuu Esimerkiksi, jos katsoit osoitetta teksti osassa, odotit että siinä on koodia, jos halusit nähdä jotain globaalia staattista dataa, halusit etsiä dataa BSS osiosta. Ja lopulta, mikäli halusit katsoa heap muistia tai kuinka kanavat on asetettu siinä, etsisit sitä uninitialize osasta ja se kulkee näin eri osissa. Toinen erittäin kiinostava asia katsoa, jos yrität takaisin mallintaa firmwarea on että haluat tavallaan tietää mikä on se laitteisto josta koodi on peräisin, jota se käsittelee Ja tässä tapauksessa dumppasimme joitain alueita ja takaisinmallinsimme mitä varten ne alueet ovat, jota kutsutaan muistikartoitetuksi I/Oksi. ARM keskustelee laitteiston kanssa periaatteessa jonoamalla maagista arvoa osoiteavaruudessa ja sitten se saa jotain takaisin, mikä ei ole yhtään samaa, mitä sinne oli aiemmin kirjoitettu. Eli se on osoite joka siirretään sinne reunan yli. Laitteiston reunan, samassa järjestelmässä sirulla. Ja tässä näemme, että meillä on erilaisia järjestelmään liittyviä laitteita kiinni siinä. Esimerkiksi voimme puhua Siemens PLClle eri sarjaprotokollia käyttäen ja ne protokollat voivat olla SPI tai I²C. Ja vasemmalla puolella on, aika keskellä ylhäällä mikä otti siihen osaa, jotain siihen alueeseen liittyvää. Ja sitten näit jonkun toisen koodin puhuvan ajastimille, esimerkiksi, tietäisit että olet silloin ajastinmaassa sillä hetkellä tai schedulerissa tai jossain sellaisessa Viimein meillä on MPU konfuguraatioita, jotka ovat Memory Protection Unit konfiguraatioita, kuten Ali kertoi aiemmin. Mitä näemme on, että Siemens oikeasti käyttää joitain näistä konfiguraatioista suojatakseen osia muistista. Näemme, esimerkiksi, että missä, koska tahansa on XN, älä suorita bitti on, asetettu koodia ei suoriteta siinä osoiteavaruudessa tai se on vain luku alue. Emme todellakaan halua kirjoittaa sitä yli. On kiinnostavaa, että he alkoivat käyttämään tätä tapaa. Tässä näemme mitä oikeasti tapahtuu kun laitekoodi itse boottaa käyntiin Paljastui, ettei firmware halua olla liian riippuvainen siitä mitä bootloader teki Todennäköisesti eri teamit tekevät eri asioita. Ja pitääkseen yhteydet niin pieninä kuin mahdollista, he tavallaan tekevät uudelleen asoita, joita bootloader koodi tekee myös. Se asettaa vektori taulun keskeytysten käsittelyyn ja se kaltaisia asioita. Kun sitten ohitamme tämän alustavan vaiheen, me haluamme bootata ADINIS kernelin, josta Ali puhui aiemmin. Ensinnäkin, siellä on array function pointereita, joita kutsutaan aina jokaista toimintoa varten, joita näimme tässä yhteenvedossa ADONIS:en eri komponenteista. Joten jos halusit katsoa minkälaisia komponentteja siinä on tai minkälaisia toiminnallisia osia siellä on. Tämä on todella kiinnostava lista funktioista, funktion käsittelijöistä tutkittavaksi ja se myös asettaa joitain hallintarakenteita ja asioita kuten tämä jollaisen tyyppillisen käyttöjärjestelmän pitäisi asettaa. Joten katsotaan tarkemmin eri komponentteja ADONISsa. Ensin tiedosto- järjestelmä. PLC täyttää määritelmät Joskus se on kuinka hyvin se kestää eri lämpötiloja, kuinka matalassa lämpötilassa voin käyttää tätä PLCta, ilman että se menettää toiminnallisuuksia Ja tässä tapauksessa, he haluavat myös turvallisuutta häiriöiden varalta virtalähteessä. Joten he kehittivät oman tiedostojärjestelmän, jota kutsutaan "Powered Down Consistency File System", jonka he implentoivat firmwareen ja näemme yhden työkokemus rivin yhdellä entisellä Siemensin työntekijällä joka kertoi työskennelleensä tämän tiedostojärjestelmän parissa toinen erittäin kriittinen osa toimintoja on tietenkin, että haluamme keskustella PLClle ja se haluaa keskustella meille. Yksi näistä tavoista on TCP/IP Ja tämä paljastaa Web palvelun esimerkiksi, sekä muita komponentteja Tässä tapauksessa huomaamme, että Siemens ei rakentanut itse omaa, mikä on todennäköisesti hyvä ajatus. He käyttävät InterNiche TCP/IP pinoa, jonka versio on 3.1 Jos olet hyvä googlettamaan voit löytää jotain lähdekoodia ja voit kartoittaa tämän firmwaren ja kuinka se toimii. Joten se voisi antaa sinulle wrapper funktioita, kuten luoda socketeja ja sellaista ja voisit löytää ne helpommin firmware imagesta Yksi erittäin kriittinen ohjalmakomponentti firmwaressa on päivitys. Se sallii päivittämisen ja Siemens PLC sallii päivitykset, siinä on eri moodeja. Yhdessä moodissa sinä vain raahaat ja pudotat UPD tiedoston, päivitystiedoston web palvelimelle ja se alkaa tarkastamaan firmwarea, eheyttä ja allekirjoitusta ja niin edelleen. Toinen tapa on tehdä se SD kortin kautta, joka on mahtavuutta 24 megatavua edulliseen hintaan 250 euroa. Voit hankkia sen. En usko, että päihität sitä suhdetta. Mikäli purat sellaisen UPD tiedoston saat toisen esityksen siitä muistissa. Ja teimme sille vähän takaisinmallinnusta ja saimme erilaisia kenttiä, en ole varma näettekö niitä mutta se oli eri offset:ja itse binääritiedostoon Se on lähtöpiste firmwaren maagiseen headeriin jolla varmistetaan ettei asiat ole liian sekaisin ja CRC kokonaisuudelle esimerkiksi. Otimme talteen joitain osoitteita firmwaressa, jotka auttavat löytämään jalansijan siihen logiikkaan jota käsitellään ja se antaa sinulle osoitteita, joihin voit verrata niitä jatkossa Seuraava komponentti jota tutkimme on Miniweb, joka on web palvelin. Se tavallaan paljastaa sinulle erilaisia sisäisiä osia PLCssa ja missä tilassa missä tilassa eri GPIOt, General Purpose Input Output ovat. Inputit ja Outputit, sekä mikä on PLCn itsensä tila ja miten se paljastaa sen käyttäen MWSL kieltä. Miniweb Scripting Language. Se on kuten näemme seuraavassa, seuraavassa, kalvossa ja puhumme siitä hetken päästä tarkemmin. Olemme käynnistäneet, palvelun kuten myös yhden palvelukäsittelijän ADONIS alustus funktioista, joihin viittasin vähän aiemmin Katsotaan vähän dokumentoimattomia http käsittelijöitä, joiden uskon olevan kiinnostavia. Omat suosikkini ovat "lililili" ja "lolololo" naurua ... ja jos yhdistät ne nokkelasti, ehkä joku on musiikkillisesti lahjakas ja voi tehdä niistä laulun. Olisin kiinnostunut kuulemaan sen Siirrytään MWLS, Miniweb Scripting Language:en. Se tavallaan paljastaa sisäiset toiminnot sallimalla sinun injektoida html sivulle konfiguraatio templaten avulla eri parametreja ja sellaista. Esimerkiksi, kuten näemme tässä ylhäällä oikeassa kulmassa, näet prosessorin kuorman järjestelmässä tietyllä hetkellä. Se ei vaikuta suorittavan mitään ulostulon koodausta, eli se tavallaan luottaa siihen mitä tulee ulos. Joten voi olla fiksuja tapoja tehdä web temppuja tämän kanssa ja myös tämän tokenisoinnin parsiminen on tavallaan mutkikasta. Tutustuin siihen vähän ja sen implementointia voisi olla kiinnostavaa tutkia, mutta pääsemme sen kaltaisiin asioihin vähän myöhemmin Tämän kanssa pääsemme meidän varsinaisiin löydöksiin ja puhumme niistä vähän lisää. Ja tässä kohtaa Ali jatkaa. Ali: Kiitos Tobi. Nyt puhumme kyvyistä, jotka ovat bootloaderissa, jotka sallivat meille rajoittamattoman koodin ajamisen, periaatteessa tämä ominaisuus on käytettävissä uart:ssa Joten tarvitset fyysisen pääsyn laitteeseen. Mutta kun sinulla on fyysinen pääsy, voit tavallaan, kuten Tobias myöhemmin kertoo, voimme itseasiassa ohittaa turvallisuus järjestelmät, jotka Siemens on kehittänyt heidän tuotteeseen. Joten tarvitset uart pääsyn kuten dokumentoitu tässä, sinulla on TX, RX ja GND PLC:ssa ja uart oli tosiaan edellisessä tutkimuksessa jo dokumentoitu. Jokainen osoite, josta puhun tässä tai mainitsen tässä esityksessä ovat bootloader versio neljä.yhteen. Kuten mainittu aiemmin, Siemens aktiivisesti muokkaa bootloaderia, joten luulen, ettö kahdessa vuodessa näimme 2-3 muokkausta tai erilaista versiota heidän bootloaderista tulevan. Joten juuri tämä pohjautuu siihen puolen sekunnin odottamiseen tiettyä komentoa sekunttia laitteen configuraation tapahduttua. Se koskee Siemens S7-1200 mukaan lukien SiPLUS ja S7-200 SMART. Itse asiassa joku Kasperskyltä. IS Security mainitsi siitä. Me emme edes tienneet siitä. Me vain tutkimme S7-1200:sta. Mutta Siemens myöhemmin päivitti sen ohjeistuksen joka koskee muita tuotteita myös. Joten puhutaan tästä, erikois pääsy ominaisuudesta. Kuten mainitsit, yksi asia, jonka bootloader itse asiassa alustaa raudan. Tämän jälkeen laite se tavallaan kopioi osan bootloaderin sisällöstä itseensä muistisegmenttiin jota kutsutaan IRAM:ksi, periaatteessa. Ja sitten PLC odottaa puoli sekuntia tiettyä komentoa. Ja kun se tämän saa, tämän tietyn komennon se vastaa tietyllä merkkijonolla ja se tapahtuu uart:in yli. Joten jos lähetät taikajonon, MFGT1, anteeksi huono saksani, mutta se todennäköisesti tarkoittaa "Mit freundlichen Grüßen", toivon että tein se oikein. Ja sen jälkeen PLC vastaa "-CPU" ja sanoo, että nyt olet tässä erikois pääsy tilassa. Odotan sinun komentoja. Ja tässä osoitteessa on myös uskon 0xedf8 bootloaderissa. Joten tässä on dekoodaus meidän clientista, jonka julkaisemme ensi vuonna, itse asiassa, josta näet, se on 2d435055, joka on se "-CPU" vastaus PLC:lta. Joten nyt olemme siinä sisällä. Ja me myös lisäsimme vähän extra viestiä tähän paketin formaattiin Joku kysyi aikaisemmin. Eli kun lähetät tämän komennon, saat useita toimintoja tästä esityksestä käyttöön. Kutsumme niitä käsittelijöiksi ja periaatteessa ne ovat jotain jota kutsumme pääkäsittelijöiksi. se on jotain 128 merkintää ja siellä on noin 3 erillistä käsittelijää, jotka ovat kuin 0x80 uart konfigurointi ja moikka. Pääkäsittelijässä on paljon asioita. Jos palaat taaksepäin kaksi kalvoa minulla on firmware versio tässä, 4.2.3 ja periaatteessa mitä tapahtuu on, että periaatteessa se on tämä komento tässä, get bootloader version. Me vain pyydämme erityis pääsy ominaisuutta kertomaan meille mikä on bootloader versio. Ja voit myös tehdä paljon alemman tason diagnostiikkaa toiminnot tapahtuvat siellä. Myös jotkut firmwareen liittyvät päivitystoimet tapahtuvat siellä, jotka ohittavat taval- liset kryptografiset varmistukset firmwaresta, eikä niitä tarvita. Joten vilkaistaan niitä, koska tämä työ, josta puhumme, me pääasiassa käytimme vain kahta käsitteijää, joten emme käytä... emme katso tai emme nyt puhu kaikista muista 128 käsittelijästä jotka ovat PLC:ssa. Joten se toimii. Yksi käsittelijöistä, meitä kiinnostava, oli käsittelijä 0x80 joka mainitaan tässä, päivitysfunktio. Se periaatteessa antaa sinulle luvan kirjoittaa tiettyyn osaan muistia IRAM, joka aiemmin kopioi osan bootloaderin sisällöstä. Käytännössä lähetät tämän käsittelijän tämän kättelyn jälkeen, sinun pitää tehdä tämä MFGT1 ja sitten -CPU. Ja sitten pariaatteessa aiot lähettää tämän käsittelijän ja se tavallaan tarkastaa, koska joka käsittelijällä voi olla eri vaatimukset. Tarkastaa argumenttien määrän, esimerkiksi, ja sitten olet tässä päivitys funktio tilassa Sitten sinun pitää antaa kohde ID koska siinä on 4 alifunktiota saatavilla Kun siirryt tähän tilaan ja jotkut niistä ovat IRAM:ia, SPI:ta tai IOC:a tai Flashia varten, ja jokaista varten, sinun pitää valita minkälaisen operaation haluat tehdä, haluatko konfiguroida, lukea, kirjoittaa tai tarkastaa. Ja voit tehdä kaikkia näitä. Voit lukea ja kirjoittaa IRAMia. Periaatteessa tämä on funktio käsittelijä 0x80:ssa. Seuraavaksi on pää käsittelijä 0x1c. Tämä on listattu tässä listassa, tässä. Se, se periaatteessa sallii sinun kutsua funktioita. Periaatteessa nämä funktiot on listattu IRAMssa. Ja mitä tavallaan teet, on että lähetät tämän kättelyn, sinä olet ja sinä olet tämä. Periaatteessa tämä on 0xc1 käsittelijä ja sitten voit kutsua ID numeroa sille käsittelijälle jota haluat käyttää. Tässä on useita käsitteöijöitä tarjolla 0x1c:lle. Joten kysymys on mitä voimme tehdä sillä. Ja ennen kuin kysyn Tobiakselta Kysyn kaikilta täällä, ideoita ? Trace, joku sanoi trace. En tiedä mitä se tarkoittaa, mutta muminaa yleisössä OK, tarkoitat JTAG kanssa? CoreSight kanssa? Ei, emme aio käyttää sitä Joten kysytään Tobiakselta mitä hän pystyy tekemään. Tobias: Yaeh, katsottaessa dynaamisesti ja näkien mitä se tekee muistin kanssa on, luulen, hyvä ajatus yleisesti. Jos vaikka staattinen takaisinmallinnus ei anna sinulle mitään. Tässä tapauksessa katsoime tai minä katsoin läpi eri funktioita ja koitin selvittää, mitä voin tehdä niillä Kun aloitin katsomaan tätä erikois pääsy ominaisuutta, näin periaatteessa että siinä koodissa on liikaa meneillään. Tavallaan tunsin, että tiesin mitä pitäisi olla meneillään. Bootloader, mitä sen pitäisi olla tekemässä, mutta se tuntui vain olevan liikaa. Ja kuinka voimme yhdistää ne kaksi funktiota on kertausta. Käytetään tätä 0x1c käsitelijää, joka antaa meille kontrollin, minkälaista toisen listan funktioista kutsutaan, kuten näimme aiemmin, kopioidaan käynnistymis prosessissa sijaintiin IRAMssa ulkoiselta read only muistilta. Ja tämä paljastaa tämän funktiokäsittelijä taulun kaikelle mikä voi kirjoittaa IRAM:iin. Ja kuten opimme aiemmin, 0x80 käsittelijä pienissä määrin, pystyy tekemään juuri sen. Ja tässä näemme mitä voimme koittaa tehdä sillä. Joten käytämme ensimmäisessä vaiheessa 0x80 käsittelijää kirjoittamaan IRAMiin. Voimme todellisuudessa injektoida Toisen funktiopointerin yhdessä konfiguraatio arvojen kanssa, joka ohittaa erilaiset tarkastukset argumenttien koolle ja sen sellaiselle. Voimme injektoida tämän merkintänä tauluun ja voimme kirjoittaa tauluun myös payloadin, jota käytämme shell koodina. Ja sitten toisessa vaiheessa voimme käyttää tätä aiemmin injektoitua indexia jonka määritimme, laukaisemaan kutsun omaan payloadiimme. Joten nyt meillä on ajossa koodia bootloader kontekstissa. Joka on niin etuoikeutettu kuin mihin tässä vaiheessa pääsemme. Ja voimme leikkiä vähän sen kanssa. Ja yhteenvetona voimme ketjuttaa kaiken tämän yhteen ja saamme koodin suorituksen Ja Alin sanoin, tällä tekniikalla raketoimme PLCn. Ja ennen kuin menemme siihen, mitä tämä antaa meidän tehdä, sananen vaiheistetusta payloadista Eli kirjoitin tämän ketjun erilaisia kutsuja ja paljastui, että tämä kirjoittaminen IRAMiin on jotenkin ensinnäkin hidasta, mutta myös herkkä virheille, joten laite voi mennä virhetilaan enkä ole aivan varma mitä se koskee mutta olisi mielenkiintoista kuulla se Siemens insinööriltä, mutta se johti minut injektoimaan vähän enkoodattua payloadia, jossa on vain osa tavuista, joka antaa meille liittymän suorittaa lukuja ja kirjoittamisia mielivaltaisesti kirjoittaa ja käyttää tätä injektoidessa tason kaksi payloadit. Ja tätä haluamme havainnollistaa tässä. Ali: Kiitos, nyt voisimme esittää demon, 4 demoa itse asiassa. Ensimmäinen on vain kommunikaation näkeminen, peri- aatteessa lähetetään nämä pyynnöt ja saadaan vastaus ja periaatteessa lähetetään tämä data payload. Ylhäällä on raaka UART kommunikaatio. Älkää huolehtiko, se suurennetaan myöhemmin ja alhaalla on meidän client, joka keskustelee PLClle ja lähettää meidän kommentit. Joten vain ajamme UARTia. Ja tässä lähetämme komentomme. Ja jos katsot ylhäälle näet -CPU signaali tuli PLClta. Ja nyt lähetämme vaiheistuksemme ja vaiheistuksemme lähettää vain kuittauksen, että tiedämme vaiheistuksen toimivan kunnolla. Tämä on firmware versio bootloader versio 4.2.1, periaatteessa Joten nyt aiomme tehdä jotain muuta, aiomme aiomme tosiasiassa dumpata firmwaren käynnissä olevasta PLCsta ja verrata sitä firmwareen joka on ladattu Siemensin web sivulta. Ensin me aiomme tosiaan purkaa firmwaren jonka latasimme Siemensin websivuilta, koska se on pakattu lzp3:lla. Eli niin aiomme toimia. Oh ja aiomme oikeastaan ensin muodostaa SSL yhteyden. Joten, SSL portin ohjaus, SSH portin ohjaus ensin ja olemme juuri tarkastamassa että PLC toimii oikein. Ettei tämä ole viallinen PLC tai jotain sellaista Kirjoitimme jotain. Varmistamme vain että web palvelin avautuu. aukeaa se on auki, se on hyvä. Ja koitan yös kirjautua websivulle web serverille web palvelimelle PCLssa. Taas, varmista että PLC on toimiva Myös syötetään salasana. Luulen, että kaikki voivat sen arvata. Ja näet että kirjaudumme viimein ja vasemmalla näet kaikki toiminnallisuudet jotka latautuvat PLChen liittyen. Joten se on käynnissä, käyvä, toimiva PLC. Ja nyt puretaan firmware, joka ladattiin Siemensin websivuilta vientilisenssin tarkastamisen jälkeen jne. Eli he haluavat varmistaa etteivät ihmiset Iranissa ja Pohjois Koreassa saa sitä. Minä olen Iranista muuten. Joten tässä on purettu firmware. Mutta koska päivitysnopeus on iso, kuten Tobias mainitsi aiemmin, me vain aiomme viedä 256 kilotavua firmwarea jostain osasta web palvelua IDAan. Sinun täytyy asettaa big endian CPUlle. Ja myös asemoida framework uudelleen Kuten näet, täällä ei ole funktiota vielä, mutta kun se on asemoitu, meillä on kaikki funktiot ja yeah, ja sitten meidän täytyy vain ottaa ja viedä 256 kilotavua firmwaresta joten me tarkoituksella hidastamme UARTia koska haluamme varmistaa että emme tee sitä liian nopeasti ja ylivuoda puskuria, joka on PLCn sisäinen Tässä, esimerkiksi, tässä osoitteessa, 691e28 aiomme exportata 256 kilotavua Tämä on laiteohjelmistosta, Siemens firmwaresta. Oikein. Me vain exporttaamme sen. Eli, yeah, sitä kutsutaan nyt fw-0x691E28 ulostulo kansiossa. Eli nyt olemme valmiit tämän kanssa. Aiomme dumpata saman osoitteen PLCsta, eli toimivasta PLCsta. Pitää mainita jälleen. Eli yläosa on periaatteessa raaka UART ja tämä on meidän client osa ja me dump- paamme sen kylmäkäynnistys hyökkäyksellä Eli tavallaan resetoimme PLCn. Ja ennen kuin se on ohi, kirjoitamme RAM:in me periaatteessa dumppaamme sisällön RAM:sta. Eli tämä on osoite 0x691e28. Tämä on samasta osoitteesta periaatteessa. Ja dumppaamme 256 kilotavua ja tässä lähetämme MFGT1 periaatteessa ja saamme -CPU ja sitten loput vaiheistajasta ja muut menevät. Nyt periaatteessa olemme lähet- tämässä paketteja ja lopulta saamme vastauksen. Saimme tavallaan kaiken payloadin kuin dumppasimme mem_dump_00691e28 Tämä on PLCn RAM muistista. Tämä ei ole enää Siemens web sivulta Me nappasimme sen omasta koneesta ja vertaamme sitä. Eli meillä on muistidumppi ja alkuperäinen firmware 265 Kb molempia. Ja sitten aiomme verrata niitä keskenään. Ja kuten näette, sen pitäisi näyttää teille kuten täydellinen 100% vastaavuus. Tarkoittaen ettö se on täsmälleen sama firmware, joka on saatavilla Siemensin web sivulta. Dumppasimme sen suoraan Siemens PLC muistista käyttäen esikoispääsy ominai- suutta. Tehdäänpä toinenkin. Tällä kertaa haluamme näyttää rajoittamattoman koodin suorittamisen hyvin yksinkertaisesti. Kirjoitamme vain kustomoidun payloadin PLClle ja saamme tervehdyksen PLClta. tervehdyksen PLClta. Periaatteessa pyysimme PLCta lähettämään tätä viestä koko ajan jatkuvasti. Eli jälleen, lähetämme kustomoidun payloadimme tänne ja sanomme hello loop. Ja periaatteessa PLC yksinkertaisesti lähettää tämän loopin meille. Kaikki nämä asiat, jälleen, ovat bootloader 4.2.1:lle. Sinun pitää muokata tiettyjä asioita, koska Siemens sanoo, että he päivittivät taas bootloaderinsa 2019 joulukuussa, jolloin ostimme uuden PLCn, jälleen, taas. Ja nyt tässä saamme vastauksen. Tuo on PLC, joka lähettää periaatteessa meille meidän raakadataa jota PLC meille jatkuvasti lähettää. Tuo näyttää meille että vastaanotamme sitä. Mutta tämä oli ehkä liian yksinkertaista. Nämä ovat raakadataa jota saamme PLC:lta. Tehdään jotain monimutkaisempaa. Näytetään jotain, joka ei ole peräisin meiltä. Pelataan peliä nimeltä ristinolla PLCn sisällä. Ja luulen, että ellet tiedä, näin ristinolla, näin minä pelaan minä vain piirrän googlella. Joten nyt lähetämme jälleen meidän kustom payloadin, mutta tällä kertaa lähetämme vain osittaisia kyselyitä joltain toiselta Internetistä ja vain lataamme ne PLChen. Luonnollisesti sinun pitää säätää useita asioita. Mutta lähetämme meidän payloadin, mukaanlukien vaiheistuksen ja nämä ovat raakadataa. Jälleen, tässä on meidän client. Ja lopulta näet ristinolla käyttöliittymän, johon menet. Eli pelaaja1 pelaa oikeasti X:lla ja pelaaja2 pelaa 0:lla. Joten näet kaikki positiot, joista valitset. Sinulla on X ja toivottavasti pelaaja1 voittaa. Ja siinä se oli. Siinä oli demo. aplodeja Luonnollisesti, on paljon muitakin ideoita joita voimme työstää, injektoida muuta kustom koodia, käyttää erikoispääsy ominaisuutta, jatkamme tätä työtä. Kuten muitakin asioita Siemensissa, olemme pahoillamme Siemens, me vain jatkamme tätä työtä, mutta jatkoa seuraa vielä. Sillä välin, on joitain ajatuksia muille ihmisille, mikäli he katsovat tätä ja tutkivat turvallisuutta Siemens PLC:ssa. Eli käyttämällä tätä erikoispääsyä, voit tehdä joitain asioita. Eli esimerkiksi, voit käyttää tätä prophylaxis toiminnallisuutta kirjoittaaksesi firmwareen. Kuten mainit- simme funktio on käytettävissä, ja se ei vaadi kryptografista allekirjoitusta, jota tavallisesti päivitys prosessissa on firmwaressa saatavilla. Eli voit vain ohittaa sen ja se on vain CRC tarkastussumma. Eli mitä voit tehdä, esimerkiksi, lisätä merkinnän organisoimaan vaikka alustusrutiinia, joka on saatavilla. Ja sitten mitä voit tehdä ennen organisoitua alustusrutiinia, jota kutsumme th_initial Toinen mitä voimme tehdä, mikäli muistatte, Tobias puhui dokumentoimattomista ja luovuudesta tuottaa musiikkia li li li lo lo lo Eli mitä joku voi tehdä on periaatteessa liittää tietty käsittelijä tai ylikirjoittaa olemassaoleva. Ja laittaa se tekemään jotain kuin Triton. En tiedä tunteeko sitä kukaan, mutta Triton joka on malware, joka hyökkäsi petrokemian tehtaaseen Saudi Arabiassa. Eli he yrittivät tehdä sen TCPlla. Mutta hyökkääjä voisi ehkä tehdä sen http:lla esimerkiksi ja vain odottaa ja kuunnella kommentteja ja muita vaihtoehtoja kuten päivittää jump taulut AWP käsittelijöissä, joita voidaan myös käyttää prosessoimaan tiettyjä hyökkäyksiä. Eli mitäs muuta sitä olisi? Eli mitä tutkimme Me tutkimme hyökkäyspinta-alaa Siemens S7 PLC:ssa Siinä on joitan mahdollisuuksia paikalliseen käyttäjätaso hyökkäykseen. Jota voimme... Mitä katsoimme oli bootloader Työstämme edelleen hardware hyökkäyksiä ja hardware - ohjelmistä hyökkäyksiä reunalla. Tämä työ on käynnissä, ja siitä emme tietenkään keskustele nyt? Lisäksi kiinostava asia, luulen, jollekin, joka on kiinostunut PLCn turvallisuudesta erityisesti sisäisesti, en puhu nyt vain yleisestä eriyttämisestä verkossa ja sellaisesta ICS puolella. Puhun kehittyneemmistä alemman tason asioista. Mielestämme vaikka MWSL on kiintoisa kohde. Siinä on todennäköisesti bugeja implementoinnissa. Myös, tiedosto järjestelmän parsinnassa ja firmwaren allekirjoituksessa, siellä on varmaankin jotain juttua ja myös MC7 parserissa, mitä siinä on käyttöoikeuksien nostamisen näkökulmasta ja myös remote code execution näkökulmasta, molemmat MiniWeb web palvelin ja myös mitä tahansa verkossa saatavilla oleviin palveluihin, joita niissä on, voisi olla kiinostavaa. Katsot itseasiassa tätä kohtaa nyt. Joten lopuksi. PLCt kehittyvät monimutkaisemmiksi. Se on totta, koska ne tosiasiassa tarjoavat enemmän ja enemmän ominaisuuksia ja johtuen tästä monimutkaisuudesta, niissä on enemmän bugeja. Näemme, esimerkiksi, MWSL:ssa, jota katsomme nyt, siitä taivutetaan ja väännetään monimutkaisempaa. Heillä on periaatteessa joku anti-vianetsintä, josta juuri keskustelimme Siemens PLCssa, mutta heillä on myös, esimerkiksi, päivitys eheyden tarkastus, kuten allekirjoitus firmwaressa kun se ladataan PLChen ja sellaisia juttuja. Joten he tekevät siitä monimutkaisempaa. Mutta mitä meidän tulee tietää että jos heidän uhkamallissa, joka usein tehdään tai turvallisuusmallissa jonka he rakensivat. Jos heillä on ominaisuus joka ohittaa samat turvallisuusjärjestelyt jotka he suunnittelivat. Tarkoitan, että, mielestäni on selvää että heidän pitää poistaa, kuten bootloaderin tapauksessa, heidän erikoispääsy ominaisuudet. hyvänä esimerkki. Ja tietenkin asiakkaiden täytyy tietää, koska heillä on sellainen toiminto ja he tarvitsevat sitä, kunhan asiakkaat tietävät, se on hyvä. Mutta jos he eivät tiedä, he eivät voi huomioida tätä riskiä strategiassaan tai uhkamallissa, joka heillä on. Joten. Ja heidän täytyy miettiä tai uudelleen miettiä turvallisuutta tietämättömyydellä. Ehkä he sallivat meidän, tutkijoina, päästä käsiksi laitteisiin paremmin ja helpommin tutkiaksemme niitä enemmän. Me teemme vielä sitä mutta se vain kestää kauemmin. Ja uskon että on paljon enemmän nähtävää ja tehtävää PLC:issa ja Siemens ei ole viimeinen jonka parissa työskententelemme. Joten meidän täytyy kiittää joitain ihmisiä. Thosrten Holz, ohjaajamme, hän ei ole täällä. Thomas, Alexandre, Marina, Lucian, Nikita, ja Robin. Heidän avustaan ja työstään. Ja nyt aiomme vastata kysymyksiin. Herald: Kiitoksia. aplodeja Herald: Eli, Yeah, voitte tulla jonoon mikrofonille tai kirjoittaa kysymyksenne Elisa huoneessa. Ah, siinä mennään. Se on päällä nyt, luulen. Signal Angel: Hei, Yeah. ELi on yksi kysymys Internetistä. Tarkistitteko MC7 parserin? Jos kyllä. Löysittekö mitään piilotettuja koneohjeita siitä tai jotain. Ali: Haluatko vastata? Onko tämä nauhoitettu, vai toistanko kysymyksen? Eli he kysyvät tarkastimmeko MC7 parserin. OK, Hyvä. Eli emme todella tutkineet MC7 parseria mutta työskentelemme sen parissa nyt. Mic: Hei ? Kuinka pystyitte löytämään MFG turvallisuus salasanan? Ali: Se on todella pitkä tarina. Ensinnäkin meillä oli se edessämme hyvin, hyvin pitkän ajan, kunnes Siemens toi tämön anti-debugging ominaisuuden. Sen jälkeen, meidän piti keksiä toinen keino, toinen keino sen löytämiseen, löytää samanlainen toiminto, toisia tapoja sallia se, koska asia josta emme keskustelleet täällä, oli ettemme kertoneet kuinka me, esimerkiksi suoritimme sen komennon aikaisemmin PLC:ssa. Siihen liittyi työtä, johon saimme apua joiltain tutkijoilta Hollannista ja Ranskasta. Eli tämä oli jotain, josta informoitiin Siemensia 2013. Luulen, että he tiesivät siitä. Mutta 2016, he korjasivat sen ja se vaikutti kuin he periaatteessa koittivat suojata PLCta tämän tapaisilta hyökkäyksiltä. Sitä ei oltu julkaistu aiemmin. Joten käytimme sitä. Emme halua keskustella siitä, koska alkuperäinen tekijä ei halunnut puhua siitä. Mutta toistimme,mitä he olivat, mitä he tekivät. Ja kun meidän todella piti hakea muita keinoja, silloin se avasi silmämme, että on olemassa joitain muita toimintoja myös. On sellaisia, kuten esimerkiksi bootloader. Mutta ennen kuin tarvitsimme niitä, emme ikinä etsineet niitä. Joten se oli tavallaan edessämme jotain kaksi vuotta. Tobias: Ehkä yksi kiinostava osa taustatarinaa on, että me periaatteessa aikaisempaa tekniikkaa käyttäessämme me todellisuudessa ylikirjoitimme ehdollisen hypyn, joka ohjasi meidät erikoispääsy toiminnon suorittamiseen ehdottomalla hypyllä. Eli periaatteessa leikkasimme pois 60% koko firmware koodista vahingossa. Ja sitten täysin aavistuksesta, kuten kerroin aiemmin, että siellä oli vain liikaa erilaisia toimintoja. Palasin takaisin ja ymmärsin, että se oli juuri se sama kohta jonka ylikirjoitimme aikaisemmin, ja joka meidän piti periaatteessa korvata ja käyttää omiin tarkoituksiimme. Mic: Onko siinä mitään käynnistyksen aikaista turvallisuutta muuta kuin CRC tarkastus? Eli te. Voitteko muokata sisältöä SPI flashilla ja saada mielivaltaisen koodin suorittamisen sillä tavalla myös? Ali: Eli, se riippuu mistä vuodesta olet puhumassa 2017, 2016. Eli puhumme samasta mallista PLCsta, mutta vuosina 2017 ja 2018. Ei. Voisit periaatteessa vain ottaa ulos SPI flashin, ylikirjoittaa sen. Ja se on hyvä, Mutta jos olit ylikirjoittamassa sitä ja aiheutit pysähdyksen CPU coressa, se taas laukaisee sen anti-vianetsintä ominaisuuden joka heillä on. Tämä vahtikoira periaatteessa. Mutta firmwaren eheyden kannalta. Periaatteessa kun kerran kirjoitat... firmware kirjoitetaan NAND flashille, mutta se on vain CRC tarkastus. Mutta päivitysprosessi? Ei. Siinä on joitain kryptografisia tarkastuksia, mutta kun se on kirjoitettu, ei. Siinä on joitain ongelmia, jotka taas. Se on edelleen jatkuvaa työtä ja emme halua puhua siitä vielä, mutta hyvä huomio- Mic: Kiitos. Mic: Hei, Kiitos esityksestä, voisitteko avata teidän keskustelua valmistajan kanssa ja aikataulua? Ali: Kyllä, ensinnäkin, me olimme tienneet tästä ongelmasta puolitoista vuotta ennen kuin raportoimme asian valmistajalle. Tärkein syy oli, että käytimme sitä yhteen toiseen projektiin. Tämä on todellisuudessa tulos oikeasti sivuprojektista enemminkin kuin pääprojektista. Mutta koska varsinainen projekti on jotain muuta ja edelleen käynnissä. Mutta sen projektin sivussa, meillä oli pääsy. Ja koska olimme huolissamme, että valmista- jalle raportoidessa he voivat korjata sen ohjelmistopäivityksellä ja sen jälkeen estää kaikki muut CVEt, joita löydämme tässä toisessa projektissa, emme halunneet kuin viimein 2019. Thomas Weber halusi puhua tässä esityksessä periaatteessa tästä JTAG liittymästä CoreSightiin ja sitten päätimme kuitenkin puhua siitäkin. Mutta muutenkin, oikeastaan me puhuimme kesäkuussa, luulen, Siemensin kanssa ja he vahvistivat, että tässä raudassa on erikoispääsy ominaisuus. Ja he ovat.. He sanovat, että aikovat poistaa sen ja se siitä. Me myös lähetimme heille write Up:in luettavaksi. Herald: Eli, siellä on vielä viimeinen kysymys Signal Angelilta. Signal Angel: Eli, siellä on seuraava kysymys Internetistä. Jos työkalut kuten Flashrom, eivät tue tuntematonta SPI flash rom sirua, kuinka te tavallisesti puratte firmwaren, jos ette halua purkaa sirua tai käyttää SOICB istukkaa. Ali: Voitko toistaa sen. En saanut kysymystä, saitko sinä ? Signal Angel: Jos työkalut kuten Flashrom, eivät tue tuntematonta SPI flashrom sirua kuinka te tavallisesti puratte firmwaren, jos ette halua purkaa sirua tai käyttää SOICB istukkaa. Ali: Ensinnäkin, me emme oikeasti koskaan pura SPI flashia. Teimme sen vain CPU:lle. Ja koska halusimme tietää, että Siemens uudelleenbrändää PLCtaan. Eli se ei ole heidän CPU, se on Ransasilta, mutta siksi purimme osia. Mutta purkujutut sikseen. Mutta muista asioista, siellä on kuitenkin tämä toiminto, tämä bootloader toiminto, joka antaa sinun lukea sisällön muistista. Eli se on yksi asia, jonka voit lukea. Selvästi sinun ei edes tarvitse, kiitos yhden oppilaani. Me tiedämme yhden, jota sinun ei tarvoitse edes ottaa pois bootloaderista, siru. Me voimme periaatteessa vain kytkeytyä suoraan levylle ja dumpata firmwaren. Marcello, se on hänen nimensä. Hän on täällä. Mutta kuitenkin, voit vain suoraan lukea sen. Ja kyllä, en usko, että lukemis osuus erityisesti osat siitä, ovat suojattuja, erityisesti uusissa versioissa, joissa et voi lukea kaikkea. Mutta muuten, en usko, että se on vaikeampaa nyt vielä. Olen varma, että he työskentelevät sen parissa ja me myös työstämme jotain jolla se kierretään. Joten. Herald: Okei, seuraava esitys tulee olemaan toimitusroboteista. Sasha 20 minuutin päästä. Annetaan aplodit. aplodeja 36c3 esityksen jälkimusiikki Translated by Esa Lammi (ITKST56 course assignment at JYU.FI)