shutterstock_1095422036
>

Paranoid programmering

Eivind Andreas Arvesen 
20. aug. 2018

Eller "hvordan jeg klønet meg til pallplass i en hackingkonkurranse"

En gang i april kom CIO Anders Volle med en kunngjørelse i sikkerhetskanalen på Slack: Watchcom hadde invitert oss til å være med på hacking- og sikkerhetskonkurransen Paranoia Challenge 2018, på Circadence sin gaming-baserte plattform for cybersikkerhet. Deltagerne ville kunne få bryne seg på såkalt redteam- og blueteam-baserte scenarier (henholdsvis angrep og forsvar). Planen var å sette i gang en uhøytidelig konkurranse i begynnelsen av mai, der man fikk mulighet for å prøve seg på egenhånd noen dager og bli kjent med løsningen. Et par uker senere ville det bli kvalifiseringsrunde og til slutt finale. Vinnerne ville bli kunngjort ved premieutdelingsermoni på Paranoia-konferansen – en av nordens største sikkerhetskonferanser som går av stabelen i Oslo Spektrum hver sommer.

Som en person som har lest mye om feltet og finner det interessant syntes jeg dette hørtes veldig spennende ut. Jeg hadde ikke mye praktisk erfaring å snakke om, annet enn å ha prøvd meg frem på fritiden opp gjennom årene med verktøy som Wireshark, Metasploit, Nmap, hashcrackere, og så videre. Likevel så jeg dette som en gylden anledning til å lære mer, siden jeg lenge hadde hatt lyst til å gjøre nettop det.

Kort tid etter å ha meldt meg på for Bouvet ble det holdt et kort webinar, der arrangør fortalte litt om løsningen, kjøreplanen fremover, hvordan vi ville bli vurdert under konkurransen – kort fortalt hva dette ville gå ut på. Så fikk vi fri tilgang til opplærings- og konkurranseløsningen, og den såkalte "freerange" lek- og lærperioden begynte.

Project Ares

Løsningen vi jobbet på het "Project Ares" og var en slags e-læringsplatform for sikkerhet og hacking via gamification. Den tilbød trening og opplæring via praktiske forsøk og simulasjon.

Vi logget inn via en HTML5-klient bygget med Unity ved å åpne en webside i en nettleser.

Det første som møtte oss var en meny som så til forveksling lik ut som en typisk meny fra et strategi- eller militærsentrert dataspill; I tillegg til annen stereotypisk hackergrafikk figurerte en spinnende wireframeklode fremtredende i grensesnittet, med markerte punkter som signaliserte tilgjengelige oppdrag. Dette var et gjengående tema blandt virkemidlene i løsningen - å fange deltagerens interesse via narrativer.

I et gitt oppdrag ble man først bli presentert for en bakgrunnshistorie som redegjorde for konteksten man ble sluppet inn i og hva som ville være målet. Man fikk også tilgjengeliggjort brukernavn og passord på sin "arbeidsmaskin" (i virkeligheten en virtuell maskin).

Deretter fikk man et kart over (deler av) nettverket, som også kunne inneholde enheter som proxyer, switcher, routere, brannmurer, VPN, subnets – og som potensielt kunne avsløre IP-adresser og operativsystem på alle, noen eller ingen av enhetene, avhengig av oppgaven.

Så fikk man tilgang til to ting: et shell (et nytt vindu med en virtuell terminal) - typisk bash på en Linux-maskin - og en VNC/RDP (et nytt vindu med grafisk fjernstyring på desktop) på en gitt "arbeidsmaskin"; denne kunne være enten Windowsinstallasjon eller en Linuxdistro. Eventuelle ekstra verktøy som trengtes for å løse den aktuelle oppgaven kom ferdig installert.

Tiden vi brukte på oppgavene fikk innvirkning på poengene vi sanket underveis. Hver deloppgave ga uttelling, så om man hang fast kunne det faktisk lønne seg å brenne bort noen poeng mot hint for å sørge for progresjon til neste trinn.

I tillegg fantes det en chatbot som kunne presentere kontekstuell informasjon som definisjoner på platformen. Spurte man f.eks. om hva "OWASP" er svarte den at det stod for "The Open Web Application Security Project" og presenterte en kort informasjonssnutt.

