1
00:00:00,000 --> 00:00:09,132
Translated by Esa Lammi
(ITKST56 course assignment at JYU.FI)
2
00:00:09,132 --> 00:00:18,264
36c3 intromusiikki
3
00:00:18,264 --> 00:00:26,160
Herald: Siemens päätti äskettäin lisätä
turvallisuusominaisuuksia PLC:hen. Ja
4
00:00:26,160 --> 00:00:32,800
tänään meillä on Tobias ja Ali ja he
kertovat meille mitä he ovat onnistuneet
5
00:00:32,800 --> 00:00:40,720
löytämään. Tämä PLC. He molemmat tulevat
Ruhr yliopistosta Bachumista. Tobias on
6
00:00:40,720 --> 00:00:46,160
hiljattain saatu tohtoriopiskelijaksi. Ja
Ali on tutkijatohtori. Joten, annetaanpa
7
00:00:46,160 --> 00:00:48,358
heille aplodit.
8
00:00:48,358 --> 00:00:56,818
aplodeja
9
00:00:59,648 --> 00:01:03,557
Ali: Hmm, missä meidän kalvot ovat ?
Tobias: Esitystila ?
10
00:01:09,750 --> 00:01:17,210
ALi: Kyllä, OK. Tervetuloa esitykseemme.
Syväsukellus koodin suorittamiseen
11
00:01:17,210 --> 00:01:23,757
Siemens S7 PLCssa. Nimeni on Ali Abbasi ja
kuten mainittu olen tutkijatohtorina
12
00:01:23,757 --> 00:01:28,160
järjestelmäturvallisuuden osastolla Ruhr
yliopistossa Boch:sa ja tässä on kollegani
13
00:01:28,160 --> 00:01:34,400
Tobias: Olen Tobias, tai Toby. Hauska olla
täällä. Tämä on viides kertani tässä
14
00:01:34,400 --> 00:01:38,640
tapahtumassa ja nyt voin viimein antaa
takaisin tavallaan ja olen innoissani.
15
00:01:39,760 --> 00:01:46,880
Joten asiaan. Ensin hieman esityksesen
kulusta. Haluamme antaa teille
16
00:01:46,880 --> 00:01:51,360
hieman taustatietoa mitä PLCt, eli ohjel-
moitavat logiikka ohjaimet ovat,
17
00:01:51,360 --> 00:01:56,640
miksi haluaisimme sellaisia käyttää ja
minkälaisessa ympäristössä. Ja sitten
18
00:01:56,640 --> 00:02:02,600
sitten haluamme mennä yksityiskohtiin
Siemens PLCn tapauksessa. Ensin katsomme
19
00:02:02,600 --> 00:02:07,040
vähän laitteistoa ja sen jälkeen ohjel-
mistoja ja erilaisia löydöksiä joita
20
00:02:07,040 --> 00:02:11,200
teimme. Lopuksi, haluamme demonstroida
mitä pystyimme saavuttamaan
21
00:02:11,200 --> 00:02:18,960
ja päätämme esityksen parilla kommentilla.
Joten ensin, prosessiautomaatio. Me kaikki
22
00:02:18,960 --> 00:02:25,280
tiedämme sen. Tai teemme sitä itse tai
tunnemme jonkun joka tekee sitä. Laitamme
23
00:02:25,280 --> 00:02:32,480
joitain laitteita älykotiimme, jos kutsumme
sitä älykkääksi. Ja koitamme automatisoida
24
00:02:32,480 --> 00:02:38,720
eri kohteita eri asioissa tehdäksemme elä-
mästämme helpompaa. Asioita kuten
25
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
26
00:02:43,200 --> 00:02:49,040
kuuma tai kylmä. Ja mitä teemme on, että
meillä on jokin sensorijärjestelmä
27
00:02:49,040 --> 00:02:52,120
talossamme, kuten myös laitteita jotka
28
00:02:52,120 --> 00:02:55,200
vuorovaikuttavat sensorien kanssa.
tässä tapauksessa meillä voisi
29
00:02:55,200 --> 00:03:00,560
olla termostaatti ja lämmitin ja haluamme
säätää lämpötilaa
30
00:03:00,560 --> 00:03:06,880
termostaatin perusteella. Nämä ovat aika
yksinkertaisia ratkaisuja älytaloon
31
00:03:06,880 --> 00:03:12,960
Mutta mitä teemme jos meillä on hyvin
monimutkainen hallintasilmukka esim.
32
00:03:12,960 --> 00:03:20,240
Tässä näemme vasemmalla alhaalla melko
monimutkaisen kuvan, muutama operointi-
33
00:03:21,200 --> 00:03:26,640
henkilö istumassa, mitä kutsumme HMI:n
human machine interface edessä, joka on
34
00:03:26,640 --> 00:03:30,320
periaatteessa tiivistetty informaatio
kaikesta mitä on meneillään
35
00:03:30,320 --> 00:03:36,560
tehtaassa, esimerkiksi. Me tarvitsemme eri
sensoreita tässä tehtaassa ja meidän täytyy
36
00:03:36,560 --> 00:03:41,040
ohjata eri moottoreita ja sellaisia asioita.
Joten tarvitsemme keskellä olevia asioita
37
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ä
38
00:03:46,400 --> 00:03:50,260
näemme miltä se voisi näyttää. Joten Peri-
aatteessa on syötteitä kuten puhuimme
39
00:03:50,260 --> 00:03:54,240
ja ulostuloja. Ja meillä on joku logiikka
keskellä. Ja mitä tyypillisesti asennamme
40
00:03:54,240 --> 00:03:59,840
on PLC ohjelmoitava logiikka kontrolleri
ja jotain logiikkaa keskellä.
41
00:03:59,840 --> 00:04:04,880
On erilaisia teknologioita, joita voidaan
käyttää, esimerkiksi, rakenne, teksti tai
42
00:04:04,880 --> 00:04:11,440
tikapuulogiikka joka ladataan PLChen ja
joka sitten ohjaa ulostuloja pohjautuen
43
00:04:11,440 --> 00:04:16,160
Sisään tuleviin syötteisiin. Voit nähdä
joitain tämänkaltaisia sovellutuksia.
44
00:04:16,160 --> 00:04:21,666
Esimerkiksi, kemiallisessa voimalaitoksessa,
kemian tehtaassa, sähköverkossa tai
45
00:04:21,666 --> 00:04:28,482
jossain tuotannossa. Osa noista komponen-
teista ovat aika kriittisiä toiminnalle.
46
00:04:28,482 --> 00:04:33,194
Vaikka näkisimme ne jokapäiväisessä
elämässämme ja joskus emme tosiaan
47
00:04:33,194 --> 00:04:39,563
näe niitä. Mutta ne ovat siellä ohjaamassa,
kaikkea taustalla ja me emme
48
00:04:39,563 --> 00:04:44,217
todellakaan halua noiden järjestelmien
hajoavan. Esimerkiksi jos menet googleen
49
00:04:44,217 --> 00:04:48,451
ja etsit jotain onnettomuuksista ja kemian
tehtaista, voit nähdä
50
00:04:48,451 --> 00:04:53,071
sulaneita tehtaita vain koska joku mis...
häiriö tapahtui järjestelmässä
51
00:04:53,071 --> 00:04:58,817
Ja emme todella halua tämän tapahtuvan.
Emme vahingossa, emmekä myöskään
52
00:04:58,817 --> 00:05:03,531
pahantahtoisesti. Ja tästä syystä haluamme
turvata kaikki prosessit jotka toimivat
53
00:05:03,531 --> 00:05:09,864
tehtaissa ja sellaisissa. Olemme nähneet
viimeaikaisia hyökkäyksiä. Se alkoi
54
00:05:09,864 --> 00:05:16,984
tavallaan 1999 ensimmäisellä tiedustelu
pohjaisella pääosin. Ja sen sitten olemme
55
00:05:16,984 --> 00:05:22,037
saaneet joitain edistyneempiä hyökkäyksiä
2010, esimerkiksi kun näimme Stuxnetin
56
00:05:22,037 --> 00:05:26,260
joka oli todella mutkikas operaatio.
Jos ajattelet sitä tekniseltä tasolta
57
00:05:26,260 --> 00:05:31,688
mitä kaikkea siihen meni. Mitä eri osaamis
alueita oli mukana. Se on melko
58
00:05:31,688 --> 00:05:38,048
vaikuttavaa. Ja sitten vielä myöhemmin
meillä on ollut ongelmia
59
00:05:38,048 --> 00:05:45,400
Ukrainan sähköverkossa, jossa 2015 ja 2016
juuri ennen joulua joitain valoja
60
00:05:45,400 --> 00:05:51,747
meni pois päältä melko toviksi joissain
kaupungeissa. Joten melkoinen vaikutus.
61
00:05:51,747 --> 00:05:57,504
Joten antaaksemme hieman vaikutusta,
taustaa Siemens PLC:sta mitä tulee
62
00:05:57,504 --> 00:06:01,908
markkinaosuuksiin. Näemme, että yhdessä
Rockwood automationin kanssa, Siemensilla
63
00:06:01,908 --> 00:06:06,372
on yli 50% markkinaosuus. Ja tietenkin,
jos otamme joitain laitteita
64
00:06:06,372 --> 00:06:10,422
joissa on jotain turvallisuutta, olisi
kiinostavaa katsoa niitä joilla on suurin
65
00:06:10,422 --> 00:06:15,560
markkinaosuus. Näin toimimme tässä
Siemensin tapauksessa. Tässä näemme
66
00:06:15,560 --> 00:06:22,030
juuri sen PLCn johon keskitymme tässä
esityksessä, se on Siemens S7-1200 PLC.
67
00:06:22,030 --> 00:06:26,721
Se on yksi pienemmistä PLCsta, ei silti
pienin, siinä on logo myös, joka on silti
68
00:06:26,721 --> 00:06:33,423
enemmän opettelua varten esimerkki, mutta
tämä on se joka on silti
69
00:06:33,423 --> 00:06:39,298
tutkijoiden saatavilla oleva, kustannusten
kannalta. Se on jotain 250e PLCsta.
70
00:06:39,298 --> 00:06:44,560
Sitten jos tarvitset virtalähteen, se
maksaa saman. Kunhan et riko montaa
71
00:06:44,560 --> 00:06:50,208
sellaista, spoileri, rikoimme aika monta,
tai et pudota niitä tai sellaista, niin
72
00:06:50,208 --> 00:06:55,524
pärjäät hyvin, sinä voit saada resurssit
leikkiäksesi niillä laitteilla
73
00:06:55,524 --> 00:07:00,289
Meillä on eri sovelluksia ja
olemme puhuneet niistä aiemmin
74
00:07:00,289 --> 00:07:08,186
Joten tässä on miltä paketin avaaminen
Siemens 7 1200 PLC tapauksessa näyttää
75
00:07:08,186 --> 00:07:13,658
Meillä on ylänäkymä vasemmassa kuvassa.
Se on yksi piirilevyistä (PCB)
76
00:07:13,658 --> 00:07:19,360
Jotka on kerrostettu toistensa päälle tässä
tapauksessa. Mutta taika oikeasti on
77
00:07:19,360 --> 00:07:25,717
ylimmässä PCBssa, joka on vihreä, jonka
näemme tässä. Katsoessamme sitä tarkemmin
78
00:07:25,717 --> 00:07:31,200
Meillä on yläkuva vasemmalla, joka näyttää
eri komponentteja joista
79
00:07:31,200 --> 00:07:36,566
PLC rakentuu. Otetaan esimerkiksi, ARM
prosessori (CPU) joka meillä on tai
80
00:07:36,566 --> 00:07:41,675
eri väylät sisään-ulos joita voimme kytkeä
PLChen, kuten puhuimme aiemmin,
81
00:07:41,675 --> 00:07:47,687
joita tarvitaan jotta voidaan ohjata eri
osia järjestelmässä. Ja sitten meillä
82
00:07:47,687 --> 00:07:56,233
on flash siru yläosassa myös, joka
on suuri flash siru sisältäen PLCn
83
00:07:56,233 --> 00:08:04,169
laiteohjelmiston, josta puhumme
hieman tarkemmin myöhemmin
84
00:08:04,169 --> 00:08:09,841
Kääntöpuolella, meillä on oikeassa
kuvassa alapuoli ensimmäisestä PCBsta.
85
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
86
00:08:15,378 --> 00:08:21,870
flash siru, 4 megatavua pitäen sisällään
Siemens PLC bootloaderin ohjelmakoodin.
87
00:08:21,870 --> 00:08:29,040
Tässä halusimme yksityiskohtaisen kuvan
siitä miltä varsinainen prosessoriyksikkö
88
00:08:29,040 --> 00:08:33,241
oikeasti levyllä näyttää ja mitä voit
tehdä jos haluat tietää on
89
00:08:33,241 --> 00:08:38,861
voit tehdä hieman kuorintaa.
Ja sitä näemme tässä.
90
00:08:38,861 --> 00:08:46,021
Tulos on tässä, näemme että sen ytimessä
on renesanssi ARM
91
00:08:46,021 --> 00:08:52,712
Cortex-R4 vuodelta 2010. Ja jos myöhemmin
työskentelet enemmän
92
00:08:52,712 --> 00:08:58,079
ohjelmiston parissa voit haluta selvittää
myös oikean revisio numeron mitä
93
00:08:58,079 --> 00:09:04,974
se tukee ARM standardissa. Ja mitä voit
tehdä, on käyttää erityistä käskyä
94
00:09:04,974 --> 00:09:13,442
joka sisältyy ARM käskykantaan ja
joilla voit dekoodata eri
95
00:09:13,442 --> 00:09:17,384
bittejä siinä, jonka teimme tässä, jonka
näet tässä referenssinä.
96
00:09:17,384 --> 00:09:22,787
Joten jos todella haluat tietää mitä on
meneillään, voit tutkia ne bitit ja
97
00:09:22,787 --> 00:09:26,358
varmistaa, että työskentelet sen laitteen
parissa mitä oletitkin.
98
00:09:26,358 --> 00:09:32,349
Nyt olemme tulleet muistiosuuteen
laitteistossa ja tässä vaiheessa
99
00:09:32,349 --> 00:09:39,315
jätän teidät Alille.
Ali: Kiitos. Nyt kun Tobias on avannut
100
00:09:39,315 --> 00:09:45,892
PLCn meille, minä aion puhua oikuista
ja ominaisuuksista PLC:ssa.
101
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
102
00:09:53,285 --> 00:10:00,632
ainoastaan MPU. Joten siinä ei ole
visuaalista muistia periaatteessa. Siinä on
103
00:10:00,632 --> 00:10:04,794
useita RAM muisti kokoja, riippuen minä
vuonna ostit sen ja minkä version S7
104
00:10:04,794 --> 00:10:10,991
1200 ostit ja myös useita SPI flash ja
useita eri tyyppisiä NAND flasheja.
105
00:10:10,991 --> 00:10:15,416
Merkittävin yksi ero on kuten
RAM. jossa he käyttävät välillä Wingbond
106
00:10:15,416 --> 00:10:20,198
ja joskus he käyttävät Micron
Technologies, hiljattain
107
00:10:20,198 --> 00:10:30,818
Micron Technologies RAM. Se on LPDDR1 RAM.
Oletamme SPI flash bootloaderiksi. Joten
108
00:10:30,818 --> 00:10:37,243
jälleen, riippuen vaihtelusta välillä
yhdestä neljään megatavua SPI flashia, se
109
00:10:37,243 --> 00:10:43,840
sisältää eri pankkeja, jokainen kooltaan
512 ktavua. Ja periaatteessa mitä bootloader
110
00:10:43,840 --> 00:10:48,797
tekee, on tyypillisten bootloader toimien,
joita ovat laitteiston konfigurointi,
111
00:10:48,797 --> 00:10:54,342
varmistaa firmwaren eheys
112
00:10:54,342 --> 00:11:01,835
ennen kuin se ladataan. Me teimme hieman
röntgen kerroskuvausta PLClle
113
00:11:01,835 --> 00:11:08,652
Se on periaatteessa 3D. Joten PCB
pyörii tässä koska halusimme tehdä myös
114
00:11:08,652 --> 00:11:13,680
laitteiston takaisinmallinnusta.
Ja jollain yliopistolla oli jotain, joten
115
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
116
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ä
117
00:11:26,400 --> 00:11:30,960
ja voit oikeasti aivan kuin
se olisi ohjelmisto animaatio
118
00:11:30,960 --> 00:11:36,320
Voit mennä PCBn sisälle ja nähdä kaikki
kerrokset. Se on uskomatonta. Se on PCB
119
00:11:36,320 --> 00:11:42,480
kerros. Ja muuten, VCC ja GND, tarvitset
kaksi kerrosta PCB yhteyksiä periaatteessa.
120
00:11:42,480 --> 00:11:50,000
Katsotaanpa käynnistys prosessia
jälleen, käynnistetään tavallisesti
121
00:11:50,000 --> 00:11:53,840
Jotain laitteistoasetuksia tapahtuu. Kuten
trap ohjaimen vektorointi, esimerkiksi,
122
00:11:55,120 --> 00:12:01,600
paljon ajureita eri ARM tiloille ja sitten
CRC tarkastus itse bootloaderille
123
00:12:01,600 --> 00:12:06,240
joka on helposti ohitettavissa, koska voit
124
00:12:06,240 --> 00:12:11,516
ylikirjoittaa CRCn. Tämän jälkeen boot
loader, erityisesti 2017, 2018 versioissa
125
00:12:11,516 --> 00:12:18,960
Siemen PLCssa, sallii sinun ylikirjoittaa
SPI flashin. Ja lopuksi tarkastamme
126
00:12:18,960 --> 00:12:25,120
CRC tarkastussumman laiteohjalmasta
ennen kuin se ladataan
127
00:12:25,120 --> 00:12:28,960
bootloaderin itsensä koko on 128 kbyte,
todellisuudessa jopa vähemmän koska
128
00:12:28,960 --> 00:12:35,093
puolet siitä on vain 0xff. Siemens useita
kertoja on vaihtanut, heillä on useita
129
00:12:35,093 --> 00:12:39,368
versioita. Luulen, että kahdessa vuodessa
näimme 3 tai 4 muunnosta bootloaderista
130
00:12:39,368 --> 00:12:44,720
Se siis kehittyi. Se ei ollut jotain jonka
olemassaolon kaikki ovat unohtaneet.
131
00:12:44,720 --> 00:12:51,990
Kuten yleisesti mainittu, sinulla on
tässä ensimmäinen vaihe laitteiston
132
00:12:51,990 --> 00:12:59,760
alustamisessa ja sitten luetaan
bootloader RAM muistiin ja
133
00:12:59,760 --> 00:13:03,840
tarkastetaan bootloaderin CRC tarkastus-
summa, jotta sitä ei ole muuteltu ja tämä
134
00:13:03,840 --> 00:13:08,400
voidaan jälleen ohittaa. Ja sitten toinen
vaihe laitteiston alustamisessa tapahtuu,
135
00:13:08,400 --> 00:13:12,827
Ja sillä hetkellä se odottaa tiettyä
komentoa puolen sekunnin ajan
136
00:13:12,827 --> 00:13:16,633
ja jos se saa tämän komennon se menee
toiseen moodiin josta puhumme myöhemmin
137
00:13:16,633 --> 00:13:22,101
Muuten se periaatteessa valmistelee CRC
tarkastussumma taulukon laiteohjelmistolle
138
00:13:22,101 --> 00:13:25,727
ja yrittää ladata laiteohjelmiston ja
lopulta yksinkertaisesti poistaa
139
00:13:25,727 --> 00:13:30,790
muisti eston vaiheen 1 käskyn
teille jotka tunnette ARMin
140
00:13:30,790 --> 00:13:34,846
Ja periaatteessa siirtää laiteohjelmiston
muistiin
141
00:13:34,846 --> 00:13:38,624
Käyttöjärjestelmän nimeä ei ollut
142
00:13:38,624 --> 00:13:44,238
mainittu aiemmin, se on ADONIS.
Tunnemme sen erilaisilla, erilaisilla
143
00:13:44,238 --> 00:13:49,995
tavoilla itseasiassa. Joten ensimmäisenä
referenssinä laiteohjelmistossa, näemme
144
00:13:49,995 --> 00:13:54,552
paljon viittauksia ADONISen, mutta se ei
riittänyt meille. Joten katselimme ympärille
145
00:13:54,552 --> 00:13:59,200
nähdäksemme onko siihen mitään
lähteitä, ja no, Linkedin on hyvä
146
00:13:59,200 --> 00:14:04,917
avoin lähde tiedolle. Ja oli yksi työn-
tekijä joka oikeasti puhui Siemens
147
00:14:04,917 --> 00:14:09,840
kehittäjästä, joka puhui ADONISen
toiminnnasta. En tiedä miksi hän laittoi
148
00:14:09,840 --> 00:14:15,360
Windowsin ja Linuxin ADONISen viereen
mutta pidin siitä hänen työstään. Ja
149
00:14:15,360 --> 00:14:20,560
se ei ollut meille tarpeeksi. Joten ehkä
joku meistä jota emme tunne. Ja katsoimme
150
00:14:20,560 --> 00:14:25,440
taas kauemmas ja kauemmas ja löysimme
tämän, joka oli paras indikaattorimme
151
00:14:25,440 --> 00:14:30,240
Eli Siemens kehitysinsinööri mainitsi että
hän oli työskennellyt kernel ohjelmiston
152
00:14:30,240 --> 00:14:34,480
kehittämiseksi ADONIS reaaliaika käyttö-
järjestelmään, joka oli meille hyvä merkki
153
00:14:34,480 --> 00:14:39,200
Se tarkoitti, että olimme oikeassa. Nyt kun
tunsimme nimen ja olimme siitä varmoja.
154
00:14:39,200 --> 00:14:46,160
Katsotaanpa komponentteja. Se on
periaatteessa käynnistyminen
155
00:14:46,160 --> 00:14:53,680
0x00040040 ja sitten alustetaan kernel
ja tämän jälkeen useita rutiineja eri
156
00:14:53,680 --> 00:14:57,535
komponenttien alustamiseksi käyttö-
järjestelmässä. En usko, että Siemens
157
00:14:57,535 --> 00:15:02,960
jakaa sitä tällä tavalla. Meillä ei
ollut sellaista käyttöjärjestelmässä,
158
00:15:02,960 --> 00:15:07,680
mutta teimme sen sillä tavalla. Eli
levitimme sen kahteen ryhmään. Joissain
159
00:15:07,680 --> 00:15:11,360
on core palvelut kuten ADONIS reaaliaika
käyttöjärjestelmän palvelut ja jotkut
160
00:15:11,360 --> 00:15:15,600
niistä liittyvät automaatio-osaan. Joten
niille ihmisille jotka ovat mukana
161
00:15:15,600 --> 00:15:22,400
automaatiossa, kuten kirjoittavat tikapuu
logiikkaa ja sen sellaista, ne komennot ja
162
00:15:22,400 --> 00:15:26,560
toimintokoodit jotka ovat relevantteja
Siemensille, he tuntevat nämä enemmän
163
00:15:26,560 --> 00:15:32,480
automaatioon liittyvät palvelut. Joten on
PROFINET, AWP tai automated web
164
00:15:32,480 --> 00:15:39,920
programming MC7 JIT parseri tikapuu
logiikkaa varten tai erilaista SD
165
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
166
00:15:46,400 --> 00:15:51,120
tämä konfiguraatiojärjestelmä, joka on
automaatioon liittyvä ydinosa
167
00:15:51,120 --> 00:15:58,640
automaatiojärjestelmästä ja toki hälytys
keskus kaikkea sellaista juttua
168
00:15:58,640 --> 00:16:04,320
joka liittyy automaatioon. Käyttö-
järjestelmän puolella paljon kaikkea
169
00:16:04,320 --> 00:16:11,040
tavallista. Tiedostojärjestelmä, PDCFS,
josta Tobias puhuu myöhemmin
170
00:16:11,040 --> 00:16:18,480
TCP/IP pino, joitain C / C++ kirjastoja,
jotka eivät ole Siemensiltä, ne ovat
171
00:16:18,480 --> 00:16:23,119
Dinkumware ja Miniweb server
ja MWSL parseri
172
00:16:23,119 --> 00:16:25,470
tai Miniweb Scripting Language parseri
173
00:16:25,470 --> 00:16:30,160
Ja paljon erilaisia alikomponentteja, mikä
on tavallista käyttöjärjestelmässä kuin
174
00:16:30,160 --> 00:16:36,640
käyttöjärjestelmässä. Lisäksi siellä on
joitain viittauksia CoreSight:iin. En tiedä
175
00:16:36,640 --> 00:16:40,720
moniko teistä tuntee CoreSight:in tai
paljonko teette ARMin kanssa, mutta perus
176
00:16:40,720 --> 00:16:46,400
Coresight on jotain vastaavaa kuin Intelin
prosess tracing tai Intelin PT seuraamaan
177
00:16:46,400 --> 00:16:52,640
sovelluksia ja jota voi käyttää saamaan
code-coverage, esimerkiksi. Ja laitteiston
178
00:16:52,640 --> 00:16:58,720
osa on hyvin dokumentoitu Thomas Weberin
toimesta tänä vuonna, ei vielä.
179
00:16:58,720 --> 00:17:04,000
mutta tänä vuonna. Black Hat aasiassa
mutta minun pitää varoittaa teitä koska
180
00:17:04,000 --> 00:17:08,560
sain joitain sähköposteja, jotkut kyselivät
siitä. Jos kytkeydyt siihen, PLC:ssa on
181
00:17:08,560 --> 00:17:12,880
joku vianselvitys ominaisuus, joka tun-
nistaa kun sitä tutkitaan JTAG kautta
182
00:17:13,840 --> 00:17:18,960
ja se ylikirjoittaa NAND-flashin random
jutulla. Joten tuhoat PLCn, eli kytkeydy
183
00:17:18,960 --> 00:17:23,838
siihen omalla riskillä.
Seuraavaksi katsotaanpa
184
00:17:23,838 --> 00:17:27,530
CoreSIghtia nopeasti. CoreSight:ssa
on periaatteessa... ennen kuin
185
00:17:28,180 --> 00:17:30,880
menen siihen, minun pitää mainita
mainita, että Ralf Philipp:lla
186
00:17:30,880 --> 00:17:37,600
on myös hyvä esitys 0 night:ssa CoreSight
jäljestämisestä. Joten suosittelen, että
187
00:17:37,600 --> 00:17:41,920
katsotte myös sen.
Yleisesti, CoreSight:ssa on kolme
188
00:17:41,920 --> 00:17:46,800
pääosaa tai komponenttia: Lähteet, linkit
ja sinkit ja sinkit ovat ne osat, joista
189
00:17:46,800 --> 00:17:51,280
saat trace informaation ja lähteet ovat
se jolla kerrot prosessorille
190
00:17:51,280 --> 00:17:56,630
minkälaisista lähteistä haluat dataa ja
191
00:17:56,630 --> 00:18:03,200
linkit muuttavat nämä lähteet. Täytyy mainita
192
00:18:03,200 --> 00:18:08,227
että usein se on hyödyllistö fuzzatessa
myös. Luulen, että jotkut
193
00:18:08,227 --> 00:18:12,560
harvat, mutta jotkut, työskentelevät asian
parissa. Kattavuuden ohjaama fuzzing
194
00:18:12,560 --> 00:18:16,480
CoreSight kautta, ARM Coresightin. Joten on
mahdollista, että vastaava implementointi
195
00:18:16,480 --> 00:18:25,680
tapahtuu kuin Intel PT, esimerkiksi KAFL,
WinAFL tai Hingfuzz. Eli lähteet, niillä
196
00:18:25,680 --> 00:18:30,640
on kolme eri komponenttia. STM, PTM, ETM.
ETM versio 4 on sen uusin versio
197
00:18:30,640 --> 00:18:37,600
Ja periaatteessa sinulla on myös linkit jotka
yhdistävät eri lähteet eri, kuin
198
00:18:37,600 --> 00:18:45,440
eri tai yhden lähteen tai tiettyyn
sink:iin
199
00:18:46,080 --> 00:18:52,198
Ja sitten on suppiloita CoreSightlle,
anteeksi sinks, anteeksi. Sinulla on sinkeja
200
00:18:52,198 --> 00:18:56,144
jotka ovat eri asia. Eli on olemassa eheys
prosessorille, joka on 4 kilotavua
201
00:18:56,144 --> 00:19:02,560
puskuri SRAM tai sinulla on järjestelmä-
muisti tai jopa TPIU tai esimerkiksi
202
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
203
00:19:09,416 --> 00:19:14,800
teimme kyselyjä S7:lle CoreSight esiinty-
misestä ja kuten voit havaita
204
00:19:14,800 --> 00:19:21,228
ohjelmisto on jo implementoitu.
Eli ohjelmistossa on viittauksia
205
00:19:21,228 --> 00:19:26,960
että he käyttävät tai konfiguroivat
CoreSight:ia PLCssa
206
00:19:26,960 --> 00:19:32,720
Ja voimme nähdä, että ETM versio
ei ole uusin, se on ETM
207
00:19:32,720 --> 00:19:39,520
versio 3. Nyt kun olen puhunut
CoreSight:sta, Tobi voi puhua
208
00:19:39,520 --> 00:19:43,200
laiteohjelmisto dumpista.
Tobi: Joten siirrytään johonkin joka
209
00:19:43,200 --> 00:19:49,476
on minulle paljon tutumpaa ja joka tuntuu
minusta helpommalle, se on laiteohjelmisto
210
00:19:49,476 --> 00:19:53,440
dumpit, tai ohjelmistot yleisesti, mutta
firmware dumpit, se on mistä eniten
211
00:19:53,440 --> 00:19:59,840
haluan puhua PLCssa tai mitä koitan
ymmärtää PLCssa. Siemensin tapauksessa
212
00:19:59,840 --> 00:20:06,960
meillä on 13 megatavun binääri. Ja vaikka
alussa se ei tunnu paljolta,
213
00:20:06,960 --> 00:20:14,800
mutta kun vähän pyörittelet ja hyödynnät
IDA Python funktioita ja sellaista
214
00:20:14,800 --> 00:20:19,440
sinulla on suunnilleen 84000 funktiota
joka ei ole jotain,
215
00:20:19,440 --> 00:20:25,920
mitä haluaisit tehdä käsin. Lisäksi 84000
funktion laiteohjelmisto image
216
00:20:25,920 --> 00:20:31,840
ei voita seksikkäimmän laiteohjelmiston
palkintoa, eihän? Arvaan näin.
217
00:20:31,840 --> 00:20:38,000
Mutta tämä on se mitä näin ja mitä
katsomme tarkemmin muutaman
218
00:20:38,000 --> 00:20:43,200
minuutin päästä. Kuten näette, meillä on
eri nimiä tuolla ylhäällä.
219
00:20:44,000 --> 00:20:48,800
Meillä on jotain, jota kutsutaan
_joku_hae_jotain_suuri_koko. Tämä
220
00:20:49,520 --> 00:20:53,760
on tapani sanoa, ettei minulla ole aavis-
tustakaan mitä tässä funktiossa tapahtuu,
221
00:20:53,760 --> 00:20:58,400
mutta voimme myös nähdä joitain merki-
tyksellisiä funktioita. Joten ymmärsimme
222
00:20:58,400 --> 00:21:03,920
joitain osia paremmin. Joitain osia
huonommin, mutta katsoin joka puolelle
223
00:21:03,920 --> 00:21:11,360
Mennäänpä nyt paljon osoitteistoja
käsittelevään osaan. Odotimme paljon
224
00:21:11,360 --> 00:21:16,880
yksityiskohtia, jotka olisivat kiinostavia
jos alat katsomaan firmwarea ja voisin
225
00:21:16,880 --> 00:21:19,000
selittää miksi ne voisivat kiinnostaa.
226
00:21:21,120 --> 00:21:26,320
Ensinnäkin täytyy tietää, että coretex
antaa bank registerin
227
00:21:26,320 --> 00:21:32,800
Se on toiminnallisuus joka on implementoitu
pienentämään kokoa ja sallimaan
228
00:21:32,800 --> 00:21:40,560
saumattomat moodit sisäiselle prosessorille.
Ja saamme bank pinon jokaiselle suoritus
229
00:21:41,120 --> 00:21:47,360
tilalle. Joten jos haluemme tietää mitä
on meneillään firmwaren tilassa
230
00:21:47,360 --> 00:21:51,200
jollain hetkellä, haluamme ehkä katsoa eri
pinoja eri tiloissa eri aikoina.
231
00:21:51,200 --> 00:21:56,880
Ja tämä on osoitteisto, jolta odotamme tätä
232
00:21:56,880 --> 00:22:02,640
Ja sitä voi käyttää lähtökohtana, mikäli
alat takaisinmallintaa asioita
233
00:22:02,640 --> 00:22:07,520
Nyt meillä on joitain osoitteita,
joitain tauluja joissa on osoitteita
234
00:22:07,520 --> 00:22:16,080
Ensimmäinen on RAM kartoitus, joka
näyttää mitä toiminnallisuutta
235
00:22:16,080 --> 00:22:23,120
tai mitä voit odottaa kun katsot laite-
ohjelmiston koodia, joka
236
00:22:23,120 --> 00:22:28,160
on yhteydessä eri osiin muistia.
Jos ensin menet katsomaan ARM koodia
237
00:22:28,160 --> 00:22:33,120
voit nähdä vain satunnaisia yhteyksiä eri
paikkoihin muistissa ja voit haluta ottaa
238
00:22:33,120 --> 00:22:39,040
selvää mitä se oikeasti tekee. Ja se
näyttää tylsältä, se on vain osoite
239
00:22:39,040 --> 00:22:45,200
ja sitä kysellään, etkä tiedä mitä tapahtuu
240
00:22:45,200 --> 00:22:49,680
Esimerkiksi, jos katsoit osoitetta teksti
osassa, odotit että siinä on
241
00:22:49,680 --> 00:22:55,120
koodia, jos halusit nähdä jotain
globaalia staattista dataa, halusit
242
00:22:55,120 --> 00:22:59,040
etsiä dataa BSS osiosta. Ja lopulta,
mikäli halusit katsoa heap muistia
243
00:22:59,040 --> 00:23:04,400
tai kuinka kanavat on asetettu siinä,
etsisit sitä uninitialize osasta
244
00:23:04,400 --> 00:23:09,760
ja se kulkee näin eri osissa.
Toinen erittäin kiinostava
245
00:23:09,760 --> 00:23:14,480
asia katsoa, jos yrität takaisin
mallintaa firmwarea on että haluat
246
00:23:14,480 --> 00:23:20,480
tavallaan tietää mikä on se laitteisto
josta koodi on peräisin, jota se käsittelee
247
00:23:22,000 --> 00:23:29,760
Ja tässä tapauksessa dumppasimme
joitain alueita ja takaisinmallinsimme
248
00:23:29,760 --> 00:23:35,120
mitä varten ne alueet ovat, jota kutsutaan
muistikartoitetuksi I/Oksi. ARM
249
00:23:35,120 --> 00:23:39,360
keskustelee laitteiston kanssa periaatteessa
jonoamalla maagista arvoa osoiteavaruudessa
250
00:23:39,360 --> 00:23:43,040
ja sitten se saa jotain takaisin, mikä ei
ole yhtään samaa, mitä sinne oli
251
00:23:43,040 --> 00:23:48,560
aiemmin kirjoitettu. Eli se on osoite joka
siirretään sinne reunan yli.
252
00:23:48,560 --> 00:23:53,600
Laitteiston reunan, samassa järjestelmässä
sirulla. Ja tässä näemme, että meillä
253
00:23:53,600 --> 00:23:57,360
on erilaisia järjestelmään liittyviä
laitteita kiinni siinä. Esimerkiksi
254
00:23:58,000 --> 00:24:03,040
voimme puhua Siemens PLClle eri
sarjaprotokollia käyttäen ja ne protokollat
255
00:24:03,040 --> 00:24:08,800
voivat olla SPI tai I²C. Ja vasemmalla
puolella on, aika keskellä ylhäällä
256
00:24:08,800 --> 00:24:15,840
mikä otti siihen osaa, jotain siihen
alueeseen liittyvää. Ja sitten näit
257
00:24:15,840 --> 00:24:21,920
jonkun toisen koodin puhuvan ajastimille,
esimerkiksi, tietäisit että olet silloin
258
00:24:21,920 --> 00:24:26,288
ajastinmaassa sillä hetkellä tai
schedulerissa tai jossain sellaisessa
259
00:24:26,288 --> 00:24:27,520
Viimein meillä on
260
00:24:27,520 --> 00:24:33,680
MPU konfuguraatioita, jotka ovat Memory
Protection Unit konfiguraatioita, kuten
261
00:24:33,680 --> 00:24:38,880
Ali kertoi aiemmin. Mitä näemme on, että
Siemens oikeasti käyttää joitain näistä
262
00:24:38,880 --> 00:24:44,080
konfiguraatioista suojatakseen osia
muistista. Näemme, esimerkiksi, että
263
00:24:44,080 --> 00:24:49,360
missä, koska tahansa on XN, älä suorita
bitti on, asetettu koodia ei suoriteta
264
00:24:49,360 --> 00:24:53,840
siinä osoiteavaruudessa tai se on vain
luku alue. Emme todellakaan halua
265
00:24:53,840 --> 00:24:59,280
kirjoittaa sitä yli. On kiinnostavaa, että
he alkoivat käyttämään tätä tapaa.
266
00:24:59,280 --> 00:25:06,240
Tässä näemme mitä oikeasti tapahtuu kun
laitekoodi itse boottaa käyntiin
267
00:25:06,240 --> 00:25:11,840
Paljastui, ettei firmware halua olla liian
riippuvainen siitä mitä bootloader teki
268
00:25:11,840 --> 00:25:16,720
Todennäköisesti eri teamit tekevät eri
asioita. Ja pitääkseen yhteydet niin
269
00:25:16,720 --> 00:25:22,371
pieninä kuin mahdollista, he tavallaan
tekevät uudelleen asoita, joita bootloader
270
00:25:22,371 --> 00:25:27,040
koodi tekee myös. Se asettaa vektori taulun
keskeytysten käsittelyyn ja se kaltaisia
271
00:25:27,040 --> 00:25:31,680
asioita. Kun sitten ohitamme tämän
alustavan vaiheen, me haluamme
272
00:25:31,680 --> 00:25:36,960
bootata ADINIS kernelin, josta Ali puhui
aiemmin. Ensinnäkin, siellä on
273
00:25:36,960 --> 00:25:42,160
array function pointereita, joita kutsutaan
aina jokaista toimintoa varten, joita
274
00:25:42,160 --> 00:25:47,200
näimme tässä yhteenvedossa ADONIS:en
eri komponenteista. Joten jos halusit
275
00:25:47,200 --> 00:25:51,040
katsoa minkälaisia komponentteja siinä on
tai minkälaisia toiminnallisia osia siellä
276
00:25:51,040 --> 00:25:55,680
on. Tämä on todella kiinnostava lista
funktioista, funktion käsittelijöistä
277
00:25:55,680 --> 00:26:01,520
tutkittavaksi ja se myös asettaa joitain
hallintarakenteita ja asioita kuten tämä
278
00:26:01,520 --> 00:26:07,840
jollaisen tyyppillisen käyttöjärjestelmän
pitäisi asettaa. Joten katsotaan tarkemmin
279
00:26:07,840 --> 00:26:14,480
eri komponentteja ADONISsa. Ensin tiedosto-
järjestelmä. PLC täyttää määritelmät
280
00:26:14,480 --> 00:26:20,240
Joskus se on kuinka hyvin se kestää eri
lämpötiloja, kuinka matalassa lämpötilassa
281
00:26:20,240 --> 00:26:26,480
voin käyttää tätä PLCta, ilman että
se menettää toiminnallisuuksia
282
00:26:26,480 --> 00:26:33,360
Ja tässä tapauksessa, he haluavat myös
turvallisuutta häiriöiden varalta
283
00:26:33,360 --> 00:26:38,160
virtalähteessä. Joten he kehittivät oman
tiedostojärjestelmän, jota kutsutaan
284
00:26:38,160 --> 00:26:42,640
"Powered Down Consistency File System",
jonka he implentoivat firmwareen ja näemme
285
00:26:44,080 --> 00:26:56,160
yhden työkokemus rivin yhdellä
entisellä Siemensin työntekijällä
286
00:26:56,160 --> 00:27:03,360
joka kertoi työskennelleensä
tämän tiedostojärjestelmän parissa
287
00:27:03,360 --> 00:27:07,680
toinen erittäin kriittinen osa toimintoja
on tietenkin, että haluamme keskustella
288
00:27:07,680 --> 00:27:14,560
PLClle ja se haluaa keskustella meille.
Yksi näistä tavoista on TCP/IP
289
00:27:14,560 --> 00:27:19,280
Ja tämä paljastaa Web palvelun esimerkiksi,
sekä muita komponentteja
290
00:27:19,280 --> 00:27:26,000
Tässä tapauksessa huomaamme, että Siemens
ei rakentanut itse omaa, mikä on
291
00:27:26,000 --> 00:27:31,150
todennäköisesti hyvä ajatus.
He käyttävät InterNiche TCP/IP
292
00:27:31,150 --> 00:27:34,944
pinoa, jonka versio on 3.1
293
00:27:34,944 --> 00:27:37,760
Jos olet hyvä googlettamaan
voit löytää jotain lähdekoodia
294
00:27:37,760 --> 00:27:41,600
ja voit kartoittaa tämän firmwaren ja
kuinka se toimii. Joten se voisi
295
00:27:41,600 --> 00:27:48,880
antaa sinulle wrapper funktioita, kuten
luoda socketeja ja sellaista ja voisit löytää
296
00:27:48,880 --> 00:27:53,573
ne helpommin firmware imagesta
297
00:27:53,573 --> 00:28:00,666
Yksi erittäin kriittinen ohjalmakomponentti
firmwaressa on päivitys. Se sallii
298
00:28:00,666 --> 00:28:06,647
päivittämisen ja Siemens PLC sallii
päivitykset, siinä on eri moodeja. Yhdessä
299
00:28:06,647 --> 00:28:12,248
moodissa sinä vain raahaat ja pudotat UPD
tiedoston, päivitystiedoston web palvelimelle
300
00:28:12,248 --> 00:28:18,886
ja se alkaa tarkastamaan firmwarea, eheyttä
ja allekirjoitusta ja niin edelleen. Toinen
301
00:28:18,886 --> 00:28:24,714
tapa on tehdä se SD kortin kautta, joka on
mahtavuutta 24 megatavua edulliseen
302
00:28:24,714 --> 00:28:30,807
hintaan 250 euroa. Voit hankkia sen.
En usko, että päihität
303
00:28:30,807 --> 00:28:39,257
sitä suhdetta. Mikäli purat sellaisen
UPD tiedoston saat
304
00:28:39,257 --> 00:28:43,142
toisen esityksen siitä muistissa.
Ja teimme sille vähän
305
00:28:43,142 --> 00:28:47,389
takaisinmallinnusta ja saimme
erilaisia kenttiä, en ole varma näettekö niitä
306
00:28:47,389 --> 00:28:53,711
mutta se oli eri offset:ja itse
binääritiedostoon
307
00:28:53,711 --> 00:28:57,953
Se on lähtöpiste firmwaren maagiseen
headeriin jolla varmistetaan ettei asiat
308
00:28:57,953 --> 00:29:03,768
ole liian sekaisin ja CRC kokonaisuudelle
esimerkiksi. Otimme talteen joitain
309
00:29:03,768 --> 00:29:11,704
osoitteita firmwaressa, jotka auttavat
löytämään jalansijan siihen logiikkaan
310
00:29:11,704 --> 00:29:17,721
jota käsitellään ja se antaa sinulle
osoitteita, joihin voit verrata niitä jatkossa
311
00:29:17,721 --> 00:29:23,384
Seuraava komponentti jota tutkimme on
Miniweb, joka on web palvelin.
312
00:29:23,384 --> 00:29:30,040
Se tavallaan paljastaa sinulle erilaisia
sisäisiä osia PLCssa ja missä tilassa
313
00:29:30,040 --> 00:29:35,359
missä tilassa eri GPIOt, General Purpose
Input Output ovat. Inputit
314
00:29:35,359 --> 00:29:41,827
ja Outputit, sekä mikä on PLCn itsensä
tila ja miten se paljastaa sen
315
00:29:41,827 --> 00:29:49,608
käyttäen MWSL kieltä. Miniweb Scripting
Language. Se on kuten näemme seuraavassa,
316
00:29:49,608 --> 00:29:55,129
seuraavassa, kalvossa ja puhumme siitä
hetken päästä tarkemmin.
317
00:29:55,129 --> 00:30:01,890
Olemme käynnistäneet, palvelun kuten
myös yhden palvelukäsittelijän
318
00:30:01,890 --> 00:30:08,585
ADONIS alustus funktioista, joihin
viittasin vähän aiemmin
319
00:30:08,585 --> 00:30:13,727
Katsotaan vähän dokumentoimattomia http
käsittelijöitä, joiden uskon olevan
320
00:30:13,727 --> 00:30:18,237
kiinnostavia. Omat suosikkini ovat
"lililili" ja "lolololo"
321
00:30:18,237 --> 00:30:20,391
naurua
322
00:30:20,391 --> 00:30:25,184
... ja jos yhdistät ne nokkelasti, ehkä
joku on musiikkillisesti
323
00:30:25,184 --> 00:30:33,228
lahjakas ja voi tehdä niistä laulun.
Olisin kiinnostunut kuulemaan sen
324
00:30:33,228 --> 00:30:37,581
Siirrytään MWLS, Miniweb Scripting
Language:en. Se tavallaan
325
00:30:37,581 --> 00:30:42,676
paljastaa sisäiset toiminnot sallimalla
sinun injektoida html sivulle
326
00:30:42,676 --> 00:30:47,336
konfiguraatio templaten avulla eri
parametreja ja sellaista.
327
00:30:47,336 --> 00:30:53,920
Esimerkiksi, kuten näemme tässä ylhäällä
oikeassa kulmassa, näet prosessorin kuorman
328
00:30:53,920 --> 00:30:59,411
järjestelmässä tietyllä hetkellä. Se ei
vaikuta suorittavan mitään ulostulon
329
00:30:59,411 --> 00:31:05,700
koodausta, eli se tavallaan luottaa siihen
mitä tulee ulos. Joten voi olla fiksuja
330
00:31:05,700 --> 00:31:12,902
tapoja tehdä web temppuja tämän kanssa
ja myös tämän tokenisoinnin parsiminen
331
00:31:12,902 --> 00:31:19,429
on tavallaan mutkikasta. Tutustuin siihen
vähän ja sen implementointia voisi olla
332
00:31:19,429 --> 00:31:24,753
kiinnostavaa tutkia, mutta pääsemme sen
kaltaisiin asioihin vähän myöhemmin
333
00:31:24,753 --> 00:31:30,407
Tämän kanssa pääsemme meidän
varsinaisiin löydöksiin
334
00:31:30,407 --> 00:31:33,927
ja puhumme niistä vähän lisää. Ja tässä
kohtaa Ali jatkaa.
335
00:31:34,605 --> 00:31:43,120
Ali: Kiitos Tobi. Nyt puhumme kyvyistä,
jotka ovat bootloaderissa, jotka
336
00:31:43,120 --> 00:31:48,960
sallivat meille rajoittamattoman
koodin ajamisen, periaatteessa
337
00:31:48,960 --> 00:31:54,640
tämä ominaisuus on käytettävissä uart:ssa
Joten tarvitset fyysisen pääsyn laitteeseen.
338
00:31:55,600 --> 00:32:00,880
Mutta kun sinulla on fyysinen pääsy, voit
tavallaan, kuten Tobias myöhemmin kertoo,
339
00:32:00,880 --> 00:32:05,120
voimme itseasiassa ohittaa turvallisuus
järjestelmät, jotka Siemens on kehittänyt
340
00:32:05,120 --> 00:32:11,208
heidän tuotteeseen. Joten tarvitset uart
pääsyn kuten dokumentoitu tässä, sinulla on
341
00:32:11,208 --> 00:32:20,240
TX, RX ja GND PLC:ssa ja uart oli tosiaan
edellisessä tutkimuksessa jo dokumentoitu.
342
00:32:20,240 --> 00:32:25,840
Jokainen osoite, josta puhun tässä tai
mainitsen tässä esityksessä
343
00:32:25,840 --> 00:32:31,440
ovat bootloader versio neljä.yhteen.
Kuten mainittu aiemmin, Siemens
344
00:32:31,440 --> 00:32:38,240
aktiivisesti muokkaa bootloaderia, joten
luulen, ettö kahdessa vuodessa näimme 2-3
345
00:32:38,240 --> 00:32:44,640
muokkausta tai erilaista versiota heidän
bootloaderista tulevan. Joten juuri
346
00:32:44,640 --> 00:32:50,160
tämä pohjautuu siihen puolen sekunnin
odottamiseen tiettyä komentoa sekunttia
347
00:32:50,160 --> 00:32:56,320
laitteen configuraation tapahduttua. Se
koskee Siemens S7-1200 mukaan lukien
348
00:32:56,320 --> 00:33:02,800
SiPLUS ja S7-200 SMART. Itse asiassa joku
Kasperskyltä. IS Security mainitsi
349
00:33:02,800 --> 00:33:08,000
siitä. Me emme edes tienneet siitä.
Me vain tutkimme S7-1200:sta. Mutta
350
00:33:08,000 --> 00:33:14,400
Siemens myöhemmin päivitti sen ohjeistuksen
joka koskee muita tuotteita myös.
351
00:33:14,400 --> 00:33:19,392
Joten puhutaan tästä, erikois pääsy
ominaisuudesta. Kuten mainitsit, yksi
352
00:33:19,392 --> 00:33:22,821
asia, jonka bootloader itse asiassa
alustaa raudan. Tämän jälkeen laite
353
00:33:22,821 --> 00:33:27,360
se tavallaan kopioi osan bootloaderin
sisällöstä itseensä muistisegmenttiin
354
00:33:27,360 --> 00:33:36,000
jota kutsutaan IRAM:ksi, periaatteessa. Ja
sitten PLC odottaa puoli sekuntia tiettyä
355
00:33:36,000 --> 00:33:39,680
komentoa. Ja kun se tämän saa, tämän
tietyn komennon se vastaa
356
00:33:39,680 --> 00:33:44,160
tietyllä merkkijonolla ja se tapahtuu
uart:in yli. Joten jos lähetät
357
00:33:44,160 --> 00:33:50,348
taikajonon, MFGT1, anteeksi huono saksani,
mutta se todennäköisesti tarkoittaa
358
00:33:50,348 --> 00:33:57,939
"Mit freundlichen Grüßen", toivon että tein
se oikein. Ja sen jälkeen PLC vastaa
359
00:33:57,939 --> 00:34:02,080
"-CPU" ja sanoo, että nyt olet tässä
erikois pääsy tilassa. Odotan sinun
360
00:34:02,080 --> 00:34:10,880
komentoja. Ja tässä osoitteessa on myös
uskon 0xedf8 bootloaderissa. Joten tässä
361
00:34:10,880 --> 00:34:16,480
on dekoodaus meidän clientista, jonka
julkaisemme ensi vuonna, itse asiassa,
362
00:34:16,480 --> 00:34:25,120
josta näet, se on 2d435055, joka on se
"-CPU" vastaus PLC:lta. Joten nyt olemme
363
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
364
00:34:30,560 --> 00:34:36,880
Joku kysyi aikaisemmin. Eli kun lähetät
tämän komennon, saat useita toimintoja
365
00:34:37,600 --> 00:34:43,360
tästä esityksestä käyttöön. Kutsumme niitä
käsittelijöiksi ja periaatteessa ne ovat jotain
366
00:34:43,360 --> 00:34:49,840
jota kutsumme pääkäsittelijöiksi.
se on jotain 128 merkintää ja siellä on
367
00:34:49,840 --> 00:34:57,600
noin 3 erillistä käsittelijää, jotka ovat
kuin 0x80 uart konfigurointi ja moikka.
368
00:34:57,600 --> 00:35:01,680
Pääkäsittelijässä on paljon asioita.
Jos palaat taaksepäin kaksi kalvoa
369
00:35:01,680 --> 00:35:10,882
minulla on firmware versio tässä,
4.2.3 ja periaatteessa mitä
370
00:35:10,882 --> 00:35:14,886
tapahtuu on, että periaatteessa se on
tämä komento tässä, get bootloader
371
00:35:14,886 --> 00:35:19,724
version. Me vain pyydämme erityis
pääsy ominaisuutta kertomaan meille
372
00:35:19,724 --> 00:35:24,776
mikä on bootloader versio. Ja voit myös
tehdä paljon alemman tason diagnostiikkaa
373
00:35:24,776 --> 00:35:28,930
toiminnot tapahtuvat siellä. Myös jotkut
firmwareen liittyvät päivitystoimet
374
00:35:28,930 --> 00:35:34,515
tapahtuvat siellä, jotka ohittavat taval-
liset kryptografiset varmistukset
375
00:35:34,515 --> 00:35:42,540
firmwaresta, eikä niitä tarvita. Joten
vilkaistaan niitä, koska tämä työ, josta
376
00:35:42,540 --> 00:35:46,632
puhumme, me pääasiassa käytimme vain
kahta käsitteijää, joten emme käytä...
377
00:35:46,632 --> 00:35:51,515
emme katso tai emme nyt puhu kaikista
muista
378
00:35:51,515 --> 00:35:58,281
128 käsittelijästä jotka ovat PLC:ssa.
Joten se toimii. Yksi käsittelijöistä,
379
00:35:58,281 --> 00:36:05,907
meitä kiinnostava, oli käsittelijä 0x80
joka mainitaan tässä, päivitysfunktio.
380
00:36:05,907 --> 00:36:11,066
Se periaatteessa antaa sinulle luvan
kirjoittaa tiettyyn osaan muistia
381
00:36:11,066 --> 00:36:17,259
IRAM, joka aiemmin kopioi osan
bootloaderin sisällöstä. Käytännössä
382
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
383
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
384
00:36:25,787 --> 00:36:29,713
tarkastaa, koska joka käsittelijällä voi
olla eri vaatimukset. Tarkastaa
385
00:36:29,713 --> 00:36:34,234
argumenttien määrän, esimerkiksi, ja
sitten olet tässä päivitys funktio tilassa
386
00:36:34,234 --> 00:36:38,840
Sitten sinun pitää antaa kohde ID koska
siinä on 4 alifunktiota saatavilla
387
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
388
00:36:45,348 --> 00:36:51,548
Flashia varten, ja jokaista varten, sinun
pitää valita minkälaisen operaation haluat
389
00:36:51,548 --> 00:36:58,026
tehdä, haluatko konfiguroida, lukea,
kirjoittaa tai tarkastaa. Ja voit tehdä
390
00:36:58,026 --> 00:37:02,883
kaikkia näitä. Voit lukea ja kirjoittaa
IRAMia. Periaatteessa tämä on funktio
391
00:37:02,883 --> 00:37:09,736
käsittelijä 0x80:ssa. Seuraavaksi on pää
käsittelijä 0x1c. Tämä on listattu tässä
392
00:37:09,736 --> 00:37:19,869
listassa, tässä. Se, se periaatteessa sallii
sinun kutsua funktioita. Periaatteessa nämä
393
00:37:19,869 --> 00:37:24,004
funktiot on listattu IRAMssa. Ja mitä
tavallaan teet, on että lähetät tämän
394
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
395
00:37:29,400 --> 00:37:34,520
sitten voit kutsua ID numeroa sille
käsittelijälle jota haluat käyttää.
396
00:37:34,520 --> 00:37:41,920
Tässä on useita käsitteöijöitä tarjolla
0x1c:lle. Joten kysymys on mitä voimme
397
00:37:41,920 --> 00:37:50,845
tehdä sillä. Ja ennen kuin kysyn Tobiakselta
Kysyn kaikilta täällä, ideoita ? Trace,
398
00:37:50,845 --> 00:37:53,939
joku sanoi trace. En tiedä mitä se
tarkoittaa, mutta
399
00:37:53,939 --> 00:37:57,875
muminaa yleisössä
400
00:37:57,875 --> 00:38:04,162
OK, tarkoitat JTAG kanssa? CoreSight
kanssa? Ei, emme aio käyttää sitä
401
00:38:04,162 --> 00:38:07,162
Joten kysytään Tobiakselta mitä hän
pystyy tekemään.
402
00:38:07,162 --> 00:38:11,440
Tobias: Yaeh, katsottaessa dynaamisesti ja
näkien mitä se tekee muistin kanssa on,
403
00:38:11,440 --> 00:38:15,232
luulen, hyvä ajatus yleisesti. Jos vaikka
staattinen takaisinmallinnus ei anna
404
00:38:15,232 --> 00:38:20,723
sinulle mitään. Tässä tapauksessa katsoime
tai minä katsoin läpi eri funktioita
405
00:38:20,723 --> 00:38:26,581
ja koitin selvittää, mitä voin tehdä
niillä
406
00:38:26,581 --> 00:38:32,080
Kun aloitin katsomaan tätä erikois
pääsy ominaisuutta, näin periaatteessa
407
00:38:32,080 --> 00:38:37,475
että siinä koodissa on liikaa meneillään.
Tavallaan tunsin, että tiesin mitä
408
00:38:37,475 --> 00:38:42,418
pitäisi olla meneillään. Bootloader, mitä
sen pitäisi olla tekemässä, mutta se
409
00:38:42,418 --> 00:38:50,171
tuntui vain olevan liikaa. Ja kuinka voimme
yhdistää ne kaksi funktiota on kertausta.
410
00:38:50,171 --> 00:39:01,672
Käytetään tätä 0x1c käsitelijää, joka
antaa meille kontrollin, minkälaista
411
00:39:01,672 --> 00:39:07,558
toisen listan funktioista kutsutaan, kuten
näimme aiemmin, kopioidaan käynnistymis
412
00:39:07,558 --> 00:39:13,720
prosessissa sijaintiin IRAMssa ulkoiselta
read only muistilta. Ja tämä
413
00:39:13,720 --> 00:39:19,862
paljastaa tämän funktiokäsittelijä taulun
kaikelle mikä voi kirjoittaa IRAM:iin. Ja
414
00:39:19,862 --> 00:39:25,954
kuten opimme aiemmin, 0x80 käsittelijä
pienissä määrin, pystyy tekemään juuri
415
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ä
416
00:39:32,133 --> 00:39:38,533
vaiheessa 0x80 käsittelijää kirjoittamaan
IRAMiin. Voimme todellisuudessa injektoida
417
00:39:38,533 --> 00:39:43,921
Toisen funktiopointerin yhdessä konfiguraatio
arvojen kanssa, joka ohittaa erilaiset
418
00:39:43,921 --> 00:39:49,580
tarkastukset argumenttien koolle ja sen
sellaiselle. Voimme injektoida tämän
419
00:39:49,580 --> 00:39:56,286
merkintänä tauluun ja voimme kirjoittaa
tauluun myös payloadin, jota käytämme
420
00:39:56,286 --> 00:40:02,760
shell koodina. Ja sitten toisessa vaiheessa
voimme käyttää tätä aiemmin injektoitua
421
00:40:02,760 --> 00:40:11,971
indexia jonka määritimme, laukaisemaan
kutsun omaan payloadiimme. Joten nyt
422
00:40:11,971 --> 00:40:17,160
meillä on ajossa koodia bootloader
kontekstissa. Joka on niin etuoikeutettu
423
00:40:17,160 --> 00:40:24,213
kuin mihin tässä vaiheessa pääsemme. Ja
voimme leikkiä vähän sen kanssa.
424
00:40:24,213 --> 00:40:29,560
Ja yhteenvetona voimme ketjuttaa kaiken
tämän yhteen ja saamme koodin suorituksen
425
00:40:29,560 --> 00:40:35,619
Ja Alin sanoin, tällä tekniikalla
raketoimme PLCn. Ja ennen kuin
426
00:40:35,619 --> 00:40:40,903
menemme siihen, mitä tämä antaa meidän
tehdä, sananen vaiheistetusta payloadista
427
00:40:40,903 --> 00:40:47,003
Eli kirjoitin tämän ketjun erilaisia
kutsuja ja paljastui, että tämä
428
00:40:47,003 --> 00:40:52,326
kirjoittaminen IRAMiin on jotenkin
ensinnäkin hidasta, mutta myös herkkä
429
00:40:52,326 --> 00:40:56,736
virheille, joten laite voi mennä virhetilaan
enkä ole aivan varma mitä se koskee
430
00:40:56,736 --> 00:41:03,498
mutta olisi mielenkiintoista kuulla se
Siemens insinööriltä, mutta se johti
431
00:41:03,498 --> 00:41:08,672
minut injektoimaan vähän enkoodattua
payloadia, jossa on vain osa
432
00:41:08,672 --> 00:41:16,345
tavuista, joka antaa meille liittymän
suorittaa
433
00:41:16,345 --> 00:41:20,124
lukuja ja kirjoittamisia mielivaltaisesti
kirjoittaa ja käyttää tätä injektoidessa
434
00:41:20,124 --> 00:41:25,002
tason kaksi payloadit. Ja tätä haluamme
havainnollistaa tässä.
435
00:41:26,741 --> 00:41:32,796
Ali: Kiitos, nyt voisimme esittää demon,
4 demoa itse asiassa. Ensimmäinen on
436
00:41:32,796 --> 00:41:37,156
vain kommunikaation näkeminen, peri-
aatteessa lähetetään nämä pyynnöt ja
437
00:41:37,156 --> 00:41:42,265
saadaan vastaus ja periaatteessa lähetetään
tämä data payload. Ylhäällä on raaka
438
00:41:42,265 --> 00:41:48,493
UART kommunikaatio. Älkää huolehtiko, se
suurennetaan myöhemmin ja alhaalla on
439
00:41:48,493 --> 00:41:55,568
meidän client, joka keskustelee PLClle
ja lähettää meidän kommentit. Joten
440
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
441
00:42:01,134 --> 00:42:07,048
-CPU signaali tuli PLClta.
Ja nyt lähetämme vaiheistuksemme
442
00:42:07,048 --> 00:42:11,629
ja vaiheistuksemme lähettää vain
kuittauksen, että tiedämme vaiheistuksen
443
00:42:11,629 --> 00:42:16,014
toimivan kunnolla. Tämä on firmware versio
bootloader versio 4.2.1, periaatteessa
444
00:42:16,014 --> 00:42:19,647
Joten nyt aiomme tehdä jotain muuta, aiomme
aiomme tosiasiassa dumpata
445
00:42:19,647 --> 00:42:24,234
firmwaren käynnissä olevasta PLCsta ja
verrata sitä firmwareen joka on ladattu
446
00:42:24,234 --> 00:42:30,913
Siemensin web sivulta. Ensin me aiomme
tosiaan purkaa firmwaren jonka latasimme
447
00:42:30,913 --> 00:42:35,520
Siemensin websivuilta, koska se on pakattu
lzp3:lla.
448
00:42:38,080 --> 00:42:43,360
Eli niin aiomme toimia. Oh ja aiomme
oikeastaan ensin muodostaa SSL yhteyden.
449
00:42:43,360 --> 00:42:50,320
Joten, SSL portin ohjaus, SSH portin ohjaus
ensin ja olemme juuri tarkastamassa että
450
00:42:50,320 --> 00:42:56,952
PLC toimii oikein. Ettei tämä ole
viallinen PLC tai jotain sellaista
451
00:42:56,952 --> 00:43:02,107
Kirjoitimme jotain. Varmistamme vain että
web palvelin avautuu. aukeaa
452
00:43:02,755 --> 00:43:12,640
se on auki, se on hyvä. Ja koitan yös
kirjautua websivulle web serverille
453
00:43:12,640 --> 00:43:16,720
web palvelimelle PCLssa. Taas, varmista
että PLC on toimiva
454
00:43:16,720 --> 00:43:23,920
Myös syötetään salasana. Luulen, että
kaikki voivat sen arvata. Ja näet että
455
00:43:23,920 --> 00:43:28,720
kirjaudumme viimein ja vasemmalla näet
kaikki toiminnallisuudet jotka
456
00:43:28,720 --> 00:43:34,320
latautuvat PLChen liittyen. Joten se on
käynnissä, käyvä, toimiva PLC. Ja nyt
457
00:43:34,320 --> 00:43:39,680
puretaan firmware, joka ladattiin
Siemensin websivuilta
458
00:43:39,680 --> 00:43:43,962
vientilisenssin tarkastamisen jälkeen jne.
Eli he haluavat varmistaa etteivät
459
00:43:43,962 --> 00:43:51,664
ihmiset Iranissa ja Pohjois Koreassa saa
sitä. Minä olen Iranista muuten. Joten
460
00:43:51,664 --> 00:43:55,485
tässä on purettu firmware. Mutta koska
päivitysnopeus on iso, kuten Tobias
461
00:43:55,485 --> 00:43:59,415
mainitsi aiemmin, me vain aiomme
viedä
462
00:43:59,415 --> 00:44:05,049
256 kilotavua firmwarea jostain osasta
web palvelua IDAan.
463
00:44:05,049 --> 00:44:10,358
Sinun täytyy asettaa big endian CPUlle.
Ja myös asemoida framework uudelleen
464
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
465
00:44:15,346 --> 00:44:24,538
funktiot ja yeah, ja sitten meidän täytyy
vain ottaa ja viedä 256 kilotavua firmwaresta
466
00:44:24,538 --> 00:44:29,406
joten me tarkoituksella hidastamme UARTia
koska haluamme varmistaa että emme
467
00:44:29,406 --> 00:44:33,289
tee sitä liian nopeasti ja ylivuoda
puskuria, joka on PLCn sisäinen
468
00:44:33,289 --> 00:44:41,896
Tässä, esimerkiksi, tässä osoitteessa,
691e28 aiomme exportata 256 kilotavua
469
00:44:41,896 --> 00:44:45,876
Tämä on laiteohjelmistosta, Siemens
firmwaresta. Oikein. Me vain exporttaamme
470
00:44:45,876 --> 00:45:00,737
sen. Eli, yeah, sitä kutsutaan nyt
fw-0x691E28 ulostulo kansiossa. Eli nyt
471
00:45:00,737 --> 00:45:05,645
olemme valmiit tämän kanssa. Aiomme
dumpata saman osoitteen PLCsta, eli
472
00:45:05,645 --> 00:45:11,960
toimivasta PLCsta. Pitää mainita jälleen.
Eli yläosa on periaatteessa raaka UART
473
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ä
474
00:45:17,959 --> 00:45:22,147
Eli tavallaan resetoimme PLCn. Ja ennen
kuin se on ohi, kirjoitamme RAM:in
475
00:45:22,147 --> 00:45:28,963
me periaatteessa dumppaamme sisällön
RAM:sta. Eli tämä on osoite 0x691e28.
476
00:45:28,963 --> 00:45:34,991
Tämä on samasta osoitteesta periaatteessa.
Ja dumppaamme 256 kilotavua ja tässä
477
00:45:34,991 --> 00:45:41,071
lähetämme MFGT1 periaatteessa ja saamme
-CPU ja sitten loput vaiheistajasta ja muut
478
00:45:41,071 --> 00:45:48,807
menevät. Nyt periaatteessa olemme lähet-
tämässä paketteja ja lopulta saamme
479
00:45:48,807 --> 00:45:57,478
vastauksen. Saimme tavallaan kaiken payloadin
kuin dumppasimme mem_dump_00691e28
480
00:45:57,478 --> 00:46:03,342
Tämä on PLCn RAM muistista. Tämä ei
ole enää Siemens web sivulta
481
00:46:03,342 --> 00:46:17,300
Me nappasimme sen omasta koneesta ja
vertaamme sitä.
482
00:46:17,300 --> 00:46:21,887
Eli meillä on muistidumppi ja alkuperäinen
firmware 265 Kb molempia. Ja sitten
483
00:46:21,887 --> 00:46:28,977
aiomme verrata niitä keskenään. Ja kuten
näette, sen pitäisi näyttää teille kuten
484
00:46:28,977 --> 00:46:32,755
täydellinen 100% vastaavuus. Tarkoittaen
ettö se on täsmälleen sama firmware,
485
00:46:32,755 --> 00:46:37,136
joka on saatavilla Siemensin web sivulta.
Dumppasimme sen suoraan Siemens PLC
486
00:46:37,136 --> 00:46:44,279
muistista käyttäen esikoispääsy ominai-
suutta. Tehdäänpä toinenkin. Tällä kertaa
487
00:46:44,279 --> 00:46:47,896
haluamme näyttää rajoittamattoman koodin
suorittamisen hyvin yksinkertaisesti.
488
00:46:47,896 --> 00:46:53,474
Kirjoitamme vain kustomoidun payloadin
PLClle ja saamme tervehdyksen PLClta.
489
00:46:53,474 --> 00:46:57,960
tervehdyksen PLClta. Periaatteessa pyysimme
PLCta lähettämään tätä viestä
490
00:46:57,960 --> 00:47:04,922
koko ajan jatkuvasti. Eli jälleen, lähetämme
kustomoidun payloadimme tänne ja
491
00:47:04,922 --> 00:47:13,449
sanomme hello loop. Ja periaatteessa
PLC yksinkertaisesti lähettää tämän loopin
492
00:47:13,449 --> 00:47:24,395
meille. Kaikki nämä asiat, jälleen, ovat
bootloader 4.2.1:lle. Sinun pitää muokata
493
00:47:24,395 --> 00:47:29,704
tiettyjä asioita, koska Siemens sanoo, että
he päivittivät taas bootloaderinsa 2019
494
00:47:29,704 --> 00:47:36,458
joulukuussa, jolloin ostimme uuden PLCn,
jälleen, taas. Ja nyt tässä saamme
495
00:47:36,458 --> 00:47:42,997
vastauksen. Tuo on PLC, joka lähettää
periaatteessa meille meidän raakadataa
496
00:47:42,997 --> 00:47:46,894
jota PLC meille jatkuvasti lähettää. Tuo
näyttää meille että vastaanotamme sitä.
497
00:47:46,894 --> 00:47:53,852
Mutta tämä oli ehkä liian yksinkertaista.
Nämä ovat raakadataa jota saamme PLC:lta.
498
00:47:53,852 --> 00:47:57,764
Tehdään jotain monimutkaisempaa. Näytetään
jotain, joka ei ole peräisin meiltä.
499
00:47:57,764 --> 00:48:04,167
Pelataan peliä nimeltä ristinolla PLCn
sisällä. Ja luulen, että ellet tiedä,
500
00:48:04,167 --> 00:48:08,873
näin ristinolla, näin minä pelaan
minä vain piirrän
501
00:48:08,873 --> 00:48:20,308
googlella. Joten nyt lähetämme jälleen
meidän kustom payloadin, mutta tällä
502
00:48:20,308 --> 00:48:25,364
kertaa lähetämme vain osittaisia kyselyitä
joltain toiselta Internetistä ja vain
503
00:48:25,364 --> 00:48:30,091
lataamme ne PLChen. Luonnollisesti sinun
pitää säätää useita asioita.
504
00:48:30,091 --> 00:48:38,726
Mutta lähetämme meidän payloadin,
mukaanlukien vaiheistuksen ja nämä
505
00:48:38,726 --> 00:48:44,956
ovat raakadataa. Jälleen, tässä on meidän
client. Ja lopulta näet ristinolla
506
00:48:44,956 --> 00:48:50,175
käyttöliittymän, johon menet. Eli pelaaja1
pelaa oikeasti X:lla
507
00:48:50,175 --> 00:48:54,870
ja pelaaja2 pelaa 0:lla. Joten näet kaikki
positiot, joista valitset.
508
00:48:54,870 --> 00:49:04,827
Sinulla on X ja toivottavasti
pelaaja1 voittaa. Ja siinä se oli.
509
00:49:04,827 --> 00:49:15,680
Siinä oli demo.
aplodeja
510
00:49:15,680 --> 00:49:19,891
Luonnollisesti, on paljon muitakin ideoita
joita voimme työstää, injektoida muuta
511
00:49:19,891 --> 00:49:24,560
kustom koodia, käyttää erikoispääsy
ominaisuutta, jatkamme tätä työtä.
512
00:49:24,560 --> 00:49:30,320
Kuten muitakin asioita Siemensissa,
olemme pahoillamme Siemens, me vain
513
00:49:30,320 --> 00:49:35,926
jatkamme tätä työtä, mutta jatkoa seuraa
vielä. Sillä välin, on joitain ajatuksia
514
00:49:35,926 --> 00:49:40,881
muille ihmisille, mikäli he katsovat tätä
ja tutkivat turvallisuutta
515
00:49:40,881 --> 00:49:45,860
Siemens PLC:ssa. Eli käyttämällä tätä
erikoispääsyä, voit tehdä joitain asioita.
516
00:49:45,860 --> 00:49:49,826
Eli esimerkiksi, voit käyttää tätä
prophylaxis toiminnallisuutta
517
00:49:49,826 --> 00:49:54,607
kirjoittaaksesi firmwareen. Kuten mainit-
simme funktio on käytettävissä, ja se
518
00:49:54,607 --> 00:49:59,320
ei vaadi kryptografista allekirjoitusta,
jota tavallisesti päivitys prosessissa
519
00:49:59,320 --> 00:50:03,917
on firmwaressa saatavilla. Eli voit vain
ohittaa sen ja se on vain CRC
520
00:50:03,917 --> 00:50:08,971
tarkastussumma. Eli mitä voit tehdä,
esimerkiksi, lisätä merkinnän organisoimaan
521
00:50:08,971 --> 00:50:13,446
vaikka alustusrutiinia, joka on saatavilla.
Ja sitten mitä voit tehdä ennen
522
00:50:13,446 --> 00:50:19,108
organisoitua alustusrutiinia, jota
kutsumme th_initial
523
00:50:19,698 --> 00:50:21,167
Toinen mitä voimme tehdä,
524
00:50:21,167 --> 00:50:23,893
mikäli muistatte, Tobias puhui
dokumentoimattomista
525
00:50:23,893 --> 00:50:27,682
ja luovuudesta tuottaa musiikkia
li li li lo lo lo
526
00:50:27,682 --> 00:50:30,565
Eli mitä joku voi tehdä on
527
00:50:30,565 --> 00:50:35,871
periaatteessa liittää tietty käsittelijä
tai ylikirjoittaa olemassaoleva.
528
00:50:35,871 --> 00:50:39,757
Ja laittaa se tekemään jotain kuin Triton.
En tiedä tunteeko sitä kukaan,
529
00:50:39,757 --> 00:50:42,660
mutta Triton joka on malware,
joka hyökkäsi petrokemian
530
00:50:42,660 --> 00:50:44,339
tehtaaseen Saudi Arabiassa.
Eli he yrittivät
531
00:50:44,339 --> 00:50:47,863
tehdä sen TCPlla. Mutta hyökkääjä
voisi ehkä tehdä sen http:lla esimerkiksi
532
00:50:47,863 --> 00:50:54,086
ja vain odottaa ja kuunnella kommentteja
ja muita vaihtoehtoja kuten
533
00:50:54,086 --> 00:51:00,947
päivittää jump taulut AWP käsittelijöissä,
joita voidaan myös käyttää prosessoimaan
534
00:51:00,947 --> 00:51:08,745
tiettyjä hyökkäyksiä. Eli mitäs muuta
sitä olisi? Eli mitä tutkimme
535
00:51:10,045 --> 00:51:10,919
Me tutkimme
536
00:51:10,919 --> 00:51:15,774
hyökkäyspinta-alaa Siemens S7 PLC:ssa
Siinä on joitan mahdollisuuksia paikalliseen
537
00:51:15,774 --> 00:51:19,838
käyttäjätaso hyökkäykseen. Jota voimme...
Mitä katsoimme oli bootloader
538
00:51:19,838 --> 00:51:25,351
Työstämme edelleen hardware hyökkäyksiä ja
hardware - ohjelmistä hyökkäyksiä reunalla.
539
00:51:25,351 --> 00:51:31,404
Tämä työ on käynnissä, ja siitä emme
tietenkään keskustele nyt? Lisäksi
540
00:51:31,404 --> 00:51:35,022
kiinostava asia, luulen, jollekin, joka on
kiinostunut PLCn turvallisuudesta
541
00:51:35,022 --> 00:51:38,861
erityisesti sisäisesti, en puhu nyt vain
yleisestä eriyttämisestä
542
00:51:38,861 --> 00:51:43,058
verkossa ja sellaisesta ICS puolella.
Puhun kehittyneemmistä alemman tason
543
00:51:43,058 --> 00:51:51,252
asioista. Mielestämme vaikka MWSL on
kiintoisa kohde. Siinä on todennäköisesti
544
00:51:51,252 --> 00:51:55,677
bugeja implementoinnissa. Myös, tiedosto
järjestelmän parsinnassa ja firmwaren
545
00:51:55,677 --> 00:52:00,840
allekirjoituksessa, siellä on varmaankin
jotain juttua ja myös MC7 parserissa,
546
00:52:00,840 --> 00:52:06,601
mitä siinä on käyttöoikeuksien nostamisen
näkökulmasta ja myös remote code execution
547
00:52:06,601 --> 00:52:13,630
näkökulmasta, molemmat MiniWeb web
palvelin ja myös mitä tahansa verkossa
548
00:52:13,630 --> 00:52:18,301
saatavilla oleviin palveluihin, joita
niissä on, voisi olla kiinostavaa. Katsot
549
00:52:18,301 --> 00:52:27,577
itseasiassa tätä kohtaa nyt. Joten lopuksi.
PLCt kehittyvät monimutkaisemmiksi.
550
00:52:27,577 --> 00:52:31,354
Se on totta, koska ne tosiasiassa tarjoavat
enemmän ja enemmän ominaisuuksia ja
551
00:52:31,354 --> 00:52:34,969
johtuen tästä monimutkaisuudesta, niissä
on enemmän bugeja. Näemme,
552
00:52:34,969 --> 00:52:41,676
esimerkiksi, MWSL:ssa, jota katsomme nyt,
siitä taivutetaan ja väännetään
553
00:52:41,676 --> 00:52:47,037
monimutkaisempaa. Heillä on periaatteessa
joku anti-vianetsintä, josta juuri
554
00:52:47,037 --> 00:52:52,817
keskustelimme Siemens PLCssa, mutta heillä
on myös, esimerkiksi, päivitys
555
00:52:52,817 --> 00:52:59,465
eheyden tarkastus, kuten allekirjoitus
firmwaressa kun se ladataan PLChen ja
556
00:52:59,465 --> 00:53:05,578
sellaisia juttuja. Joten he tekevät siitä
monimutkaisempaa. Mutta mitä meidän tulee
557
00:53:05,578 --> 00:53:14,279
tietää että jos heidän uhkamallissa, joka
usein tehdään tai turvallisuusmallissa
558
00:53:14,279 --> 00:53:20,220
jonka he rakensivat. Jos heillä on ominaisuus
joka ohittaa samat turvallisuusjärjestelyt
559
00:53:20,220 --> 00:53:24,415
jotka he suunnittelivat. Tarkoitan, että,
mielestäni on selvää että heidän pitää
560
00:53:24,415 --> 00:53:28,427
poistaa, kuten bootloaderin tapauksessa,
heidän erikoispääsy ominaisuudet.
561
00:53:28,427 --> 00:53:32,340
hyvänä esimerkki. Ja tietenkin asiakkaiden
täytyy tietää, koska heillä on sellainen
562
00:53:32,340 --> 00:53:36,428
toiminto ja he tarvitsevat sitä, kunhan
asiakkaat tietävät, se on hyvä.
563
00:53:36,428 --> 00:53:41,001
Mutta jos he eivät tiedä, he eivät voi
huomioida tätä riskiä strategiassaan tai
564
00:53:41,001 --> 00:53:46,809
uhkamallissa, joka heillä on. Joten.
Ja heidän täytyy miettiä tai uudelleen
565
00:53:46,809 --> 00:53:51,054
miettiä turvallisuutta tietämättömyydellä.
Ehkä he sallivat meidän, tutkijoina,
566
00:53:51,054 --> 00:53:53,700
päästä käsiksi laitteisiin
paremmin ja helpommin
567
00:53:53,700 --> 00:53:55,815
tutkiaksemme niitä enemmän.
Me teemme vielä sitä
568
00:53:55,815 --> 00:54:00,894
mutta se vain kestää kauemmin. Ja uskon
että on paljon enemmän nähtävää ja
569
00:54:00,894 --> 00:54:08,464
tehtävää PLC:issa ja Siemens ei ole
viimeinen jonka parissa työskententelemme.
570
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ä.
571
00:54:13,844 --> 00:54:20,802
Thomas, Alexandre, Marina, Lucian, Nikita,
ja Robin. Heidän avustaan ja työstään.
572
00:54:20,802 --> 00:54:26,902
Ja nyt aiomme vastata kysymyksiin.
573
00:54:26,902 --> 00:54:27,881
Herald: Kiitoksia.
574
00:54:27,881 --> 00:54:37,078
aplodeja
575
00:54:38,944 --> 00:54:47,318
Herald: Eli, Yeah, voitte tulla jonoon
mikrofonille tai kirjoittaa kysymyksenne
576
00:54:47,318 --> 00:54:54,941
Elisa huoneessa. Ah, siinä mennään. Se on
päällä nyt, luulen.
577
00:55:02,043 --> 00:55:07,360
Signal Angel: Hei, Yeah. ELi on yksi kysymys
Internetistä. Tarkistitteko MC7
578
00:55:07,360 --> 00:55:15,789
parserin? Jos kyllä. Löysittekö mitään
piilotettuja koneohjeita siitä
579
00:55:15,789 --> 00:55:21,760
tai jotain.
Ali: Haluatko vastata? Onko tämä
580
00:55:21,760 --> 00:55:26,400
nauhoitettu, vai toistanko kysymyksen? Eli
he kysyvät tarkastimmeko MC7 parserin.
581
00:55:26,400 --> 00:55:32,097
OK, Hyvä. Eli emme todella tutkineet
MC7 parseria
582
00:55:32,097 --> 00:55:35,548
mutta työskentelemme sen parissa nyt.
583
00:55:36,934 --> 00:55:40,640
Mic: Hei ? Kuinka pystyitte löytämään
584
00:55:40,640 --> 00:55:45,840
MFG turvallisuus salasanan?
Ali: Se on todella pitkä tarina. Ensinnäkin
585
00:55:45,840 --> 00:55:50,236
meillä oli se edessämme hyvin, hyvin
pitkän ajan, kunnes Siemens toi
586
00:55:50,236 --> 00:55:56,160
tämön anti-debugging ominaisuuden.
Sen jälkeen, meidän piti keksiä toinen
587
00:55:56,160 --> 00:56:01,932
keino, toinen keino sen löytämiseen,
löytää samanlainen toiminto, toisia
588
00:56:01,932 --> 00:56:06,480
tapoja sallia se, koska asia josta emme
keskustelleet täällä, oli ettemme kertoneet
589
00:56:06,480 --> 00:56:11,920
kuinka me, esimerkiksi suoritimme sen
komennon aikaisemmin PLC:ssa.
590
00:56:11,920 --> 00:56:18,240
Siihen liittyi työtä, johon saimme apua
joiltain tutkijoilta Hollannista ja Ranskasta.
591
00:56:18,240 --> 00:56:24,560
Eli tämä oli jotain, josta informoitiin
Siemensia 2013. Luulen, että he tiesivät
592
00:56:24,560 --> 00:56:31,280
siitä. Mutta 2016, he korjasivat sen ja
se vaikutti kuin he periaatteessa koittivat
593
00:56:31,280 --> 00:56:35,269
suojata PLCta tämän tapaisilta hyökkäyksiltä.
Sitä ei oltu julkaistu aiemmin.
594
00:56:35,269 --> 00:56:39,240
Joten käytimme sitä. Emme halua
keskustella siitä, koska
595
00:56:39,240 --> 00:56:42,939
alkuperäinen tekijä ei halunnut puhua siitä.
Mutta toistimme,mitä he olivat,
596
00:56:42,939 --> 00:56:49,360
mitä he tekivät. Ja kun meidän todella piti
hakea muita keinoja, silloin se
597
00:56:49,360 --> 00:56:53,760
avasi silmämme, että on olemassa joitain
muita toimintoja myös.
598
00:56:53,760 --> 00:56:57,520
On sellaisia, kuten esimerkiksi bootloader.
Mutta ennen kuin tarvitsimme niitä,
599
00:56:57,520 --> 00:57:01,659
emme ikinä etsineet niitä. Joten se oli
tavallaan edessämme
600
00:57:01,659 --> 00:57:05,636
jotain kaksi vuotta.
Tobias: Ehkä yksi kiinostava osa
601
00:57:05,636 --> 00:57:10,364
taustatarinaa on, että me periaatteessa
aikaisempaa tekniikkaa käyttäessämme
602
00:57:10,364 --> 00:57:16,240
me todellisuudessa ylikirjoitimme ehdollisen
hypyn, joka ohjasi meidät erikoispääsy
603
00:57:16,240 --> 00:57:18,280
toiminnon suorittamiseen ehdottomalla
hypyllä. Eli periaatteessa leikkasimme pois
604
00:57:20,320 --> 00:57:25,680
60% koko firmware koodista vahingossa.
Ja sitten täysin
605
00:57:25,680 --> 00:57:30,320
aavistuksesta, kuten kerroin aiemmin, että
siellä oli vain liikaa erilaisia
606
00:57:30,320 --> 00:57:35,040
toimintoja. Palasin takaisin ja ymmärsin,
että se oli juuri se sama kohta
607
00:57:35,040 --> 00:57:41,600
jonka ylikirjoitimme aikaisemmin, ja joka
meidän piti periaatteessa korvata ja
608
00:57:41,600 --> 00:57:43,493
käyttää omiin tarkoituksiimme.
609
00:57:44,113 --> 00:57:46,286
Mic: Onko siinä mitään käynnistyksen
aikaista turvallisuutta
610
00:57:46,286 --> 00:57:51,470
muuta kuin CRC tarkastus? Eli te. Voitteko
muokata sisältöä SPI flashilla ja
611
00:57:51,470 --> 00:57:54,413
saada mielivaltaisen koodin
suorittamisen sillä tavalla myös?
612
00:57:55,059 --> 00:58:01,911
Ali: Eli, se riippuu mistä vuodesta olet
puhumassa 2017, 2016. Eli puhumme
613
00:58:01,911 --> 00:58:07,190
samasta mallista PLCsta, mutta vuosina
2017 ja 2018. Ei. Voisit periaatteessa
614
00:58:07,190 --> 00:58:11,770
vain ottaa ulos SPI flashin, ylikirjoittaa
sen. Ja se on hyvä, Mutta jos
615
00:58:11,770 --> 00:58:16,642
olit ylikirjoittamassa sitä ja aiheutit
pysähdyksen CPU coressa, se taas laukaisee
616
00:58:16,642 --> 00:58:23,063
sen anti-vianetsintä ominaisuuden joka
heillä on. Tämä vahtikoira periaatteessa.
617
00:58:23,063 --> 00:58:28,613
Mutta firmwaren eheyden kannalta.
Periaatteessa kun kerran kirjoitat...
618
00:58:28,613 --> 00:58:33,347
firmware kirjoitetaan NAND flashille,
mutta se on vain CRC tarkastus. Mutta
619
00:58:33,347 --> 00:58:37,189
päivitysprosessi? Ei. Siinä on joitain
kryptografisia tarkastuksia, mutta kun
620
00:58:37,189 --> 00:58:41,920
se on kirjoitettu, ei. Siinä on joitain
ongelmia, jotka taas. Se on edelleen
621
00:58:41,920 --> 00:58:45,456
jatkuvaa työtä ja emme halua puhua siitä
vielä, mutta hyvä huomio-
622
00:58:45,456 --> 00:58:50,682
Mic: Kiitos.
Mic: Hei, Kiitos esityksestä, voisitteko
623
00:58:50,682 --> 00:58:54,937
avata teidän keskustelua valmistajan
kanssa ja aikataulua?
624
00:58:54,937 --> 00:59:00,188
Ali: Kyllä, ensinnäkin, me olimme tienneet
tästä ongelmasta puolitoista vuotta
625
00:59:00,188 --> 00:59:04,429
ennen kuin raportoimme asian valmistajalle.
Tärkein syy oli, että käytimme sitä yhteen
626
00:59:04,429 --> 00:59:09,329
toiseen projektiin. Tämä on todellisuudessa
tulos oikeasti sivuprojektista
627
00:59:09,329 --> 00:59:12,867
enemminkin kuin pääprojektista. Mutta
koska varsinainen projekti on jotain
628
00:59:12,867 --> 00:59:18,083
muuta ja edelleen käynnissä. Mutta sen
projektin sivussa, meillä oli pääsy.
629
00:59:18,083 --> 00:59:21,888
Ja koska olimme huolissamme, että valmista-
jalle raportoidessa he voivat korjata
630
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ä
631
00:59:26,244 --> 00:59:31,758
toisessa projektissa, emme halunneet kuin
viimein 2019. Thomas Weber halusi puhua
632
00:59:31,758 --> 00:59:37,581
tässä esityksessä periaatteessa tästä
JTAG liittymästä CoreSightiin ja sitten
633
00:59:37,581 --> 00:59:42,776
päätimme kuitenkin puhua siitäkin.
Mutta muutenkin, oikeastaan me
634
00:59:42,776 --> 00:59:48,512
puhuimme kesäkuussa, luulen, Siemensin
kanssa ja he vahvistivat, että tässä raudassa
635
00:59:48,512 --> 00:59:53,209
on erikoispääsy ominaisuus. Ja he ovat..
He sanovat, että aikovat poistaa
636
00:59:53,209 --> 00:59:58,460
sen ja se siitä. Me myös lähetimme
heille write Up:in luettavaksi.
637
00:59:58,460 --> 01:00:02,644
Herald: Eli, siellä on vielä viimeinen
kysymys Signal Angelilta.
638
01:00:04,173 --> 01:00:09,259
Signal Angel: Eli, siellä on seuraava
kysymys Internetistä. Jos työkalut kuten
639
01:00:09,259 --> 01:00:15,696
Flashrom, eivät tue tuntematonta SPI flash
rom sirua, kuinka te tavallisesti puratte
640
01:00:15,696 --> 01:00:22,418
firmwaren, jos ette halua purkaa sirua
tai käyttää SOICB istukkaa.
641
01:00:22,418 --> 01:00:26,538
Ali: Voitko toistaa sen. En saanut
kysymystä, saitko sinä ?
642
01:00:26,538 --> 01:00:32,419
Signal Angel: Jos työkalut kuten Flashrom,
eivät tue tuntematonta SPI flashrom sirua
643
01:00:32,419 --> 01:00:38,640
kuinka te tavallisesti puratte firmwaren,
jos ette halua purkaa sirua
644
01:00:38,640 --> 01:00:42,262
tai käyttää SOICB istukkaa.
Ali: Ensinnäkin, me emme oikeasti koskaan
645
01:00:42,262 --> 01:00:49,030
pura SPI flashia. Teimme sen vain CPU:lle.
Ja koska halusimme tietää, että
646
01:00:49,030 --> 01:00:53,920
Siemens uudelleenbrändää PLCtaan. Eli se
ei ole heidän CPU, se on Ransasilta,
647
01:00:53,920 --> 01:00:58,755
mutta siksi purimme osia.
Mutta purkujutut sikseen.
648
01:00:58,755 --> 01:01:04,160
Mutta muista asioista, siellä on
kuitenkin tämä toiminto, tämä
649
01:01:04,160 --> 01:01:08,068
bootloader toiminto, joka antaa sinun
lukea sisällön muistista.
650
01:01:08,068 --> 01:01:11,621
Eli se on yksi asia, jonka voit lukea.
Selvästi sinun ei edes tarvitse, kiitos
651
01:01:11,621 --> 01:01:15,760
yhden oppilaani. Me tiedämme yhden, jota
sinun ei tarvoitse edes
652
01:01:15,760 --> 01:01:20,640
ottaa pois bootloaderista, siru. Me voimme
periaatteessa vain kytkeytyä suoraan
653
01:01:20,640 --> 01:01:27,972
levylle ja dumpata firmwaren. Marcello, se
on hänen nimensä. Hän on täällä. Mutta
654
01:01:27,972 --> 01:01:34,110
kuitenkin, voit vain suoraan lukea sen.
Ja kyllä, en usko, että lukemis osuus
655
01:01:34,110 --> 01:01:38,000
erityisesti osat siitä, ovat suojattuja,
erityisesti uusissa versioissa, joissa
656
01:01:38,000 --> 01:01:43,200
et voi lukea kaikkea. Mutta muuten, en
usko, että se on vaikeampaa nyt vielä.
657
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
658
01:01:47,680 --> 01:01:51,520
jolla se kierretään. Joten.
Herald: Okei, seuraava esitys
659
01:01:51,520 --> 01:01:57,509
tulee olemaan toimitusroboteista. Sasha
20 minuutin päästä. Annetaan aplodit.
660
01:01:57,509 --> 01:02:01,712
aplodeja
661
01:02:01,712 --> 01:02:11,763
36c3 esityksen jälkimusiikki
662
01:02:27,021 --> 01:02:35,053
Translated by Esa Lammi
(ITKST56 course assignment at JYU.FI)