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)