Apa itu CTF?

CTF (Capture the flag) atau lebih tepatnya lagi: Security CTF adalah kompetisi dalam bidang security di mana para peserta diminta mencari flag (berupa string tertentu) yang disembunyikan atau dilindungi dengan cara tertentu. Event CTF biasanya gratis, sebagian besar online dan diselenggarakan berbagai pihak. Penyelenggara CTF bisa berupa perusahaan baik kecil maupun besar (seperti Google, Facebook), Universitas, pemerintah, ataupun organisasi lain.

Sudah ada beberapa tulisan yang saya buat mengenai CTF:

Untuk apa belajar CTF?

Ada banyak alasan:

  • Mengasah ilmu dan untuk mengupdate diri dengan trend terbaru
  • Bersenang-senang
  • Ajang bersosialisasi
  • Untuk CV

Saya sendiri mendapatkan beberapa tawaran pekerjaan pentesting karena aktivitas CTF saya, saya juga mendapatkan tawaran bekerja yang berhubungan dengan reverse engineering di beberapa perusahaan internasional setelah menyelesaikan tantangan Flare-On.

CTF, Pentest, Blackhat Hacking dan Pekerjaan security lain

Sebagian orang menyatakan tidak suka CTF karena soalnya mengada-ada. Sebagian soal CTF memang sangat buruk dan sangat jauh dari dunia nyata, beberapa CTF sangat baik, dan kebanyakan CTF berada di tengah-tengah. Biasanya soal CTF akan dicampur antara yang berlaku di dunia nyata (kadang disederhanakan) dan soal sederhana untuk pemula.

Sebagian pekerjaan di dunia security memang tidak pernah berurusan dengan hal yang teknis (atau minim sekali menyentuh bagian teknis) misalnya merumuskan kebijakan. Untuk Anda yang bekerja di bagian seperti itu maka CTF sepertinya tidak akan berguna untuk Anda. Tapi untuk Anda yang berhubungan dengan teknis dalam level apapun maka mengikuti CTF itu sangat baik. Jika tidak bisa atau tidak sempat untuk ikut CTF, minimal lihat dan baca writeup CTF . Jika tidak sempat membaca semua, bacalah write CTF yang baik saja (yang ratingnya tinggi di CTFtime).

Beberapa pertanyaan CTF memang sangat konyol. Contohnya ada CTF yang terlalu banyak membahas QR Code. Jika bosan dengan banyak pertanyaan semacam ini maka jangan kerjakan semuanya, bacalah topik dasarnya saja. Pengetahuan dasar topik QR memang dibutuhkan dalam pentesting tapi tidak dalam level yang diberikan oleh banyak CTF. Saya pernah mengetes mobile app yang melakukan scanning QR Code yang diprint oleh printer thermal. Saya perlu membuat QR Code baru untuk testing apakah bisa dilakukan injection via QR Code (atau IDOR).

Perkiraan saya saat ini sekitar 75% pekerjaan pentesting bisa dilakukan dengan tool otomatis (Acunetix, metasploit, sqlmap dan sejenis). Mungkin sekitar 10% berikutnya bisa dilakukan dengan sekedar fuzzing HTTP menggunakan burpsuite, tapi sisanya butuh keahlian ekstra seperti reverse engineering dan pemahaman akan enkripsi.

Sudah beberapa kali saya melakukan pentesting pada aplikasi mobile yang sudah ditest oleh perusahaan lain dan saya menemukan bug-bug yang cukup berbahaya yang tidak ditemukan pentester sebelumnya karena meraka tidak melakukan reverse engineering, hanya sekedar intercept traffic saja.

Contoh paling sederhana yang saya temui: ada string URL di aplikasi dan method yang memakai URL tersebut tidak pernah dipanggil (jadi URL tidak akan pernah muncul jika kita melakukan blackbox sniffing/intercept). URL ini dikonstruksi oleh sebuah method dengan menggabungkan beberapa string, jadi tidak muncul juga dari tool otomatis pemeriksa mobile app. Ternyata method tersebut tertinggal dari fase development, dan dari URL tersebut saya bisa melakukan SQL injection (URL lain ternyata sudah dicek dan aman di versi production).

