Stærkt inspireret af lignende events fra sikkerhedskonferencer som for eksempel Defcon afholdt PROSA sidste år den første offentlige Capture The Flag- (CTF) hackerkonkurrence i Danmark.
Udfordringer i hackerteknikker er ikke noget nyt, og der findes mange forskellige typer, blandt andre usikre applikationer, wargames og crackme's.
Men kongen af dem alle er CTF, for her er der både fokus på angreb og forsvar, og derudover er der et tidspres.
Reglerne varierer hos de forskellige arrangører, men i PROSA arbejder man sammen i hold om at forsvare en server imod andre deltagere, samtidig med at man skal angribe de andre.
I konkurrencen i 2010 var der seks tilmeldte hold, som hver fik ansvaret for en virtuel maskine med Ubuntu-server. Alle servere var ens konfigureret og installeret med fire services, som var udviklet specielt til konkurrencen og med vilje fyldt med sikkerhedsfejl.
En service i CTF er et program, som kan påvirkes via netværket, og som kan gemme et flag. Et flag består af 64 tegn og er tilfældigt genereret af spilserveren. Spilserveren leverer med jævne mellemrum disse flag til de forskellige services på alle holdserverne. Lykkes leveringen, får holdet et point. Senere tjekker spilserveren, at flaget stadig findes i servicen, og er det tilfældet, får holdet endnu et point.
Udnytte fejl
Udfordringen for arrangørerne i at udvikle en service til CTF er at kunne automatisere leveringen, tjekke og i visse tilfælde endda at gøre det muligt at udnytte fejlen.
Hvis der for eksempel er tale om cross site scripting, er det kun spilserveren, som kan udløse fejlen. Det må heller ikke være en fejl, som kan genere holdet for meget. En service, som kan crashes, skal helst automatisk kunne komme op at stå igen. Visse fejl vil kunne få hele maskinen til at crashe, så det vil være en stor udfordring at lave en brugbar sårbarhed i kernen.
Flagene kan for eksempel plantes i et websystem, som et password ved at oprette en bruger med et tilfældigt genereret brugernavn. Dets tilstedeværelse verificeres da ved at forsøge et login.
Holdet skal holde sine services kørende, så flagene kan leveres og tjekkes, og samtidig skal de finde fejl i deres services, som gør, at man kan finde flagene. Når fejl identificeres, har holdet så to nye opgaver: Fiks fejlen lokalt, og stjæl de andre holds flag. Hvert stjålet flag udløser yderligere points.
Fejlene kan være hvad som helst – fra SQL injection til buffer overflows eller simple konfigurationsproblemer. I konkurrencen i 2010 var der for eksempel en service, som gemte sine flag i en SQLite-database, som lå i webfolderen og derfor bare kunne downloades. Den ser vi på om lidt.
Udfordringer giver point
I løbet af konkurrencen kom der yderligere pointgivende opgaver kaldet 'udfordringer', som ikke er bundet op mod et holds server og derfor kan have mange former: Krypterede data, som skulle brydes, en crackme, som der skulle skrives serienummergenerator til, og netværksdumps, som skulle analyseres.
Som et eksempel på en service kan vi kigge på en fra sidste år. 'SpeakersCorner' var navnet på en blogging-webservice, som kan ses i figur 1.
Servicen var kodet i PHP, og bagved lå der en SQLite-baseret database, og det var jo oplagt at lede efter SQL injections, men dem var der ingen af. Til gengæld lå databasen i samme folder som webapplikationen, og den kunne derfor bare downloades via webserveren og søges i lokalt.
Et muligt exploit kan ses i figur 2. Det henter databasefilen fra alle specificerede hosts og udfører en søgning i den, samt fjerner alt, som ikke ligner flag.
Figur 3 viser eksekveringen, hvor jeg først lister to filer: Exploitet og et script til at levere flag til spilserveren. Derefter eksekverer jeg exploitet, som viser de stjålne flag. Til sidst leverer jeg alle flagene til scriptet, som leverer dem til spilserveren, som fortæller, at vi leverede fire flag.
Alle kan være med
Der findes mange gode bøger om sikkerhed og angrebsteknikker, og PROSA afholder en del foredrag og kurser i sikkerhed, men teori kan ikke gøre det ud for praksis, og det får man ved en CTF-event. Alle kan være med uanset deres tekniske baggrund og kompetence, for holdet har brug for mange forskellige profiler, for eksempel:
• Systemadministratoren ved, hvordan man sikrer sin maskine og minimerer effekten af et angreb.
• Hackeren ved, hvordan man udnytter sikkerhedsbrister til at opnå adgang til data eller kodeeksekvering på andres maskiner.
• En reverse engineer ved, hvordan man får mening ud af binære programmer (for eksempel compilerede C-programmer), og finder ud af, hvordan de fungerer.
• En programmør kan lave værktøjer og automatisere hackerens angreb.
• Kryptologen ved, hvornår en RSA-nøgle er genereret med nok entropi, og om tilfældighedsgeneratoren er seedet korrekt.
Én person kan selvfølgelig godt udfylde flere profiler, men det burde være muligt for alle at bidrage med ét eller andet. Om ikke andet så bare med assistance, sparring og opmuntring til de mere rutinerede holdmedlemmer.
Vellykket ilddåb
Konkurrencen i 2010 var debut for arrangørerne, så vi forventede problemer, for nok havde vi testet programmerne, men hvordan ville de fungere, når flere hold hackere gik amok? Var der nok opgaver? Var opgaverne for svære? For lette? Ville der blive problemer med VPN-adgangen? Kunne alle hold mønstre Linux-kompetence? Og var der overhovedet interesse for denne slags konkurrencer?
Heldigvis forløb aftenen utrolig smertefrit og med masser af deltagere. De færreste løste alle opgaver, men alle fik udført succesfulde angreb. Ét hold kom senere i gang på grund af VPN-problemer, et andet havde problemer med holdnavnet, som indeholdt et dansk tegn. Vi løb også tør for udfordringer, men fik lavet et par ekstra i løbet af konkurrencen.
Disse problemer er der selvfølgelig taget hånd om ved dette års CTF, som løber af stablen 4. og 5. november, og udviklingen af services og udfordringer er i fuld gang.
Hvis du ikke var med sidste år og gerne vil prøve dine evner, kan du downloade en VMWare VM med alle sidste års services installeret. Ellers vil det være en god idé at tage et kig de forskellige wargames og crackme's på nettet, så vil du være bedre rustet til dette års konkurrence.