Genomgång av CERT-SE CTF2021 (snart dags igen!)
Den 1 oktober inleds den europeiska cybersäkerhetsmånaden som sätter fokus på cybersäkerhetsfrågor, både för privatpersoner och företag. Enligt tradition är det även det datumet då CERT-SE publicerar sin årliga CTF-utmaning (capture the flag). Så håll utkik!
Som inspiration (och uppvärmning) publicerar vi här ett förslag på lösning av förra årets CTF-utmaning. Utmaningen gick ut på att i en dump av nätverkstrafik hitta “flaggor”, totalt sex stycken.
Har du själv missat utmaningen och vill testa att lösa den innan du läser genomgången hittar du den här. [1]Vi återkommer som sagt med en ny CTF i oktober igen.
Hoppas ni är med och försöker lösa även den.<hr />
Ett exempel på hur du löser CERT-SE CTF2021
Börja med att packa upp filen och få ut filen med nätverkstrafik, en s.k. pcap. Denna fil innehåller de flaggor vi är ute efter men också en chat som kan ge ledtrådar till var man kan hitta flaggorna.
Flagga 1
Leta i filen efter “CTF” med t.ex. kommandot strings. Då hittas första flaggan.
Flagga 2
Vid analys av nätverkstrafiken finns olika verktyg att tillgå, ett vanligt förekommande (och gratis tillgängligt på internet) är Wireshark. [2]Hitta filen broadcast.7z som skickats med FTP. Denna 7z är lösenordsskyddad. Listar man filerna i 7z-arkivet så hittar man:2021-09-23 07:50:06 ....A 0 0 Zipper/.secret/0/32021-09-23 07:51:10 ....A 0 0 Zipper/.secret/4/62021-09-23 07:51:10 ....A 0 0 Zipper/.secret/5/112021-09-23 07:51:10 ....A 0 0 Zipper/.secret/D/72021-09-23 07:51:10 ....A 0 0 Zipper/.secret/c/12021-09-23 07:51:10 ....A 0 0 Zipper/.secret/h/22021-09-23 07:51:10 ....A 0 0 Zipper/.secret/j/102021-09-23 07:51:10 ....A 0 0 Zipper/.secret/k/42021-09-23 07:51:10 ....A 0 0 Zipper/.secret/l/52021-09-23 07:51:10 ....A 0 0 Zipper/.secret/m/82021-09-23 07:51:10 ....A 0 0 Zipper/.secret/o/92021-09-23 07:53:12 ....A 29 48 Zipper/.secret/-/flag.txt2021-05-11 12:07:28 ....A 3255904 1066768 Zipper/.secret/!/broadcast.wav
Sorterar man i nummerordning får man:
2021-09-23 07:51:10 ....A 0 0 Zipper/.secret/c/12021-09-23 07:51:10 ....A 0 0 Zipper/.secret/h/22021-09-23 07:50:06 ....A 0 0 Zipper/.secret/0/32021-09-23 07:51:10 ....A 0 0 Zipper/.secret/k/42021-09-23 07:51:10 ....A 0 0 Zipper/.secret/l/52021-09-23 07:51:10 ....A 0 0 Zipper/.secret/4/62021-09-23 07:51:10 ....A 0 0 Zipper/.secret/D/72021-09-23 07:51:10 ....A 0 0 Zipper/.secret/m/82021-09-23 07:51:10 ....A 0 0 Zipper/.secret/o/92021-09-23 07:51:10 ....A 0 0 Zipper/.secret/j/102021-09-23 07:51:10 ....A 0 0 Zipper/.secret/5/11
Lösenordet är alltså: “ch0kl4Dmoj5“Detta lösenord används för att packa upp filen och få ut flag.txt som innehåller en flagga.
Flagga 3
I denna 7z finns även filen broadcast.wav. Denna ljudfil är en SSTV-överföring och ger resultatet:
Flagga4
I pcap:en finns en webbsida med en bild som är en QR-kod. Läser man av denna får man “aHR0cHM6Ly9iaXQubHkvM2RTQUxndQ==”. Avkodar man denna med base64 får man fram länken https://bit.ly/3dSALgu, som leder till en YouTube-video.Dock innehåller bilden ett gömt meddelande. Använd t.ex. kommandot steghide för att extrahera detta.
Flagga 5
I pcap:en finns en fil som heter star!6.kmz. Detta är en kartfil som går att läsa i t.ex. Google Earth och som visar området runt Tomteboda i Solna tillsammans med lite linjer. Lägger man ned kartan så framkommer bokstäver.
Läser man av dessa får man fram bokstäverna “XGU[IVHRORVMH]” vilket genom avkodning med atbash ger flaggan.
Flagga 6
Hitta filen memdump4.7z och extrahera innehållet. För analys av minnesdumpar finns open source-verktyget volatility. I detta exempel används volatility2.Volatility2 kräver att användaren anger en profil som motsvarar vilket operativsystem + version minnesdumpen har. Detta går att ta reda på genom flera olika sätt, en ledtråd ges åtminstone i IRC-chatten där dumpen benämns som en debian-dump. Då man listat ut vilken debian-version som nyttjats kan man antingen skapa en egen profil eller ladda ner en befintlig sådan från internet.Med profilen på plats finns flera spännande moduler i volatility för att komma framåt i uppgiften. Bland annat kan man testa linux_bash för att se vilka kommandon som körts precis innan minnesdumpen togs. Där avslöjas att någon startat en fil med namnet SuperSecretLogonTool.Genom modulen linux_enumerate_files kan vi undersöka ifall filen SuperSecretLogonTool återfinns i minnet och med modulen linux_find_file kan vi extrahera binären till vår egen dator. Med kommandot file noterar vi att filen är av typen ELF och genom att köra den startas ett program som visar CERT-SE:s logga och efterfrågar ett lösenord. Tyvärr fungerar inga av de lösenord som förekommer i nätverkstrafiken.Genom att analysera programmet i en debugger (exempelvis gdb), går det notera att det finns tre funktioner av intresse: main, print_cert_se och print_flag. Undersöker man varje funktion var för sig inser man snart att programmet startar i main, men gör aldrig något anrop till funktionen print_flag. Däremot finns ingenting som hindrar oss från att sätta en brytpunkt omedelbart när programmet startar och för att sedan hoppa till funktionen print_flag, vilket leder till att programmet ger ifrån sig flaggan för uppgiften. <hr />CERT-SE vill med detta tacka alla som engagerat sig, spelat vår CTF, delat på forum och diskuterat. Vi ser fram emot att ni även delar i årets som kommer i månadsskiftet september/oktober.