Nasjonal sikkerhetsmyndighet har en challenge liggende ute på https://challenge.i18.no/. Denne ble publisert i januar 2015 med noen ekstra oppgaver lagt til i etterkant. For øyeblikket er det 13 oppgaver tilgjengelig hvor den siste oppgaven ble lagt ut februar 2016.

Denne writeupen av oppgavene er ikke komplett.

#1: Ren rutine

$ echo -n 'lett som en plett' | sha256sum
b3df0e709c60b6c3790941a49d989dcd1911b1e25eba18afdb08f78820a1b8cf

#2: This Must Be The Place

Allerede i oppgavens tittel får vi et solid hint til hvor løsningen befinner seg. «This Must Be The Place» er en knallgod sang fra 1983 av new wave-gruppa Talking Heads. Så la oss se om vi kan få headeren til å snakke med oss.

Vi bruker kommandoen curl med tilvalget -I for å kun vise HTTP-headeren.

$ curl -I https://challenge.i18.no/level/fbmserjd3dwtvrspnk8ektmxsvdenwvp
HTTP/1.1 200 OK
Date: Tue, 20 Jan 2015 12:02:53 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 3328
Connection: keep-alive
X-Answer: b8e63fba4504b3c29e582cc3d1f6cc56918998d50e55b1af3382080506f2f969
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=63072000

X-Answer-feltet gir oss svaret.

#3: I skyggene

Vi blir gitt en passord hash på formatet $id$salt$encrypted og noen hint om at det er et dårlig passord.

I vårt tilfelle er id=1 som betyr at det er en MD5-hash. Se man crypt for mer informasjon om de ulike mulige typene.

nsm:$1$asH66rpo$gkIQMSAA.QS/ah5VZvrYi0:16403:0:99999:7:::

Det er en forhåndsvis liten hash som betyr at det er et kort passord, og siden vi har rimelig klare retningslinjer på hvordan passordet vil være bygget opp så er det beste valget vårt å bruteforce passordet med en ordliste.

Her kan vi bruke flere verktøy, som f.eks oclHashcat eller john the ripper.

john kan kjøres med kommandoen john --wordlist=ord.txt --rules pass.txt der ord.txt inneholder Scrabbleforbundets ordliste og pass.txt inneholder hele linjen vi har fått.

Dette gjør at john forsøker alle ordene i ordlisten, men artikkelen lenket så står det at passordet er på formatet ala. Sommer2014.

john støtter også regler som forandrer på ordene i ordlisten. Disse kan man forandre på ved å legge til en seksjon i konfigurasjonsfilen.

[List.Rules:Wordlist]
cAz"201[4-5]"
Az"201[4-5]"

Når vi har lagt til dette så vil forsøkene se ut som Sommer2014 og ikke Sommer.

Etter 4-5 minutter fikk vi svaret Demokrati2015

#4: Broen

Filen som serveres, data.bin, viser seg å være en pcap.

$ file data.bin
data.bin: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 65535)

Vi åpner pakkestrømmen i Wireshark for å se hva det kan gi av informasjon.

Wireshark interface

Det ser ut til at et PNG-bilde har blitt overført. Det kan vi hente ut ved hjelp av File → Export Objects → HTTP. Da får man opp en dialogboks som lar oss lagre innholdet fra pakkestrømmen, i dette tilfellet et bilde.

Wireshark objekter

La oss ta en titt på bildet.

Bilde fra pakkestrøm

Et bilde av en bro? Hintet i oppgaven tilsier at svaret skal være SHA256-summen av et stedsnavn. Man skal være rimelig lokalkjent for å se hvor dette er. Mystisk. La oss sjekke ut bildets metadata med exiftool.

