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)