Kompetisi kategori ini bertujuan untuk menguji kemampuan peserta dalam menghadapi kasus keamanan sistem komputer dan jaringan yang telah disiapkan, termasuk di dalamnya keamanan data. Daya analisis dan kreativitas peserta ditantang untuk mencari kelemahan dalam suatu sistem yang telah dirancang untuk memiliki celah atau informasi tertentu yang memungkinan terjadinya peretasan pada sistem tersebut.

Ketepatan dan kecepatan peserta dalam menutupi kelemahan yang ditemukan akan menentukan seberapa kuat sistemnya bertahan dari serangan peserta lain. Kemampuan peserta dalam merancang dan mengimplementasi-kan sistem siber yang aman dengan cara melakukan proteksi data dari ujung ke ujung dan akan sangat menentukan keberhasilan dalam lomba ini..

🔗 Disk forensik

Seorang penyidik polisi menemukan image dari suatu file system. temukan flags dalam image filesystem ini

download image di http://10.251.251.194/forensic.img

Diberikan berkas diskimage bernama forensic.img. Untuk menentukan tipe partisi yang digunakan, dilakukan proses identifikasi sebagai berikut

$ file forensic.img
forensic.img: data

$ strings forensic.img | head -5
T$!Z
/home/tunky/forensic
lost+found
wkwkwkw
accordion

Seperti yang terlihat, nampaknya diskimage tidak teridentifikasi sebagai diskimage, melainkan sebuah block data. Besar dugaan bahwa terdapat modifikasi pada magic bytes yang mengakibatkan superblock menjadi tidak valid. Kendati demikian, Kita dapat memastikan bahwa diskimage memuat Extended File System (Ext) mengingat terdapat strings UNIX path, yakni /home/tunky/forensic. Dari sini, Kami menyusun skema pengerjaan sebagai berikut:

Magic bytes inspection

Untuk mempermudah proses inspeksi, Kami berinisiatif untuk membuat dummy diskimage yang terdiri atas 1024 bytes null bytes data. Kemudian dilakukan mekanisme komparasi dengan forensic.img

$ dd if=/dev/zero of=./ext2.img bs=512 count=1024
$ mkfs.ext2 ./ext2.img
$ file ext2.img
ext2.img: Linux rev 1.0 ext2 filesystem data, UUID=cf9e1a1e-67af-4d9e-a7ab-943f5339d49e (large files)

$ xxd -s 0x430 -l15 ext2.img
00000430: 8a66 bc5d 0000 ffff 53ef 0100 0100 00    .f.]....S......

$ xxd -s 0x430 -l15 forensic.img
00000430: 8dd7 af5d 0500 ffff 20ff 0100 0100 00    ...].... ......

Dapat diketahui bahwa terdapat perbedaan bytes pada offset 0x438 hingga 0x439. Adapun setelah beberapa penelusuran, Kami menemukan literasi yang kurang lebih menyebutkan bahwa sebuah ext2/ext3/ext4 filesystem selalu memuat byte 0xEF53 pada offset 1080–1081. Mengingat magic bytes merupakan little-endian, maka magic byte disimpan sebagai 0x53ef. Berbekal pemahaman tersebut, proses file carving dapat dilakukan dengan script sebagai berikut:

from pwn import *

with open('./forensic.img', 'rb') as f:
  data = f.read()
data = data[:1080] + p16(0xEF53) + data[1082:]
with open('fixed.img', 'wb') as f:
  f.write(data)
$ python2 solve.py
$ file fixed.img
fixed.img: Linux rev 1.0 ext2 filesystem data, UUID=5424215a-8103-4a3d-8687-b4ed6f74fef2 (large files)

Di sisi lain, terdapat juga alternatif tools yang dapat digunakan untuk mendeteksi sekaligus memperbaiki hierarchy dari diskimage. Dalam hal ini, kita dapat menggunakan tools fsck.ext2