$ exiftool image1.jpg
ExifTool Version Number         : 9.76
File Name                       : image1.jpg
Directory                       : .
File Size                       : 69 kB
File Modification Date/Time     : 2015:01:19 15:43:57+01:00
File Access Date/Time           : 2015:01:20 11:57:17+01:00
File Inode Change Date/Time     : 2015:01:19 15:44:05+01:00
File Permissions                : rw-r--r--
File Type                       : JPEG
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Resolution Unit                 : inches
X Resolution                    : 96
Y Resolution                    : 96
Exif Byte Order                 : Big-endian (Motorola, MM)
Exif Version                    : 0230
Create Date                     : 1814:05:17 13:37:00
Components Configuration        : Y, Cb, Cr, -
Flashpix Version                : 0100
GPS Version ID                  : 2.3.0.0
GPS Latitude Ref                : North
GPS Longitude Ref               : East
Image Width                     : 709
Image Height                    : 446
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
GPS Latitude                    : 60 deg 18' 3.20" N
GPS Longitude                   : 11 deg 10' 5.92" E
GPS Position                    : 60 deg 18' 3.20" N, 11 deg 10' 5.92" E
Image Size                      : 709x446

Aha! Om vi plotter GPS-koordinatene inn i Google Maps ser vi at det er gamle Andelva bru som er avbildet. Kombinert med informasjonen om at bildet ble tatt («Create Date») 17. mai 1814 har vi kommet frem til svaret: Eidsvoll!

$ echo -n "eidsvoll" | sha256sum
e6b46a50991986097e4a309076cc0760be4c7a643f62e42b07adaf14a7fe30d4

#5: Lett fluidmekanikk

Win32 PE-fil (exe) som kan kjøres på Windows Vista/7. Se på filen i IDA/Immunity eller en annen disassembler/debugger.

Inneholdt luresvar og noe enkel anti-debugging som kan steppes over i IDA.

Løsning: c47f5e30a957e111a001fc3bbeec0ea904bd84be69e601fbc69fe5f169153269

#6: For the record…

$ dig challenge.i18.no txt

<<>> DiG 9.9.3-rpz2+rl.13214.22-P2-Ubuntu-1:9.9.3.dfsg.P2-4ubuntu1.1 <<>> challenge.i18.no txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46034
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;challenge.i18.no.              IN      TXT

;; ANSWER SECTION:
challenge.i18.no.       3517    IN      TXT     "answer=f627295e1ede26fcf83fb247cdbca58376a2d07da0c46e16eb6ca85a0665ba43"

;; AUTHORITY SECTION:
i18.no.                 3430    IN      NS      ns1.hyp.net.
i18.no.                 3430    IN      NS      ns2.hyp.net.
i18.no.                 3430    IN      NS      ns3.hyp.net.

;; Query time: 0 msec
;; SERVER: 109.74.192.20#53(109.74.192.20)
;; WHEN: Tue Jan 20 15:57:42 CET 2015
;; MSG SIZE  rcvd: 190

#7: Not quite a 0day

Nok en Win32 PE som kan analyseres i IDA eller en annen debugger. Lette lenge etter noen logikk i programflyten før vi så på et hint. Hint 3 sier «Se på klammeparantes og sorter i stigende rekkefølge».

Det er en rekke strenger som inneholder klammeparantes, som f.eks ser ut som [4k].

