-
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!