This write-up is in Swedish. I may translate it to
English in the future.
“Yta 0x33 AB, ett hemlighetsfullt företag i rymdbranschen, misstänker att en av
dess anställda läcker känslig information till utomstående. Det är ett
allvarligt läge, då det finns indikationer på att medarbetaren är agent för en
aktör som planerar att genomföra ett inbrott på företaget. Analysera trafiken
och försök hitta vilken information som har exfiltrerats. Utmaningen innehåller
7 flaggor.
Under dagen den 13e november 2024 exfiltrerades data från IP-adressen
10.0.0.10 till fyra olika mottagande adresser:
Mottagare
10.0.0.20
10.0.0.40
10.0.0.77
10.0.0.99
Den exfiltrerade informationen bestog av
tiderna för de dagliga vaktbytena,
en portkod,
en detaljerad karta över anläggningen, samt
en obfuskerad bild.
Endast delar av den obfuskerade bilden har kunnat återskapas. Dessa delar är
möjligen tillräckliga för att kunna kopplas till orginalbilden i ett potentiellt
arkiv av kandidater.
Kl 09:59 UTC ansluter exfiltratören först till en FTP-server (port 21) på
10.0.0.77 som gäst med namn sommar2014, och exfiltrerar den lokala filen
msg.txt (sha256:
e921b5bb292191b9f485d79444642b230054b731a9fd73a2fd7505ba05f9e2c5) genom att
ladda upp den till FTP-serverns dropbox-mapp.
Med Wireshark/tshark och displayfiltret tcp.stream eq 0 ser man
kommunikationen med FTP-servern:
Efter FTP-kommunikationen, från kl 12:23 UTC, skickar 10.0.0.10 med korta och
jämna mellanrum ICMP Echo Requests (pings) till 10.0.0.99. Samtliga av dessa
har blivit avsiktligen manipulerade, vilket deras felaktiga kontrollsumma starkt
pekar mot.
En bokstav av ett meddelande har gömts i varje ping, i andra halvan av
IP-pakethuvudets identifikationsfält. Om man extraherar samtliga av dessa syns
hela meddelandet som här exfiltrerades
(Vaktbyte kl 7, 15 och 23 dagligen. flagga{exf1l_by_p1ng}):
Mailet (sha256:
3ef831a0b4a4330223a4323b5bdd99a37e1da19b0a9ce36e64263ff4905d054a), som
skickades från mailadressen REDACTED@yta0x33.na till REDACTED@REDACTED.na
med ämnesraden “tack + lite info”, innehåller två bifogade filer:
presentkort.pdf visar en QR-kod som till synes har med ett presentkort att
göra.
I själva verket lagrar QR-koden en Base45-kodad bild (sha256:
b76158eafbd6993434c26ffe023346f22749dda8119f0f77d82648604d256957).
Detta python-script kan användas för att
utvinna bilden:
Det går att utläsa texten “Portkod: 1632. flagga{qrazy_basy}”, som även ligger
som ‘Caption’ i filens metadata:
$ exiftool qr_decoded.png
ExifTool Version Number : 12.76
File Name : qr_decoded.png
Directory : .
File Size : 571 bytes
File Modification Date/Time : 2026:03:26 22:42:21+01:00
File Access Date/Time : 2026:03:26 22:42:20+01:00
File Inode Change Date/Time : 2026:03:26 22:42:21+01:00
File Permissions : -rwxrwx---
File Type : PNG
File Type Extension : png
MIME Type : image/png
Image Width : 106
Image Height : 26
Bit Depth : 1
Color Type : Grayscale
Compression : Deflate/Inflate
Filter : Adaptive
Interlace : Noninterlaced
Gamma : 2.2
White Point X : 0.3127
White Point Y : 0.329
Red X : 0.64
Red Y : 0.33
Green X : 0.3
Green Y : 0.6
Blue X : 0.15
Blue Y : 0.06
Background Color : 1
Modify Date : 2024:11:12 09:55:37
Warning : [minor] Text/EXIF chunk(s) found after PNG IDAT (may be ignored by some readers)
Caption : Portkod: 1632. flagga{qrazy_basy}
Captionpointsize : 11
Datecreate : 2024-11-12T09:55:37+01:00
Datemodify : 2024-11-12T09:55:37+01:00
Image Size : 106x26
Megapixels : 0.003
bg.png tycks vid första anblick inte erbjuda så mycket:
Med stegsolves “Random color
map” visas en obfuskerad karta över anläggningen, innehållande bland annat
texten flagga{blueprinting_exfil}.
Kl 14:21 UTC upprättades en UDP-anslutning mellan 10.0.0.10 och 10.0.0.40.
De utbytte information enligt nedan.
10.0.0.10 meddelar 10.0.0.40 om att en fil är redo att överföras, nämligen
top_secret.png (sha256:
c72ca298d87dc6eb181aa6e4f5a7b61a9143bea27e2af0e96467385f92b71035):
Datastyckena (de som 10.0.0.40 noterade att kontrollsumman stämde för) kan fås
sorterade och sammansatta med exempelvis
detta python-script. Den höga entropin i filen,
vilken kan ses med binwalk -E, tyder på att den innehåller antingen
komprimerad eller krypterad data.
I informationsutbytetet ovan fanns en krypteringsnyckel som kan användas för att
avkryptera datan med RC4-dekrypteringsalgoritmen.
Vi verifierar att kontrollsumman av den avkrypterade filen stämmer
överensstämmer med det 10.0.0.10 skickade till 10.0.0.40.
I bildens metadata finns en Base64-kodad sträng som avkodas till
“Häpnadsväckande verksamhet - tredje graden! flagga{play_the_5_tones}”.
$ exiftool top_secret.png
ExifTool Version Number : 12.76
File Name : top_secret.png
Directory : .
File Size : 2.7 MB
File Modification Date/Time : 2026:03:27 15:37:43+01:00
File Access Date/Time : 2026:03:27 15:37:42+01:00
File Inode Change Date/Time : 2026:03:27 15:37:43+01:00
File Permissions : -rwxrwx---
File Type : PNG
File Type Extension : png
MIME Type : image/png
Image Width : 1024
Image Height : 1024
Bit Depth : 16
Color Type : RGB with Alpha
Compression : Deflate/Inflate
Filter : Adaptive
Interlace : Noninterlaced
Warning : [minor] Text/EXIF chunk(s) found after PNG IDAT (may be ignored by some readers)
Exif Byte Order : Big-endian (Motorola, MM)
X Resolution : 72
Y Resolution : 72
Resolution Unit : inches
Y Cb Cr Positioning : Centered
Exif Version : 0231
Components Configuration : Y, Cb, Cr, -
User Comment : SMOkcG5hZHN2w6Rja2FuZGUgdmVya3NhbWhldCAtIHRyZWRqZSBncmFkZW4hIGZsYWdnYXtwbGF5X3RoZV81X3RvbmVzfQ==
Flashpix Version : 0100
Color Space : Uncalibrated
Image Size : 1024x1024
Megapixels : 1.0
$echo"SMOkcG5hZHN2w6Rja2FuZGUgdmVya3NhbWhldCAtIHRyZWRqZSBncmFkZW4hIGZsYWdnYXtwbGF5X3RoZV81X3RvbmVzfQ=="\
| base64 -d
Häpnadsväckande verksamhet - tredje graden! flagga{play_the_5_tones}
Bilden ser ut att vara uppdelad i 128x128 stycken rutor, vardera 8x8 pixlar
stor. Dessa rutor tycks ha blandats så att ursprungsbilden inte enkelt kan
återfås.
top_secret.png:
Med Aperi’Solves “Alpha Decomposer” kan
man se att rutornas alfa-kanal (genomskinlighet) har olika värden.
Det visar sig finnas exakt 256 stycken rutor med alfa-värde 255, lika många med
alfa-värde 254, lika många med alfa-värde 253, o.s.v. ned till värde 192.
Sorterar man rutorna i bilden utifrån deras alfa-värde framkommer lite mer
struktur i innehållet:
Framförallt tycks brickorna med alfa-värde i spannet 196-198 innehålla någon
form av text:
Genom att lägga pussel kan texten “flagga{they're_eating_the_dogs}” finnas.
Ytterliggare struktur i top_secret.png kan fås med exempelvis
en problemanpassad girig sorteringsalgoritm.
Algoritmen försöker lösa två rader (ett “band” av 2x128 rutor) av den
alfa-värdessorterade bilden i taget. Utifrån hur flaggans rutor var placerade
så tycks samtliga rutor då ha legat i samma band av orginalbilden. Detta
minskar sökrymden avsevärt, från (128*128)! (varje ruta har 128*128
alternativa platser) till 64*256! rutarrangemang (varje ruta har 256
alternativa platser).
Sökrymden är givetvis fortfarande alldeles för stor för att testa alla
rutarrangemang, därav den giriga algoritmen. Varje band löses genom att girigt
konstruera 128 troliga kolumner (staplar av 2x1 rutor) som girigt organiseras
i en trolig ordning.Resultatet är betydligt bättre, men bristerna i att lösa varje band oberoende
av varandra syns tydligt.