Saya juga punya contoh lain yang melibatkan enkripsi. Ada aplikasi yang menggunakan enkripsi custom yang tidak bisa di-fuzz dengan burpsuite. Saya melakukan reverse engineering dan mengimplementasikan client sendiri dalam Python untuk fuzzing endpointnya, dan ditemukan bug fatal.

Tentunya tidak dijamin bahwa dengan menguasai reverse engineering maka semua bug akan ketemu. Tapi yang jelas lebih banyak bug akan ketemu. Ada bug yang saya temukan beberapa tahun kemudian karena github. Waktu pentest awal tidak mungkin bug itu ditemukan pentester dengan cara blackbox (kode sisi server tidak bisa dibuka/reverse), tapi ketika ada yang mengupload kodenya secara parsial di github, saya jadi bisa melihat kesalahan logika server (di sini terlihat kemampuan recon bisa terpakai di dunia nyata).

Kebanyakan pentester hanya melakukan testing teknologi yang itu-itu saja (PHP, Java, dsb), tapi saya sering menemukan hal-hal unik dan baru yang membutuhkan eksplorasi lebih lanjut. Contoh kecil: ada client yang memberikan sebuah aplikasi mobile yang ditulis menggunakan Ruby sedangkan tools untuk reverse engineering Ruby masih sangat terbatas, jadi soal CTF ini tidak terlalu mengada-ada.

Jika Anda seorang blackhat, dan masuk ke sebuah perusahaan, Anda butuh belajar banyak skill ketika sudah masuk. Contoh: jika Anda masuk bank, Anda akan perlu mengetahui berbagai teknologi tidak umum seperti AS/400, COBOL. Jika Anda ingin mencuri source code orang, Anda perlu tahu berbagai versioning system (CVS, GIT, Perforce, dsb). Keahlian ini kadang perlu dipelajari saat itu juga (on the spot). CTF mengajarkan kita bagaimana mempelajari teknologi tertentu dalam waktu singkat.

Contoh lain: jika link jaringan terlalu lambat untuk mendownload semua file kode dari sebuah perusahaan, mungkin Anda hanya ingin mencari key Amazon S3 supaya bisa mengakses file mereka dengan cepat dari luar. Keahlian melakukan pencarian key ini (baik dengan grep, dengan membaca kode) seperti mencari flag di CTF.

Biasanya CTF berlangsung singkat (hanya beberapa hari), sehingga banyak soal perlu disederhanakan. Batasan lain juga dilakukan oleh penyelenggara, misalnya tidak mungkin mereka menyebarkan key Amazon cloud karena bisa membuat mereka kehabisan ribuan dollar jika diabuse (meski ada banyak kasus nyata dimana key Amazon bocor dan perusahaan kehilangan ribuan dollar). Jadi jangan menganggap soal CTF terlalu luas: dunia sebenarnya masih lebih luas lagi.

Mungkin Anda merasa sudah jago, tapi hacker kelas dunia seperti Geohot masih mau ikut CTF baik sendiri maupun sebagai bagian dari tim PPP juga dalam CTF. Bahkan profesional yang bekerja di perusahaan seperti Fsecure saja masih mau ikutan CTF Flare On.

Topik CTF

Tidak ada satu kurikulum yang bisa mengajarkan kita mengerjakan semua soal CTF, karena banyak hal unik yang harus dipelajari on the spot saat CTF berlangsung. Tapi ada hal-hal dasar yang harus dikuasai untuk menyelesaikan sebagian besar soal dalam CTF.

Sebagian soal CTF bisa diselesaikan dengan satu keahlian saja, tapi kebanyakan soal lain butuh kombinasi beberapa keahlian. Contoh untuk menyelesaikan soal dalam ASIS CTF (dari Iran): my-ped diperlukan:

  • Keahlian forensik untuk identifikasi dan ekstrasi dasar
  • Kemampuan googling untuk mengetahui lebih lanjut mengenai ZPAQ
  • Kemampuan programming untuk memodifikasi kode

Sebagian topik tidak akan bisa dibahas di situs ini karena terlalu panjang dan luas. Contohnya topik Buffer Overflow sudah pernah saya tuliskan dan tulisan yang sudah panjang itu saja belum menyentuh hal-hal kompleks. Hal terbaik yang bisa saya lakukan adalah memberikan petunjuk apa yang perlu dipelajari, dan mungkin link yang lebih dalam tentang topik itu.