Rent teknisk var alle enheter som var en del av oppgaven faktiske virtuelle maskiner som kjørte på en server et sted; det virket som om dette var wrappet rundt eller basert på VMWares virtualiseringsteknologi. Om du har spillt hackerspill som "Hacknet", "Uplink" eller "Hacker: Unleashed", eller har sett serier og filmer som "NCIS" og "Swordfish", vet du antageligvis at noe av realismen faller bort i abstraksjonene og forenklingene. I denne konkurransen jobbet vi på faktiske virtuelle maskiner - som betyr at det strengt talt var så realistisk som det kan bli: alt som hendte var virkelig kode og virkelige programmer som kjørte. Den eneste begrensningen var at arbeidsmiljøet var nogenlunde kontrollert – vi kunne ikke for eksempel bryte oss ut av det virtuelle nettverket (uten å bli diskvalifisert).

På høyere vanskelighetsgrader kunne det bli koblet inn en AI-motstander (angivelig basert på IBMs Watson-teknologi) som skulle gjøre det hele mer utfordrende. Denne kunne for eksempel randomisere affiserte portnummere og adresser, og eventuelt spille rollen som angriperen som har penetrert nettverket og roter rundt på systemer. Dette betyr at den kunne gjeninfisere maskiner dersom man ikke gjorde en grundig jobb under opprydding.

I tillegg inneholdt Project Ares et bibliotek med diverse teori, mediedekning, teknisk dokumentasjon og gjennomgangsvideoer for relevant software. Det fantes også små minispill, hvis mål var å lære oss relevant trivia i en mindre alvorlig form.

Utforsking

Under freerangingen var det i underkant av 100 registrerte spillere som lekte, lærte og øvde på oppdrag i varierende omfang.

Jeg drev hovedsakelig med lesing og eksperimenterte med småting, siden jeg følte jeg måtte bygge solid basiskunnskap. Etter et par uker mistet alle deltagerene tilgang til løsningen en liten stund før kvalifikasjonsrundene. Jeg fortsatte å øve på såkalte "Capture the flag"-konkurranser andre steder på nettet.

Kvalifikasjonsrunde

Så en ettermiddag fikk alle deltagerene en epost: Vi skulle løse et gitt oppdrag innen et vindu på 3 dager. Her fikk deltagerene anledning til å prøve når som helst, totalt maks fire ganger, og beste forsøk ville gjelde.

Mindre enn halvparten av deltagerene satset i kvalifiseringen – noen syns visstnok at utvalgt oppdrag var for vanskelig og brukte tiden til andre oppgaver og spill i stedet.

Kun 12 spillere klarte å komme gjennom samtlige 16 oppgaver på 4 forsøk.

Endelig score ble beregnet utifra en kombinasjon av tid brukt og oppnådde poeng.

Siste kveld av tredagersvinduet satte jeg meg ned for å utføre oppdraget. Etter første forsøk brukte jeg to forsøk på å notere og memorisere hva som skulle til av handlinger og kommandoer for å løse deloppgavene og å gå sakte gjennom alt og forstå hva som hendte. Deretter gjennomførte jeg siste forsøk som et slags godt forberedt "speedrun" der jeg jobbet så raskt jeg kunne.

Oppgaven gikk bla. ut på å håndtere et scenario der et internnettverk var penetrert; en maskin på nettverket var infisert med skadevare. Man måtte dermed logge seg på en adminserver som stod for brannmur og bruke et verktøy kalt Burpsuite til å analysere nettverkstrafikken og snappe opp en slags signatur (hash) av payloaden (som hadde kommet som en HTTP-request) og sette opp nettverksregler slik at IP-adressen som var skadevarens kilde ble sperret og at skadevaren ikke kunne spre seg. Deretter måtte vi lokalisere skadevaren og uskadeliggjøre denne via Windows' innebygde Powershellfunksjoner.

Når jeg var ferdig med siste deloppgave på siste forsøk oppdaget jeg at jeg ikke ble registrert som ferdig. Tiden fortsatte å tikke. Jeg ble nervøs – hva om jeg nå bommet fullstendig, til tross for alle forberedelsene?

Så la jeg merke til at deloppgave nr. 2 ikke var krysset av som ferdig. Jeg bestemte meg da for å brenne noen poeng for å få hint på denne deloppgaven, slik at jeg kunne finne ut av hva jeg hadde glemt eller ikke gjort riktig og bli ferdig på så kort tid som mulig. Jeg var redd for at bommerten og brenning av poeng sammen førte til såpass lenger tid og nok færre poeng til at jeg ikke var videre.

