Olemme juuri aloittamassa seuraavaa esitystä aivan
täällä. Olen siis erittäin iloinen voidessani esitellä
Hanemilen. Hän aikoo puhua hieman
niistä haasteista, joita kohtaamme
yrittäessämme löytää seuraavaa Capture the
Flag (CTF) -seikkailua ja siitä, miten hän
ehdottaa ongelman ratkaisemista.
Toivottakaa Emile kanssani tervetulleeksi.
Hei, aion puhua aiheesta "CTF in a box".
Se on tarina siitä, mitä ongelmia
huomasimme CTF:iä pelatessamme. Miten aiomme
ratkaista nämä ongelmat; rakensimme
prototyypin, testasimme sitä ja ongelmia,
joita ilmeni sen jälkeen. Joten, ensinnäkin kuka minä olen.
Olen Emile, @hanmile useimmilla alustoilla.
Opiskelen tietojenkäsittelytiedettä Düsseldorfissa.
Pelaan CTF:ää @flexerillan kanssa tai joskus
yksinpelaajana.
Aloitetaan nykyisistä ratkaisuista.
CTF:iä pelatessa meillä on nykyään noin kolme
pääalustaa. Käytetyin viitekehys
tällä hetkellä on CTFd.
CTFd on ensimmäinen asia, jonka löydät, jos
googlaat "hei, haluan isännöidä CTF:n, mitä
minun pitää tehdä?"
Toinen on Hack The Box,
joka on toinen tapaustutkimus, tai no
tapaustutkimus. Pikemminkin alusta CTF:ien isännöintiin,
mutta et voi käyttää sitä, koska sen lähdekoodi
on suljettu. Se tarkoittaa, että
voit vain pelata siellä. Viimeinen
ratkaisu ovat räätälöidyt alustat. Siis
viitekehykset, joita tiimit käyttävät.
He rakentavat ne itse, kuten
tämän vuoden CTF:ssä.
Joten, CTFd näyttää tältä. Ihmiset ovat saattaneet
pelata CTF:ää ja nähdä sen, sillä useimmat
CTF:t isännöidään CTFd:llä. Yleisesti ottaen
se on aika perus ja näyttää hieman Bootstrapilta.
Palaan ongelmiin
myöhemmin. Hack The Box, niille jotka eivät
ole sitä nähneet, se näyttää tältä. Tämä on
koneiden näkymä. Koska Hack The Box
erottelee koneet (machines)
ja haasteet (challenges). Haasteet ovat yksinkertaisesti
tiedostoja, joista sinun täytyy löytää
lippu. Koneet ovat hieman enemmän; sinulla
on oikea kone, josta
sinun täytyy löytää lippu koneella oikeasti
pyörivistä palveluista.
Eli se on hieman monimutkaisempi.
Ja räätälöidyt alustat. Tämä on kuva
käynnissä olevasta HXV:n järjestämästä CTF:stä.
Se on pitkälti kuin CTFd, mutta heidän
itsensä rakentama.
Joten, mitä ongelmia näihin liittyy?
No, aloitetaan CTFd:stä, jossa ei mielestäni
ole varsinaisia ongelmia.
Se on pääasiassa staattinen tiedostopalvelin tiedostoille,
joita haluat ihmisten käyttävän CTF:ssä, sekä
hieman mukautettua infrastruktuuria
tulostaulua, rekisteröitymistä ja vastaavaa varten.
Hack The Box on tavallaan suljettua lähdekoodia,
miksi sanon "tavallaan", on koska voit
oikeasti käyttää sitä, näet miten se on
rakennettu, voisit rakentaa sen itse.
Ongelma, jonka kohtasimme pelatessamme
Hack The Boxia, oli se, että löysimme
reverse shell -yhteyksiä haasteiden
juuressa. Sekä muita ongelmia, kuten sen, että
useat ihmiset kirjoittivat samoihin
haasteisiin ja siellä oli tiedostoja,
joiden ei olisi pitänyt olla siellä. Se
oli joskus todella ärsyttävää. Esimerkiksi
aloitimme haasteen ja huomasimme, että siellä
on jo valmiina root-oikeudet antava reverse shell
juurihakemistossa, eikä meidän tarvinnut tehdä mitään.
Haasteinstanssit on jaettu muiden kanssa.
Ongelma siinä oli se, että
samaa instanssia pelaa useita satoja ihmisiä,
ja pystyimme näkemään, mitä
muut latasivat kyseiseen
instanssiin. Se tavallaan auttoi meitä, ja
huomasimme, että järjestelyä voisi
optimoida. Kolmas ongelma, no
ongelma ja ongelma, koskee räätälöityjä alustoja.
Niistä saattaa löytyä virheitä,
jotka mahdollistavat lippujen saamisen
haastetta varsinaisesti ratkaisematta. Joten, kyseessä
on pingpongia ongelmien ja
ratkaisujen löytämisen välillä. Yksinkertaisin
ratkaisu, jota kokeilimme paikallisen hakkeritilamme
CTF:ssä, oli luoda
yksittäinen haasteinstanssi jokaiselle
pelaajalle tai tiimille. Tämä tarkoittaa, että jokainen
rakentamamme haaste oli yksinkertaisesti Docker-
kontti jossain, ja jokaiselle
sitä pelaavalle käynnistyi uusi Docker-
kontti. Aluksi ajattelimme, että tämä
toisi paljon lisäkuormaa, mutta
niin ei käynyt. Käynnistimme satoja
kontteja ja se toimi hienosti.
Ongelma tässä on se, että jos laitat
kaiken Docker-konttiin, Docker-
paoista ja sandbox-paoista tulee todella
hyödyllisiä. Olisi kohtalokasta, jos joku pystyisi
murtautumaan ulos kontista. Meillä oli
ratkaisuja mahdollisiin ongelmiin.
Voisit laittaa kaiken virtuaalikoneeseen (VM) tai
käyttää nsjailia prosessien eristämiseen.
Se estäisi ihmisiä varsinaisesti murtautumasta
ulos. Toinen mahdollinen ratkaisu olisi
tehdä ulosmurtautuminen mahdolliseksi, mutta
et varsinaisesti halua tehdä sitä
mahdolliseksi. Et myöskään halua ihmisten
hyötyvän siitä mitenkään; mukautetut liput
tiimikohtaisesti.
Toteutimme tämän toteuttamalla Docker-
konttimme siten – tai toteutimme haasteet
ja liput siten, että ne viedään Docker-
kontteihin ympäristömuuttujien avulla.
Joten kun käynnistät Docker-
konttisi, asetat vain ympäristömuuttujan,
joka sisältää lippusi. Docker-
kontin sisällä on pieni skripti, joka
siirtää lippusi siihen paikkaan, johon
sen haluat. Tämän jälkeen ympäristömuuttuja
poistetaan, kuten kaikki muukin ylimääräinen.
Tämä tarkoittaa, ettei lipusta jää jälkeä paikkoihin,
joihin ei pitäisi. Se toimi melko
hyvin. Joten, tämä on CIRCUS-prototyyppi,
jota käytimme.
Pieni tarina siitä – meillä oli
hakkeritilamme 18-vuotisjuhlat
tänä vuonna ja ajattelimme,
tarvitsevamme CTF:n sitä varten.
Viikkoa ennen tajusimme, että tapahtumaan on
vain viikko aikaa, joten aloimme nopeasti
rakentaa prototyyppiä.
Nimesimme sen CIRCUKSEKSI.
Koska se näyttää sirkukselta.
Tämä on kaavio, joka näyttää, miten
kontit ovat vuorovaikutuksessa keskenään.
Tavoitteenamme oli luoda
paikka, jossa tiimit voisivat rekisteröityä
ja saada järjestelmässä "kumppanin".
Kumppani järjestelmässämme oli paikka,
jossa ihmiset saattoivat käynnistää
yksittäisiä kontteja.
Koska kumppani käynnistää VPN-kontin
ja liittää kaikki muut kontit
tähän verkkooon.
Joten, ihmiset voivat hakea VPN-
konfiguraationsa ja käyttää haasteitaan.
Tämä on hyvin samankaltaista kuin miten Hack The Box
toimii. Ongelma tässä oli se, että
meillä on yksi kumppanikontti käyttäjää
tai tiimiä kohden. Ja meillä on n määrä haasteita,
joita voidaan käynnistää. Tämä tarkoittaa, että jos
meillä on n tiimiä ja m haastekonetta,
päädymme suureen määrään kontteja.
Tämä, mitä näette tässä, on vain listaus
kaikista käynnistämistämme konteista
ensimmäisen CTF-päivän jälkeen, jolloin
osallistujia oli noin 10. Mutta meillä oli
tuossa vaiheessa jo noin 50 konttia.
Mikä oli melko paljon.
CTF:n lopussa meillä oli pystyssä
ja käynnissä noin 120 konttia.
Saattaisitte luulla, että suuri määrä kontteja
ja asioita niissä tekevät ihmiset
veisi valtavasti laskentatehoa.
Mutta se todella toimi hyvin.
Olimme pystyttäneet virtuaalikoneen,
jossa oli 8 ydintä ja 16 Gt RAM-muistia, ja
aina näytti siltä,
ettei mitään tapahtunut. Kunnes joku asensi
kryptolouhijan ja piti sillä hauskaa.
Menimme koneelle ja ihmettelimme:
"Mistä tämä kuorma oikein tulee?"
Tunnistimme sen yhdeksi kontiksi,
jonka eräs tiimeistä oli pystyttänyt.
En minä.
Jotkut yrittivät käyttää erikoisia nimiä,
mokasimme syötteiden sanitisaation hieman,
koska kaikki tapahtui niin kiireellä. Tämä
oli oppitunti siitä kaikesta – mikä
ei toimi.
XSS, jonka näette tässä, ei myöskään
toiminut sitä yrittäneellä henkilöllä
– mikä oli hieman outoa.
Pystytimme erittäin yksinkertaisen tulostaulun.
Joten, kuten huomaatte, yritimme rakentaa
oman CTF-alustan.
Se tavallaan toimi. Kaikki oli
rakennettu muutamassa päivässä, ja se muistutti
pitkälti surkeaa CTFd:tä.
Nyt haluamme selvittää,
mitä haluamme tehdä ja mitä emme.
Haluamme sallia ihmisten
käynnistää kontteja
haasteitaan varten. Näin ratkaisimme
sen ongelman, että useat ihmiset
sorkkivat samaa haasteinstanssia.
(yhdistetty edelliseen käännökseen)
Sallimalla tämän, emme kuitenkaan salli
heidän käynnistävän äärettömästi kontteja.
Ehkä jotkut teistä ovat pelanneet ALICE CTF:ää
tai GM CTF:ää.
Ne olivat hauskoja, koska siellä
oli mielenkiintoinen
DevOps-haaste, jossa juju oli täsmälleen
tämä. Voit käynnistää kontteja tai
kokonaisen peliympäristön pelaamista varten.
Mutta sinun oli suoritettava proof-of-work, eli
laskettava jotain, jotta et voinut
vain käynnistää haasteinstansseja mielin
määrin.
Toinen asia, joka täytyy pitää mielessä
tätä tehdessä, on se, ettet liitä (mount)
docker-pistoketta (socket) kaikkeen.
Niin hauskaa kuin Docker-konttien käynnistäminen
toisista Docker-konteista onkin, se on
valtava tietoturvariski. Jos ihmisillä on
pääsy docker-pistokkeeseen, he voivat
käynnistää kontteja ja tehdä tuhoja.
Mitä tehdä ja mitä ei.
Monet pelaajat suorittavat koodia
konteissa. Pelkkä kontti staattisilla tiedostoilla
on hauska, mutta halusimme
enemmän. Se, että sallitaan ihmisten
suorittaa asioita konteissa voi olla
ongelma, mutta voit rajoittaa sitä, mitä ihmiset saavat
tehdä. Tarkoitan, anna ihmisten tehdä asioita,
mutta älä anna heidän tehdä liikaa.
Se toimi meidän tapauksessamme.
Kuten aiemmin mainitsin, kokeilimme tätä noin
10 hengellä paikallisessa CTF:ssämme.
Olisi mielenkiintoista nähdä, mihin ongelmat johtavat,
kun todella hyvät CTF-tiimit iskevät siihen,
ja pystyvätkö he murtautumaan ulos.
Se olisi todella mielenkiintoista nähdä.
Kuten sanoin, anna ihmisten
tehdä asioita, mutta älä anna heidän tehdä
liikaa.
Toteuta tekniikoita niin, että se
toimii. Yksi asia, joka minun piti muistaa,
oli pitää asiat yksinkertaisina.
CTF:n aikana tajusin, että rakensimme
paljon asioita, se oli hieman
liian monimutkaista ja teki asioista hieman
liian vaikeita korjata. Pitkään mielessäni
tulevia CTF-alustoja varten,
että ne pidetään mahdollisimman yksinkertaisina, jotta
rikkoutumisen sattuessa korjaus on viiden minuutin homma.
Jos olit liian laiska kuuntelemaan, tässä on
yhteenveto. Uusien CTF-alustojen luominen on
todella mielenkiintoista.
Löysin paljon aiheita, joihin perehtyä
tätä rakentaessani, enkä ole vielä lähellekään
valmis. On vielä paljon asioita,
joita minun täytyy tutkia. Anna pelaajien
pelata peliä, mutta rajoita
"pahoja asioita". Ihmisille, jotka miettivät miksi
Docker, ihmiset paikallisessa hakkeritilassamme
kysyvät jatkuvasti "miksi käytät Dockeria,
kun sille on niin monia tunnettuja exploiteja?"
(yhdistetty edelliseen)
Vaihtoehtojen etsiminen olisi ollut
vaihtoehto, mutta olen tottunut Dockeriin – ja
itse asiassa halusin käyttää Dockeria.
Joten se oli ihan kivaa.
Joten jos tiedät paremman ratkaisun: etsi
se, toteuta se ja kokeile
CTF:ää. Toinen asia, jonka halusin mainita,
on se, että vaikka Dockerin käyttö voi olla
turvatonta, voit myös toteuttaa
paljon asioita sen turvaamiseksi.
Esimerkiksi mukautettujen lippujen luominen tiimeille.
Jos tiimillä on mukautettu lippu,
se ei voi vain murtautua ulos kontista
ja varastaa toisen tiimin lippua.
Koska se on täysin tiimikohtainen.
Tämän halusimme tehdä ympäristö-
muuttujien avulla haaste-
konteissa. Koska siten pystyimme käynnistämään
kontteja lennosta.
Tämä on varsinaisesti loppu.
Mitä haluan vielä sanoa, on että
ensi vuonna haluamme järjestää CIRCLE CTF:n
rakentamallamme alustalla, kokeillaksemme sitä
laajemmin suuressa mittakaavassa. Joten, jos olet
aktiivinen CTF-pelaaja, tulemme olemaan
siellä ja järjestämme täysin uuden CTF:n
hauskoine haasteineen.
Minulla on mukanani joitakin haasteita, joten
jos olet kiinnostunut miltä tämä voisi
näyttää tai mitä voisi tehdä, tule
käymään pöydässäni.
Lisäksi, jos olet kiinnostunut keskustelemaan
ratkaisuista ja siitä miten asiat voisi tehdä paremmin,
piipahda vain paikalla.
Jos katsot livestriimiä ja sinulla on kysyttävää,
twiittaa minulle: @hanemile.
Siinä kaikki.
Onko kenelläkään suoria kysymyksiä?
Kiitos vielä kerran, Emile.
Translated by TL (KYBS2001 course assignment at JYU.FI)