WEBVTT
00:00:00.000 --> 00:00:09.132
Translated by Esa Lammi
(ITKST56 course assignment at JYU.FI)
00:00:09.132 --> 00:00:18.264
36c3 intromusiikki
00:00:18.264 --> 00:00:26.160
Herald: Siemens päätti äskettäin lisätä
turvallisuusominaisuuksia PLC:hen. Ja
00:00:26.160 --> 00:00:32.800
tänään meillä on Tobias ja Ali ja he
kertovat meille mitä he ovat onnistuneet
00:00:32.800 --> 00:00:40.720
löytämään. Tämä PLC. He molemmat tulevat
Ruhr yliopistosta Bachumista. Tobias on
00:00:40.720 --> 00:00:46.160
hiljattain saatu tohtoriopiskelijaksi. Ja
Ali on tutkijatohtori. Joten, annetaanpa
00:00:46.160 --> 00:00:48.358
heille aplodit.
00:00:48.358 --> 00:00:56.818
aplodeja
00:00:59.648 --> 00:01:03.557
Ali: Hmm, missä meidän kalvot ovat ?
Tobias: Esitystila ?
00:01:09.750 --> 00:01:17.210
ALi: Kyllä, OK. Tervetuloa esitykseemme.
Syväsukellus koodin suorittamiseen
00:01:17.210 --> 00:01:23.757
Siemens S7 PLCssa. Nimeni on Ali Abbasi ja
kuten mainittu olen tutkijatohtorina
00:01:23.757 --> 00:01:28.160
järjestelmäturvallisuuden osastolla Ruhr
yliopistossa Boch:sa ja tässä on kollegani
00:01:28.160 --> 00:01:34.400
Tobias: Olen Tobias, tai Toby. Hauska olla
täällä. Tämä on viides kertani tässä
00:01:34.400 --> 00:01:38.640
tapahtumassa ja nyt voin viimein antaa
takaisin tavallaan ja olen innoissani.
00:01:39.760 --> 00:01:46.880
Joten asiaan. Ensin hieman esityksesen
kulusta. Haluamme antaa teille
00:01:46.880 --> 00:01:51.360
hieman taustatietoa mitä PLCt, eli ohjel-
moitavat logiikka ohjaimet ovat,
00:01:51.360 --> 00:01:56.640
miksi haluaisimme sellaisia käyttää ja
minkälaisessa ympäristössä. Ja sitten
00:01:56.640 --> 00:02:02.600
sitten haluamme mennä yksityiskohtiin
Siemens PLCn tapauksessa. Ensin katsomme
00:02:02.600 --> 00:02:07.040
vähän laitteistoa ja sen jälkeen ohjel-
mistoja ja erilaisia löydöksiä joita
00:02:07.040 --> 00:02:11.200
teimme. Lopuksi, haluamme demonstroida
mitä pystyimme saavuttamaan
00:02:11.200 --> 00:02:18.960
ja päätämme esityksen parilla kommentilla.
Joten ensin, prosessiautomaatio. Me kaikki
00:02:18.960 --> 00:02:25.280
tiedämme sen. Tai teemme sitä itse tai
tunnemme jonkun joka tekee sitä. Laitamme
00:02:25.280 --> 00:02:32.480
joitain laitteita älykotiimme, jos kutsumme
sitä älykkääksi. Ja koitamme automatisoida
00:02:32.480 --> 00:02:38.720
eri kohteita eri asioissa tehdäksemme elä-
mästämme helpompaa. Asioita kuten
00:02:38.720 --> 00:02:43.200
lämpötilan säätö ylös-alas. Emme halua
tehdä tätä itse. Emme halua että on liian
00:02:43.200 --> 00:02:49.040
kuuma tai kylmä. Ja mitä teemme on, että
meillä on jokin sensorijärjestelmä
00:02:49.040 --> 00:02:52.120
talossamme, kuten myös laitteita jotka
00:02:52.120 --> 00:02:55.200
vuorovaikuttavat sensorien kanssa.
tässä tapauksessa meillä voisi
00:02:55.200 --> 00:03:00.560
olla termostaatti ja lämmitin ja haluamme
säätää lämpötilaa
00:03:00.560 --> 00:03:06.880
termostaatin perusteella. Nämä ovat aika
yksinkertaisia ratkaisuja älytaloon
00:03:06.880 --> 00:03:12.960
Mutta mitä teemme jos meillä on hyvin
monimutkainen hallintasilmukka esim.
00:03:12.960 --> 00:03:20.240
Tässä näemme vasemmalla alhaalla melko
monimutkaisen kuvan, muutama operointi-
00:03:21.200 --> 00:03:26.640
henkilö istumassa, mitä kutsumme HMI:n
human machine interface edessä, joka on
00:03:26.640 --> 00:03:30.320
periaatteessa tiivistetty informaatio
kaikesta mitä on meneillään
00:03:30.320 --> 00:03:36.560
tehtaassa, esimerkiksi. Me tarvitsemme eri
sensoreita tässä tehtaassa ja meidän täytyy
00:03:36.560 --> 00:03:41.040
ohjata eri moottoreita ja sellaisia asioita.
Joten tarvitsemme keskellä olevia asioita
00:03:41.040 --> 00:03:46.400
tavallaan ohjaamaan tätä kaikkea. Ja teemme
tämän käyttämällä PLC:ita ja tässä
00:03:46.400 --> 00:03:50.260
näemme miltä se voisi näyttää. Joten Peri-
aatteessa on syötteitä kuten puhuimme
00:03:50.260 --> 00:03:54.240
ja ulostuloja. Ja meillä on joku logiikka
keskellä. Ja mitä tyypillisesti asennamme
00:03:54.240 --> 00:03:59.840
on PLC ohjelmoitava logiikka kontrolleri
ja jotain logiikkaa keskellä.
00:03:59.840 --> 00:04:04.880
On erilaisia teknologioita, joita voidaan
käyttää, esimerkiksi, rakenne, teksti tai
00:04:04.880 --> 00:04:11.440
tikapuulogiikka joka ladataan PLChen ja
joka sitten ohjaa ulostuloja pohjautuen
00:04:11.440 --> 00:04:16.160
Sisään tuleviin syötteisiin. Voit nähdä
joitain tämänkaltaisia sovellutuksia.
00:04:16.160 --> 00:04:21.666
Esimerkiksi, kemiallisessa voimalaitoksessa,
kemian tehtaassa, sähköverkossa tai
00:04:21.666 --> 00:04:28.482
jossain tuotannossa. Osa noista komponen-
teista ovat aika kriittisiä toiminnalle.
00:04:28.482 --> 00:04:33.194
Vaikka näkisimme ne jokapäiväisessä
elämässämme ja joskus emme tosiaan
00:04:33.194 --> 00:04:39.563
näe niitä. Mutta ne ovat siellä ohjaamassa,
kaikkea taustalla ja me emme
00:04:39.563 --> 00:04:44.217
todellakaan halua noiden järjestelmien
hajoavan. Esimerkiksi jos menet googleen
00:04:44.217 --> 00:04:48.451
ja etsit jotain onnettomuuksista ja kemian
tehtaista, voit nähdä
00:04:48.451 --> 00:04:53.071
sulaneita tehtaita vain koska joku mis...
häiriö tapahtui järjestelmässä
00:04:53.071 --> 00:04:58.817
Ja emme todella halua tämän tapahtuvan.
Emme vahingossa, emmekä myöskään
00:04:58.817 --> 00:05:03.531
pahantahtoisesti. Ja tästä syystä haluamme
turvata kaikki prosessit jotka toimivat
00:05:03.531 --> 00:05:09.864
tehtaissa ja sellaisissa. Olemme nähneet
viimeaikaisia hyökkäyksiä. Se alkoi
00:05:09.864 --> 00:05:16.984
tavallaan 1999 ensimmäisellä tiedustelu
pohjaisella pääosin. Ja sen sitten olemme
00:05:16.984 --> 00:05:22.037
saaneet joitain edistyneempiä hyökkäyksiä
2010, esimerkiksi kun näimme Stuxnetin
00:05:22.037 --> 00:05:26.260
joka oli todella mutkikas operaatio.
Jos ajattelet sitä tekniseltä tasolta
00:05:26.260 --> 00:05:31.688
mitä kaikkea siihen meni. Mitä eri osaamis
alueita oli mukana. Se on melko
00:05:31.688 --> 00:05:38.048
vaikuttavaa. Ja sitten vielä myöhemmin
meillä on ollut ongelmia
00:05:38.048 --> 00:05:45.400
Ukrainan sähköverkossa, jossa 2015 ja 2016
juuri ennen joulua joitain valoja
00:05:45.400 --> 00:05:51.747
meni pois päältä melko toviksi joissain
kaupungeissa. Joten melkoinen vaikutus.
00:05:51.747 --> 00:05:57.504
Joten antaaksemme hieman vaikutusta,
taustaa Siemens PLC:sta mitä tulee
00:05:57.504 --> 00:06:01.908
markkinaosuuksiin. Näemme, että yhdessä
Rockwood automationin kanssa, Siemensilla
00:06:01.908 --> 00:06:06.372
on yli 50% markkinaosuus. Ja tietenkin,
jos otamme joitain laitteita
00:06:06.372 --> 00:06:10.422
joissa on jotain turvallisuutta, olisi
kiinostavaa katsoa niitä joilla on suurin
00:06:10.422 --> 00:06:15.560
markkinaosuus. Näin toimimme tässä
Siemensin tapauksessa. Tässä näemme
00:06:15.560 --> 00:06:22.030
juuri sen PLCn johon keskitymme tässä
esityksessä, se on Siemens S7-1200 PLC.
00:06:22.030 --> 00:06:26.721
Se on yksi pienemmistä PLCsta, ei silti
pienin, siinä on logo myös, joka on silti
00:06:26.721 --> 00:06:33.423
enemmän opettelua varten esimerkki, mutta
tämä on se joka on silti
00:06:33.423 --> 00:06:39.298
tutkijoiden saatavilla oleva, kustannusten
kannalta. Se on jotain 250e PLCsta.
00:06:39.298 --> 00:06:44.560
Sitten jos tarvitset virtalähteen, se
maksaa saman. Kunhan et riko montaa
00:06:44.560 --> 00:06:50.208
sellaista, spoileri, rikoimme aika monta,
tai et pudota niitä tai sellaista, niin
00:06:50.208 --> 00:06:55.524
pärjäät hyvin, sinä voit saada resurssit
leikkiäksesi niillä laitteilla
00:06:55.524 --> 00:07:00.289
Meillä on eri sovelluksia ja
olemme puhuneet niistä aiemmin
00:07:00.289 --> 00:07:08.186
Joten tässä on miltä paketin avaaminen
Siemens 7 1200 PLC tapauksessa näyttää
00:07:08.186 --> 00:07:13.658
Meillä on ylänäkymä vasemmassa kuvassa.
Se on yksi piirilevyistä (PCB)
00:07:13.658 --> 00:07:19.360
Jotka on kerrostettu toistensa päälle tässä
tapauksessa. Mutta taika oikeasti on
00:07:19.360 --> 00:07:25.717
ylimmässä PCBssa, joka on vihreä, jonka
näemme tässä. Katsoessamme sitä tarkemmin
00:07:25.717 --> 00:07:31.200
Meillä on yläkuva vasemmalla, joka näyttää
eri komponentteja joista
00:07:31.200 --> 00:07:36.566
PLC rakentuu. Otetaan esimerkiksi, ARM
prosessori (CPU) joka meillä on tai
00:07:36.566 --> 00:07:41.675
eri väylät sisään-ulos joita voimme kytkeä
PLChen, kuten puhuimme aiemmin,
00:07:41.675 --> 00:07:47.687
joita tarvitaan jotta voidaan ohjata eri
osia järjestelmässä. Ja sitten meillä
00:07:47.687 --> 00:07:56.233
on flash siru yläosassa myös, joka
on suuri flash siru sisältäen PLCn
00:07:56.233 --> 00:08:04.169
laiteohjelmiston, josta puhumme
hieman tarkemmin myöhemmin
00:08:04.169 --> 00:08:09.841
Kääntöpuolella, meillä on oikeassa
kuvassa alapuoli ensimmäisestä PCBsta.
00:08:09.841 --> 00:08:15.378
Ja kuten näemme tässä, tämä on se missä
bootloader siru sijaitsee, joka on SPI
00:08:15.378 --> 00:08:21.870
flash siru, 4 megatavua pitäen sisällään
Siemens PLC bootloaderin ohjelmakoodin.
00:08:21.870 --> 00:08:29.040
Tässä halusimme yksityiskohtaisen kuvan
siitä miltä varsinainen prosessoriyksikkö
00:08:29.040 --> 00:08:33.241
oikeasti levyllä näyttää ja mitä voit
tehdä jos haluat tietää on
00:08:33.241 --> 00:08:38.861
voit tehdä hieman kuorintaa.
Ja sitä näemme tässä.
00:08:38.861 --> 00:08:46.021
Tulos on tässä, näemme että sen ytimessä
on renesanssi ARM
00:08:46.021 --> 00:08:52.712
Cortex-R4 vuodelta 2010. Ja jos myöhemmin
työskentelet enemmän
00:08:52.712 --> 00:08:58.079
ohjelmiston parissa voit haluta selvittää
myös oikean revisio numeron mitä
00:08:58.079 --> 00:09:04.974
se tukee ARM standardissa. Ja mitä voit
tehdä, on käyttää erityistä käskyä
00:09:04.974 --> 00:09:13.442
joka sisältyy ARM käskykantaan ja
joilla voit dekoodata eri
00:09:13.442 --> 00:09:17.384
bittejä siinä, jonka teimme tässä, jonka
näet tässä referenssinä.
00:09:17.384 --> 00:09:22.787
Joten jos todella haluat tietää mitä on
meneillään, voit tutkia ne bitit ja
00:09:22.787 --> 00:09:26.358
varmistaa, että työskentelet sen laitteen
parissa mitä oletitkin.
00:09:26.358 --> 00:09:32.349
Nyt olemme tulleet muistiosuuteen
laitteistossa ja tässä vaiheessa
00:09:32.349 --> 00:09:39.315
jätän teidät Alille.
Ali: Kiitos. Nyt kun Tobias on avannut
00:09:39.315 --> 00:09:45.892
PLCn meille, minä aion puhua oikuista
ja ominaisuuksista PLC:ssa.
00:09:45.892 --> 00:09:53.285
Kuten mainittu, se on Cortex-R4 revisio 3.
Se on big endian käskykanta ja siinä on
00:09:53.285 --> 00:10:00.632
ainoastaan MPU. Joten siinä ei ole
visuaalista muistia periaatteessa. Siinä on
00:10:00.632 --> 00:10:04.794
useita RAM muisti kokoja, riippuen minä
vuonna ostit sen ja minkä version S7
00:10:04.794 --> 00:10:10.991
1200 ostit ja myös useita SPI flash ja
useita eri tyyppisiä NAND flasheja.
00:10:10.991 --> 00:10:15.416
Merkittävin yksi ero on kuten
RAM. jossa he käyttävät välillä Wingbond
00:10:15.416 --> 00:10:20.198
ja joskus he käyttävät Micron
Technologies, hiljattain
00:10:20.198 --> 00:10:30.818
Micron Technologies RAM. Se on LPDDR1 RAM.
Oletamme SPI flash bootloaderiksi. Joten
00:10:30.818 --> 00:10:37.243
jälleen, riippuen vaihtelusta välillä
yhdestä neljään megatavua SPI flashia, se
00:10:37.243 --> 00:10:43.840
sisältää eri pankkeja, jokainen kooltaan
512 ktavua. Ja periaatteessa mitä bootloader
00:10:43.840 --> 00:10:48.797
tekee, on tyypillisten bootloader toimien,
joita ovat laitteiston konfigurointi,
00:10:48.797 --> 00:10:54.342
varmistaa firmwaren eheys
00:10:54.342 --> 00:11:01.835
ennen kuin se ladataan. Me teimme hieman
röntgen kerroskuvausta PLClle
00:11:01.835 --> 00:11:08.652
Se on periaatteessa 3D. Joten PCB
pyörii tässä koska halusimme tehdä myös
00:11:08.652 --> 00:11:13.680
laitteiston takaisinmallinnusta.
Ja jollain yliopistolla oli jotain, joten
00:11:13.680 --> 00:11:20.414
meidän ei tarvinnut mennä hammaslääkärille
röntgeniin. Joten tässä on nopea 15 min
00:11:20.414 --> 00:11:26.400
röntgen, joka ei ole kovin hyvä. Mutta kun
menet syvemmälle, lopulta sinulla on tämä
00:11:26.400 --> 00:11:30.960
ja voit oikeasti aivan kuin
se olisi ohjelmisto animaatio
00:11:30.960 --> 00:11:36.320
Voit mennä PCBn sisälle ja nähdä kaikki
kerrokset. Se on uskomatonta. Se on PCB
00:11:36.320 --> 00:11:42.480
kerros. Ja muuten, VCC ja GND, tarvitset
kaksi kerrosta PCB yhteyksiä periaatteessa.
00:11:42.480 --> 00:11:50.000
Katsotaanpa käynnistys prosessia
jälleen, käynnistetään tavallisesti
00:11:50.000 --> 00:11:53.840
Jotain laitteistoasetuksia tapahtuu. Kuten
trap ohjaimen vektorointi, esimerkiksi,
00:11:55.120 --> 00:12:01.600
paljon ajureita eri ARM tiloille ja sitten
CRC tarkastus itse bootloaderille
00:12:01.600 --> 00:12:06.240
joka on helposti ohitettavissa, koska voit
00:12:06.240 --> 00:12:11.516
ylikirjoittaa CRCn. Tämän jälkeen boot
loader, erityisesti 2017, 2018 versioissa
00:12:11.516 --> 00:12:18.960
Siemen PLCssa, sallii sinun ylikirjoittaa
SPI flashin. Ja lopuksi tarkastamme
00:12:18.960 --> 00:12:25.120
CRC tarkastussumman laiteohjalmasta
ennen kuin se ladataan
00:12:25.120 --> 00:12:28.960
bootloaderin itsensä koko on 128 kbyte,
todellisuudessa jopa vähemmän koska
00:12:28.960 --> 00:12:35.093
puolet siitä on vain 0xff. Siemens useita
kertoja on vaihtanut, heillä on useita
00:12:35.093 --> 00:12:39.368
versioita. Luulen, että kahdessa vuodessa
näimme 3 tai 4 muunnosta bootloaderista
00:12:39.368 --> 00:12:44.720
Se siis kehittyi. Se ei ollut jotain jonka
olemassaolon kaikki ovat unohtaneet.
00:12:44.720 --> 00:12:51.990
Kuten yleisesti mainittu, sinulla on
tässä ensimmäinen vaihe laitteiston
00:12:51.990 --> 00:12:59.760
alustamisessa ja sitten luetaan
bootloader RAM muistiin ja
00:12:59.760 --> 00:13:03.840
tarkastetaan bootloaderin CRC tarkastus-
summa, jotta sitä ei ole muuteltu ja tämä
00:13:03.840 --> 00:13:08.400
voidaan jälleen ohittaa. Ja sitten toinen
vaihe laitteiston alustamisessa tapahtuu,
00:13:08.400 --> 00:13:12.827
Ja sillä hetkellä se odottaa tiettyä
komentoa puolen sekunnin ajan
00:13:12.827 --> 00:13:16.633
ja jos se saa tämän komennon se menee
toiseen moodiin josta puhumme myöhemmin
00:13:16.633 --> 00:13:22.101
Muuten se periaatteessa valmistelee CRC
tarkastussumma taulukon laiteohjelmistolle
00:13:22.101 --> 00:13:25.727
ja yrittää ladata laiteohjelmiston ja
lopulta yksinkertaisesti poistaa
00:13:25.727 --> 00:13:30.790
muisti eston vaiheen 1 käskyn
teille jotka tunnette ARMin
00:13:30.790 --> 00:13:34.846
Ja periaatteessa siirtää laiteohjelmiston
muistiin
00:13:34.846 --> 00:13:38.624
Käyttöjärjestelmän nimeä ei ollut
00:13:38.624 --> 00:13:44.238
mainittu aiemmin, se on ADONIS.
Tunnemme sen erilaisilla, erilaisilla
00:13:44.238 --> 00:13:49.995
tavoilla itseasiassa. Joten ensimmäisenä
referenssinä laiteohjelmistossa, näemme
00:13:49.995 --> 00:13:54.552
paljon viittauksia ADONISen, mutta se ei
riittänyt meille. Joten katselimme ympärille
00:13:54.552 --> 00:13:59.200
nähdäksemme onko siihen mitään
lähteitä, ja no, Linkedin on hyvä
00:13:59.200 --> 00:14:04.917
avoin lähde tiedolle. Ja oli yksi työn-
tekijä joka oikeasti puhui Siemens
00:14:04.917 --> 00:14:09.840
kehittäjästä, joka puhui ADONISen
toiminnnasta. En tiedä miksi hän laittoi
00:14:09.840 --> 00:14:15.360
Windowsin ja Linuxin ADONISen viereen
mutta pidin siitä hänen työstään. Ja
00:14:15.360 --> 00:14:20.560
se ei ollut meille tarpeeksi. Joten ehkä
joku meistä jota emme tunne. Ja katsoimme
00:14:20.560 --> 00:14:25.440
taas kauemmas ja kauemmas ja löysimme
tämän, joka oli paras indikaattorimme
00:14:25.440 --> 00:14:30.240
Eli Siemens kehitysinsinööri mainitsi että
hän oli työskennellyt kernel ohjelmiston
00:14:30.240 --> 00:14:34.480
kehittämiseksi ADONIS reaaliaika käyttö-
järjestelmään, joka oli meille hyvä merkki
00:14:34.480 --> 00:14:39.200
Se tarkoitti, että olimme oikeassa. Nyt kun
tunsimme nimen ja olimme siitä varmoja.
00:14:39.200 --> 00:14:46.160
Katsotaanpa komponentteja. Se on
periaatteessa käynnistyminen
00:14:46.160 --> 00:14:53.680
0x00040040 ja sitten alustetaan kernel
ja tämän jälkeen useita rutiineja eri
00:14:53.680 --> 00:14:57.535
komponenttien alustamiseksi käyttö-
järjestelmässä. En usko, että Siemens
00:14:57.535 --> 00:15:02.960
jakaa sitä tällä tavalla. Meillä ei
ollut sellaista käyttöjärjestelmässä,
00:15:02.960 --> 00:15:07.680
mutta teimme sen sillä tavalla. Eli
levitimme sen kahteen ryhmään. Joissain
00:15:07.680 --> 00:15:11.360
on core palvelut kuten ADONIS reaaliaika
käyttöjärjestelmän palvelut ja jotkut
00:15:11.360 --> 00:15:15.600
niistä liittyvät automaatio-osaan. Joten
niille ihmisille jotka ovat mukana
00:15:15.600 --> 00:15:22.400
automaatiossa, kuten kirjoittavat tikapuu
logiikkaa ja sen sellaista, ne komennot ja
00:15:22.400 --> 00:15:26.560
toimintokoodit jotka ovat relevantteja
Siemensille, he tuntevat nämä enemmän
00:15:26.560 --> 00:15:32.480
automaatioon liittyvät palvelut. Joten on
PROFINET, AWP tai automated web
00:15:32.480 --> 00:15:39.920
programming MC7 JIT parseri tikapuu
logiikkaa varten tai erilaista SD
00:15:39.920 --> 00:15:46.400
eli periaatteessa heidän oma JIT kääntäjä
PLCn sisällä- Ja sinulla on myös OMS
00:15:46.400 --> 00:15:51.120
tämä konfiguraatiojärjestelmä, joka on
automaatioon liittyvä ydinosa
00:15:51.120 --> 00:15:58.640
automaatiojärjestelmästä ja toki hälytys
keskus kaikkea sellaista juttua
00:15:58.640 --> 00:16:04.320
joka liittyy automaatioon. Käyttö-
järjestelmän puolella paljon kaikkea
00:16:04.320 --> 00:16:11.040
tavallista. Tiedostojärjestelmä, PDCFS,
josta Tobias puhuu myöhemmin
00:16:11.040 --> 00:16:18.480
TCP/IP pino, joitain C / C++ kirjastoja,
jotka eivät ole Siemensiltä, ne ovat
00:16:18.480 --> 00:16:23.119
Dinkumware ja Miniweb server
ja MWSL parseri
00:16:23.119 --> 00:16:25.470
tai Miniweb Scripting Language parseri
00:16:25.470 --> 00:16:30.160
Ja paljon erilaisia alikomponentteja, mikä
on tavallista käyttöjärjestelmässä kuin
00:16:30.160 --> 00:16:36.640
käyttöjärjestelmässä. Lisäksi siellä on
joitain viittauksia CoreSight:iin. En tiedä
00:16:36.640 --> 00:16:40.720
moniko teistä tuntee CoreSight:in tai
paljonko teette ARMin kanssa, mutta perus
00:16:40.720 --> 00:16:46.400
Coresight on jotain vastaavaa kuin Intelin
prosess tracing tai Intelin PT seuraamaan
00:16:46.400 --> 00:16:52.640
sovelluksia ja jota voi käyttää saamaan
code-coverage, esimerkiksi. Ja laitteiston
00:16:52.640 --> 00:16:58.720
osa on hyvin dokumentoitu Thomas Weberin
toimesta tänä vuonna, ei vielä.
00:16:58.720 --> 00:17:04.000
mutta tänä vuonna. Black Hat aasiassa
mutta minun pitää varoittaa teitä koska
00:17:04.000 --> 00:17:08.560
sain joitain sähköposteja, jotkut kyselivät
siitä. Jos kytkeydyt siihen, PLC:ssa on
00:17:08.560 --> 00:17:12.880
joku vianselvitys ominaisuus, joka tun-
nistaa kun sitä tutkitaan JTAG kautta
00:17:13.840 --> 00:17:18.960
ja se ylikirjoittaa NAND-flashin random
jutulla. Joten tuhoat PLCn, eli kytkeydy
00:17:18.960 --> 00:17:23.838
siihen omalla riskillä.
Seuraavaksi katsotaanpa
00:17:23.838 --> 00:17:27.530
CoreSIghtia nopeasti. CoreSight:ssa
on periaatteessa... ennen kuin
00:17:28.180 --> 00:17:30.880
menen siihen, minun pitää mainita
mainita, että Ralf Philipp:lla
00:17:30.880 --> 00:17:37.600
on myös hyvä esitys 0 night:ssa CoreSight
jäljestämisestä. Joten suosittelen, että
00:17:37.600 --> 00:17:41.920
katsotte myös sen.
Yleisesti, CoreSight:ssa on kolme
00:17:41.920 --> 00:17:46.800
pääosaa tai komponenttia: Lähteet, linkit
ja sinkit ja sinkit ovat ne osat, joista
00:17:46.800 --> 00:17:51.280
saat trace informaation ja lähteet ovat
se jolla kerrot prosessorille
00:17:51.280 --> 00:17:56.630
minkälaisista lähteistä haluat dataa ja
00:17:56.630 --> 00:18:03.200
linkit muuttavat nämä lähteet. Täytyy mainita
00:18:03.200 --> 00:18:08.227
että usein se on hyödyllistö fuzzatessa
myös. Luulen, että jotkut
00:18:08.227 --> 00:18:12.560
harvat, mutta jotkut, työskentelevät asian
parissa. Kattavuuden ohjaama fuzzing
00:18:12.560 --> 00:18:16.480
CoreSight kautta, ARM Coresightin. Joten on
mahdollista, että vastaava implementointi
00:18:16.480 --> 00:18:25.680
tapahtuu kuin Intel PT, esimerkiksi KAFL,
WinAFL tai Hingfuzz. Eli lähteet, niillä
00:18:25.680 --> 00:18:30.640
on kolme eri komponenttia. STM, PTM, ETM.
ETM versio 4 on sen uusin versio
00:18:30.640 --> 00:18:37.600
Ja periaatteessa sinulla on myös linkit jotka
yhdistävät eri lähteet eri, kuin
00:18:37.600 --> 00:18:45.440
eri tai yhden lähteen tai tiettyyn
sink:iin
00:18:46.080 --> 00:18:52.198
Ja sitten on suppiloita CoreSightlle,
anteeksi sinks, anteeksi. Sinulla on sinkeja
00:18:52.198 --> 00:18:56.144
jotka ovat eri asia. Eli on olemassa eheys
prosessorille, joka on 4 kilotavua
00:18:56.144 --> 00:19:02.560
puskuri SRAM tai sinulla on järjestelmä-
muisti tai jopa TPIU tai esimerkiksi
00:19:02.560 --> 00:19:09.416
JTAG DP portti High Speed JTAG portti.
Nyt kun sink on käyty läpi, kuten CoreSight
00:19:09.416 --> 00:19:14.800
teimme kyselyjä S7:lle CoreSight esiinty-
misestä ja kuten voit havaita
00:19:14.800 --> 00:19:21.228
ohjelmisto on jo implementoitu.
Eli ohjelmistossa on viittauksia
00:19:21.228 --> 00:19:26.960
että he käyttävät tai konfiguroivat
CoreSight:ia PLCssa
00:19:26.960 --> 00:19:32.720
Ja voimme nähdä, että ETM versio
ei ole uusin, se on ETM
00:19:32.720 --> 00:19:39.520
versio 3. Nyt kun olen puhunut
CoreSight:sta, Tobi voi puhua
00:19:39.520 --> 00:19:43.200
laiteohjelmisto dumpista.
Tobi: Joten siirrytään johonkin joka
00:19:43.200 --> 00:19:49.476
on minulle paljon tutumpaa ja joka tuntuu
minusta helpommalle, se on laiteohjelmisto
00:19:49.476 --> 00:19:53.440
dumpit, tai ohjelmistot yleisesti, mutta
firmware dumpit, se on mistä eniten
00:19:53.440 --> 00:19:59.840
haluan puhua PLCssa tai mitä koitan
ymmärtää PLCssa. Siemensin tapauksessa
00:19:59.840 --> 00:20:06.960
meillä on 13 megatavun binääri. Ja vaikka
alussa se ei tunnu paljolta,
00:20:06.960 --> 00:20:14.800
mutta kun vähän pyörittelet ja hyödynnät
IDA Python funktioita ja sellaista
00:20:14.800 --> 00:20:19.440
sinulla on suunnilleen 84000 funktiota
joka ei ole jotain,
00:20:19.440 --> 00:20:25.920
mitä haluaisit tehdä käsin. Lisäksi 84000
funktion laiteohjelmisto image
00:20:25.920 --> 00:20:31.840
ei voita seksikkäimmän laiteohjelmiston
palkintoa, eihän? Arvaan näin.
00:20:31.840 --> 00:20:38.000
Mutta tämä on se mitä näin ja mitä
katsomme tarkemmin muutaman
00:20:38.000 --> 00:20:43.200
minuutin päästä. Kuten näette, meillä on
eri nimiä tuolla ylhäällä.
00:20:44.000 --> 00:20:48.800
Meillä on jotain, jota kutsutaan
_joku_hae_jotain_suuri_koko. Tämä
00:20:49.520 --> 00:20:53.760
on tapani sanoa, ettei minulla ole aavis-
tustakaan mitä tässä funktiossa tapahtuu,
00:20:53.760 --> 00:20:58.400
mutta voimme myös nähdä joitain merki-
tyksellisiä funktioita. Joten ymmärsimme
00:20:58.400 --> 00:21:03.920
joitain osia paremmin. Joitain osia
huonommin, mutta katsoin joka puolelle
00:21:03.920 --> 00:21:11.360
Mennäänpä nyt paljon osoitteistoja
käsittelevään osaan. Odotimme paljon
00:21:11.360 --> 00:21:16.880
yksityiskohtia, jotka olisivat kiinostavia
jos alat katsomaan firmwarea ja voisin
00:21:16.880 --> 00:21:19.000
selittää miksi ne voisivat kiinnostaa.
00:21:21.120 --> 00:21:26.320
Ensinnäkin täytyy tietää, että coretex
antaa bank registerin
00:21:26.320 --> 00:21:32.800
Se on toiminnallisuus joka on implementoitu
pienentämään kokoa ja sallimaan
00:21:32.800 --> 00:21:40.560
saumattomat moodit sisäiselle prosessorille.
Ja saamme bank pinon jokaiselle suoritus
00:21:41.120 --> 00:21:47.360
tilalle. Joten jos haluemme tietää mitä
on meneillään firmwaren tilassa
00:21:47.360 --> 00:21:51.200
jollain hetkellä, haluamme ehkä katsoa eri
pinoja eri tiloissa eri aikoina.
00:21:51.200 --> 00:21:56.880
Ja tämä on osoitteisto, jolta odotamme tätä
00:21:56.880 --> 00:22:02.640
Ja sitä voi käyttää lähtökohtana, mikäli
alat takaisinmallintaa asioita
00:22:02.640 --> 00:22:07.520
Nyt meillä on joitain osoitteita,
joitain tauluja joissa on osoitteita
00:22:07.520 --> 00:22:16.080
Ensimmäinen on RAM kartoitus, joka
näyttää mitä toiminnallisuutta
00:22:16.080 --> 00:22:23.120
tai mitä voit odottaa kun katsot laite-
ohjelmiston koodia, joka
00:22:23.120 --> 00:22:28.160
on yhteydessä eri osiin muistia.
Jos ensin menet katsomaan ARM koodia
00:22:28.160 --> 00:22:33.120
voit nähdä vain satunnaisia yhteyksiä eri
paikkoihin muistissa ja voit haluta ottaa
00:22:33.120 --> 00:22:39.040
selvää mitä se oikeasti tekee. Ja se
näyttää tylsältä, se on vain osoite
00:22:39.040 --> 00:22:45.200
ja sitä kysellään, etkä tiedä mitä tapahtuu
00:22:45.200 --> 00:22:49.680
Esimerkiksi, jos katsoit osoitetta teksti
osassa, odotit että siinä on
00:22:49.680 --> 00:22:55.120
koodia, jos halusit nähdä jotain
globaalia staattista dataa, halusit
00:22:55.120 --> 00:22:59.040
etsiä dataa BSS osiosta. Ja lopulta,
mikäli halusit katsoa heap muistia
00:22:59.040 --> 00:23:04.400
tai kuinka kanavat on asetettu siinä,
etsisit sitä uninitialize osasta
00:23:04.400 --> 00:23:09.760
ja se kulkee näin eri osissa.
Toinen erittäin kiinostava
00:23:09.760 --> 00:23:14.480
asia katsoa, jos yrität takaisin
mallintaa firmwarea on että haluat
00:23:14.480 --> 00:23:20.480
tavallaan tietää mikä on se laitteisto
josta koodi on peräisin, jota se käsittelee
00:23:22.000 --> 00:23:29.760
Ja tässä tapauksessa dumppasimme
joitain alueita ja takaisinmallinsimme
00:23:29.760 --> 00:23:35.120
mitä varten ne alueet ovat, jota kutsutaan
muistikartoitetuksi I/Oksi. ARM
00:23:35.120 --> 00:23:39.360
keskustelee laitteiston kanssa periaatteessa
jonoamalla maagista arvoa osoiteavaruudessa
00:23:39.360 --> 00:23:43.040
ja sitten se saa jotain takaisin, mikä ei
ole yhtään samaa, mitä sinne oli
00:23:43.040 --> 00:23:48.560
aiemmin kirjoitettu. Eli se on osoite joka
siirretään sinne reunan yli.
00:23:48.560 --> 00:23:53.600
Laitteiston reunan, samassa järjestelmässä
sirulla. Ja tässä näemme, että meillä
00:23:53.600 --> 00:23:57.360
on erilaisia järjestelmään liittyviä
laitteita kiinni siinä. Esimerkiksi
00:23:58.000 --> 00:24:03.040
voimme puhua Siemens PLClle eri
sarjaprotokollia käyttäen ja ne protokollat
00:24:03.040 --> 00:24:08.800
voivat olla SPI tai I²C. Ja vasemmalla
puolella on, aika keskellä ylhäällä
00:24:08.800 --> 00:24:15.840
mikä otti siihen osaa, jotain siihen
alueeseen liittyvää. Ja sitten näit
00:24:15.840 --> 00:24:21.920
jonkun toisen koodin puhuvan ajastimille,
esimerkiksi, tietäisit että olet silloin
00:24:21.920 --> 00:24:26.288
ajastinmaassa sillä hetkellä tai
schedulerissa tai jossain sellaisessa
00:24:26.288 --> 00:24:27.520
Viimein meillä on
00:24:27.520 --> 00:24:33.680
MPU konfuguraatioita, jotka ovat Memory
Protection Unit konfiguraatioita, kuten
00:24:33.680 --> 00:24:38.880
Ali kertoi aiemmin. Mitä näemme on, että
Siemens oikeasti käyttää joitain näistä
00:24:38.880 --> 00:24:44.080
konfiguraatioista suojatakseen osia
muistista. Näemme, esimerkiksi, että
00:24:44.080 --> 00:24:49.360
missä, koska tahansa on XN, älä suorita
bitti on, asetettu koodia ei suoriteta
00:24:49.360 --> 00:24:53.840
siinä osoiteavaruudessa tai se on vain
luku alue. Emme todellakaan halua
00:24:53.840 --> 00:24:59.280
kirjoittaa sitä yli. On kiinnostavaa, että
he alkoivat käyttämään tätä tapaa.
00:24:59.280 --> 00:25:06.240
Tässä näemme mitä oikeasti tapahtuu kun
laitekoodi itse boottaa käyntiin
00:25:06.240 --> 00:25:11.840
Paljastui, ettei firmware halua olla liian
riippuvainen siitä mitä bootloader teki
00:25:11.840 --> 00:25:16.720
Todennäköisesti eri teamit tekevät eri
asioita. Ja pitääkseen yhteydet niin
00:25:16.720 --> 00:25:22.371
pieninä kuin mahdollista, he tavallaan
tekevät uudelleen asoita, joita bootloader
00:25:22.371 --> 00:25:27.040
koodi tekee myös. Se asettaa vektori taulun
keskeytysten käsittelyyn ja se kaltaisia
00:25:27.040 --> 00:25:31.680
asioita. Kun sitten ohitamme tämän
alustavan vaiheen, me haluamme
00:25:31.680 --> 00:25:36.960
bootata ADINIS kernelin, josta Ali puhui
aiemmin. Ensinnäkin, siellä on
00:25:36.960 --> 00:25:42.160
array function pointereita, joita kutsutaan
aina jokaista toimintoa varten, joita
00:25:42.160 --> 00:25:47.200
näimme tässä yhteenvedossa ADONIS:en
eri komponenteista. Joten jos halusit
00:25:47.200 --> 00:25:51.040
katsoa minkälaisia komponentteja siinä on
tai minkälaisia toiminnallisia osia siellä
00:25:51.040 --> 00:25:55.680
on. Tämä on todella kiinnostava lista
funktioista, funktion käsittelijöistä
00:25:55.680 --> 00:26:01.520
tutkittavaksi ja se myös asettaa joitain
hallintarakenteita ja asioita kuten tämä
00:26:01.520 --> 00:26:07.840
jollaisen tyyppillisen käyttöjärjestelmän
pitäisi asettaa. Joten katsotaan tarkemmin
00:26:07.840 --> 00:26:14.480
eri komponentteja ADONISsa. Ensin tiedosto-
järjestelmä. PLC täyttää määritelmät
00:26:14.480 --> 00:26:20.240
Joskus se on kuinka hyvin se kestää eri
lämpötiloja, kuinka matalassa lämpötilassa
00:26:20.240 --> 00:26:26.480
voin käyttää tätä PLCta, ilman että
se menettää toiminnallisuuksia
00:26:26.480 --> 00:26:33.360
Ja tässä tapauksessa, he haluavat myös
turvallisuutta häiriöiden varalta
00:26:33.360 --> 00:26:38.160
virtalähteessä. Joten he kehittivät oman
tiedostojärjestelmän, jota kutsutaan
00:26:38.160 --> 00:26:42.640
"Powered Down Consistency File System",
jonka he implentoivat firmwareen ja näemme
00:26:44.080 --> 00:26:56.160
yhden työkokemus rivin yhdellä
entisellä Siemensin työntekijällä
00:26:56.160 --> 00:27:03.360
joka kertoi työskennelleensä
tämän tiedostojärjestelmän parissa
00:27:03.360 --> 00:27:07.680
toinen erittäin kriittinen osa toimintoja
on tietenkin, että haluamme keskustella
00:27:07.680 --> 00:27:14.560
PLClle ja se haluaa keskustella meille.
Yksi näistä tavoista on TCP/IP
00:27:14.560 --> 00:27:19.280
Ja tämä paljastaa Web palvelun esimerkiksi,
sekä muita komponentteja
00:27:19.280 --> 00:27:26.000
Tässä tapauksessa huomaamme, että Siemens
ei rakentanut itse omaa, mikä on
00:27:26.000 --> 00:27:31.150
todennäköisesti hyvä ajatus.
He käyttävät InterNiche TCP/IP
00:27:31.150 --> 00:27:34.944
pinoa, jonka versio on 3.1
00:27:34.944 --> 00:27:37.760
Jos olet hyvä googlettamaan
voit löytää jotain lähdekoodia
00:27:37.760 --> 00:27:41.600
ja voit kartoittaa tämän firmwaren ja
kuinka se toimii. Joten se voisi
00:27:41.600 --> 00:27:48.880
antaa sinulle wrapper funktioita, kuten
luoda socketeja ja sellaista ja voisit löytää
00:27:48.880 --> 00:27:53.573
ne helpommin firmware imagesta
00:27:53.573 --> 00:28:00.666
Yksi erittäin kriittinen ohjalmakomponentti
firmwaressa on päivitys. Se sallii
00:28:00.666 --> 00:28:06.647
päivittämisen ja Siemens PLC sallii
päivitykset, siinä on eri moodeja. Yhdessä
00:28:06.647 --> 00:28:12.248
moodissa sinä vain raahaat ja pudotat UPD
tiedoston, päivitystiedoston web palvelimelle
00:28:12.248 --> 00:28:18.886
ja se alkaa tarkastamaan firmwarea, eheyttä
ja allekirjoitusta ja niin edelleen. Toinen
00:28:18.886 --> 00:28:24.714
tapa on tehdä se SD kortin kautta, joka on
mahtavuutta 24 megatavua edulliseen
00:28:24.714 --> 00:28:30.807
hintaan 250 euroa. Voit hankkia sen.
En usko, että päihität
00:28:30.807 --> 00:28:39.257
sitä suhdetta. Mikäli purat sellaisen
UPD tiedoston saat
00:28:39.257 --> 00:28:43.142
toisen esityksen siitä muistissa.
Ja teimme sille vähän
00:28:43.142 --> 00:28:47.389
takaisinmallinnusta ja saimme
erilaisia kenttiä, en ole varma näettekö niitä
00:28:47.389 --> 00:28:53.711
mutta se oli eri offset:ja itse
binääritiedostoon
00:28:53.711 --> 00:28:57.953
Se on lähtöpiste firmwaren maagiseen
headeriin jolla varmistetaan ettei asiat
00:28:57.953 --> 00:29:03.768
ole liian sekaisin ja CRC kokonaisuudelle
esimerkiksi. Otimme talteen joitain
00:29:03.768 --> 00:29:11.704
osoitteita firmwaressa, jotka auttavat
löytämään jalansijan siihen logiikkaan
00:29:11.704 --> 00:29:17.721
jota käsitellään ja se antaa sinulle
osoitteita, joihin voit verrata niitä jatkossa
00:29:17.721 --> 00:29:23.384
Seuraava komponentti jota tutkimme on
Miniweb, joka on web palvelin.
00:29:23.384 --> 00:29:30.040
Se tavallaan paljastaa sinulle erilaisia
sisäisiä osia PLCssa ja missä tilassa
00:29:30.040 --> 00:29:35.359
missä tilassa eri GPIOt, General Purpose
Input Output ovat. Inputit
00:29:35.359 --> 00:29:41.827
ja Outputit, sekä mikä on PLCn itsensä
tila ja miten se paljastaa sen
00:29:41.827 --> 00:29:49.608
käyttäen MWSL kieltä. Miniweb Scripting
Language. Se on kuten näemme seuraavassa,
00:29:49.608 --> 00:29:55.129
seuraavassa, kalvossa ja puhumme siitä
hetken päästä tarkemmin.
00:29:55.129 --> 00:30:01.890
Olemme käynnistäneet, palvelun kuten
myös yhden palvelukäsittelijän
00:30:01.890 --> 00:30:08.585
ADONIS alustus funktioista, joihin
viittasin vähän aiemmin
00:30:08.585 --> 00:30:13.727
Katsotaan vähän dokumentoimattomia http
käsittelijöitä, joiden uskon olevan
00:30:13.727 --> 00:30:18.237
kiinnostavia. Omat suosikkini ovat
"lililili" ja "lolololo"
00:30:18.237 --> 00:30:20.391
naurua
00:30:20.391 --> 00:30:25.184
... ja jos yhdistät ne nokkelasti, ehkä
joku on musiikkillisesti
00:30:25.184 --> 00:30:33.228
lahjakas ja voi tehdä niistä laulun.
Olisin kiinnostunut kuulemaan sen
00:30:33.228 --> 00:30:37.581
Siirrytään MWLS, Miniweb Scripting
Language:en. Se tavallaan
00:30:37.581 --> 00:30:42.676
paljastaa sisäiset toiminnot sallimalla
sinun injektoida html sivulle
00:30:42.676 --> 00:30:47.336
konfiguraatio templaten avulla eri
parametreja ja sellaista.
00:30:47.336 --> 00:30:53.920
Esimerkiksi, kuten näemme tässä ylhäällä
oikeassa kulmassa, näet prosessorin kuorman
00:30:53.920 --> 00:30:59.411
järjestelmässä tietyllä hetkellä. Se ei
vaikuta suorittavan mitään ulostulon
00:30:59.411 --> 00:31:05.700
koodausta, eli se tavallaan luottaa siihen
mitä tulee ulos. Joten voi olla fiksuja
00:31:05.700 --> 00:31:12.902
tapoja tehdä web temppuja tämän kanssa
ja myös tämän tokenisoinnin parsiminen
00:31:12.902 --> 00:31:19.429
on tavallaan mutkikasta. Tutustuin siihen
vähän ja sen implementointia voisi olla
00:31:19.429 --> 00:31:24.753
kiinnostavaa tutkia, mutta pääsemme sen
kaltaisiin asioihin vähän myöhemmin
00:31:24.753 --> 00:31:30.407
Tämän kanssa pääsemme meidän
varsinaisiin löydöksiin
00:31:30.407 --> 00:31:33.927
ja puhumme niistä vähän lisää. Ja tässä
kohtaa Ali jatkaa.
00:31:34.605 --> 00:31:43.120
Ali: Kiitos Tobi. Nyt puhumme kyvyistä,
jotka ovat bootloaderissa, jotka
00:31:43.120 --> 00:31:48.960
sallivat meille rajoittamattoman
koodin ajamisen, periaatteessa
00:31:48.960 --> 00:31:54.640
tämä ominaisuus on käytettävissä uart:ssa
Joten tarvitset fyysisen pääsyn laitteeseen.
00:31:55.600 --> 00:32:00.880
Mutta kun sinulla on fyysinen pääsy, voit
tavallaan, kuten Tobias myöhemmin kertoo,
00:32:00.880 --> 00:32:05.120
voimme itseasiassa ohittaa turvallisuus
järjestelmät, jotka Siemens on kehittänyt
00:32:05.120 --> 00:32:11.208
heidän tuotteeseen. Joten tarvitset uart
pääsyn kuten dokumentoitu tässä, sinulla on
00:32:11.208 --> 00:32:20.240
TX, RX ja GND PLC:ssa ja uart oli tosiaan
edellisessä tutkimuksessa jo dokumentoitu.
00:32:20.240 --> 00:32:25.840
Jokainen osoite, josta puhun tässä tai
mainitsen tässä esityksessä
00:32:25.840 --> 00:32:31.440
ovat bootloader versio neljä.yhteen.
Kuten mainittu aiemmin, Siemens
00:32:31.440 --> 00:32:38.240
aktiivisesti muokkaa bootloaderia, joten
luulen, ettö kahdessa vuodessa näimme 2-3
00:32:38.240 --> 00:32:44.640
muokkausta tai erilaista versiota heidän
bootloaderista tulevan. Joten juuri
00:32:44.640 --> 00:32:50.160
tämä pohjautuu siihen puolen sekunnin
odottamiseen tiettyä komentoa sekunttia
00:32:50.160 --> 00:32:56.320
laitteen configuraation tapahduttua. Se
koskee Siemens S7-1200 mukaan lukien
00:32:56.320 --> 00:33:02.800
SiPLUS ja S7-200 SMART. Itse asiassa joku
Kasperskyltä. IS Security mainitsi
00:33:02.800 --> 00:33:08.000
siitä. Me emme edes tienneet siitä.
Me vain tutkimme S7-1200:sta. Mutta
00:33:08.000 --> 00:33:14.400
Siemens myöhemmin päivitti sen ohjeistuksen
joka koskee muita tuotteita myös.
00:33:14.400 --> 00:33:19.392
Joten puhutaan tästä, erikois pääsy
ominaisuudesta. Kuten mainitsit, yksi
00:33:19.392 --> 00:33:22.821
asia, jonka bootloader itse asiassa
alustaa raudan. Tämän jälkeen laite
00:33:22.821 --> 00:33:27.360
se tavallaan kopioi osan bootloaderin
sisällöstä itseensä muistisegmenttiin
00:33:27.360 --> 00:33:36.000
jota kutsutaan IRAM:ksi, periaatteessa. Ja
sitten PLC odottaa puoli sekuntia tiettyä
00:33:36.000 --> 00:33:39.680
komentoa. Ja kun se tämän saa, tämän
tietyn komennon se vastaa
00:33:39.680 --> 00:33:44.160
tietyllä merkkijonolla ja se tapahtuu
uart:in yli. Joten jos lähetät
00:33:44.160 --> 00:33:50.348
taikajonon, MFGT1, anteeksi huono saksani,
mutta se todennäköisesti tarkoittaa
00:33:50.348 --> 00:33:57.939
"Mit freundlichen Grüßen", toivon että tein
se oikein. Ja sen jälkeen PLC vastaa
00:33:57.939 --> 00:34:02.080
"-CPU" ja sanoo, että nyt olet tässä
erikois pääsy tilassa. Odotan sinun
00:34:02.080 --> 00:34:10.880
komentoja. Ja tässä osoitteessa on myös
uskon 0xedf8 bootloaderissa. Joten tässä
00:34:10.880 --> 00:34:16.480
on dekoodaus meidän clientista, jonka
julkaisemme ensi vuonna, itse asiassa,
00:34:16.480 --> 00:34:25.120
josta näet, se on 2d435055, joka on se
"-CPU" vastaus PLC:lta. Joten nyt olemme
00:34:25.120 --> 00:34:30.560
siinä sisällä. Ja me myös lisäsimme vähän
extra viestiä tähän paketin formaattiin
00:34:30.560 --> 00:34:36.880
Joku kysyi aikaisemmin. Eli kun lähetät
tämän komennon, saat useita toimintoja
00:34:37.600 --> 00:34:43.360
tästä esityksestä käyttöön. Kutsumme niitä
käsittelijöiksi ja periaatteessa ne ovat jotain
00:34:43.360 --> 00:34:49.840
jota kutsumme pääkäsittelijöiksi.
se on jotain 128 merkintää ja siellä on
00:34:49.840 --> 00:34:57.600
noin 3 erillistä käsittelijää, jotka ovat
kuin 0x80 uart konfigurointi ja moikka.
00:34:57.600 --> 00:35:01.680
Pääkäsittelijässä on paljon asioita.
Jos palaat taaksepäin kaksi kalvoa
00:35:01.680 --> 00:35:10.882
minulla on firmware versio tässä,
4.2.3 ja periaatteessa mitä
00:35:10.882 --> 00:35:14.886
tapahtuu on, että periaatteessa se on
tämä komento tässä, get bootloader
00:35:14.886 --> 00:35:19.724
version. Me vain pyydämme erityis
pääsy ominaisuutta kertomaan meille
00:35:19.724 --> 00:35:24.776
mikä on bootloader versio. Ja voit myös
tehdä paljon alemman tason diagnostiikkaa
00:35:24.776 --> 00:35:28.930
toiminnot tapahtuvat siellä. Myös jotkut
firmwareen liittyvät päivitystoimet
00:35:28.930 --> 00:35:34.515
tapahtuvat siellä, jotka ohittavat taval-
liset kryptografiset varmistukset
00:35:34.515 --> 00:35:42.540
firmwaresta, eikä niitä tarvita. Joten
vilkaistaan niitä, koska tämä työ, josta
00:35:42.540 --> 00:35:46.632
puhumme, me pääasiassa käytimme vain
kahta käsitteijää, joten emme käytä...
00:35:46.632 --> 00:35:51.515
emme katso tai emme nyt puhu kaikista
muista
00:35:51.515 --> 00:35:58.281
128 käsittelijästä jotka ovat PLC:ssa.
Joten se toimii. Yksi käsittelijöistä,
00:35:58.281 --> 00:36:05.907
meitä kiinnostava, oli käsittelijä 0x80
joka mainitaan tässä, päivitysfunktio.
00:36:05.907 --> 00:36:11.066
Se periaatteessa antaa sinulle luvan
kirjoittaa tiettyyn osaan muistia
00:36:11.066 --> 00:36:17.259
IRAM, joka aiemmin kopioi osan
bootloaderin sisällöstä. Käytännössä
00:36:17.259 --> 00:36:21.731
lähetät tämän käsittelijän tämän kättelyn
jälkeen, sinun pitää tehdä tämä MFGT1 ja
00:36:21.731 --> 00:36:25.787
sitten -CPU. Ja sitten pariaatteessa aiot
lähettää tämän käsittelijän ja se tavallaan
00:36:25.787 --> 00:36:29.713
tarkastaa, koska joka käsittelijällä voi
olla eri vaatimukset. Tarkastaa
00:36:29.713 --> 00:36:34.234
argumenttien määrän, esimerkiksi, ja
sitten olet tässä päivitys funktio tilassa
00:36:34.234 --> 00:36:38.840
Sitten sinun pitää antaa kohde ID koska
siinä on 4 alifunktiota saatavilla
00:36:38.840 --> 00:36:45.348
Kun siirryt tähän tilaan ja jotkut niistä
ovat IRAM:ia, SPI:ta tai IOC:a tai
00:36:45.348 --> 00:36:51.548
Flashia varten, ja jokaista varten, sinun
pitää valita minkälaisen operaation haluat
00:36:51.548 --> 00:36:58.026
tehdä, haluatko konfiguroida, lukea,
kirjoittaa tai tarkastaa. Ja voit tehdä
00:36:58.026 --> 00:37:02.883
kaikkia näitä. Voit lukea ja kirjoittaa
IRAMia. Periaatteessa tämä on funktio
00:37:02.883 --> 00:37:09.736
käsittelijä 0x80:ssa. Seuraavaksi on pää
käsittelijä 0x1c. Tämä on listattu tässä
00:37:09.736 --> 00:37:19.869
listassa, tässä. Se, se periaatteessa sallii
sinun kutsua funktioita. Periaatteessa nämä
00:37:19.869 --> 00:37:24.004
funktiot on listattu IRAMssa. Ja mitä
tavallaan teet, on että lähetät tämän
00:37:24.004 --> 00:37:29.400
kättelyn, sinä olet ja sinä olet tämä.
Periaatteessa tämä on 0xc1 käsittelijä ja
00:37:29.400 --> 00:37:34.520
sitten voit kutsua ID numeroa sille
käsittelijälle jota haluat käyttää.
00:37:34.520 --> 00:37:41.920
Tässä on useita käsitteöijöitä tarjolla
0x1c:lle. Joten kysymys on mitä voimme
00:37:41.920 --> 00:37:50.845
tehdä sillä. Ja ennen kuin kysyn Tobiakselta
Kysyn kaikilta täällä, ideoita ? Trace,
00:37:50.845 --> 00:37:53.939
joku sanoi trace. En tiedä mitä se
tarkoittaa, mutta
00:37:53.939 --> 00:37:57.875
muminaa yleisössä
00:37:57.875 --> 00:38:04.162
OK, tarkoitat JTAG kanssa? CoreSight
kanssa? Ei, emme aio käyttää sitä
00:38:04.162 --> 00:38:07.162
Joten kysytään Tobiakselta mitä hän
pystyy tekemään.
00:38:07.162 --> 00:38:11.440
Tobias: Yaeh, katsottaessa dynaamisesti ja
näkien mitä se tekee muistin kanssa on,
00:38:11.440 --> 00:38:15.232
luulen, hyvä ajatus yleisesti. Jos vaikka
staattinen takaisinmallinnus ei anna
00:38:15.232 --> 00:38:20.723
sinulle mitään. Tässä tapauksessa katsoime
tai minä katsoin läpi eri funktioita
00:38:20.723 --> 00:38:26.581
ja koitin selvittää, mitä voin tehdä
niillä
00:38:26.581 --> 00:38:32.080
Kun aloitin katsomaan tätä erikois
pääsy ominaisuutta, näin periaatteessa
00:38:32.080 --> 00:38:37.475
että siinä koodissa on liikaa meneillään.
Tavallaan tunsin, että tiesin mitä
00:38:37.475 --> 00:38:42.418
pitäisi olla meneillään. Bootloader, mitä
sen pitäisi olla tekemässä, mutta se
00:38:42.418 --> 00:38:50.171
tuntui vain olevan liikaa. Ja kuinka voimme
yhdistää ne kaksi funktiota on kertausta.
00:38:50.171 --> 00:39:01.672
Käytetään tätä 0x1c käsitelijää, joka
antaa meille kontrollin, minkälaista
00:39:01.672 --> 00:39:07.558
toisen listan funktioista kutsutaan, kuten
näimme aiemmin, kopioidaan käynnistymis
00:39:07.558 --> 00:39:13.720
prosessissa sijaintiin IRAMssa ulkoiselta
read only muistilta. Ja tämä
00:39:13.720 --> 00:39:19.862
paljastaa tämän funktiokäsittelijä taulun
kaikelle mikä voi kirjoittaa IRAM:iin. Ja
00:39:19.862 --> 00:39:25.954
kuten opimme aiemmin, 0x80 käsittelijä
pienissä määrin, pystyy tekemään juuri
00:39:25.954 --> 00:39:32.133
sen. Ja tässä näemme mitä voimme koittaa
tehdä sillä. Joten käytämme ensimmäisessä
00:39:32.133 --> 00:39:38.533
vaiheessa 0x80 käsittelijää kirjoittamaan
IRAMiin. Voimme todellisuudessa injektoida
00:39:38.533 --> 00:39:43.921
Toisen funktiopointerin yhdessä konfiguraatio
arvojen kanssa, joka ohittaa erilaiset
00:39:43.921 --> 00:39:49.580
tarkastukset argumenttien koolle ja sen
sellaiselle. Voimme injektoida tämän
00:39:49.580 --> 00:39:56.286
merkintänä tauluun ja voimme kirjoittaa
tauluun myös payloadin, jota käytämme
00:39:56.286 --> 00:40:02.760
shell koodina. Ja sitten toisessa vaiheessa
voimme käyttää tätä aiemmin injektoitua
00:40:02.760 --> 00:40:11.971
indexia jonka määritimme, laukaisemaan
kutsun omaan payloadiimme. Joten nyt
00:40:11.971 --> 00:40:17.160
meillä on ajossa koodia bootloader
kontekstissa. Joka on niin etuoikeutettu
00:40:17.160 --> 00:40:24.213
kuin mihin tässä vaiheessa pääsemme. Ja
voimme leikkiä vähän sen kanssa.
00:40:24.213 --> 00:40:29.560
Ja yhteenvetona voimme ketjuttaa kaiken
tämän yhteen ja saamme koodin suorituksen
00:40:29.560 --> 00:40:35.619
Ja Alin sanoin, tällä tekniikalla
raketoimme PLCn. Ja ennen kuin
00:40:35.619 --> 00:40:40.903
menemme siihen, mitä tämä antaa meidän
tehdä, sananen vaiheistetusta payloadista
00:40:40.903 --> 00:40:47.003
Eli kirjoitin tämän ketjun erilaisia
kutsuja ja paljastui, että tämä
00:40:47.003 --> 00:40:52.326
kirjoittaminen IRAMiin on jotenkin
ensinnäkin hidasta, mutta myös herkkä
00:40:52.326 --> 00:40:56.736
virheille, joten laite voi mennä virhetilaan
enkä ole aivan varma mitä se koskee
00:40:56.736 --> 00:41:03.498
mutta olisi mielenkiintoista kuulla se
Siemens insinööriltä, mutta se johti
00:41:03.498 --> 00:41:08.672
minut injektoimaan vähän enkoodattua
payloadia, jossa on vain osa
00:41:08.672 --> 00:41:16.345
tavuista, joka antaa meille liittymän
suorittaa
00:41:16.345 --> 00:41:20.124
lukuja ja kirjoittamisia mielivaltaisesti
kirjoittaa ja käyttää tätä injektoidessa
00:41:20.124 --> 00:41:25.002
tason kaksi payloadit. Ja tätä haluamme
havainnollistaa tässä.
00:41:26.741 --> 00:41:32.796
Ali: Kiitos, nyt voisimme esittää demon,
4 demoa itse asiassa. Ensimmäinen on
00:41:32.796 --> 00:41:37.156
vain kommunikaation näkeminen, peri-
aatteessa lähetetään nämä pyynnöt ja
00:41:37.156 --> 00:41:42.265
saadaan vastaus ja periaatteessa lähetetään
tämä data payload. Ylhäällä on raaka
00:41:42.265 --> 00:41:48.493
UART kommunikaatio. Älkää huolehtiko, se
suurennetaan myöhemmin ja alhaalla on
00:41:48.493 --> 00:41:55.568
meidän client, joka keskustelee PLClle
ja lähettää meidän kommentit. Joten
00:41:55.568 --> 00:42:01.134
vain ajamme UARTia. Ja tässä lähetämme
komentomme. Ja jos katsot ylhäälle näet
00:42:01.134 --> 00:42:07.048
-CPU signaali tuli PLClta.
Ja nyt lähetämme vaiheistuksemme
00:42:07.048 --> 00:42:11.629
ja vaiheistuksemme lähettää vain
kuittauksen, että tiedämme vaiheistuksen
00:42:11.629 --> 00:42:16.014
toimivan kunnolla. Tämä on firmware versio
bootloader versio 4.2.1, periaatteessa
00:42:16.014 --> 00:42:19.647
Joten nyt aiomme tehdä jotain muuta, aiomme
aiomme tosiasiassa dumpata
00:42:19.647 --> 00:42:24.234
firmwaren käynnissä olevasta PLCsta ja
verrata sitä firmwareen joka on ladattu
00:42:24.234 --> 00:42:30.913
Siemensin web sivulta. Ensin me aiomme
tosiaan purkaa firmwaren jonka latasimme
00:42:30.913 --> 00:42:35.520
Siemensin websivuilta, koska se on pakattu
lzp3:lla.
00:42:38.080 --> 00:42:43.360
Eli niin aiomme toimia. Oh ja aiomme
oikeastaan ensin muodostaa SSL yhteyden.
00:42:43.360 --> 00:42:50.320
Joten, SSL portin ohjaus, SSH portin ohjaus
ensin ja olemme juuri tarkastamassa että
00:42:50.320 --> 00:42:56.952
PLC toimii oikein. Ettei tämä ole
viallinen PLC tai jotain sellaista
00:42:56.952 --> 00:43:02.107
Kirjoitimme jotain. Varmistamme vain että
web palvelin avautuu. aukeaa
00:43:02.755 --> 00:43:12.640
se on auki, se on hyvä. Ja koitan yös
kirjautua websivulle web serverille
00:43:12.640 --> 00:43:16.720
web palvelimelle PCLssa. Taas, varmista
että PLC on toimiva
00:43:16.720 --> 00:43:23.920
Myös syötetään salasana. Luulen, että
kaikki voivat sen arvata. Ja näet että
00:43:23.920 --> 00:43:28.720
kirjaudumme viimein ja vasemmalla näet
kaikki toiminnallisuudet jotka
00:43:28.720 --> 00:43:34.320
latautuvat PLChen liittyen. Joten se on
käynnissä, käyvä, toimiva PLC. Ja nyt
00:43:34.320 --> 00:43:39.680
puretaan firmware, joka ladattiin
Siemensin websivuilta
00:43:39.680 --> 00:43:43.962
vientilisenssin tarkastamisen jälkeen jne.
Eli he haluavat varmistaa etteivät
00:43:43.962 --> 00:43:51.664
ihmiset Iranissa ja Pohjois Koreassa saa
sitä. Minä olen Iranista muuten. Joten
00:43:51.664 --> 00:43:55.485
tässä on purettu firmware. Mutta koska
päivitysnopeus on iso, kuten Tobias
00:43:55.485 --> 00:43:59.415
mainitsi aiemmin, me vain aiomme
viedä
00:43:59.415 --> 00:44:05.049
256 kilotavua firmwarea jostain osasta
web palvelua IDAan.
00:44:05.049 --> 00:44:10.358
Sinun täytyy asettaa big endian CPUlle.
Ja myös asemoida framework uudelleen
00:44:10.358 --> 00:44:15.346
Kuten näet, täällä ei ole funktiota vielä,
mutta kun se on asemoitu, meillä on kaikki
00:44:15.346 --> 00:44:24.538
funktiot ja yeah, ja sitten meidän täytyy
vain ottaa ja viedä 256 kilotavua firmwaresta
00:44:24.538 --> 00:44:29.406
joten me tarkoituksella hidastamme UARTia
koska haluamme varmistaa että emme
00:44:29.406 --> 00:44:33.289
tee sitä liian nopeasti ja ylivuoda
puskuria, joka on PLCn sisäinen
00:44:33.289 --> 00:44:41.896
Tässä, esimerkiksi, tässä osoitteessa,
691e28 aiomme exportata 256 kilotavua
00:44:41.896 --> 00:44:45.876
Tämä on laiteohjelmistosta, Siemens
firmwaresta. Oikein. Me vain exporttaamme
00:44:45.876 --> 00:45:00.737
sen. Eli, yeah, sitä kutsutaan nyt
fw-0x691E28 ulostulo kansiossa. Eli nyt
00:45:00.737 --> 00:45:05.645
olemme valmiit tämän kanssa. Aiomme
dumpata saman osoitteen PLCsta, eli
00:45:05.645 --> 00:45:11.960
toimivasta PLCsta. Pitää mainita jälleen.
Eli yläosa on periaatteessa raaka UART
00:45:11.960 --> 00:45:17.959
ja tämä on meidän client osa ja me dump-
paamme sen kylmäkäynnistys hyökkäyksellä
00:45:17.959 --> 00:45:22.147
Eli tavallaan resetoimme PLCn. Ja ennen
kuin se on ohi, kirjoitamme RAM:in
00:45:22.147 --> 00:45:28.963
me periaatteessa dumppaamme sisällön
RAM:sta. Eli tämä on osoite 0x691e28.
00:45:28.963 --> 00:45:34.991
Tämä on samasta osoitteesta periaatteessa.
Ja dumppaamme 256 kilotavua ja tässä
00:45:34.991 --> 00:45:41.071
lähetämme MFGT1 periaatteessa ja saamme
-CPU ja sitten loput vaiheistajasta ja muut
00:45:41.071 --> 00:45:48.807
menevät. Nyt periaatteessa olemme lähet-
tämässä paketteja ja lopulta saamme
00:45:48.807 --> 00:45:57.478
vastauksen. Saimme tavallaan kaiken payloadin
kuin dumppasimme mem_dump_00691e28
00:45:57.478 --> 00:46:03.342
Tämä on PLCn RAM muistista. Tämä ei
ole enää Siemens web sivulta
00:46:03.342 --> 00:46:17.300
Me nappasimme sen omasta koneesta ja
vertaamme sitä.
00:46:17.300 --> 00:46:21.887
Eli meillä on muistidumppi ja alkuperäinen
firmware 265 Kb molempia. Ja sitten
00:46:21.887 --> 00:46:28.977
aiomme verrata niitä keskenään. Ja kuten
näette, sen pitäisi näyttää teille kuten
00:46:28.977 --> 00:46:32.755
täydellinen 100% vastaavuus. Tarkoittaen
ettö se on täsmälleen sama firmware,
00:46:32.755 --> 00:46:37.136
joka on saatavilla Siemensin web sivulta.
Dumppasimme sen suoraan Siemens PLC
00:46:37.136 --> 00:46:44.279
muistista käyttäen esikoispääsy ominai-
suutta. Tehdäänpä toinenkin. Tällä kertaa
00:46:44.279 --> 00:46:47.896
haluamme näyttää rajoittamattoman koodin
suorittamisen hyvin yksinkertaisesti.
00:46:47.896 --> 00:46:53.474
Kirjoitamme vain kustomoidun payloadin
PLClle ja saamme tervehdyksen PLClta.
00:46:53.474 --> 00:46:57.960
tervehdyksen PLClta. Periaatteessa pyysimme
PLCta lähettämään tätä viestä
00:46:57.960 --> 00:47:04.922
koko ajan jatkuvasti. Eli jälleen, lähetämme
kustomoidun payloadimme tänne ja
00:47:04.922 --> 00:47:13.449
sanomme hello loop. Ja periaatteessa
PLC yksinkertaisesti lähettää tämän loopin
00:47:13.449 --> 00:47:24.395
meille. Kaikki nämä asiat, jälleen, ovat
bootloader 4.2.1:lle. Sinun pitää muokata
00:47:24.395 --> 00:47:29.704
tiettyjä asioita, koska Siemens sanoo, että
he päivittivät taas bootloaderinsa 2019
00:47:29.704 --> 00:47:36.458
joulukuussa, jolloin ostimme uuden PLCn,
jälleen, taas. Ja nyt tässä saamme
00:47:36.458 --> 00:47:42.997
vastauksen. Tuo on PLC, joka lähettää
periaatteessa meille meidän raakadataa
00:47:42.997 --> 00:47:46.894
jota PLC meille jatkuvasti lähettää. Tuo
näyttää meille että vastaanotamme sitä.
00:47:46.894 --> 00:47:53.852
Mutta tämä oli ehkä liian yksinkertaista.
Nämä ovat raakadataa jota saamme PLC:lta.
00:47:53.852 --> 00:47:57.764
Tehdään jotain monimutkaisempaa. Näytetään
jotain, joka ei ole peräisin meiltä.
00:47:57.764 --> 00:48:04.167
Pelataan peliä nimeltä ristinolla PLCn
sisällä. Ja luulen, että ellet tiedä,
00:48:04.167 --> 00:48:08.873
näin ristinolla, näin minä pelaan
minä vain piirrän
00:48:08.873 --> 00:48:20.308
googlella. Joten nyt lähetämme jälleen
meidän kustom payloadin, mutta tällä
00:48:20.308 --> 00:48:25.364
kertaa lähetämme vain osittaisia kyselyitä
joltain toiselta Internetistä ja vain
00:48:25.364 --> 00:48:30.091
lataamme ne PLChen. Luonnollisesti sinun
pitää säätää useita asioita.
00:48:30.091 --> 00:48:38.726
Mutta lähetämme meidän payloadin,
mukaanlukien vaiheistuksen ja nämä
00:48:38.726 --> 00:48:44.956
ovat raakadataa. Jälleen, tässä on meidän
client. Ja lopulta näet ristinolla
00:48:44.956 --> 00:48:50.175
käyttöliittymän, johon menet. Eli pelaaja1
pelaa oikeasti X:lla
00:48:50.175 --> 00:48:54.870
ja pelaaja2 pelaa 0:lla. Joten näet kaikki
positiot, joista valitset.
00:48:54.870 --> 00:49:04.827
Sinulla on X ja toivottavasti
pelaaja1 voittaa. Ja siinä se oli.
00:49:04.827 --> 00:49:15.680
Siinä oli demo.
aplodeja
00:49:15.680 --> 00:49:19.891
Luonnollisesti, on paljon muitakin ideoita
joita voimme työstää, injektoida muuta
00:49:19.891 --> 00:49:24.560
kustom koodia, käyttää erikoispääsy
ominaisuutta, jatkamme tätä työtä.
00:49:24.560 --> 00:49:30.320
Kuten muitakin asioita Siemensissa,
olemme pahoillamme Siemens, me vain
00:49:30.320 --> 00:49:35.926
jatkamme tätä työtä, mutta jatkoa seuraa
vielä. Sillä välin, on joitain ajatuksia
00:49:35.926 --> 00:49:40.881
muille ihmisille, mikäli he katsovat tätä
ja tutkivat turvallisuutta
00:49:40.881 --> 00:49:45.860
Siemens PLC:ssa. Eli käyttämällä tätä
erikoispääsyä, voit tehdä joitain asioita.
00:49:45.860 --> 00:49:49.826
Eli esimerkiksi, voit käyttää tätä
prophylaxis toiminnallisuutta
00:49:49.826 --> 00:49:54.607
kirjoittaaksesi firmwareen. Kuten mainit-
simme funktio on käytettävissä, ja se
00:49:54.607 --> 00:49:59.320
ei vaadi kryptografista allekirjoitusta,
jota tavallisesti päivitys prosessissa
00:49:59.320 --> 00:50:03.917
on firmwaressa saatavilla. Eli voit vain
ohittaa sen ja se on vain CRC
00:50:03.917 --> 00:50:08.971
tarkastussumma. Eli mitä voit tehdä,
esimerkiksi, lisätä merkinnän organisoimaan
00:50:08.971 --> 00:50:13.446
vaikka alustusrutiinia, joka on saatavilla.
Ja sitten mitä voit tehdä ennen
00:50:13.446 --> 00:50:19.108
organisoitua alustusrutiinia, jota
kutsumme th_initial
00:50:19.698 --> 00:50:21.167
Toinen mitä voimme tehdä,
00:50:21.167 --> 00:50:23.893
mikäli muistatte, Tobias puhui
dokumentoimattomista
00:50:23.893 --> 00:50:27.682
ja luovuudesta tuottaa musiikkia
li li li lo lo lo
00:50:27.682 --> 00:50:30.565
Eli mitä joku voi tehdä on
00:50:30.565 --> 00:50:35.871
periaatteessa liittää tietty käsittelijä
tai ylikirjoittaa olemassaoleva.
00:50:35.871 --> 00:50:39.757
Ja laittaa se tekemään jotain kuin Triton.
En tiedä tunteeko sitä kukaan,
00:50:39.757 --> 00:50:42.660
mutta Triton joka on malware,
joka hyökkäsi petrokemian
00:50:42.660 --> 00:50:44.339
tehtaaseen Saudi Arabiassa.
Eli he yrittivät
00:50:44.339 --> 00:50:47.863
tehdä sen TCPlla. Mutta hyökkääjä
voisi ehkä tehdä sen http:lla esimerkiksi
00:50:47.863 --> 00:50:54.086
ja vain odottaa ja kuunnella kommentteja
ja muita vaihtoehtoja kuten
00:50:54.086 --> 00:51:00.947
päivittää jump taulut AWP käsittelijöissä,
joita voidaan myös käyttää prosessoimaan
00:51:00.947 --> 00:51:08.745
tiettyjä hyökkäyksiä. Eli mitäs muuta
sitä olisi? Eli mitä tutkimme
00:51:10.045 --> 00:51:10.919
Me tutkimme
00:51:10.919 --> 00:51:15.774
hyökkäyspinta-alaa Siemens S7 PLC:ssa
Siinä on joitan mahdollisuuksia paikalliseen
00:51:15.774 --> 00:51:19.838
käyttäjätaso hyökkäykseen. Jota voimme...
Mitä katsoimme oli bootloader
00:51:19.838 --> 00:51:25.351
Työstämme edelleen hardware hyökkäyksiä ja
hardware - ohjelmistä hyökkäyksiä reunalla.
00:51:25.351 --> 00:51:31.404
Tämä työ on käynnissä, ja siitä emme
tietenkään keskustele nyt? Lisäksi
00:51:31.404 --> 00:51:35.022
kiinostava asia, luulen, jollekin, joka on
kiinostunut PLCn turvallisuudesta
00:51:35.022 --> 00:51:38.861
erityisesti sisäisesti, en puhu nyt vain
yleisestä eriyttämisestä
00:51:38.861 --> 00:51:43.058
verkossa ja sellaisesta ICS puolella.
Puhun kehittyneemmistä alemman tason
00:51:43.058 --> 00:51:51.252
asioista. Mielestämme vaikka MWSL on
kiintoisa kohde. Siinä on todennäköisesti
00:51:51.252 --> 00:51:55.677
bugeja implementoinnissa. Myös, tiedosto
järjestelmän parsinnassa ja firmwaren
00:51:55.677 --> 00:52:00.840
allekirjoituksessa, siellä on varmaankin
jotain juttua ja myös MC7 parserissa,
00:52:00.840 --> 00:52:06.601
mitä siinä on käyttöoikeuksien nostamisen
näkökulmasta ja myös remote code execution
00:52:06.601 --> 00:52:13.630
näkökulmasta, molemmat MiniWeb web
palvelin ja myös mitä tahansa verkossa
00:52:13.630 --> 00:52:18.301
saatavilla oleviin palveluihin, joita
niissä on, voisi olla kiinostavaa. Katsot
00:52:18.301 --> 00:52:27.577
itseasiassa tätä kohtaa nyt. Joten lopuksi.
PLCt kehittyvät monimutkaisemmiksi.
00:52:27.577 --> 00:52:31.354
Se on totta, koska ne tosiasiassa tarjoavat
enemmän ja enemmän ominaisuuksia ja
00:52:31.354 --> 00:52:34.969
johtuen tästä monimutkaisuudesta, niissä
on enemmän bugeja. Näemme,
00:52:34.969 --> 00:52:41.676
esimerkiksi, MWSL:ssa, jota katsomme nyt,
siitä taivutetaan ja väännetään
00:52:41.676 --> 00:52:47.037
monimutkaisempaa. Heillä on periaatteessa
joku anti-vianetsintä, josta juuri
00:52:47.037 --> 00:52:52.817
keskustelimme Siemens PLCssa, mutta heillä
on myös, esimerkiksi, päivitys
00:52:52.817 --> 00:52:59.465
eheyden tarkastus, kuten allekirjoitus
firmwaressa kun se ladataan PLChen ja
00:52:59.465 --> 00:53:05.578
sellaisia juttuja. Joten he tekevät siitä
monimutkaisempaa. Mutta mitä meidän tulee
00:53:05.578 --> 00:53:14.279
tietää että jos heidän uhkamallissa, joka
usein tehdään tai turvallisuusmallissa
00:53:14.279 --> 00:53:20.220
jonka he rakensivat. Jos heillä on ominaisuus
joka ohittaa samat turvallisuusjärjestelyt
00:53:20.220 --> 00:53:24.415
jotka he suunnittelivat. Tarkoitan, että,
mielestäni on selvää että heidän pitää
00:53:24.415 --> 00:53:28.427
poistaa, kuten bootloaderin tapauksessa,
heidän erikoispääsy ominaisuudet.
00:53:28.427 --> 00:53:32.340
hyvänä esimerkki. Ja tietenkin asiakkaiden
täytyy tietää, koska heillä on sellainen
00:53:32.340 --> 00:53:36.428
toiminto ja he tarvitsevat sitä, kunhan
asiakkaat tietävät, se on hyvä.
00:53:36.428 --> 00:53:41.001
Mutta jos he eivät tiedä, he eivät voi
huomioida tätä riskiä strategiassaan tai
00:53:41.001 --> 00:53:46.809
uhkamallissa, joka heillä on. Joten.
Ja heidän täytyy miettiä tai uudelleen
00:53:46.809 --> 00:53:51.054
miettiä turvallisuutta tietämättömyydellä.
Ehkä he sallivat meidän, tutkijoina,
00:53:51.054 --> 00:53:53.700
päästä käsiksi laitteisiin
paremmin ja helpommin
00:53:53.700 --> 00:53:55.815
tutkiaksemme niitä enemmän.
Me teemme vielä sitä
00:53:55.815 --> 00:54:00.894
mutta se vain kestää kauemmin. Ja uskon
että on paljon enemmän nähtävää ja
00:54:00.894 --> 00:54:08.464
tehtävää PLC:issa ja Siemens ei ole
viimeinen jonka parissa työskententelemme.
00:54:08.464 --> 00:54:13.844
Joten meidän täytyy kiittää joitain ihmisiä.
Thosrten Holz, ohjaajamme, hän ei ole täällä.
00:54:13.844 --> 00:54:20.802
Thomas, Alexandre, Marina, Lucian, Nikita,
ja Robin. Heidän avustaan ja työstään.
00:54:20.802 --> 00:54:26.902
Ja nyt aiomme vastata kysymyksiin.
00:54:26.902 --> 00:54:27.881
Herald: Kiitoksia.
00:54:27.881 --> 00:54:37.078
aplodeja
00:54:38.944 --> 00:54:47.318
Herald: Eli, Yeah, voitte tulla jonoon
mikrofonille tai kirjoittaa kysymyksenne
00:54:47.318 --> 00:54:54.941
Elisa huoneessa. Ah, siinä mennään. Se on
päällä nyt, luulen.
00:55:02.043 --> 00:55:07.360
Signal Angel: Hei, Yeah. ELi on yksi kysymys
Internetistä. Tarkistitteko MC7
00:55:07.360 --> 00:55:15.789
parserin? Jos kyllä. Löysittekö mitään
piilotettuja koneohjeita siitä
00:55:15.789 --> 00:55:21.760
tai jotain.
Ali: Haluatko vastata? Onko tämä
00:55:21.760 --> 00:55:26.400
nauhoitettu, vai toistanko kysymyksen? Eli
he kysyvät tarkastimmeko MC7 parserin.
00:55:26.400 --> 00:55:32.097
OK, Hyvä. Eli emme todella tutkineet
MC7 parseria
00:55:32.097 --> 00:55:35.548
mutta työskentelemme sen parissa nyt.
00:55:36.934 --> 00:55:40.640
Mic: Hei ? Kuinka pystyitte löytämään
00:55:40.640 --> 00:55:45.840
MFG turvallisuus salasanan?
Ali: Se on todella pitkä tarina. Ensinnäkin
00:55:45.840 --> 00:55:50.236
meillä oli se edessämme hyvin, hyvin
pitkän ajan, kunnes Siemens toi
00:55:50.236 --> 00:55:56.160
tämön anti-debugging ominaisuuden.
Sen jälkeen, meidän piti keksiä toinen
00:55:56.160 --> 00:56:01.932
keino, toinen keino sen löytämiseen,
löytää samanlainen toiminto, toisia
00:56:01.932 --> 00:56:06.480
tapoja sallia se, koska asia josta emme
keskustelleet täällä, oli ettemme kertoneet
00:56:06.480 --> 00:56:11.920
kuinka me, esimerkiksi suoritimme sen
komennon aikaisemmin PLC:ssa.
00:56:11.920 --> 00:56:18.240
Siihen liittyi työtä, johon saimme apua
joiltain tutkijoilta Hollannista ja Ranskasta.
00:56:18.240 --> 00:56:24.560
Eli tämä oli jotain, josta informoitiin
Siemensia 2013. Luulen, että he tiesivät
00:56:24.560 --> 00:56:31.280
siitä. Mutta 2016, he korjasivat sen ja
se vaikutti kuin he periaatteessa koittivat
00:56:31.280 --> 00:56:35.269
suojata PLCta tämän tapaisilta hyökkäyksiltä.
Sitä ei oltu julkaistu aiemmin.
00:56:35.269 --> 00:56:39.240
Joten käytimme sitä. Emme halua
keskustella siitä, koska
00:56:39.240 --> 00:56:42.939
alkuperäinen tekijä ei halunnut puhua siitä.
Mutta toistimme,mitä he olivat,
00:56:42.939 --> 00:56:49.360
mitä he tekivät. Ja kun meidän todella piti
hakea muita keinoja, silloin se
00:56:49.360 --> 00:56:53.760
avasi silmämme, että on olemassa joitain
muita toimintoja myös.
00:56:53.760 --> 00:56:57.520
On sellaisia, kuten esimerkiksi bootloader.
Mutta ennen kuin tarvitsimme niitä,
00:56:57.520 --> 00:57:01.659
emme ikinä etsineet niitä. Joten se oli
tavallaan edessämme
00:57:01.659 --> 00:57:05.636
jotain kaksi vuotta.
Tobias: Ehkä yksi kiinostava osa
00:57:05.636 --> 00:57:10.364
taustatarinaa on, että me periaatteessa
aikaisempaa tekniikkaa käyttäessämme
00:57:10.364 --> 00:57:16.240
me todellisuudessa ylikirjoitimme ehdollisen
hypyn, joka ohjasi meidät erikoispääsy
00:57:16.240 --> 00:57:18.280
toiminnon suorittamiseen ehdottomalla
hypyllä. Eli periaatteessa leikkasimme pois
00:57:20.320 --> 00:57:25.680
60% koko firmware koodista vahingossa.
Ja sitten täysin
00:57:25.680 --> 00:57:30.320
aavistuksesta, kuten kerroin aiemmin, että
siellä oli vain liikaa erilaisia
00:57:30.320 --> 00:57:35.040
toimintoja. Palasin takaisin ja ymmärsin,
että se oli juuri se sama kohta
00:57:35.040 --> 00:57:41.600
jonka ylikirjoitimme aikaisemmin, ja joka
meidän piti periaatteessa korvata ja
00:57:41.600 --> 00:57:43.493
käyttää omiin tarkoituksiimme.
00:57:44.113 --> 00:57:46.286
Mic: Onko siinä mitään käynnistyksen
aikaista turvallisuutta
00:57:46.286 --> 00:57:51.470
muuta kuin CRC tarkastus? Eli te. Voitteko
muokata sisältöä SPI flashilla ja
00:57:51.470 --> 00:57:54.413
saada mielivaltaisen koodin
suorittamisen sillä tavalla myös?
00:57:55.059 --> 00:58:01.911
Ali: Eli, se riippuu mistä vuodesta olet
puhumassa 2017, 2016. Eli puhumme
00:58:01.911 --> 00:58:07.190
samasta mallista PLCsta, mutta vuosina
2017 ja 2018. Ei. Voisit periaatteessa
00:58:07.190 --> 00:58:11.770
vain ottaa ulos SPI flashin, ylikirjoittaa
sen. Ja se on hyvä, Mutta jos
00:58:11.770 --> 00:58:16.642
olit ylikirjoittamassa sitä ja aiheutit
pysähdyksen CPU coressa, se taas laukaisee
00:58:16.642 --> 00:58:23.063
sen anti-vianetsintä ominaisuuden joka
heillä on. Tämä vahtikoira periaatteessa.
00:58:23.063 --> 00:58:28.613
Mutta firmwaren eheyden kannalta.
Periaatteessa kun kerran kirjoitat...
00:58:28.613 --> 00:58:33.347
firmware kirjoitetaan NAND flashille,
mutta se on vain CRC tarkastus. Mutta
00:58:33.347 --> 00:58:37.189
päivitysprosessi? Ei. Siinä on joitain
kryptografisia tarkastuksia, mutta kun
00:58:37.189 --> 00:58:41.920
se on kirjoitettu, ei. Siinä on joitain
ongelmia, jotka taas. Se on edelleen
00:58:41.920 --> 00:58:45.456
jatkuvaa työtä ja emme halua puhua siitä
vielä, mutta hyvä huomio-
00:58:45.456 --> 00:58:50.682
Mic: Kiitos.
Mic: Hei, Kiitos esityksestä, voisitteko
00:58:50.682 --> 00:58:54.937
avata teidän keskustelua valmistajan
kanssa ja aikataulua?
00:58:54.937 --> 00:59:00.188
Ali: Kyllä, ensinnäkin, me olimme tienneet
tästä ongelmasta puolitoista vuotta
00:59:00.188 --> 00:59:04.429
ennen kuin raportoimme asian valmistajalle.
Tärkein syy oli, että käytimme sitä yhteen
00:59:04.429 --> 00:59:09.329
toiseen projektiin. Tämä on todellisuudessa
tulos oikeasti sivuprojektista
00:59:09.329 --> 00:59:12.867
enemminkin kuin pääprojektista. Mutta
koska varsinainen projekti on jotain
00:59:12.867 --> 00:59:18.083
muuta ja edelleen käynnissä. Mutta sen
projektin sivussa, meillä oli pääsy.
00:59:18.083 --> 00:59:21.888
Ja koska olimme huolissamme, että valmista-
jalle raportoidessa he voivat korjata
00:59:21.888 --> 00:59:26.244
sen ohjelmistopäivityksellä ja sen jälkeen
estää kaikki muut CVEt, joita löydämme tässä
00:59:26.244 --> 00:59:31.758
toisessa projektissa, emme halunneet kuin
viimein 2019. Thomas Weber halusi puhua
00:59:31.758 --> 00:59:37.581
tässä esityksessä periaatteessa tästä
JTAG liittymästä CoreSightiin ja sitten
00:59:37.581 --> 00:59:42.776
päätimme kuitenkin puhua siitäkin.
Mutta muutenkin, oikeastaan me
00:59:42.776 --> 00:59:48.512
puhuimme kesäkuussa, luulen, Siemensin
kanssa ja he vahvistivat, että tässä raudassa
00:59:48.512 --> 00:59:53.209
on erikoispääsy ominaisuus. Ja he ovat..
He sanovat, että aikovat poistaa
00:59:53.209 --> 00:59:58.460
sen ja se siitä. Me myös lähetimme
heille write Up:in luettavaksi.
00:59:58.460 --> 01:00:02.644
Herald: Eli, siellä on vielä viimeinen
kysymys Signal Angelilta.
01:00:04.173 --> 01:00:09.259
Signal Angel: Eli, siellä on seuraava
kysymys Internetistä. Jos työkalut kuten
01:00:09.259 --> 01:00:15.696
Flashrom, eivät tue tuntematonta SPI flash
rom sirua, kuinka te tavallisesti puratte
01:00:15.696 --> 01:00:22.418
firmwaren, jos ette halua purkaa sirua
tai käyttää SOICB istukkaa.
01:00:22.418 --> 01:00:26.538
Ali: Voitko toistaa sen. En saanut
kysymystä, saitko sinä ?
01:00:26.538 --> 01:00:32.419
Signal Angel: Jos työkalut kuten Flashrom,
eivät tue tuntematonta SPI flashrom sirua
01:00:32.419 --> 01:00:38.640
kuinka te tavallisesti puratte firmwaren,
jos ette halua purkaa sirua
01:00:38.640 --> 01:00:42.262
tai käyttää SOICB istukkaa.
Ali: Ensinnäkin, me emme oikeasti koskaan
01:00:42.262 --> 01:00:49.030
pura SPI flashia. Teimme sen vain CPU:lle.
Ja koska halusimme tietää, että
01:00:49.030 --> 01:00:53.920
Siemens uudelleenbrändää PLCtaan. Eli se
ei ole heidän CPU, se on Ransasilta,
01:00:53.920 --> 01:00:58.755
mutta siksi purimme osia.
Mutta purkujutut sikseen.
01:00:58.755 --> 01:01:04.160
Mutta muista asioista, siellä on
kuitenkin tämä toiminto, tämä
01:01:04.160 --> 01:01:08.068
bootloader toiminto, joka antaa sinun
lukea sisällön muistista.
01:01:08.068 --> 01:01:11.621
Eli se on yksi asia, jonka voit lukea.
Selvästi sinun ei edes tarvitse, kiitos
01:01:11.621 --> 01:01:15.760
yhden oppilaani. Me tiedämme yhden, jota
sinun ei tarvoitse edes
01:01:15.760 --> 01:01:20.640
ottaa pois bootloaderista, siru. Me voimme
periaatteessa vain kytkeytyä suoraan
01:01:20.640 --> 01:01:27.972
levylle ja dumpata firmwaren. Marcello, se
on hänen nimensä. Hän on täällä. Mutta
01:01:27.972 --> 01:01:34.110
kuitenkin, voit vain suoraan lukea sen.
Ja kyllä, en usko, että lukemis osuus
01:01:34.110 --> 01:01:38.000
erityisesti osat siitä, ovat suojattuja,
erityisesti uusissa versioissa, joissa
01:01:38.000 --> 01:01:43.200
et voi lukea kaikkea. Mutta muuten, en
usko, että se on vaikeampaa nyt vielä.
01:01:43.200 --> 01:01:47.680
Olen varma, että he työskentelevät sen
parissa ja me myös työstämme jotain
01:01:47.680 --> 01:01:51.520
jolla se kierretään. Joten.
Herald: Okei, seuraava esitys
01:01:51.520 --> 01:01:57.509
tulee olemaan toimitusroboteista. Sasha
20 minuutin päästä. Annetaan aplodit.
01:01:57.509 --> 01:02:01.712
aplodeja
01:02:01.712 --> 01:02:11.763
36c3 esityksen jälkimusiikki
01:02:27.021 --> 01:02:35.053
Translated by Esa Lammi
(ITKST56 course assignment at JYU.FI)