CTF itu apa?, perlu belajar apa? cara ikut CTF?

sebelumnya saya hanya ingin memperkenalkan apa itu kompetisi security CTF (capture the flag). Posting ini akan membahas apa itu security CTF, apa manfaatnya ikut security CTF, seperti apa saja soal-soalnya, dan bagaimana caranya mulai ikut.
CTF adalah satu jenis kompetisi di bidang information security, biasanya formatnya ada 3: jeopardy, attack-defence, dan mixed. Dalam format jeopardy, kita diminta menyelesaikan berbagai task, dan mendapatkan poin, pemenangnya adalah yang poinnya paling banyak. Dalam format attack-defence, tiap team menyerang dan mempertahankan sistem komputer yang diberikan kepada team tersebut. Format mixed artinya campuran dari kedua itu (tergantung panitianya, mungkin ada aturan khusus).
Setiap kita menyelesaikan soal, kita akan mendapatkan sebuah string yang jadi flagnya (misalnya “{MyFlag}”), dan kemudian kita submit string tersebut ke sistem submisi, sebagai tanda bahwa kita berhasil menyelesaikan soalnya.

Manfaat ikut CTF

Selain menyenangkan (untuk refreshing), mengikuti CTF juga bermanfaat untuk menguji dan menyegarkan ilmu informatika (dari mulai networking, kriptografi sampai programming), ilmu mencari di Google (ilmu Google-fu), serta memaksa kita mengikuti perkembangan terbaru. Untuk Anda yang merasa jago dan sudah mengenal berbagai aspek komputer, inilah ajang untuk menguji kemampuan Anda.
Untuk Anda yang ingin jadi hacker, atau hobinya ngehack, ini adalah ajang legal tingkat dunia di mana Anda bisa menunjukkan kebolehan Anda. Perlu diingat, bahwa di sini Anda diminta untuk menyelesaikan tugasbukan menyerang server dengan DOS (denial of service attack). Di hampir tiap event CTF selalu ada yang melakukan ini. Ini sama saja seperti Anda diminta bertanding bersama dengan orang-orang, tapi karena Anda nggak mampu bertanding, Anda malah merusak tempat pertandingannya, sehingga tidak ada yang bisa bertanding di situ.
Di Amerika, beberapa team CTF tingkat atas dunia, seperti PPP (Plaid Parliament of Pwningdari Carnegie Mellon University) sangat dikenal di kalangan banyak perusahaan, sehingga “lulusan” PPP ini banyak dicari oleh perusahaan besar (seperti Facebook atau Microsoft).

Jenis soal

Saya akan membahas beberapa kategori yang biasanya ada: web, crypto, forensic, reversing, pwnables, dan misc. Biasanya dalam tiap kategori ada pointnya, yang menyatakan tingkat kesulitan soalnya, misalnya web100 lebih mudah dari web200.
Perlu dicatat bahwa semua soal dalam sebuah CTF jarang sekali bisa diselesaikan dengan tool standar. Contohnya: Anda tidak bisa menjalankan sqlmap langsung untuk mendapatkan akses via SQL Injection (biasanya panitia sudah merancang soalnya seperti itu). Jadi script kiddiesyang cuma bisa memakai tool akan segera berguguran.
Soal dalam kategori web biasanya adalah bagaimana masuk ke web site tertentu, atau bagaimana mendapatkan hak akses tertentu (misalnya dari user biasa mendapatkan hak akses admin). Cara masuk webnya bisa berbagai cara, misalnya bisa dari SQL injection, XSS injection, hash extension attack, dsb. Di sini keahlian yang dibutuhkan adalah pemahaman yang baik mengenai teknologi web.

Mau ikut CTF, perlu belajar apa?

