Finn flagget!

Nærbilde av kodesnutt

Det å tilegne seg kunnskap innen informasjonssikkerhet ses ofte på som en kjedelig affære, lange kurs med slides og mye teori. Her kommer et tips til en praktisk og morsom måte å lære deg dette på. I denne artikkelen går jeg gjennom hva Capture the Flag (CTF) konseptet går ut på, hvorfor det gir verdi for deg som utvikler og hvilken verdi det vil gi arbeidsgiveren din.

Hva er Capture the Flag?

CTF er en konkurranse der du må løse forskjellige typer oppgaver innenfor IT-sikkerhet. Oppgaven er fullført når du finner “flagget”, som ofte er en tekststreng med et forhåndsdefinert format. Det finnes et bredt sortiment av oppgaver der ute, og da med varierende vanskelighetsgrad. Du kan for eksempel måtte bryte deg inn på en server, finne gjemte flagg i filer og på nettsider eller drive med kodeknekking. For å løse oppgavene må du sette deg inn i et tema, finne egnede verktøy som kan hjelpe deg med løsningen eller programmere noe selv. Alt i alt, en veldig morsom øvelse for å lære deg ferdighetene du trenger som etisk hacker.

CTF oppgavetyper

Som nevnt finnes det stor variasjon når det kommer til type oppgaver og vanskelighetsgrader. Her får du noen av de vanligste typene, hvor du noen ganger vil støte på kombinasjoner av disse i din søken etter en løsning.

Web sårbarheter

Dette er kanskje de mest relevante oppgavene for de fleste utviklere i dag. Du skal identifisere og utnytte svakheter på en gitt nettside. Ofte handler det om å få logget seg inn på en bruker med administratortilgang. En slik utfordring løses kanskje i flere steg med svakheter, der du til slutt finner flagget. OWASP topp ti er ofte stikkord for løsningene.

Reverse Engineering      

Her vil du motta en kjørbar fil som må dekompileres/disassembles for å kunne lese og forstå hva som skjer. Når du jobber deg gjennom innholdet i filen, vil det typisk dukke opp en kodesnutt som leder til løsningen. Det høres kanskje enkelt ut, men det er ikke rett frem å lese og forstå flyten i Assembly eller obfuskert kode.

Binære sårbarheter

Det sier seg kanskje selv, men også her vil utgangspunktet være en binær fil. For å kunne løse denne typen oppgave må du identifisere sårbarheter i filen, og utnytte disse slik at applikasjonen avslører flagget. Buffer overflow er nok den mest kjente teknikken, og opp gjennom tiden har slike sårbarheter vært sentral i spredningen av flere kjente ormer. Det finnes også et bredt spekter av andre angrep som kan utnyttes. GOT, Heap overflow og ROP er noen eksempler på andre teknikker som kan benyttes. Her gjelder det å analysere for å finne ut hva som passer, ofte gis det et hint i oppgaveteksten.

Digital etterforskning

Oppgaver innenfor denne sjangeren går ut på å finne flagg gjemt på en datamaskin, som da kan være alt fra en fil til nettverkstrafikk. Det finnes flere underkategorier innen digital etterforskning, og de største oppgavene kan være et komplett image av en harddisk som du må analysere. En annen underkategori er steganografi, som går ut på å gjemme data rett foran nesa på deg. Det som tilsynelatende er et helt vanlig bilde, filmsnutt eller lydfil, kan inneholde skjulte flagg. Teknikkene for å utføre steganografi er ofte avanserte og utrolig fascinerende å lese seg opp på. Kanskje du finner noe spennende i bildene i artikkelen?

Kryptografi