$ fsck.ext2 forensic.img
e2fsck 1.44.6 (5-Mar-2019)
ext2fs_open2: Bad magic number in super-block
fsck.ext2: Superblock invalid, trying backup blocks...
forensic.img was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #0 (7975, counted=7711).
Fix<y>? yes
Free blocks count wrong for group #1 (1844, counted=940).
Fix<y>? yes
Free blocks count wrong (9819, counted=8651).
Fix<y>? yes
Free inodes count wrong for group #0 (1269, counted=1268).
Fix<y>? yes
Free inodes count wrong for group #1 (1280, counted=1224).
Fix<y>? yes
Directories count wrong for group #1 (0, counted=1).
Fix<y>? yes
Free inodes count wrong (2549, counted=2492).
Fix<y>? yes

forensic.img: ***** FILE SYSTEM WAS MODIFIED *****
forensic.img: 68/2560 files (77.9% non-contiguous), 1589/10240 blocks

$ file forensic.img
forensic.img: Linux rev 1.0 ext2 filesystem data, UUID=5424215a-8103-4a3d-8687-b4ed6f74fef2 (large files)

Diskimage Analysis

Sesaat setelah diksimage berhasil terecovery, Kita dapat melakukan proses File mount untuk mengakses konten dari diskimage. Hasilnya diperoleh empty file wkwkwkw dan sebuah directory bernama accordion. Adapun folder ini memuat 55 JPEG file dari citra alat musik accordion.

$ sudo mount fixed.img /mnt
$ ls /mnt
accordion  lost+found  wkwkwkw

