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