Anda tidak perlu terpaku dengan apa yang saya tuliskan di sini. Cara termudah untuk memulai adalah dengan ikut CTF apapun, coba selesaikan, dan ketika gagal, bacalah writeupnya. Cara terbaik untuk memulai adalah dengan mencoba sendiri. Tapi jika kemampuan dasar Anda masih nol, memang Anda perlu belajar dulu hal-hal dasar. Misalnya jika Anda tidak tahu C dan Assembly, kemungkinan Anda bisa menyelesaikan soal reversing mendekat nol.
Untuk topik reversing dan exploit, kita perlu memahami assembly dan bahasa C. Sekarang ini kebanyakan soal diberikan dalam bentuk binary, dan kadang bisa didekompilasi menjadi C (dengan IDA Pro atau Hopper). Nah jika Anda tidak bisa membaca bahasa C, maka percuma bisa memakai dan menjalankan decompiler jika tidak memahami apa outputnya. Bahasa C ketika dicompile akan dikonversi menjadi assembly lalu di assembler menjadi file biner. Jadi saran saya: untuk topik reversing dan exploit, pahamilah dasar-dasar bahasa C, minimal sampai ke topik: memory allocation, pointer, function pointer.
Setelah bisa mengkompilasi program dalam bahasa C, cobalah reverse engineer sendiri program yang sudah dicompile itu, supaya mendapatkan feel bagaimana sebuah program dikonversi dari teks dalam bahasa C menjadi bahasa mesin. Setelah itu, cobalah membaca artikel-artikel mengenai exploit, misalnya tentang buffer overflow, heap overflow, dsb. Tanpa dasar bahasa C, akan sulit mengikuti topik-topik tersebut.
Dalam topik web, Anda bisa belajar teknologi web manapun (PHP, Python, Ruby, dsb). Anda bisa mulai dengan yang mudah, misalnya PHP. Cobalah menulis program sederhana yang memakai session, mengakses database, tanpa menggunakan framework (jadi pakailah PHP murni saja, jangan memakai Yii, Code Igniter, dsb yg sejenis). Secara tidak langsung, di sini Anda perlu belajar memakai database (belajar dasar-dasar SQL, select, insert, update, dsb). Lalu cobalah mengeksploit aplikasi Anda sendiri (sql injection, session fixation, dsb).
Di sisi client, Anda perlu belajar HTML dan JavaScript (wajib, karena ini bahasa de facto untuk aplikasi sisi client). Di sisi client ini ada beberapa yang perlu dipelajari dari sisi security, misalnya XSS. Pahami juga mengenai bagaimana client dan server berkomunikasi, artinya ini Anda perlu belajar tentang protokol HTTP. Anda harus paham hal-hal dasar seperti POST request, GET request, Cookie, dsb.
Meskipun saya menyarankan PHP, tapi pada banyak CTF, bahasa lain banyak dipakai. Konsep security dalam berbagai bahasa ini masih serupa, jadi pengetahuan dari satu bahasa bisa dipakai di bahasa lain.
Dalam topik forensic, kita biasanya diminta untuk mengekstrak data dari sebuah file. File ini bisa berupa disk image, bisa berupa network capture. Dalam hal ini, kita perlu tahu mengenai berbagai jenis filesystem dan tools-tools yang berkaitan dengan itu, tools forensik misalnya Sleuthkit dan Volatility. Untuk forensic yang berhubungan dengan networking (sebenarnya ini juga masuk dalam topik networking), Anda perlu memahami banyak protokol dasar, seperti misalnya HTTP, FTP, HTTPS, dsb. Cara memahami protokol-protokol ini, selain dengan banyak membaca adalah dengan mempraktikkan dengan mengcapture packet menggunakan wireshark dan membaca hasilnya.
Topik kriptografi adalah topik yang sangat abstrak, Anda harus belajar mulai dari enkripsi paling sederhana (rot13, xor, dsb), sampai topik yang rumit seperti RSA, dan bahkan topik kriptografi yang tidak standar lainnya. Berbagai tools standar (Seperti command line openssl) perlu dikuasai.
Hampir semua soal butuh programming untuk menyelesaikannya. Selain belajar bahasa C untuk masalah exploit dan reverse engineering, sebaiknya Anda belajar minimal satu bahasa lain. Kebanyakan orang menggunakan Python. Bahasa C bisa digunakan untuk menyelesaikan semua soal, tapi biasanya butuh waktu lebih lama untuk menulis program dalam bahasa C.  Contoh kecil saja: tanpa programming, bagaimana Anda akan mengekstrak teks untuk menyelesaikan soal seperti challenge ini?
Selain programming, kemampuan menggunakan shell (misalnya bash) dan tools-tools command line lainnya juga akan sangat membantu (misalnya: bagaimana mendapatkan MD5/SHA1 sebuah file). Sebenarnya menggunakan fitur-fitur shell juga adalah bentuk programming (ada loop, if dsb) tapi kemampuan dan kecepatan shell terbatas .
Akhir-akhir ini banyak algoritma ditanyakan, jadi pengetahuan mengenai berbagai algoritma dasar diperlukan. Contoh writeup di blog ini: Gas Stations (K Means), Web 200 SecuInside(CRC32)
Terakhir yang tak kalah penting adalah kemampuan menggunakan search engine (Google Fu). Ini sangat penting untuk mencari solusi soal. Kadang jawabannya langsung ketemu dengan Google, kadang kita perlu memodifikasi jawaban yang sudah ada. Cara terbaik untuk belajar memakai google adalah: jangan langsung bertanya pada orang ketika mentok. Cobalah habiskan waktu sejam, dua jam untuk mencari jawaban sendiri, dengan berbagai variasi kata kunci, kalau sudah menyerah, baru bertanya, plus sekalian tanya: bagaimana orang tersebut tahu jawabannya.
Perlu dicatat: kemampuan googling harus disertai kemampuan lain, misalnya jika sudah tahu  algoritma tertentu, kita tetap perlu bisa memodifikasi source codenya supaya sesuai dengan soalnya (butuh kemampuan programming).
Jika Anda sudah mulai “menyerah” melihat topik yang begitu banyak: perlu dicatat bahwa topik yang dipelajari juga berguna untuk dunia nyata. Keahlian forensik bisa untuk membantu teman yang datanya terhapus. Keahlian web bisa digunakan untuk membuat aplikasi web (dan mengetes/pentest aplikasi web).
Saya sendiri mendapatkan berbagai pengetahuan ini dari pengalaman saja. Pengetahuan networking karena kebetulan saya pernah jadi admin. Pengetahuan programming karena pekerjaan saya adalah programmer.  Sisanya adalah pengetahuan dari pengalaman sehari-hari. Data saya pernah hilang, jadi saya coba pelajari bagaimana proses recovery bekerja. Saya juga sering iseng membuat berbagai project pribadi yang sering saya buang (jadi cuma dapat ilmunya aja).
Cobalah juga membaca banyak writeup yang tersebar di berbagai penjuru internet. Ketika sudah dituliskan, semuanya tampak mudah, jadi kalau bisa: cobalah selesaikan sendiri soal tersebut. Jika Anda sudah membaca writeupnya, coba download soalnya, dan tanpa mencontek lagi coba selesaikan soal tersebut. Coba juga bayangkan juga: apakah kira-kira Anda bisa melihat apa yang dilihat oleh penulis writeup ketika melihat soal itu, tanpa diberi petunjuk apa-apa.
Ada juga CTF yang mengarsipkan semua soal plus scoringnya, misalnya hack.luarsipnya di sini. Jadi Anda bisa mendownload soal, menyelesaikan soal, koneksi ke server, mengecek flag Anda sudah benar atau belum (bedanya Anda tidak mendapatkan skor). Setiap tahun soalnya ada minimal 20 soal dan ada 4 tahun yang terarsip di situ, jadi minimal ada 80 soal yang bisa Anda coba.
Mengenai environment: kebanyakan orang menggunakan Virtual Machine (Silakan install Virtual Box atau VMWware). IDA Pro berjalan paling bagus di Windows, banyak tools command line bagus di OS X atau Linux, dan kebanyakan soal exploit adalah untuk Linux. Minimal mahirlah dalam menggunakan Windows dan Linux. Memiliki komputer dengan OS X boleh-boleh saja (silakan install Virtual Machine Windows dan Linux di dalamnya), tapi pemahaman mendalam mengenai OS X saat ini belum menjadi soal CTF.

Memberal_Force source from Rentjong CTF Team