-
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)