HITB PRO CTF 2019

Ini cerita khusus mengenai HITB CTF di Abu Dhabi, sedangkan cerita jalan-jalan saya tuliskan di posting lain. Dari websitenya acaranya, rencananya ada 20 tim tingkat dunia yang diundang, pemenang dari berbagai CTF lain di dunia tapi akhirnya hanya 19 team yang berkompetisi. Di akhir kami akhirnya peringkat 9 dari 19.

Tim PDKT yang lolos di HITB tercantum di CTF Time. Saya tidak akan bercerita detail tentang tim ini, silakan kunjungi website/sosmed/github masing-masing anggota teamnya: farisv, visat, wearemarching, zeroload. Sengaja saya link tidak ke linkedin langsung, supaya kalau di masa depan informasi profilenya ingin dianonimkan akan lebih mudah. Ada yang baru tingkat 3, dan sisanya belum lama lulus (tidak seperti saya yang sudah lebih 20 tahun lulus S1).

Ranking akhir pemenang bisa dilihat di: https://ctftime.org/event/918 . Di posting ini saya ingin bercerita mengenai teknis CTF ini, dari format lombanya sampai teknis beberapa soalnya.

Format lomba adalah attack defense murni, tidak ada soal jeopardy. Semua tim diberikan berbagai service yang sama, dan kita perlu menyerang service team lain sambil mempertahankan tim kita. Supaya lebih jelasnya, saya akan memberikan contoh sederhana (bukan soal sesungguhnya).

Misalnya kita diberi layanan image gallery. Ternyata di programnya ada bugnya: bisa mengupload selain image, jadi kita bisa menjalankan kode kita sendiri atau mungkin ada bug lain: bisa melihat image orang lain. Nah panitia akan menaruh flag (berupa string kode) ke dalam image, dan akan mengupload ke semua peserta (flagnya beda untuk tiap service dan tim tiap peserta).

Tugas kita adalah mencuri flag dari peserta lain, dan memastikan orang tidak bisa mengambil flag kita. Bagian sulitnya adalah: fungsionalitas harus tetap jalan, jadi kita tidak bisa membela diri dengan mematikan servicenya atau memblok semua iamge, atau memblok peserta. Jadi ada program dari panitia yang akan menguji bahwa fungsionalitas masih jalan. Di contoh ini galery harus bisa tetap menerima image dan tetap bisa didownload imagenya. Jadi patchnya harus cukup eksak, kalau membuat layanannya tidak berjalan, poin kita akan dikurangi.

Panitia sudah membuat repositori semua soal dengan writeup dari panitia (dengan solusi yang diharapkan panitia). Ini bisa diakses umum di:

https://github.com/HackerDom/proctf-2019

Terlihat bahwa team PDKT berhasil pertama menyelesaikan salah satu soal drone_racing (first blood untuk soal itu).

Kita bisa menjalankan tcpdump untuk memonitor layanan kita agar bisa mempelajari eksploit yang dikirimkan team lain. Tapi tcpdump ini tidak selalu ampuh karena beberapa hal:

  • Team lain mengirimkan eksploit yang obfuscated
  • Kadang data yang dikirimkan sangat besar (misalnya image), padahal disk space virtual machine yang diberikan sangat terbatas
  • Kadang layanan memakai SSL (encrypted), jadi harus diintercept dengan cara khusus (tidak bisa sekedar tcpdump)
  • Kadang layanan memakai enkripsi custom

Jika ada beberapa team yang mendapatkan skor terlalu banyak dari satu soal, soal itu akan dipensiunkan dan diganti dengan soal yang lain. Soal-soal hari pertama baik yang bisa maupun yang tidak bisa diselesaikan juga dipensiunkan di hari ketiga.

Menurut saya beberapa soal dirancang tidak bisa diselesaikan dalam waktu sehari, dan memang diharapkan peserta meneruskan pengerjaan soal di hotel. Jadi jika ada lomba semacam ini, sebaiknya persiapkan stamina dengan baik.

Ada beberapa soal yang saya benar-benar tidak kepikiran karena tidak tahu bahwa suatu hal itu mungkin. Misalnya saya tidak memperhatikan di soal rubik bahwa bisa saja terjadi use after free karena menggunakan alokasi stack manual di F#. Saya tidak tahu bahwa ini bisa dilakukan di F# dan bahwa tidak ada pengecekan yang dilakukan oleh runtime .NET.