Cara terbaik belajar CTF adalah dengan membaca writeup terbaru dan mencobanya sendiri. Baca juga dasar teorinya sehingga jika bertemu soal serupa tidak akan bingung.

Materi yang saya tuliskan ini masih mungkin akan berubah, baik isinya urutannya, maupun organisasinya. Topik tertentu bisa saja berubah/berganti (dipisah atau digabung dari topik lain).

Contoh soal

Agar lebih mudah dipahami, saya akan melink ke berbagai contoh soal, dengan urutan sebagai berikut:

  • Soal yang sudah pernah saya kerjakan sendiri (jika memang ada yang berhubungan dengan materi itu)
  • Writeup lain dari Indonesia
  • Writeup berbahasa Inggris
  • Writeup berbahasa lain (gunakan Google translate)

Contoh soal yang sama mungkin akan saya tampilkan di dua topik berbeda jika memang berhubungan.

Google-Fu

Ini merupakan skill pertama dan paling utama dalam menyelesaikan CTF. Banyak soal CTF dasar bisa diselesaikan dengan keahlian memakai Google.

Programming

Sebagian soal CTF bisa diselesaikan tanpa programming sama sekali, sebagian lagi butuh keahlian minimal membaca program, dan sisanya hanya bisa diselesaikan dengan programming.

Linux/Unix

Sebagian besar soal CTF ditujukan untuk Linux atau memakai server Linux (atau Unix lain seperti FreeBSD). Pengetahuan dasar mengenai perintah dan struktur direktori Linux sangat diperlukan.

Encoding

Berbagai encoding seperti hex, base64 (juga base yang lain) merupakan hal dasar yang perlu dikuasai.

Enkripsi dasar

Enkripsi dasar (seperti substitusi, XOR, dsb), akan terpakai di banyak kasus, terutama reversing dan forensik.

Enkripsi tingkat lanjut

Contoh dalam kategori ini adalah berbagai enkripsi standar: RSA, DES, AES.

Random Number

Topik ini biasanya muncul bersama dengan topik enkripsi atau reverse engineering.

SQL Injection

Topik ini hampir selalu muncul bersama dengan soal Web (tapi tidak selalu juga, contohnya soal ini di Google CTF yang muncu di aplikasi mobile). Karena topik ini bisa menjadi sangat besar, maka saya pisahkan di halaman sendiri.

Steganografi

Steganografi adalah ilmu menyembunyikan data dalam data lain. Karena ada 1001 cara untuk melakukan hal ini, maka biasanya ini sangat tebak-tebakan, walau kadang ada juga soal yang bagus.

Recon

Reconnaissance intinya adalah mencari informasi tentang target dengan tools eksternal (seperti misalnya google search, DNS query), ini juga agak tebak-tebakan.

Data Interchange Format

Yang termasuk dalam topik ini: XML, JSON, Protobuf, dsb.

Format File dan Forensik

Soal dalam kategori ini adalah mengekstraksi informasi dari sebuah file atau paket jaringan yang berhasil disniff.

Beberapa format file dasar akan dijelaskan (seperti JPG, PNG, PDF), plus berbagai tool untuk manipulasi file.

Web

Soal dalam kategori ini biasanya berupa web app yang perlu kita eksploit/bypass. Bagian ini sangat praktis, dan ilmunya biasanya berlaku untuk pentesting sehari-hari.

Materi web app ini sangat luas, misalnya SQL Injection, XSS, Local File Inclusion/RCE, dan kadang ada materi yang khusus untuk bahasa tertentu.

Networking

Beberapa protokol non HTTP muncul di CTF (seperti protokol Tor, FTP, BitTorrent, dsb). Hal low level seperti port knocking juga pernah muncul

Reverse Engineering

Reverse engineering adalah kegiatan membongkar sebuah program. Bersama dengan topik exploit, ini merupakan topik paling advanced dalam sebuah CTF. Semua

Exploit

Setelah melakukan reverse engineering, kita bisa menemukan celah untuk bisa dieksploitasi.

Campuran

Beberapa contoh soal yang memerlukan gabungan beberapa pengetahuan.

Resource

Link ke berbagai resource CTF, baik itu panduan, tools, dan buku.

Copyright © 2009-2010 Yohanes Nugroho