Kodeknekking synes jeg personlig er gøy, og noe jeg kan grave meg dypt ned i! Her får du mulighet til å bygge opp en basisforståelse på hvordan forskjellige språklige og matematiske krypteringsalgoritmer fungerer. Nybegynneroppgavene består ofte av enkle historiske krypteringsmetoder som Cæsar og Vigenère. Slike krypteringsmetoder er morsomme å utføre kryptoanalyse på, spesielt med selvskreven kode. For mer avanserte oppgaver kan det være nyttig å finne egnede verktøy på internett. Da handler det ofte om å identifisere hvilken krypteringsmekanisme som er benyttet, og utfordringen vil være å finne dekrypteringsnøkkelen. Kanskje oppgaven er en sammensetning av flere algoritmer, eller kanskje er nøkkelen gjemt i et bilde på nettsiden som presenterer oppgaven – kanskje du klarer å finne noe i bildene i denne artikkelen?

Bilde av verktøy som utfører Cæsar dekryptering, capture the flag  konkurranse
Bilde av verktøy som utfører Cæsar dekryptering

Hvordan komme i gang?

Første gang vil jeg anbefale å finne oppgaver som allerede finnes gratis på internett.  Du kan velge å jobbe med oppgaver selvstendig eller i et team. Inviter gjerne kollegaer til å være med en kveld med pizza og finn ut av det sammen. Nå i disse Corona-tider passer det ypperlig å ta en slik sesjon via digitale møteplattformer, da det jo er naturlig at de som deltar sitter på egen maskin. 

Det er ingen grunn til å begrense dere til en kveld. En CTF kan kjøres over lengre tid, der du for eksempel slipper en ny oppgave hver dag i en uke, eller et stort oppgavesett med tidsfrist på å skaffe seg mest mulig poeng. Har du kollegaer som sitter i andre deler av landet, kan det jo kjøres en virtuell konkurranse mellom kontorene. Mulighetene er mange, og du vil garantert bygge nye og verdifulle relasjoner – ikke minst vil det øke sikkerhetskunnskapen din.

Verktøy

En del av den naturlige flyten av oppgaveløsning er å teste forskjellige verktøy. Jo mer du forstår av oppgaven, desto bedre blir søkeordene på leten etter det riktige hjelpemiddelet. Noen av verktøyene kjøres rett i nettleseren din, mens andre er åpen kildekode som må kompileres eller installeres. For å unngå å fylle opp med diverse ymse på din egen maskin anbefaler jeg at all oppgaveløsning foregår på en egen dedikert virtuell maskin for CTF. For å komme raskt i gang, vil jeg anbefale å prøve Kali. Dette er en Linux distribusjon som inneholder mange forhåndsinstallerte verktøy. https://www.kali.org/

Oppgaver

Om du googler, finnes det haugevis av oppgaver som ligger gratis tilgjengelig. Plukk noe som ser interessant ut og hack i vei. Ofte får du en god introduksjon til oppgaven, vanskelighetsnivå er spesifisert, og noen gir også hint om du står fast. Det finnes også mange write-ups som er verdifulle å lese, finn noe som ligner og bli inspirert. Jeg kan anbefale https://ctflearn.com/ som en kilde til mange bra oppgaver.

Egne oppgaver

Når du begynner å bli varm i trøya kan du lage dine egne oppgaver. Dette kan være oppgaver inspirert av andre, men med din egen lille vri. Eller kanskje du kan lage en oppgave basert på en sårbarhet du har løst i applikasjonen du jobber med i det daglige. Om du ser for deg å lage en egen konkurranse med kort varighet, med kun en håndfull kollegaer, kan du administrere den manuelt. Ønsker du å gjøre det større og inkludere flere deltakere, eller ha en CTF som går over lengre tid så anbefaler jeg å sjekke ut rammeverket CTFd. Dette tar seg av brukerkontoer, statistikk, registrerte svar, fremvisning av oppgaver med hint, innlevering av flagg og mye mer. https://github.com/CTFd/CTFd

Skjermbilde av CTFd, capture the flag  konkurranse
Skjermbilde fra CTFd – finner du flagget?

Oppsummering

