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)