$ strings vulnerable.exe | egrep '^\[[0-9]'`
[12e]
[13t]
[7e]
[8p]
[3c]
[10a]
[11n]
[9l]
[6h]
[2a]
[5t]
[1h]
[4k]

Dersom man fjerner klammeparentesene, sorterer numerisk, fjerner tallene og til slutt dropper linjeskift sitter man igjen med strengen hacktheplanet, en referanse til filmen «Hackers» fra 1995.

$ strings vulnerable.exe | egrep '^\[[0-9]' | sed 's/^\[//g;s/\]$//g' | sort -n | sed 's/[0-9]//g' | tr -d '\n'

Svar i sha256 blir da: 48f6018bc6898a5c9e61d549b174131c07ed70542ba1c326289b9cc35af22f84

#8: På riktig bølgelengde

Det første man legger merke til er at filstørrelsen er unaturlig stor. 898KB på et JPEG-bilde som måler 180 x 271 piksler. Vi aner ugler i mosen. Åpne i en hex-editor og finn slutten på JPEG-fila. Ved hjelp av en liste over filsignaturer vet vi at JPEG begynner med 0xFFD8 og slutter med 0xFFD9.

JPEG slutt

Som vi ser er det mye data etter dette. De første verdiene etter 0xFFD9 er 0x494433. Ved hjelp av samme liste over filsignaturer kan vi se at filen som er lagt til i slutten av bildet er en MP3-lydfil.

Denne tilføyde filen starter på offset 0x3BD8 (desimal 15320). Vi bruker dd til å lese filen fra byte nummer 15320 og ut og skrive det til en ny fil vi kaller audio.mp3.

$ dd if=logo.jpg.bk bs=1 skip=15320 of=audio.mp3

Denne inneholder ca. 11 sekunder med morse mellom 40 og 51 sekunder ut i lydfilen. For en som ikke har erfaring med morse er det enkleste å lese korte og lange støt i den grafiske fremstillingen i et program som for eksempel Audacity og skrive det inn med «.» for korte og «-» for lange støt i et oversettingsverktøy.

Morse i Audacity

Morse = .... --- .-- .- -... --- ..- - .- -. .. -.-. . --. .- -- . --- ..-. -.-. .... . ... ...

ASCII = howaboutanicegameofchess

Løsningsteksten er en referanse til filmklassikeren «War Games» der protagonisten forsøker å spille «Global Thermonuclear War» hvorpå datamaskinen, etter å ha beskrevet det eneste vinnertrekket som ikke å spille, fremsetter det ikoniske forslaget «How about a nice game of chess?».

$ echo -n "howaboutanicegameofchess" | shasum -a 256
79bcdc81211c8cefd8b12de6bd83c8a9d9555dc222d2641774ea3330223fffc5

#9: Danger, Will Robinson!

Bilde av robåter. En quote fra en robot. Hva med robots.txt-fila?

User-agent: Roberto
Disallow: /d482a0cf4d51a9cf04f8a1a80898f73bc2f0dc3e9691da6d3ecbc79617accd46

#10: Signer her, her og her

Fra HTTPS-sertifikatet, signatur på 256 bytes:

98 D2 32 65 F4 9B 93 49 38 69 85 41 77 B4 1D 3D BB FB ED D3 30 08 7D BF B0 BF 83 61 60 24 02 2F 5C 96 D9 34 67 80 D1 D9 23 BC 11 88 A6 FB 61 F6 3A 4D 2A 42 80 49 AE 5B 45 84 B5 70 59 68 02 F2 90 8D 98 F4 75 28 3E D7 27 7D 60 52 38 2E A0 00 99 11 A1 D4 6C 78 57 5B 18 8E 6C 5E 42 EA 1D A9 67 27 F6 76 C0 9A 5F 07 32 CF 0C 92 FF 93 AD 3F F9 45 3A B2 9A 03 59 EB 25 CA 0F 3C 0A 58 B0 C5 7A 7C 8A AF 4E 6E 26 1E 1E 05 DE 2E F6 01 26 83 2C E3 48 1B 32 9C 36 EB 22 FA E8 84 12 6B B7 2D 94 EE 3A 10 59 1A F7 A9 E0 BA 10 10 CD 13 0A CF B5 C2 D6 42 AF 6B B2 CE 16 D4 DE C0 25 53 4C DD E2 92 05 9D 0C FC 77 D4 84 BC 44 32 C3 C4 33 55 C1 46 2E E2 CE A6 0B A5 AB 6F 59 9D 24 92 53 6E 84 EA 12 E3 28 A4 95 A3 4C 0A FE 8D FE 28 30 56 4A 59 AB 43 3D 09 52 D2 28 4D FD EE 3C 6E 5D 03

#11: De magiske elleve

#12: Elementært