Jeg brukte total 16.01 minutter på mitt beste forsøk, men de 2-4 siste minuttene gikk med på å finne denne siste feilen.

Når jeg omsider var ferdig tenkte jeg at det var dumt at oppgaven hadde så stort fokus på Windows. Det er tross alt en platform jeg nesten ikke har brukt ti år. Jeg regnet ikke med å gå videre, men jeg tenkte at det var en morsomt å ha fått testet platformen: jeg hadde lært en del og det var morsomt å kunne være med.

Paranoia-2018-Quals
Mine fire forsøk under kvalifikasjonsrunden

Dagen etter tikket det inn en melding i Slack-kanalen for de av oss fra Bouvet som var registrerte i konkurransen - noen spurte om det var jeg som var på 4. plass og ba meg sjekke mailen min.

"Oisann!", tenkte jeg.

Jeg fikk dermed et gratis såkalt gullpass til Paranoiakonferansen 2018 (som var påfølgende uke), der vinnerne ville bli kunngjort, som så ut til å ha massevis av spennende faglig innhold.

Så var det bare å vente på siste oppdrag...

Finale

Vi visste finalen ville bli på fredag samme uke, men ikke når eller hvor lang tid vi ville ha på oss. Jeg hadde egentlig tenkt til å avspasere fra kl. tre, så jeg kom meg tidlig hjem og var klar om det skulle bli dårlig tid og ikke satt og måtte stresse meg gjennom konkurransen ute hos kunden.

Fredag kl. halv tre fikk finaledeltagerene mail: Fra og med kl. 15:00 ville vi få ett forsøk og to timer på å løse følgende oppgave:

  1. Besvare 50 flervalgsoppgaver
  2. Utføre et oppdrag med 6 deloppgaver basert på beskyttelse av bank-systemer og nettverk.Spillerne måtte ha følgende kompetanse for å lykkes med oppdraget:
  • Intrusion detection/prevention systemer
  • Grunnleggende malware analyse
  • Utvikling av regelsett basert på snort
  • Isolering av og fjerning av malware
IMG_4196
Meg når finalen begynte

Jeg raste gjennom flervalgsoppgavene og satte i gang med oppdraget. Dessverre introduserte jeg en følgefeil når jeg konfigurerte innbruddsdetekteringssystemet Snort, som jeg så brukte en halvtime på å finne. Jeg ble dermed bare ferdig med to deloppgaver av oppdraget.

IMG_4786
Meg når jeg skjønte at jeg hadde introdusert en følgefeil

Klokken slo fem. Ingen hadde oppnådd full score.

Jeg var ikke spesielt fornøyd, og var såpass overbevist om at det hadde gått dårlig at når kolleger spurte meg hvordan finalen hadde gått svarte jeg konsekvent "Det blir ikke noen palplass, i alle fall".

Konferansen

Paranoiakonferansen var kjempespennende. Et av høydepunktene var "Freaky Clown" fra Redacted Firm, som snakket om sin arbeidshverdag. Han fortalte om hvordan han blant annet brøt seg inn i banker og store IT-selskaper (både i cyberspace og i "meatspace"). Senere forklarte han også at god sikkerhetskultur var tilsynelatende ganske likt god folkeskikk: Om noen bare hadde snakket med ham og f.eks. spurt hvem han var og om de kunne hjelpe ham med noe kunne kanskje flere av hans innbrudd og informasjonstyverier ha vært avverget.

Etter første dag på konferansen, der jeg blant annet hadde sett sikkerhetsguru Bruce Schneier prate og skaffet meg et signert eksemplar av hans bok "Data and Goliath", var presentasjonene over.

Jeg så på programmet at det nå ville bli kunngjøring av vinneren av Paranoia Challenge 2018 og tenkte at jeg strengt talt ikke trengte å være der, siden jeg ikke var en aktuell kandidat for pallen uansett. Jeg så derfor mitt snitt til å ta en telefon.

Når jeg kom tilbake til salen 10 minutter senere blie jeg gratulert av Bouvet-folk som sa "Hvor var du? De ropte deg opp: Du kom på tredjeplass!"

score-final
Finaleresultater fra Paranoia Challenge 2018