$ ls -la /mnt/accordion/*.jpg | wc -l
55
preview-1

Setelah beberapa saat menelaah gambar yang ada, ditemukan matches, yakni image_0017.jpg, yang memuat isi dari flag

preview-2

FLAG : gemastik12{Disk_forensic_is Eazy}

🔗 ftp forensik

Bantu Badrun menemukan flag yang hilang dalam file dokumen miliknya

Diberikan sebuah berkas paket data bernama trafik-gemastik12.pcapng. Sebagai permulaan akan dilakukan enumerasi informasi statistik dengan bantuan tshark. Hasilnya diperoleh:

$ tshark -r trafik-gemastik12.pcapng -q -z io,phs

===================================================================
Protocol Hierarchy Statistics
Filter:

frame                                    frames:1083 bytes:712553
  eth                                    frames:1083 bytes:712553
    ip                                   frames:1083 bytes:712553
      tcp                                frames:947 bytes:700667
        ftp                              frames:116 bytes:8951
          ftp.current-working-directory  frames:116 bytes:8951
        ftp-data                         frames:446 bytes:669338
          ftp-data.setup-frame           frames:446 bytes:669338
            ftp-data.setup-method        frames:446 bytes:669338
              ftp-data.command           frames:446 bytes:669338
                ftp-data.command-frame   frames:446 bytes:669338
                  ftp-data.current-working-directory frames:446 bytes:669338
                    data-text-lines      frames:3 bytes:953
      udp                                frames:136 bytes:11886
        dns                              frames:136 bytes:11886
===================================================================

Berdasarkan statistik tersebut, diketahui bahwa terdapat beberapa komunikasi yang berjalan pada TCP & UDP layer. Mengingat judul soal secara eksplisit menyebutkan kata kunci FTP, maka analisis hanya akan difokuskan pada FTP packet untuk mengetahui komunikasi antara client & FTP server. Adapun skema yang dilakukan ialah sebagai berikut

Identify TCP.stream & FTP-DATA

Sebelum mengekstraksi FTP-DATA, dilakukan penelusuran terhadap tcp.stream untuk mengetahui index dari request dan response dari eksekusi FTP command.

$ tshark -r trafik-gemastik12.pcapng -Y 'tcp.stream && ftp-data' -T fields -e tcp.stream | sort | uniq
14
19
26
9

Dari sini, dapat dipahami bahwa FTP requests & FTP response masing-masing terdapat pada index 8,13,18,25 & 9,14,19,26. Berdasarkan acuan tersebut, dilakukan proses ekstraksi sebagai berikut

$ for i in {8,13,18,25}; do
 echo "#TCP Stream $i\n"\ `tshark -r trafik-gemastik12.pcapng -z "follow,tcp,raw,$i" |\
  awk 'f;/Node 1/,/=/' | grep -Ev '=|Node' |\
  xxd -r -p`
done

#TCP Stream 8
 221 Goodbye.y send OK.ectory listing.,128,61,55).
#TCP Stream 13
 221 Goodbye.y send OK.ectory listing.,128,112,68).
#TCP Stream 18
 221 Goodbye.y send OK.ectory listing.,128,68,158).
#TCP Stream 25
 221 Goodbye. complete.e data connection for /home/gemastik12/files/file/data-gemastik.jpg (644463 bytes).

Terlihat bahwa terdapat FTP file transfer terhadap file data-gemastik.jpg pada tcp.streams ke-26. Untuk memperoleh JPG file, dilakukan ekstraksi sebagai berikut:

$ tshark -r trafik-gemastik12.pcapng -z 'follow,tcp,raw,26' |\
  awk 'f;/Node 1/,/=/' | grep -Ev '=|Node' |\
  xxd -r -p > data.jpg

$ file data.jpg
data.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI),
density 300x300, segment length 16, Exif Standard: [TIFF image data,
big-endian, direntries=4, manufacturer=Canon, model=Canon EOS 5D Mark III],
baseline, precision 8, 510x340, frames 3

Kendati tidak diperoleh informasi pada gambar, Kami berinisiatif untuk melakukan pengecekan terhadap JPEG trailer dengan bantuan binwalk. Hasilnya, diperoleh ZIP Archive yang memuat tree.jpg, flag-diproteksi.pdf, dan data.png. Selanjutnya, dilakukan proses ekstraksi dengan bantuan foremost

$ binwalk data.jpg

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
30            0x1E            TIFF image data, big-endian, offset of first image directory: 8
22337         0x5741          Zip archive data, at least v1.0 to extract, compressed size: 93051,
                              uncompressed size: 93051, name: data.png
115426        0x1C2E2         Zip archive data, at least v2.0 to extract, compressed size: 206330,
                              uncompressed size: 210266, name: flag-diproteksi.pdf
321805        0x4E90D         Zip archive data, at least v1.0 to extract, compressed size: 322317,
                              uncompressed size: 322317, name: tree.jpg
644441        0x9D559         End of Zip archive, footer length: 22

$ foremost data.jpg
$ cd output/zip
$ 7z x 00000043.zip
$ ls
00000043.zip  data.png  flag-diproteksi.pdf  tree.jpg

Setelah beberapa saat, Kami berasumsi bahwa PDF-file dienkripsi dengan password yang bisa jadi diperoleh dari kedua ImageFile yang tersedia. Untuk itu, Kami berinisiatif untuk melakukan pengecekan dengan bantuan Zsteg dengan harapan bahwa terdapat informasi yang disembunyikan pada pixel value. Hasilnya diperoleh base64-encoded text dari LSB RGB channel.

$ zsteg data.png
..
..
b1,rgb,lsb,xy       .. text: "cGFzc3dvcmQgcGRmIGZpbGUgYWRhbGFoIGdhbGl0ZXJ1c3NhbXBhaWQ0cDR0a2F3YW4="
b2,r,msb,xy         .. text: "@UUUUUUUUA"
b2,g,msb,xy         .. text: "TUUUUUUU"
..
..

$ base64 -d <<< cGFzc3dvcmQgcGRmIGZpbGUgYWRhbGFoIGdhbGl0ZXJ1c3NhbXBhaWQ0cDR0a2F3YW4
password pdf file adalah galiterussampaid4p4tkawan

Kemudian dengan melakukan dekripsi pada PDF, diperoleh text yang memuat isi dari flag.

$ qpdf --decrypt --password=galiterussampaid4p4tkawan flag-diproteksi.pdf flag.pdf
$ pdftotext flag.pdf msg.txt
$ cat msg.txt
Ini budi sedang makan

gemastik12{a4e5e3b7ac929b5ec11726f7820cb1cd}

_______________________________________

FLAG : gemastik12{a4e5e3b7ac929b5ec11726f7820cb1cd}

🔗 digging deeper

melodia menemukan sebuah file aneh, dia kesulitan untuk mencari informasi dalam file tersebut. bantu andi untuk menemukan informasi itu.

download file : http://180.250.135.20/minatozaki.bmp

Diberikan sebuah file bernama minatozaki.bmp. Seperti biasa, Kita lakukan identifikasi file untuk mengecek validitas dari file.

$ file minatozaki.bmp
minatozaki.bmp: bzip2 compressed data, block size = 600k

Setelah dilakukan pengecekan, diketahui bahwa file yang tersedia ternyata merupakan bzip2 archive sehingga dapat Kita lakukan proses ekstraksi sebagai berikut

$ 7z x minatozaki.bmp
$ file minatozaki
minatozaki: POSIX tar archive

$ 7z x minatozaki
$ ls 
cheese_kimbap.wav  minatozaki.bmp  minatozaki

Hasilnya, diperoleh sebuah AudioFile bernama cheese_kimbap.wav. Secara intuitif, Kami langsung melakukan observasi dengan bantuan Audacity.

preview-3

Beberapa saat berselang, kami pun mulai menyadari bahwa tidak terdapat informasi yang disembunyikan pada Audio Sample. Hal tersebut mengingat AudioFile cenderung terkuantisasi dengan baik, bahkan tidak terdapat noise/fault yang bisa jadi dihasilkan dari operasi byte seperti LSB, dll.

Karena tidak menemukan titik temu, muncul sebuah inisiatif untuk mereproduksi solusi dari soal what’s flag? Yang merupakan soal penyisihan GEMASTIK XII lalu. Dari sini Kami menduga bahwa terdapat sebuah pesan tersembunyi yang dihasilkan oleh operasi steghide. Untuk itu, Kami menyusun skema dictionary-attack dengan acuan Indonesian Worldist dari repository Jim Geovedi. Guna mempercepat proses, digunakan pula 10 instance dari GNU parallel untuk menjalankan steghide secara concurrent.

$ wget https://raw.githubusercontent.com/geovedi/indonesian-wordlist/master/00-indonesian-wordlist.lst
$ cat 00-indonesian-wordlist.lst | tr -d "'" | xargs -n 1 -I {} echo "echo {}; steghide extract -sf cheese_kimbap.wav -p {}" > commands.txt

$ parallel -j 10 < commands.txt &> result

Sembari menunggu proses bruteforce, Kami juga menjalankan instance untuk mengecek apabila diperoleh passphrase yang berhasil mendekripsi AudioFile. Setelah beberap saat menunggu, akhirnya diperoleh passphrase patriot yang dapat digunakan untuk memperoleh file further.docx.

$ grep –aB 1 wrote result
steghide: could not extract any data with that passphrase!
cowrote
--
patriot
wrote extracted data to "further.docx".

$ ls
cheese_kimbap.wav  further.docx

$ 7z x -oout further.docx
$ ls out/*.wav
further.wav

Setelah dilakukan pengecekan terhadap further.docx, ternyata diperoleh further.wav yang dapat dianalisis kembali dengan bantuan Audacity. Adapun hasilnya diperoleh flag yang diminta dari hasil spectrogram mode

preview-4
preview-5

FLAG : gemastik12{l00K_FuRth3R}