Sebagian pihak ternyata “tidak terima” dengan pendapat saya di tulisan sebelumnya, bahwa event CTF (capture the flag) tertentu itu levelnya buruk. Mereka berpendapat itu hanya “pendapat sebagian orang saja”. Di tulisan ini saya akan membahas seputar dunia CTF, dan apa yang saya maksud dengan CTF Tingkat dunia. Buat Anda yang blank mengenai dunia CTF, bisa membaca perkenalan CTF oleh saya di posting ini.
Setelah membaca defense dari pihak Cyberjawara, yang penuh dengan kekonyolan, sampai tidak tahu harus mulai dari mana (contohnya: katanya tidak semua writeup dipublish publik karena pembuat soal tidak mengijinkan), saya memutuskan untuk memperkenalkan dengan gamblang dunia CTF bagi semua orang.
CTFtime
Saat ini tidak ada badan resmi yang memayungi seluruh CTF di muka bumi, tapi ada sebuah website yang bernama CTFtime yang dipercaya penyelenggara CTF di seluruh dunia. CTFtime dibuat oleh hacker Rusia ternama kyprizel (yang sudah jadi pembicara di DEFCON dan berbagai event lain). Para penyelenggara CTF dari seluruh dunia (Amerika, China, Jepang, dan berbagai negara lain, bahkan Iran) mendaftarkan lomba mereka di situs itu. Berbagai perusahaan tingkat dunia yang mengadakan CTF juga mendaftarkan dirinya di situs itu (misalnya Google dan TrendMicro).
CTF besar seperti DEFCON CTF juga terdaftar di ctftime. Bahkan SECCON yang menjadi tujuan akhir CyberJawara juga ada di CTFTime (tujuan akhir karena pemenang CyberJawara akan maju ke Cyber Sea Game dan pemenangnya maju ke SECCON, dan pemenang SECCON akan ke DEFCON, walau fakta terakhir ini tidak pernah disebutkan oleh CyberJawara).
Selain penyelenggara, semua team dan individu dari seluruh dunia bisa mendaftarkan dirinya di situs ctftime. Hacker kelas dunia seperti Geohot (hacker muda yang sangat terkenal, yang berhasil menjebol iOS, PS3, dll), tim tingkat dunia seperti PPP (dari Amerika), HITCON (dari Taiwan), b1oop (dari China), semua terdaftar di CTFtime.
Singkat kata: secara de facto ctftime diakui oleh semua penyelenggara dan peserta CTF tingkat dunia. Semua event CTF yang terdaftar di CTFTime yang online sifatnya gratis, tapi kadang ada event offline (seperti final DEFCON) yang mungkin perlu bayar biaya masuk.
Di CTFTime, kita bisa memberikan rating pada sebuah event CTF. CTF yang baik akan mendapatkan rating tinggi, dan CTF yang buruk akan mendapatkan rating rendah. Bisa dilihat bahwa tim CTF dan hacker tingkat dunia hanya mau bertanding di event CTF dengan rating tinggi. Perlu dicatat: rating ini selalu berubah, jika suatu saat penyelenggara menjadi kurang baik, ratingnya akan menurun, dan CTF tertentu yang memperbaiki diri, ratingnya akan naik.
Apa yang menyebabkan rating naik atau turun? Faktor utamanya adalah kualitas soal. Terdapat kesepakatan bersama mengenai soal yang buruk dan soal yang baik. Berbagai hal ini bisa dibaca di komentar banyak orang, tapi team PPP sudah merangkumnya dengan baik. Buat yang menjadi katak di bawah tempurung: ini team yang menang CTF DEFCON tahun ini dan tahun-tahun sebelumnya, jadi saya bukan mengambil nasihat sembarang tim.
Saya ulangi lagi bahwa semua orang bisa mendaftarkan tim mereka. Gratis, tidak ada biaya apapun, dan bisa daftar kapanpun, boleh masuk ke dalam beberapa tim (akan dikonfirmasi oleh pemilik tim). Saya terdaftar di dua tim Rentjong (yang kurang aktif tahun ini, tapi cukup aktif tahun-tahun sebelumnya), dan Play4Fun (yang baru dibentuk tahun ini). Rekam jejak tiap tim tercatat dengan jelas, dan kontribusi writeup juga tercantum dengan jelas.
Seperti diketahui bersama: CTF adalah ajang belajar, dan caranya belajar adalah dengan menuliskan apa yang berhasil kita lakukan supaya orang lain bisa belajar. Semua yang ikut CTF secara serius akan membaca berbagai writeups yang terdapat di CTFtime, yang lebih serius lagi akan berkontribusi menuliskan cara mereka menyelesaikan sebuah soal. (Writeup soal SECCON versi online juga ada).
Kenapa sebuah tulisan sangat penting? sebagian orang ikutan CTF tapi tidak benar-benar belajar. Ada yang mengemis flag di IRC, hanya agar dianggap hebat oleh teman-temannya. Dengan menuliskan cara kita menyelesaikan sesuatu, orang lain bisa mengetahui level kemampuan kita. Setelah itu kita juga bisa membandingkan dengan cara orang lain, apakah ada cara lebih baik, lebih singkat, lebih cepat dalam menyelesaikan sebuah masalah.
Konyol sekali kalo ada pembuat soal tidak mengijinkan ada writeup. Tidak ada hak pembuat soal untuk ini. Satu-satunya alasan mereka tidak ingin ada writeup adalah karena mereka malu dengan soal yang mereka buat.
Kita tidak harus memberikan nama asli kita dalam CTFTime. Jadi tidak ada alasan bahwa Anda tidak mendaftar karena takut masalah privasi Anda. Silakan gunakan nama ataupun nick apapun. Yang penting bukan nama atau identitas Anda. Yang penting adalah kontribusi Anda untuk dunia CTF. Walau tidak harus menggunakan nama asli, di berbagai tempat saya menggunakan nama asli saya karena saya merasa tidak ada yang perlu saya tutupi, dan saya tidak malu dengan prestasi saya.
Soal CTF
Soal CTF yang baik merupakan refleksi dari dunia nyata. Berbagai CTF yang baik akan membuat soal berdasarkan varian eksploit atau bug yang baru ditemukan secara publik. CTF adalah ajang belajar dengan harapan ilmunya bisa dipakai di dunia nyata. Contohnya dulu ada soal yang berhubungan dengan heartbleed, berhubungan dengan keanehan MD5 di PHP.
Satu hal yang sangat dibenci semua pemain CTF tingkat dunia adalah guessing alias main tebak-tebakan. Sebuah soal yang baik harus memiliki hint yang cukup jelas di dalam soal itu sendiri, secara teknis (bukan pengetahuan eksternal seperti apa nama team bola pendukung kota Malang). Untuk persoalan web, lebih bagus lagi jika sebuah soal memiliki source code, sehingga tidak ada tebak-tebakan (kecuali hintnya sudah jelas). Soal yang tidak meniru soal sebelumnya, atau meniru tapi dengan varian yang clever, akan dianggap baik karena sifatnya kreatif.
Soal kategori steganografi bukanlah soal termudah, dan juga bukan soal yang mendidik. Kategori ini tadinya marak, tapi makin dibenci oleh banyak orang. Ada ribuan cara untuk menyembunyikan sesuatu, dan hal ini jarang sekali terpakai di dunia nyata.
Untuk persoalan tingkat pemula, biasanya yang diberikan adalah varian dari sebuah soal di CTF Lain, tapi bukan soal yang sama persis. Ini bagus buat pemula karena menguji apakah sudah benar paham dengan sisi teknisnya atau hanya sekedar bisa meniru saja? Pembuat soal yang skillful bisa mengubah soal lain supaya terlihat berbeda walau intinya sama.
Contoh soal sejenis ini adalah varian SQL Injection dengan filter tertentu, misalnya soal Killy The Bit yang perlu memakai XOR untuk menyelesaikannya, perhatikan juga bahwa nama challengenya (memakai kata bit) memberikan petunjuk. Saya juga punya contoh soal seperti ini (akan dibahas di posting berikutnya).
Jika ada soal forensik atau misc yang unik, buatlah agar yang menyelesaikan soal bisa menggunakan logika yang wajar untuk menyelesaikannya. Berikut ini contoh soal Boston Key Party 2015: kita diberi file PCAP, dan tercantum dengan jelas bahwa itu paket USB (bukan paket jaringan seperti kebanyakan CTF Lain). Seluruh komunikasi tercantum jelas (dari mulai device dihubungkan ke komputer, sehingga USB descriptor kelihatan, jadi tidak dari tengah-tengah, tidak harus menebak apa jenis devicenya), sekarang logika berikutnya adalah mencari tahu apa gerakan mouse. Di titik ini logika kita adalah mencari tahu tentang paket USB mouse (bisa dipelajari dalam hitungan menit karena paket USB Mouse ini tidak rumit), dan sisanya adalah kemampuan kita memproses file tersebut.
Soal yang dianggap sangat baik biasanya dalam kategori reversing (reverse engineering) dan exploit. Bagian reversing ini menarik karena selain mengajari penggunaan debugger, juga mengajarkan kita berbagai tool alternatif seperti Intel PIN atau theorem prover (misalnya Z3) untuk mengotomasi sebagian prosesnya.
Kategori eksploitasi ini menjadi titik tertinggi di berbagai CTF (termasuk DEFCON). Di sini panitia juga harus teliti dalam membuat soal dan menghosting soal. Contohnya: seseorang sudah membuat soal yang baik tapi tidak bisa diselesaikan karena panitianya salah mensetup environment (contoh: ASLR, atau salah versi library, atau salah compile dengan opsi yang salah). Dalam kehidupan nyata, inilah sesuatu yang sangat praktis (walau 95% pentester di Indonesia hanya sekedar memakai eksploit orang lain).
Soal yang baik juga harus bisa diselesaikan dalam time frame lomba. Sebagian besar kompetisi waktunya 2 hari, tapi ada yang waktunya hanya beberapa belas jam, dan ada kompetisi seperti Flare-On yang memiliki waktu lebih dari sebulan. Hal ini memperhitungkan juga berbagai hal, misalnya apakah seseorang perlu mendownload file soal berukuran besar, apakah harus mendownload tool berukuran besar, atau harus melakukan pemrosesan yang cukup lama?
Setelah soal berhasil diselesaikan, sebuah flag akan didapatkan. Saran yang penting adalah: flag haruslah tampak seperti flag, biasanya dengan format tertentu, misalnya “flag{abcdef}” dan dengan jelas menyatakan jika itu adalah pengecoh “flag{this_is_not_the_real_flag}”. Jangan menggunakan flag yang bisa “ngasal” alias bisa apa saja.Janganlah flag selalu berupa teks, lalu kita diminta menambahkan sendiri prefix flagnya, karena flagnya bisa apa saja.
Contoh flag ngasal plus stegano yang tidak jelas akan membuat peserta sulit tahu kapan harus berhenti menyelesaikan soal. Contoh: ada file dalam zip berpassword, setelah dibuka zipnya ada file gambar bertuliskan “Selamat Pagi”. Apakah itu flagnya? mungkin saja, mungkin juga ternyata di dalam file itu ada informasi EXIFnya berisi URL. Di URL itu ada gambarnya dengan tulisan “Selamat Siang”. Apakah itu flagnya? ternyata di dalamnya ada konten dengan steganografi LSB, keluar file teks, apakah itu isi FLAGnya? mungkin saja, mungkin harus di ROT13 dulu. Anda mulai melihat masalah di sini? peserta harus menebak dan menebak. Lalu kalau terakhir keluar gambar peta dari satelit dengan satu lokasi (ID-SIRTII), jadi apakah itu flagnya? atau mungkin alamatnya? koordinatnya? Apakah benar cuma satu langkah saja sudah selesai?
Pemula
Jadi bagaimana bisa belajar? dari berbagai writeup. Orang bisa belajar dari tulisan orang lain yang menjelaskan solusi sebuah persoalan dengan baik. Dari kumpulan writeup di CTF time (yang jumlahnya sudah ribuan), pemula bisa mulai membaca writeup soal dengan bobot rendah, lalu jika sudah bisa, lanjutkan ke level lebih tinggi.
Mentok di sebuah soal CTF? Search di google dengan menambahkan kata “ctf writeup”. Contohnya: Ada soal aneh yang memakai strcmp dan php? search google “php strcmp ctf writeup”. Atau mentok dengan soal faktorisasi RSA? baca sedikit dulu apa istilah-istilah dalam RSA (misalnya apa itu exponent, modulus), lalu baca soalnya, apa yang mencurigakan? exponentnya rendah? search “small exponent attack rsa ctf writeup”
Kurang nyaman dengan CTF berbatas waktu? ada banyak CTF yang terbuka selamanya. Contohnya di Indonesia adalah Botani CTF (saya sama sekali tidak berafiliasi dengan CTF ini) . Kalau mentok ada banyak orang Indonesia yang bisa ditanya.
Tidak setuju?
Tolong jika Anda mau berargumen, mengkritik, berusaha menantang saya, coba gunakan nama asli Anda. Jujur juga jika Anda berhubungan pada posisi dengan pihak yang saya kritik (nggak usah sok mengaku sebagai pendukung saja). Saya sudah terbuka mengenai siapa diri saya, apa prestasi, kelebihan dan kekurangan saya. Lucu sekali kalo ada yang menantang, tidak pakai nama asli, mengejar terus. Memangnya kalo ada orang di pinggir jalan yang tidak Anda kenal sama sekali, ngajak berantem akan Anda bales?
Kadang saya bales juga sih kalo gemes, tapi biasanya saya ignore saja. Kalau saya balaspun, kadang akhirnya saya yang tepok jidat. Contohnya: di posting sebelumnya ada yang keukeuh dengan kehebatan satu soal, tapi setelah dijawab bahwa hasilnya cuma sebuah gambar, ternyata orang itupun tidak tahu kalau FLAG harus berupa karakter (jadi sebenarnya orang itu ikut CTF beneran atau nggak pun saya nggak tau). Beginilah risiko berdebat dengan orang nggak jelas: jadi nggak nyambung, waktu saya terbuang.
Kalau ada yang membaca komentar di posting sebelumnya, dan heran kenapa saya tidak lagi membalasi komentarnya: orang-orang yang berkomentar ini tidak berani menuliskan siapa dirinya. Saya tidak perlu tahu siapa nama aslinya, tapi berikanlah link blog write up, atau link nama team di CTF Time. Sesuatu untuk sekedar menunjukkan bahwa mereka tahu apa itu CTF tingkat dunia. Buat apa berargumen dengan orang yang bahkan tidak tahu kalau kualifikasi DEFCON itu online dan gratis? tapi sok menyebut-nyebut DEFCON?
Penutup
Saya tidak merendahkan orang Indonesia, ada banyak CTF Indonesia yang baik. Tapi benar-benar sulit membuat kritik. Kritik versi pedas saya tulis karena sudah gemes dengan saran dari teman yang diignore. Padahal mereka sudah susah payah dan dengan sopan menyampaikan kritik. Silakan baca contohnya kritik dari Fariskhi Vidyan yang dituliskan di komentar bagian ini karena dia sudah tidak tahu lagi bagaimana reach out ke pihak Cyberjawara yang sangat defensif.
Lalu berikutnya adalah: suka sekali membalas kritik dengan menyerang orang yang mengkritik. Ketika saya tidak melink prestasi CTF saya, keahlian saya dipertanyakan, sedangkan kalo dilink, saya dibilang sombong.
Kalau saya ikut CTF-nya lalu protes, akan dibilang keluhan sakit hati orang yang kalah. Kalau saya tidak ikutan supaya netral sebagai pihak luar, dibilangnya: nggak ikutan aja komentar.
Ketika saya tidak menunjukan di CTF mana saya berkontribusi, orang mempertanyakan “kenapa Anda nggak ikutan membuat soal CTF?”. Ketika menyebutkan CTF di mana saya berkontribusi, komentarnya “Anda beriklan memuji sebuah CTF tertentu” (padahal saya menyumbang soal secara gratis, tanpa imbalan apapun). Selain itu saya tidak satu CTF saja, saya menunjukkan banyak CTF di Indonesia yang bagus (dan kebetulan ada satu yang sedang berlangsung), yang dibuat oleh orang-orang yang belum pernah saya temui di dunia nyata, dan jika berteman di Facebook pun mungkin hanya 1-2 kali berkirim pesan dalam setahun (jadi bukan karena saya membela teman).
Saya sangat kagum dengan passion teman-teman yang aktif di CTF Indonesia, mereka mau menuliskan writeup, mau ikut membuat soal untuk CTF lokal mereka di universitas masing-masing. Tapi sedih juga dengan CTF cyberjawara ini, di mana mereka kurang reach out ke orang yang kompeten, padahal orang-orang kompeten ini akan bersedia jika diminta menyumbang soal secara gratis. Kalau ada pembuat soal yang takut writeupnya dipublish, maka saya yakin teman-teman ini justu akan bangga dan senang writeupnya dipublish.
Saya menyarankan para pemula untuk lebih banyak mengenal dunia CTF, dan ikut event internasional lain. Ikuti juga event CTF dua-harian (biasanya weekend) terbaru supaya selalu tahu perkembangan terbaru. Jangan karena buatan Indonesia pasti harus dibela (padahal ada banyak buatan Indonesia yang lain). Terbukalah ketika menerima kritik, perluas wawasan selalu, ikut CTF bareng-bareng, perluas pertemanan.
Para pembuat soal juga sebaiknya ikut CTF internasional, dan berusaha memahami berbagai soal CTF (jangan membaca write up aja). Ilmu para pembuat soal juga harus selalu up to date, jangan stuck bikin soal photoshop terus.
Seperti sudah saya tuliskan berkali-kali di tulisan saya yang lain, saya sudah termasuk “tua” untuk kategori pemain CTF. Berbagai kegiatan CTF tidak bisa dilakukan karena saya berkeluarga dengan dua anak dan saya juga punya pekerjaan full time. CTF semacam flare on (dari Fireeye) yang waktunya lama (lebih dari sebulan) tahun lalu sempat saya kerjakan. Silakan baca tulisan pengalaman saya ikut flare-on di sini, sebentar lagi akan ada lagi, semoga saya sempat ikutan tahun ini.
Saya berharap yang muda bisa belajar lebih lagi, kalian punya lebih banyak waktu lebih banyak tenaga, kalian punya lebih banyak kesempatan (jumlah CTF di dunia ini sangat banyak). Saya berharap juga agar jangan cuma ikutan, tapi para peserta mau menuliskan writeup semakin banyak lagi.
Saya berharap juga para panitia/penyelenggara agar mau menerima kritik, agar tidak banyak pemula yang tersesat dalam belajar CTF, nanti malah jadi belajar photoshop dan jadi graphic designer (walau tidak salah juga, tapi melenceng dari tujuan).
wah sangat bermanfaat informasinya gan, terimakasih gan