Ved løse denne typen utfordringer vil du opparbeide deg sikkerhetskunnskap på en utrolig lærerik og morsom måte, som gir stor verdi å ta med seg i en utviklers hverdag. Du vil kunne få større innsikt i ulike svakheter som andre har oppdaget tidligere, og kanskje best av alt vil du bli bedre kjent med ulike teknikker og verktøy som kan benyttes mot egne tjenester for å avdekke feil. Det å forstå hvordan en hacker angriper, hjelper deg å bygge bedre forsvar. Ved å oppdage en svakhet i god tid før produksjonssetting, blir skaden og kostnaden liten i forhold til at feilen oppdages og potensielt utnyttes. Det er også et glimrende konsept for å bygge sikkerhetskultur og relasjoner både internt og eksternt.

Tar du utfordringen? Finn flagget!

Nyttige ressurser

Profilbilde av Stig Rune Malterud

Skribent
Stig Rune Malterud
Utvikler og arkitekt i Miles Stavanger

Konkurranse

Stig Rune har i denne artikkelen gjemt tre flagg i bildene, klarer du å finne dem kan det hende du stikker av med et universelt gavekort på 1000,-.

Reglene er enkle, finner du ett flagg får du ett poeng, finner du tre flagg blir det tre poeng. Flaggene må sendes på e-post til Christian.sadberg@miles.no sammen med navn og telefonnummer (brukes kun for å eventuelt kontakte deg om du vinner, all data slettes etter konkurransens slutt) innen torsdag 12. november.

Vinneren av konkurransen er Ole Bø – vi gratulerer! Til de av dere som ikke vant, eller ikke fant alle flagg så er det en ny mulighet i desember – følg oss i sosiale medier for å vite når konkurransen starter.


Løsning på konkurransen:

Her er løsningene på de tre flaggene som var gjemt i min artikkel. Håper du ble inspirert til å utforske denne fantastiske måten å lære seg IT-sikkerhet på. Oppgavene var alle i kategorien Digital etterforskning innenfor teamet steganografi. For å finne det siste flagget var man innom enkel kryptografi også. 

Flagg1 – Caesar.jpg

Løsningsbilde 1 i capture the flag konkurransen
Her ligger løsningen inne i rådataen til filen som en tekststreng. Det finnes en rekke måter å lese ut flagget på, for eksempel via en hex editor. Her bruker jeg verktøyet strings for å lese ut karaktersekvenser fra filen.
https://man7.org/linux/man-pages/man1/strings.1.html

Flagg 2 – CTFd.png

Løsningsbilde 2 i capture the flag konkurransen
Her er flagget gjemt i fargene. For å løse denne kan du for eksempel bruke verktøyet stegsolve til å analysere filen. Flagget er gjemt i blue plane 2. Det er også mulig å finne flagget med å justere på fargeinnstillinger i bilderedigeringsprogrammer, eller onlineverktøyet stegonline.
github.com/zardus/ctf-tools/tree/master/stegsolve
en.wikipedia.org/wiki/BPCS-steganography
stegonline.georgeom.net/

Flagg 3 – header_markus-spiske-hvSr_CVecVI-unsplash.jpg

Løsningsbilde 3 i Capture the flag konkurransen
Jeg bruker verktøyet binwalk for å lete etter signaturer som indikerer at andre binærfiler finnes inne i bildefilen. Parameteren -e pakker ut eventuelle filer som blir oppdaget. Det blir funnet noen innebyggede filer i bildet, og Flagg.zip ser spennende ut, men er beskyttet av passord. Innholdet i Encoded.txt er en base64 tekststreng, så jeg dekoder denne. Dekodet base64 er hunter2, og jeg prøver å pakke ut filen med dette som passord. Da får jeg tilgang til filen Flagg.txt som inneholder flagget. 
github.com/ReFirmLabs/binwalk
en.wikipedia.org/wiki/Base64
knowyourmeme.com/memes/hunter2