Satu soal yang membuat menyesal adalah SepToN. Saya tahu persis harus bagaimana: melakukan attack terhadap Substitution–permutation network. Dulu saya sempat mempelajari ini khusus AES untuk melakukan fault injection attack di hardware, tapi saya tidak pernah benar-benar mempraktikkan variasi SPN yang tidak wajar (di kasus ini round-nya hanya 4).

Saya merasa soal-soal enkripsi blok ini cukup mengada-ada. Saya tidak pernah menemukan di dunia nyata orang yang membuat block cipher custom sendiri. Sedangkan untuk berbagai kasus kelemahan kriptografi yang lain, memang saya temukan. Saya merasa stuck karena saya pikir attack hanya bisa dilakukan terhadap BMP header (4 byte) saja. Setelah membaca writeupnya, ternyata komponen Alpha bisa digunakan.

Ada satu team yang berhasil menyelesaikan soal SepToN ini, dan dari satu soal ini saja, mereka mendapatkan nilai yang sangat banyak. Tidak ada defense khusus yang bisa dilakukan untuk menangkal ini, jadi semua tim lain juga pasrah.

Soal yang diberikan sangat bervariasi, dan bahkan ada soal IOT juga. Saya sendiri awalnya diundang karena akan ada materi khusus IOT, tapi ternyata bagian ini dibatalkan. Ternyata dalam lomba ini tetap ada satu soal IOT. Saya agak menyesal tidak memperhatikan bahwa diberikan kabel mini USB untuk ST-LINK, dan baru di hari kedua saya sadari kabel ini ada dan bisa dipakai mengekstrak firmwarenya. Sayangnya waktunya tidak cukup, dan soal tidak diteruskan untuk hari ketiga. Saya jarang melakukan reversing kode ARM thumb (terakhir adalah ketika melakukan RE Pokemon Go Plus), dan prosesnya agak lama.

Ada juga satu soal berhubungan dengan AI (adversarial attack). Saya merasa sedikit kesal dengan diri sendiri karena tidak pernah benar-benar mencoba attack terhadap AI meskipun tahu teorinya. Saya tahu dengan tepat bagaimana neural networknya bekerja, dan saya mencoba-coba mengimplementasikan neural network sederhana dengan layer deconvolutional tapi akurasinya masih terlalu rendah.

Kesulitan utama dalam mengerjakan CTF seperti ini adalah: memilih soal untuk dikerjakan. Ada beberapa soal yang dari awal sepertinya sudah terlihat sangat sulit, tapi ternyata mudah (misalnya soal ca), dan karena sudah merasa akan ribet, kami jadinya tidak menyelesaikannya. Beberapa soal lain terlihat sulit dan memang sangat sulit (misalnya convolutional) dan saya merasa ini hampir mustahil selesai sehari (dan memang semua tim gagal menyelesaikan ini).

Di sisi lain: kadang soal sulit bisa memiliki solusi sederhana yang tidak diharapkan pembuat soal. Team PDKT berhasil menyelesaikan soal Drone Racing yang mestinya sangat rumit (overflow file .class) dengan hanya menggunakan trik database.

Saya kagum dengan dedikasi team PDKT yang selagi lomba juga sambil mengurus final Cyber Jawara, jadi waktunya agak tersita karena sambil lomba juga mengurusi lomba di Indonesia. Semoga berikutnya akan ada lebih banya lagi yang kemampuannya setara, supaya minimal bisa membantu penyelenggaraan lomba di Indonesia.

Penutup

CTF offline seperti ini memang cocok untuk anak muda, sedangkan saya merasa agak lelah karena masalah perjalanan dan perbedaan time zone dan stamina tidak seperti waktu saya masih muda. Selain itu sudah lama juga saya tidak ikut CTF yang umum seperti ini, dua tahun terakhir saya hanya ikutan CTF Flare On saja. Mungkin kalau pekerjaan utama saya sehari-hari berhubungan dengan security, akan lebih mudah untuk update ilmu security/CTF setiap hari.

CTF seperti ini butuh tetap mengerjakan soal di hotel. Ini juga alasan saya tidak membawa Risna dan anak-anak, karena tidak akan bisa bersenang-senang di hari lomba. Sepertinya sekarang ini saya lebih cocok dengan CTF jangka panjang seperti Flare On supaya santai.

Pemain CTF juga harus belajar banyak hal baru, termasuk juga topik sulit seperti AI. Topik dasar enkripsi secara menyeluruh juga perlu dikuasai Saya sendiri jadi terinspirasi untuk akan lebih banyak menuangkan hal-hal seperti ini dalam bentuk tulisan (sudah lama tidak menulis teknis dasar).

Semoga di tahun-tahun berikutnya team Indonesia bisa lebih baik lagi.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.