Translated by Matti Lassila (ITKST56 course assignment at JYU.FI) Vuonna 2001 järjestetystä 28C3-tapahtumasta alkaen olemme järjestäneet vähintään yhden CTF-haasteen,
ja kolme seuraavaa puhujaa ovat olleet mukana järjestämässä niitä.
Toivotamme tervetulleeksi suosionosoituksin Andyn, Zahilun ja Marleaun
Tervedys kaikille ja tervetuloa meidän puolestamme
Mitä CTF tarkoittaa? Tässä puheessa kerromme perusteista: mitä CTF on, kuinka pelata sitä ja mitä eri pelitapoja on olemassa.
Tämä on esityksemme ensimmäinen osa, hieman johdantoa asiaan.
Sen jälkeen esittelemme kolme haastetta jotka valmistelimme tämän vuoden CTF-kisaa varten
joten jos puheemme myötä herää kiinnostus CTF-kisaamiseen
on jokin käsitys mitä odottaa
Muutama sana meistä. Joukkueemme nimi on Eat Sleep Pwn Repeat.
tai lyhennettynä ESPR. Olemme CTF-joukkue.
En oikeastaan tiedä kauon joukkueemme on ollut olemassa, kolmen neljän vuoden luokkaa; mahdollisesti jopa viisi.
Olemme joukko henkilöitä jotka ovat vapaa-ajallaan kiinnustuneita tietoturvallisuudesta.
Tutustuimme toisiimme hackerspacessa tai yliopistolla ja me vain ryhdyimme pelaamaan CTF-kisoja ja kaikki osallistuivat
Näin ryhmämme sai alkunsa.
Siinäpä se. Olen nyt puhunut CTF-kisoista
mutta on mahdollista että kaikki eivät vielä tiedä mikä CTF on. CTF on lyhenne sanoista Capture the Flag, tämä ei kuitenkaan
tarkoita samaa asiaa kuin samanniminen Unreal Touramentin pelimoodi.
CTF on joukkuekilpailu
jossa joukkueen ratkaisevat tehtäviä jotka jollain tavalla liittyvät tietoturvaan
CTF-kisaamiseen on kaksi päätapaa, joista on olemassa variaatioita.
Ensimmäinen on hyökkäys ja puolustus -pelitapa ja toinen Jeopardy-pelitapa, josta kerrotaan tarkemmin seuraavilla esityskalvoilla.
Vuosien mittaan CTF-pelaajayhteisö on kasvanut valtavasti. Kun me aloitimme, CTF-kisoja oli vuodessa oli vain kourallinen.
Nyt jos käy katsomassa kuinka monia CTF-tapahtumia on olemassa
niitä on miltei joka viikonloppu, yleensä toisten CTF-joukkueiden järjestämänä
joten tarjolla on paljon tehtävää
Käytännöllisesti katsoen kaikki CTF-tapahtumat ovat pelaajayhteisön järjestämiä
halukkaiden on melko helppo päästä tähän mukaan.
Esityksemme tavoite onkin juuri tämän. Aikaisemmin mainitsin Jeopardy-tyylisen CTF-pelitavan.
Se on helpoin pelitavoista
ja se on myös helpoin järjestää, sillä se muistuttaa Jeopardy TV-ohjelmaa
Se on yhdysvaltalainen TV-visailu, jossa on eri kategorioihin ja vaikeusasteisiin kuuluvia tehtäviä.
Visailussa myönnetään pisteitä tehtävien vaikeusasteen mukaan
Pisteiden määrä voi olla kiinteä
Esimerkiksi tehtävästä voi saada 100, 200 300, 400 tai 500 pistettä vaikeusasteen mukaan. Nykyään usein käytetään dynaaminen pisteytystä
jolloin mitä useampi henkilö ratkaisee tehtävän, sitä vähemmän pisteitä tehtävästä saa
Etukäteen on melko vaikeaa määritellä kuinka paljon pisteitä mistäkin tehtävästä on syytä antaa.
CTF-pelaaminen on periaatteessa helppoa. Valitaan tehtävä ja yritetään ratkaista se.
Ratkaistu tehtävä ilmoitetaan verkon kautta. Tästä saadaan pisteitä ja tätä toistetaan, kunnes kaikki tehtävät on ratkaistu tai joukkue on ensimmäisellä sijalla
Pisteitä eniten kerännyt joukkue voittaa
Tasatilanteessa voittaa joukkue joka keräsi ensimmäisenä voittoon vaaditut pisteet
Tyypillisimmät tehtäväkategoriat Jeopardy-tyylisessä CTF-kisassa ovat
Haltuunotto (ownaaminen) joka on klassinen binääritasolla tehtävä hyökkäys
jossa hankitaan oikeus ajaa omaa koodia palvelimella
Crypto-haasteessa hyökätään huonosti suunniteltuja salaustoteutuksia
tai väärin käytettyjä salausalgoritmeja vastaan
tehtävässä voi olla tarkoituksena purkaa salaus tai luoda salausavaimn kopio
Web-haasteet ovat tavanomaisia, käytetään erilaisia verkkosovelluksia
sovelluksia jotka eroavat toteutustekniikoiltaan palvelin ja selaintoteutuksen osalta.
ESPR-joukkueessa meillä on tehtäväkategoria, jossa hyödynnetään selainhaavoittuvuuksia
mutta näissä ei oikeastaan ole kyse web-haavoittuvuuksista.
Takaisinmallinnushaasteessa tehtävänä voi olla selvittää mitä jokin sovellus tekee
esimerkiksi takaisinmallintaa sovelluksen tekemää laskentaa.
Seuraava pelimoodi on hyökkäys ja puolustus. Tämä on klassinen pelimoodi.
Näitä on vain muutama vuodessa sillä se on erittäin vaativa järjestää, koska toiminta tapahtuu aidossa palvelin- ja verkkoympäristössä.
Jokainen joukkue saa virtuaalikoneen joka käytännöllisesti katsoen on palvelin joka sisältää kilpailua varten suunnitellut ja konfiguroidut palvelut
Nämä virtuaalikoneet ovat yhteydessä toisiinsa VPN:n kautta eli lipuunryöstöön osallistuvien palvelimet ovat toistensa ulottuvulla.
Tavoitteena on hyökätä muiden palvelimille ja ladata dataa näiltä haavoittuvaiseksi konfiguroiduista palvelimilta.
Joukkue lähettää lataamansa datan pelipalvelimelle ja tästä myönnetään pisteitä.
Ja tietysti, jos käytössä olevaan koneeseen on täydet oikeudet, tehtävänä on hyökkäämisen lisäksi
korjata oman palvelimen haavoittuvuuksia ja tehdä muiden hyökkäykset vaikeammiksi
ja oman palvelimen palvelut on myös pidettävä ylhäällä sillä mikäli palvelut ovat alhaalla
muilta pelaajilta ladatuista tiedoista ei myönnetä pisteitä
Joten pelaajilla on kolme päätehtävää hoidettavana. Oman palvelimen tietoturvaa on suojausta on parannettava
On löydettävä muiden palvelimen suojauksesta heikkouksia ja osattava hyödyntää niitä ja on pidettävä oman palvelimen palvelut ylhäällä
Ja kuten sanoin pisteitä myönnetään pääkategorioissa hyökkäys, puolustus ja palvelun saatavuus.
Joko hyökätään toisten palveluita kohtaan tai puolustetaan omia palveluita ja pidetään ne verkossa.
Tätä pelataan useimmiten kierroksina. Joka kierros alkaa alkutilasta ja pisteitä myönnetään kierroksittain.
Viimeisen kierroksen jälkeen pisteet lasketaan yhteen ja eniten pisteitä kerännyt joukkue on voittaja.
Jokaisessa hyökkäys-puolustus -kisassa on eroja säännöissä
mutta nämä ovat pääperiaatteet. Tässä on tyypillinen hyökkäys-puolustus CTF-kisan tuloslista
Kyseessä ovat RUCTFE-kisan tulokset. Ja kyllä vaan, otin tuloslistan missä meidän joukkueemme on ensimmäisellä sijalla.
Eri sarakkeista näkee palvelimilla käynnissä olleet palvelut
Kuten esimerkiksi, Crash, Bin
Weather, Cartographer ja niin edelleen. Punaiset ja vihreät sarakkeet tarkoittavat että palvelu on alhaalla tai ylhäällä.
Taulukosta näkee keräämämme pisteet, palvelun ylhäälläoloprosentti.
Eli nähdään että palvelumme olivat jonkin aikaa alhaalla. Ja tästä näkee kuinka monta lippua hävisimme
Tämä on luku jokaisen sarakkeen oikeassa alareunassa, eli Crash-palvelulle -32.
Eli hävisimme 32 lippua ja keräsimme 15000 lippua-
FP muodostuu näistä kolmesta osa-alueesta ja tämän luvun perusteella joukkueet asetetaan järjestykseen.
Nyt teillä on käsitys kuinka pelata CTF:ää. Mutta miksi sitä kannattaa pelata, no se on miltei itsestäänselvää.
Pelaaminen on hienoa, koska silloin on tilaisuus hakkeroida eri asioita täysin laillisesti koska se kuuluu asiaan
CTF-pelaaminen on hauskaa ja on hauskaa oppia uusia asioita.
CTF-pelatessa oppii paljon uusia asioita, kuten myöskin pelin jälkeen
keskustellessa muiden joukkueiden kanssa ratkaisuista
Pelaamisen kautta syntyy myös uusia kaverisuhteita. Esimerkiksi, joukkueemme on kavereita puolalaisen Dracon Sector -joukkueen kanssa.
Aina kun tapaamme, otamme muutaman oluen ja juttelemme CTF-pelaamisesta ja kaikenlaisesta muusta.
Olemme tosiaan saaneet monia hyviä ystäviä peleistä. Ja saattaa olla että pelaamisen myötä pääsee myös matkustamaan eri puolilla maailmaa.
pelaamaan paikan päälle
Joissain tapauksissa on joitain ennakkokarsintoja jonka jälkeen voidaan osallistua kansainvälisiin kisoihin ja matkustaa paikan päälle pelaamaan ja mahdollisesti jopa voittamaan.
Nyt järjestämämme C3CTF on järjestetty joka vuosi 28C3-konferenssista (vuodesta 2011) alkaen.
Pyrkimyksemme on noudattaa tehtävissä kongressin teemaa.
Tämän vuoden CTF-kisassa meillä oli 636 joukkuetta jotka palauttivat vähintään yhden lipun.
Kyseessä oli pieni lippu, pienen pieni tehtävä, eräänlainen järkevyystesti.
Tarvitsi vain leikata ja liimata merkkijono tekstikenttään jotta näemme kuinka monta joukkuetta on mukana.
Joukkueita oli 636. Kisassa oli 30 tehtävää
ja joukkueet ratkaisivat tehtäviä yhteensä 1457 kertaa.
Tänä vuonna oli lisäksi muutamia vierailijoiden suunnittelemia tehtäviä
joten paljon kiitoksia Kokjo, Tethys, jvoisin, Qubasa ja joernchen
ideoista ja kokonaisista tehtävistä joita saatoimme käyttää
Kolme voittajaa ovat KJC+MHackeroni ensimmäisellä sijalla, toisena pasten ja kolmantena Dragon Sector.
Vielä kerran onnittelut heille. Koska vuosi vuodelta C3CTF on tullut aloittelijoiden kannalta vaikeammaksi
viime vuonna järjestimme ensimmäisen kerran Junior CTF -pelin jossa on helpompia tehtäviä jotka ovat lähempänä
sitä tehtävien vaikeustasoa kun me aloitimme.
Kisaan osallistui 520 joukkuetta, joten ei kovin montaa mutta he ratkaisivat pelin 33 haastetta kaikkiaan 2761 kertaa
eli pelissä ratkaistiin enemmän tehtäviä kuin C3CTF:ssä.
myös tässä CTF:ssä oli hienoja vierailijoiden suunnittelemia haasteita, joten kiitokset gehaxelt, domenukk, pr0me ja Trolldemorted
ja voittajat ovat mahtavia!
Voittajia ovat Made in MIM, toisella sijalla sno ja kolmantena ZenHack
Ja nyt kun tiedossa on mitä CTF-kisassa tapahtuu niin mitä tarvitse tehdä että pääsee pelaamaan?
Ensimmäinen asia jota tarvitaan on CTF-tapahtuma. On olemassa hieno verkkosivusto ctftime.org
sieltä näkee kaikki tulossa olevat CTF-tapahtumat
ja sivustolla voi rekisteröityä tulossa oleviin peliin. Kun peli käynnistyy, pääsee mukaan. Mitä taitoihin tulee
niitä ei tarvitse kovin paljon. Tarvitsee kuitenkin osata ohjelmoida
Jonkin skriptauskielen osaaminen on tarpeen, sitä tarvitaan työkaluksi
esimerkiksi jonkin tiedoston parserointia varten tai verkkoliikenteen käsittelyyn ja niin edelleen. Takaisinmallinnusta ja binäärihaavoittuvuuksien hyväksikäyttöä varten
on ehdottomasti - valitettavasti - tunnettava assembly-kieltä ja takaisinmallinnustaitoja. Kaiken tämän yhdistämistä varten
tarvitaan perustason Linux-taitoja, koska tarvittavat työkalut ovat parempia Linuxissa kuin Windowsissa
mutta toki tarvittaessa voidaan käyttää Windowsin Linux-alijärjestelmää
joka nykyään toimii samoin. Haltuunoton ja binäärihaavoittuvuuksien hyväksikäyttöä
oppii niin sanotuista sotapeleistä. Viimeisessä esityskalvossa on joitain linkkejä
Niistä kannattaa aloittaa. Sotapeli on CTF joka on jatkuvasti saatavilla verkossa.
Sotapelejä voi pelata läpi omaan tahtiin ilman aikarajoitusta.
Myös vanhoja CTF-haasteita voi tutkia. Näiden arkistoja löytyy verkosta. Arkistoidun CTF:n voi ladata, ajaa paikallisesti ja koittaa hyväksikäyttää niistä löytyviä haavoittuvuuksia.
Ja on ollut
muiden joukkueiden laatimia yhteenvetoja CTF-haasteista
eli joku saattaa kirjoittaa ratkaistusta haasteista esimerkiksi blogikirjoituksen, kuinka haasteet ratkaistiin
Nämä yhteenvedot auttavat oppimaan. Mikäli oppiminen videon kautta tuntuu sopivan paremmin
Youtubessa on tili nimeltä Life Overflow jolla julkaistaan todella hienoja videoita erilaisista CTF-haasteista
videoijen julkaisija käy haasteita läpi, kertoo kuinka hän ratkaisi haasteen ja mikä idea haasteeen takana on ollut.
Toki, tätä ei ole syytä tehdä yksin sillä CTF-haasteita on hauskempi ratkaista yhdessä
Verkosta voi löytää ryhmiä, samanhenkisiä ihmisiä ja mene käymään hackespacessa ja kysele
olisiko joku kiinnostunut osallistumaan porukalla CTF-tapahtumaan tai pelaamaan sotapeliä, juuri niin kuin me teimme.
Nyt kerromme mitä äskeinen CTF piti sisällään. Annan vuoron Martinille joka käy läpi pelin haasteita
[ohjaajan kommentti]
Aion kertoa kuinka lähestyä CTF-haasteita
Voin lämpimästi suositella Polyan kirjaa (How to solve it), joka kertoo ongelmanratkaisusta
Käytän esimerkkinä Junior CTF -pelin tehtävää nimeltään Blind.
Tämä on tehtäväkuvaus, hakkerointia sokeana
ja tässä on polku tehtävään, eli ryöstettävään lippuun
vaikeustasteeltaan tehtävä on keskitasoa, suhteessa Junior CTF -pelin yleiseen vaikeustasoon
Haaste perustuu bugiin joka löytyi 2017 ja nyt kerron, kuinka haastetta voi lähestyä. Ongelman ratkaiseminen vaatii
että ongelma täytyy ymmärtää aluksi. Jep, eli kun menee tuohon osoitteeseen näytetään tämä lähdekoodi.
Tämä on PHP-koodia. Nyt käymme sen läpi.
Ensimmäinen osa lähdekoodia on itse asiassa vihje.
Sitä ei tarvitse haasteen ratkaisuun, mutta se vihjaa PHP Object Injection haavoittuvuuteen
joka oli bugi
jonka avulla saattoi sisällyttää paikallisia tiedostoja käytettäessä PHP 5.3 -versiota tai vanhempaa
Haasteessa kuitenkin käytetään PHP 7-versiota. Seuraava koodilohko on täytettä.
Käytössä on kaksi luokkaa, luokat Black ja Green. Ne asettavat syntaksikorostuksen väriasetuksia
ja jos funktiolle tarjoaa store-parametrin, voidaan teema-asetukset tallentaa evästeeseen, tämä on tärkeää myöhempää ajatellen.
Seuraava osio on kiinnostava sillä se vihjaa polusta joka johtaa haavoittuvuuden hyväksikäyttöön
Ensimmäinen askel on URL-osoite teemaan
Otetaan GET-parametri ja tallennetaan se $_ -muuttujaan
Seuraavalla rivillä tarkistetaan onko muuttuja joko merkkijono "Black" tai "Green".
Sitten tarkistetaan onko tällainen luokka olemassa. Seuraavaksi asetetaan muuttuja arvoon joka riippuu URL-parametrista.
Tämä on kiinnostava osa, nyt luodaan objekti joka edustaa jompaa kumpaa luokkaa, Black tai Green.
tässä on täysi kontrolli parametreista joita annetaan luokan alustajalle
Seuraava osa koodia käsittelee myös teemaa mutta tällä kertaa evästeen kautta
tässä tarkastetaan onko evästeen ensimmäinen osa olemassaoleva luokka.
ja sen jälkeen välitetään evästeeseen tallennetut parametrit luokan alustajalle.
Näin luodaan olio tästä luokasta. Viimeinne osa koodia tulostaa tietoa ladatuista moduuleista
Bugissa on kyse siitä että on mahdollisuus luoda mielivaltainen objekti siten että on täysi kontrolli luokan alustajan parametreista.
Joten seuraava askel on suunnitelman laatiminen. Kerätään yhteen kaikki mitä tehtävässä on annettuna ja mitä pitää saavuttaa.
Eli nyt meillä on täysi kontrolli evästeeseen tallennettavasta datasta ja voimme luoda olemassaolevasta PHP-luokasta olion
ja luokan rakentajalle annettaviin argumentteihin on täysi kontrolli
Seuraavaksi täytyy löytää luokka joka tekee haluttuja asioita, kuten lukee tiedoston kun luokalle annetaan tietyt argumentit.
Ja tässä meillä on kätevä luokka, SimpleXML, jolla on mahdollista lukea tiedostoja verkon yli.
Jos option-muuttujan asettaa arvoon kaksi, sitä voi käyttää XML-elementtien korvaamiseen toisella
Tämä on tärkeää myöhemmin.
Nyt meidän täytyy vain toteuttaa suunnitelma
Tämä on helppo eksploitaatio. Luodaan theme-eväste
siten että ensimmäinnen osa evästettä on luokan nimi, SimpleXMLElement
ja toinen osa evästettä on lipun polku. Ja kuten näkyy, lippu tulostuu PHP-varoitusviesteihin
joten tämä toimii koska varoitukset olivat päällä. Seuraava askel ongelman ratkaisussa on katsominen taaksepäin
ja miettiä kuinka haastetta voisi lähestyä toisella tavalla tai toisenlaisten rajoitteiden ollessa voimassa.
Eli jos varoitukset eivät olisi päällä
olisimme melko sokeita. Haasteen nimi tulee tästä.
Emme saa tulostetta. XML:ään voi sisällyttää ulkoisia entiteettejä, jotka toimivat näin. Määritellään elementti
ja polku johon elementti viittaa.
eli sisällytetään polku XML.ään. Haavoittuvuuden hyväksikäyttö tapahtuu näin.
Omassa hallussa olevalta palvelimelta sisällytetään XML-tiedosto joka näkyy esityskalvon alareunassa
joka ottaa lipun ja lähettää sen sisällön omalle palvelimelle.
Tämänkaltainen yksinkertainen exploit-koodi ajetaan käynnistämällä PHP-palvelinprosessi ja tekemällä
pyyntö tähän osoitteeseen, palvelin antaa tälläisen vastauksen
Näyttää tältä. Ja koska lippu on Base64-enkoodattu, se täytyy dekoodata.
Ja näin saamme lipun. Seuraava osa kertoo
CTF-pääkisasta. Kiitokset!
Näitte juuri esimerkin melko tyypillisesti verkossa tapahtuvasta CTF-haasteesta
mutta tiedämme että on olemassa paljon joukkueita jotka ovat todella, todella taitavia
jotka ovat harrastaneet CTF-tapahtumia useita vuosia. Jotkut työskentelevät tietoturvan parissa päivätyönään
joten, tottakai, halusimme luoda erittäin haastavan CTF-kisan myös näille joukkueille
Yksi tavoitteemme oli luoda suhteellisen realistisia haasteita jotka perustuvat todellisessa maailmassa käytössä oleviin ohjelmistoihin ja haavoittuvuuksiin
Joten tässä kalvossa näkyy joidenkin niiden ohjelmistojen logoja joihin nyt järjestämämme CTF:n haasteet perustuivat.
Hauskana yksityiskohtana tällä kertaa kolme joukkuetta käytti kukin eriä nollapäivähaavoittuvuutta
ja ratkaisivat tehtävän käyttäen näitä haavoittuvuuksia sen sijaan että olisivat ratkaisseet tehtävän kuten oli aiottu
mutta tämä kuuluu pelin henkeen. En tiedä mitä tämä kertoo meidän CTF:stä mutta tämä oli mielenkiintoista.
Aion nyt esitellä kaksi pelissä olutta haastetta
Esittelen selainhaavoittuvuudmen hyväksikäytön, peliympäristön pystytyksen ja kuinka järjestää tämänkaltainen haaste ja niin edelleen.st such a challenge, cetera.
Jo kahtena viime vuonna meillä oli selainhaavoittuvuden hyväksikäyttöön liittyvä haaste
Selaimissa on jo useita vuosia ollut oletuksena käytössä sandbox-ominaisuus
Joka tarkoittaa sitä, että jos haavoittuvuus on selaimen sisältörenderoinnissä
se ei yksin riitä selaimen haltuunottoon. Viime vuonna haasteessa oli vain selaimen renderöinnissä olevan haavoittuvuuden hyväksikäyttö
ilman sandboxia. Tänä vuonna päätimme ottaa haasteeseen koko selaimen sandboxin kanssa haasteeseen jossa on kaksi osaa
Yksi osa on sisältörenderöinti, WebKit-komponentin hyväksikäyttö.
ja toinen osa on
sandboxista ulos murtautuminen. Perustimme haasteen todelliseen haavoittuvuuksien hyväksikäyttöketjuun joka esiteltiin tänä vuonna tai viime vuonna
Kuinka tällainen haaste järjestestetään? Mitä me teimme, liittyi Webkitiin tällä kertaa.
Viime vuonna oli Chrome ja sitä aikaisemmin Firefox, joten tänä vuonna käytimme WebKitiä joka on muun muassa Safarissa käytetty selainmoottori.
ja me muutimme sitä niin että muutimme selaimen implementaatiota Javascript-toteutuksen osalta lisäämällä huonosti toteutettua optimointikoodia
Tämä oli ensimmäinen osa, eli nyt Webkitissä on haavoittuvuus.
Seuraavaksi ohjelmoimme MacOS-järjestelmäpalvelun joissa on haavoittuvuuksia
perustuen haavoittuvuuksiin joita on esitelty tänä vuonna
joten järjestelmäpalvelut sisältävät bugeja
Niissä oli haavoittuvuuksia. Ja sen jälkeen otimme käyttöön muokatun Safarin ja haavoittuvat järjestelmäpalvelut käyttöön MacOSX-virtuaalikoneessa.
Oikealla ylhäällä näkyy miten CTF-kilpailijat näkevät tämän
Kilpailijoita varten on verkkosivu jota kautta he voivat lähettää osoitteen eksploitaatiomenetelmäänsä.
Kyseessä on selainhaavoittuvuus eli eksploitaatiomenetelmä on jokin verkkosivu.
Kilpailijat voivat kirjoittaa
ja lähettää URL-osoitteen eksploitaatiokoodiin. Tällöin meidän palvelimella käynnistyy virtuaalikone.
jossa avautuu käyttäjän antama URL-osoite Safari-selaimessa. Käyttäjät saavat palautteena videon selaimen käynnistymisestä.
Haasteen tavoite on lukea palvelimelta tiedosto ./flag.txt
Kilpailijat tekevät minkä pystyvät saadakseen tiedoston näkymään palvelimen näytöllä ja siten päätymään videolle.
Eli tältä haaste näytti pelaajan näkökulmasta.
Ratkaisua varten pelaajat saivat tässä haasteessa meiltä WebKit-patchin
ja haavoittuvaisten systeemipalvelut binääreinä, joten pelaajien täytyi käyttää takaisinmallinnusta
jonka jälkeen he voivat etsi koodista haavoittuvuuksia, toivottavasti löytäen joitain.
Sen jälkeen on mahdollista kirjoittaa haavoittuvuuksia varten eksploit, tässä tapauksessa haittakoodia sisältävän verkkosivun.
Joukkue laittaa haittakoodia sisältävän verkkosivun jollekin julkisen verkon palvelimelle jolle heillä on pääsy ja sen jälkeen lähettävät osoitteen haittakoodiin CTF-tulospalveluun.
Ja kuten totesin, tämän jälkeen virtuaalikone käynnistyy, tallentaa videon ja näyttää sen pelaajille
Video näyttää tältä, toivottavasti se toimii. Hyvä. Pelaajat näkevät juuri tämänkaltaisen videon kun he ovat lähettäneet haittakoodiosoitteen tulospalveluun.
Pelaajat näkevät tämän videon. Tutkitaan seuraavaksi mitä tässä tapahtui.
Taustalla näkyy modifioitu Safari, johon on avautunut pelaajien lähettämä verkko-osoite
ja se on tulostanut joitain asioita eksploitista
eli se ajaa WebKit-eksploitin. Joten nyt hyökkääjät voivat ajaa koodia Webkit-prosessissa
ja käyttää sandboxin ulkopuolella olevia haavoittuvaksi ohjelmoituja järjestelmäpalveluita
eli se voi ajaa mitä tahansa komentoja sandboxin ulkopuolella
Eli tässä tapauksessa, eksploit avaa ./flag.txt -tiedoston tekstieditorissa
tiedosto on todennäköisesti melko pieni
Vasemmalla yläkulmassa näkyy tekstieditorissa avattu lippu jonka sisältö täytyy kirjoittaa tulospalveluun jonka jälkeen järjestelmä antaa haasteeseen kuuluvat pisteet.
Eli näin se toimii. Miksi meidän mielestämme tämä on hieno haaste
ja miksi kilpailijoiden kannattaa ratkaista tämä. Tietty, tästä saa paljon pisteitä.
Kyseessä ei ole yksi, vaan kolme haastetta.
Suunnittelimme haasteen niin että sandbox-ulosmurtautumisen voi ratkaista, riippumatta siitä onnistuiko WebKit-hyväksikäytön toteutus.
Eli tarjolla oli yksi lippu jos ainoastaan WebKit-osio onnistui
Eli pelkästään Safari-osuus. Toinen lippu oli mahdollista saada jos andbox-ulosmurtautuminen onnistui
ja kolmas lippu, jos onnistui yhdistämään nämä kaksi.
Lisäksi tavoitteemme oli suunnitella haasteet siten, että ne tarjoavat mahdollisuuden oppia jotain uutta.
WebKit-osuus mahdollisesti opetti jotain lisää Javascriptistä
tai JIT-kääntäjien haavoittuvaisuuksista ratkaistaessa haastettau tai MacOSX-järjestelmäpalveluista.
Eli tämän kautta pääsee alkuun MacOSX-tietoturva-asioissa
Eli oppimisnäkökulma on myös hyvä muistaa. Olemme julkaisemassa lähdekoodit.
Tämän haasteen siis. Koodit tulevavat olemaan muutaman tunnin päästä Github-tililläni
tämänkaltaiset haasteet kenties helpottavat siirtymää CTF-kisaamisesta tietoturva-alan töihin.
Lähdekoodi antaa toivottavasti mukavan johdannon, jep.
Ja tässä oli osuuteni. Seuraavaksi Andy jatkaa.
Kiitokset. Minäkin suunnittelin pari haastetta.
Te jotka olette riittävän vanhoja, muistanevat tämän puhelimen
Tarina minun haasteeni takana on että aikaisemmin olin kiinnostunut GSM-asioista, halusin tietää miten se toimii
Joten pystytin kotiin oman ohjelmistoradioon perustuvan GSM-verkon ja käytin vanhoja Nokia-puhelimia
Sain sitten idean rakentaa oman puhelimen.
Tässä näkyy toteuttamani Nokia-puhelimen käyttöliittymä
joka ottaa yhteyttä GSM-verkkoon joka ei kuitenkaan käytä radioaaltoja
vaan GSM-liikennöinti tapahtuu UDP-paketteina, multicast-liikenteenä
ja lisäksi käytössä on ohjelmistoradio, joten itse toteuttamani puhelin voi kommunikoida aidon puhelimen kanssa
Näitte juuri sen. Tämä ominaisuus, jolloin radioaaltoja ei käytetä
GSM-verkossa on yleensä käytetty sovelluskehitystyössä yksikkötestatessa
GSM-verkon palveluita omassa verkossa koska silloin ei ole järkevää sotkea tähän mukaan radioaaltoja ja kaikkea muuta vain sovellustestausta varten
Joten he toteuttivat GSM-verkon Ethernetissä
Tämä on täydellistä CTF-haastett ajatellen koska pelaajat eivät ole pelkästään paikallisia
Joten teoriassa, voisin pystyttää ohjelmistoradion ja lähettää omaan GSM-verkkoni kautta jos käytössä on oikeanlaiset lisenssit
jolloin tämän voisi tehdä radioaalloilla.
Mutta teoriassa tämän voisi tehdä. Mutta tällöin joku USA:ssa tai muualla ei voisi osallistua haasteeseen
ja olemme aina halunneet että kisaan voi osallistua myös muuten kuin paikan päällä
Joten pystytin OpenVPN-tunnelin jossa hyökkäyksen kohteena oleva puhelin on
jolloin puhelimeen pääsee UDP monilähetyksen kautta
Eli tämä soveltuu tarkoitukseen täydellisesti. Haastetta varten toteutin puhelintoteutukseen bugin yhteenliitettävien SMS-viestien käsittelyyn.
Puhelintoteutuksessa on vain kaksi toimintoa. Se voi lähettää viestejä ja voi vastaanottaa viestejäThe phone only has two features.
Haasteessa puhelin oli verkossa ja sitä saattoi käyttää vain verkon yli
Puhelimella pystyi vain lähettämään viestejä mutta käytännöllisesti katsoen
minkälaisia viestejä vain
Viesteissä voi pitäytyä standardeissa, mutta voi myös lähettää viestejä jotka eivät ole standardin mukaisia ja tehdä kaikenlaisia erikoisia asioita.
SMS viesteihin on käytössä vain 160 merkkiä ja vanhoissa Nokia-puhelimissa oli ominaisuus
laskuri oikealla jossa näkyi kuinka monta merkkiä viestiin voi vielä käyttää
ja kauttaviiva, jonka jälkeen kuinka moneen viestiin pitkän tekstin sisältävä viesti jakaantui
koska puhelin jakaa viestin osiin
muutaman sadan merkin mittaisiin osiin ja sisällyttää otsaketiedot viestin alkuun.
Yksi, kaksi tai kolme tekstiviestiä lähetetään toiseen puhelimeen.
ja vastaanottajapuhelin ryhtyy yhdistämään viestejä
SMS-viesti jaetaan maksimissaan kolmeen osaan
mutta standardin mukaan osia voi olla jopa 250
Kaikki nämä viestit sisältävät header-tietoja
ja indeksinumeron, kuinka monennesta viestistä on kyse
indeksi alkaa ykkösestä ja jatkuu 225:een. Tässä tapauksessa voi käyttää numeroita yksi, kaksi ja kolme
Nyt koostettava SMS on jossain päin paikallista pinopuskuria
Sijainti jossa purettu teksti ensimäisestä viestistä on
ja viesti rakennetaan uudelleen järjestysnumeroiden pohjalta
Haasteessa ei tarkasteta viestin järjestysnumeroa, onko numero yksi, kaksi tai kolme
joten numeroksi voi asettaa minkä vain, jolloin kirjoittaminen menee pinopuskurin ulkopuolelle
prosessit pitävät kirjaa tilastaan pinossa
esim tietoa siitä missä kohtaa prosessi oli menossa ennen funktiokutsua jotta kohtaan voidaan palata tehtävän suorittamisen jälkeen
Tämän arvo ylikirjoittamalla kontrollivuo voidaan kaapata ja tämän jälkeen voidaan käyttää ROB-nimellä tunnettua tekniikkaa
ohjelmakoodin ajo-oikeuden saamiseksi ja ajaa koodia puhelimessa
Samaan tapaan kun Zeiler äskettäin havainnollisti kuinka selainta käyttäen avattiin tekstieditori
voidaan ottaa yhteys toiseen laitteeseen, saada auki Linux-shell puhelimeen jonka kautta haasteen lippu voidaan ottaa haltuun
Siinäpä se, puheeni oli tässä. Haluan kiittää koko CTF-yhteisöä
CTF-kisaamme osallistuneita pelaajia ja muita joukkueita jotka järjestävät pelejä
CTF-yhteisölle panostaen paljon ei ainoastaan
pelaamiseen vaan myöskin järjestelyihin jotka antavat muille mahdollisuuden pelata
Haluan myös kiittää 3C-konferenssin järjestäjiä
koska saimme tänä vuonna oman alueen käyttöömme jossa paikan päällä pelanneet joukkueet saattoivat kokoontua yhteen
Se oli todella hienoa. Oli mahtavaa nähdä 200 hakkeria istumassa yhdessä pöytien ääressä ja ratkaisemassa suunnittelemiamme haasteita
Se oli aivan mahtavaa. Haluan vielä uudelleen kiittää vierailijahaasteiden suunnittelijoita.
Nyt voisi olla kysymys-vastausosion aika.
Yksi asia vielä. Jos CTF-kisaaminen kiinnostaa tässä on linkkejä resursseihin jotka mainitsin aikaisemmin.
Vilkaiskaa niitä jos olette kiinnostuneita. Tokitoivon että tulette mukaan CTF-yhteisöön
Näen että yleisössä on jo joitain kysymyksiä.
Aloitetaan mikrofonista numero kaksi.
Kiitokset puheesta. Yliopistoni IT-turvallisuuskurssi oli arvosteltu CTF.
saimme arvosanat CTF-haasteesta keräämiemme pisteiden perusteella
Mikä on mielipiteenne tämäntyyppisestä arvostelusta?
Mitä ajattelett kun yliopistot järjestävät CTF:n arviointitarkoituksessa-
Meille tämä on harrastus ja hieno tapa oppia uusia asioita
Henkilökohtaisesti en vastusta tällaista arvostelua
En ole varma laittaisinko itse arvosanan riippuvaiseksi pisteistä mutta ajatttelen että itsessään tämä on hieno asia tehdä oppimiskokemuksena.
Ei ole väliä osallistuuko CTF:ään osana opintoja tai yksityiselämässä.
Aina kun me ratkaisemme muiden joukkueiden suunnittelemia haasteita, opimme aina uutta, uusia kikkoja
Eli en ajattele että se on huono idea.
Kiitoksia kysymyksestä. Seuraava kysymys tulee mikrofonista numero kolme. Mitä tehdä kun johonkin tehtävään jumittuu?
Hyvä kysymys. Yleensä auttaa kun pyytää jonkun muun joukkueesta apuun.
Pidä tauko ja pyydä jotakuta muuta joukkueesta jolla ei ole mitään käsitystä työn alla olevasta haasteesta
käymään läpi löydöksesi tai vain juttelemaan kanssasi haasteesta
Toisella henkilöllä voi olla uusia ideoita joita kokeilla
vaikka hän ei ole edes tutustunut haasteeseen aikaisemminen tai kun kerrot toiselle mitä olet tehnyt lähituntien aikana
jo yksin selittämällä asia jollekuulle muulle saatat saada uuden idean miten jatkaa
Tai vain ryhdy googlailemaan aihetta. Saattaa olla että jonkin muun ohjelmiston tapauksessa on ollut samankaltainen bugi, eli on monia asioita tehtäväksi.
Mutta niinkin käy useasti ettemme saa ratkaistua haastetta
Eli CTF-pelaaminen voi olla myös turhauttavaa, sillä puolen vuorokauden istumisen jälkeen
ratkaisua ei saa toimimaan tai ei ole mitään ideaa kuinka ratkaista se
Tätäkin tapahtuu kun ei huomaa jotain tiettyä jippoa.
Mutta tällöin voi kysyä jälkikäteen muilta joukkueilta esimerkiki IRC:issä kuinka he ratkaisivat tehtävän
Voi kysyä yhteenvetoa ratkaisusta ja lukea yhteenvetoja jos niitä on saatavissa.
Voi myös kysyä kun seuraavan kerran näkee toiset paikan päällä, esimerkiksi täällä konferenssissa ja niin edelleen.
Näin tietämys ja kokemus karttuu ajan myötä.
Voimme ottaa vielä yhden kysymyksen. Mikrofoni kaksi on jälleen valmiina.
Toimiikohan tämä? OK, anteeksi.
Aluksi, paljon kiitoksia CTF-kisan järjestämisestä. Arvostan sitä paljon ja myös sitä, että toteutitte selainhaavoittuvuutta hyväksikäyttävän haasteen
Ottaen huomioon että on todella vaikeaa pystyttää selainta hyödyntävä haaste ja pitää haaste verkossa kaikkien pelaajien saatavilla.
Kysymykseni on, mikä on teidän kantanne haasteisiin jossa ratkaistaan ongelmia sellaisten ohjelmistojen kanssa joita ei ole modifioitu, jolloin implisiittisesti paljastuu bugeja ohjelmistoista.
En ole varma ymmärsinkö kysymyksen oikein. Tarkoitatko että pelaajat käyttävät nollapäivähaavoittuvuuksia haasteiden ratkaisemisesessa?
Me emme teen näin. Tarkoitan että kaikissa pelissä käyttämissämme sovelluksissa on modifikaatioita
eli niille löytyy tunnettu ratkaisu. Mutta ne ovat todellisesta maailmasta peräisin olevia haasteita
Jolloin ei ole sen todellisempaa kuin käyttää nollapäivähaavoittuvuutta ratkaisuna
Kunhan nollapäivähaavoittuvuutta ei käytetä CTF:n hallinnoinnissa käytettyä infrastruktuuria vastaan
Eli meidän kannaltamme tämä on reilua peliä. Uskon että pelaajat luottavat meihin ja he luottavat siihen että heidän käyttämänsä nollapäivähaavoittuvuudet eivät karkaa
Siksi he ovat käyttäneet niitä, tai ainakin jotkin.
Mutta ajattelen myös että jos meillä on nollapäivähaavoittuvuus, olemme kaikki samaa mieltä että on oikein
vastuullisesti julkaista bugi eikä laittaa sitä verkkoon jakoon jolloin muut joutuisivat vaaraan.
Tarkoitan että en ole koskaan nähnyt CTF:n aikana että jokin
haavoittuvuus olisi karannut ja vaarantanut tavalliset käyttäjät
Tätä ei ole tähän mennessä tapahtunut ja toivotaan että tilanne säilyy samanlaisena. Olisi ikävä asia jos näin tapahtuisi.
Olet oikeassa.
Paljon kiitoksia. Valitettavasti kysymys-vastausosion aika on ohi mutta olen melko varma että puhujat mielellään vastaavat kysymyksiinne myöhemmin.
Isot aplodit esiintyjille!
Kiitoksia! Translated by Matti Lassila (ITKST56 course assignment at JYU.FI)
Subtitles created by c3subtitles.de in the year 2021. Join, and help us!