Salah satu hal yang sangat penting dalam bidang security adalah Reverse Engineering (RE). Hal-hal lain juga banyak yang penting, misalnya keahlian networking, programming, crypto, forensic, dsb tapi RE menjadi dasar bagi banyak hal dalam bidang security terutama tingkat lanjut. Dalam berbagai security CTF, nilai untuk RE dan pwning sangat tinggi dibanding challenge lain.
Apa sih reverse engineering (RE) itu? RE adalah proses untuk membongkar bahan dan teknologi yang ada pada suatu benda. Orang bisa mereverse engineer aneka macam hal, misalnya resep masakan atau benda elektronik, atau program. Tentunya dalam konteks ini, yang dimaksud adalah software reverse engineering, yaitu proses bagaimana kita bisa mengetahui algoritma program (atau source codenya jika mungkin).
Salah satu hal dasar yang dipakai bidang security adalah exploit. Para pentester memakai eksploit untuk masuk ke sistem, demikian juga para cracker. Exploit untuk berbagai OS komersial tertutup (Windows, OSX, iOS) pasti dihasilkan dari RE. Bahkan yang open source pun kadang butuh sedikit RE untuk membuat exploitnya (untuk memastikan berbagai address yang dihasilkan compiler).
Meskipun RE ini sangat penting, tapi sedikit yang mau dan bisa melakukannya. Kebanyakan sudah menyerah ketika memulai. Di posting ini saya ingin berusaha memotivasi orang-orang Indonesia yang tertarik bidang security, supaya levelnya naik nggak sekedar menyerang aplikasi web saja.
RE memang sulit, sangat teknis, butuh ketekunan kita harus mendalami sampai level kode mesin, sedangkan topik seperti SQL injection bisa dijelaskan dengan sangat mudah, dan bisa dikuasai dalam hitungan jam. Tapi apakah Anda memang hanya ingin jadi script kiddies saja? memanfaatkan exploit buatan orang selalu?
“Did you write that exploit yourself?”
“I had an hour”
“What you just pull code from Rapid 9 or some shit since when did you become a script kiddie?”
“I repeat I had an hour”
Mr Robot eps1.5_br4ve-trave1er.asf
Buat yang nggak ngerti: dia memakai “Rapid 9” karena sepertinya nggak boleh menghina Rapid 7 perusahaan security yang membuat Nexpose dan Metasploit yang banyak dipakai pentester dan juga script kiddies.
Sebagian juga mungkin menganggap: buat apa RE? bidang security saya nggak ada hubungannya dengan RE sama sekali: saya nggak ngurusin virus komputer ataupun malware. Saya cukup memakai exploit buatan orang saja. Saya nggak suka ikutan CTF yang ada reverse engineeringnya. Saya nggak akan membongkar software baru/router baru/device baru ataupun apapun yang berhubungan dengan IoT (Internet of Things). Saya nggak akan mengurusi web app yang memakai .NET ataupun Java (contoh pentester yang mengurusi kode low level .NET di aplikasi web). Saya nggak akan mempelajari protokol sebuah aplikasi. Saya juga nggak mengurusi mobile app untuk platform manapun. Karena itu semua keahlian RE buat saya nggak berguna.
Kalau memang Anda mau membatasi scope keahlian Anda secara strict tanpa menyentuh RE, ya Anda memang tidak butuh RE. Anda bisa berhenti membaca di sini sekarang.
Sebelum masuk ke bagian yang agak teknis. Saya berpendapat bahwa keahlian RE ini amat sangat penting untuk cyber defense. Jika kita membeli semua software untuk bertahan dan menyerang, siapa yang tahu bahwa software yang kita beli itu tidak ada backdoornya jika tidak kita bongkar (RE)?. Beberapa waktu yang lalu ketika Hacking Team dijebol, baru diketahui bahwa software keamanan yang mereka jual (untuk menyadap/menyerang orang lain) ternyata ada backdoornya juga. Padahal client Hacking Team ini adalah lembaga pemerintah. Oh iya, dari bocoran Hacking Team, bisa dilihat juga bahwa harga sebuah exploit zero day mencapai ratusan juta rupiah (puluhan ribu dollar).
Sekarang saya contohkan penggunaan RE satu bidang saja yang praktis dan dibutuhkan: mobile app. Sekarang ini dengan maraknya mobile device, keahlian RE untuk mobile app sangat dibutuhkan. Dari beberapa app yang saya test: tanpa RE, banyak bug bisa lolos.
Testing standar yang dilakukan banyak orang yang tidak melakukan RE adalah blackbox testing. Testing ini dilakukan dengan memonitor traffic dari device ponsel ke Wifi access point (dan mungkin menginstall dulu root cert di device jika protokolnya memakai SSL). Jika protokol yang dipakai adalah HTTP biasa (baik dengan SSL maupun tidak), maka langkah berikutnya adalah fuzzing (mencoba-coba sql injection dsb).
Teknik blackbox ini bisa gagal dalam banyak app. Pertama ada aplikasi yang memakai SSL Pinning, dan jika kita install root cert palsu, tetap tidak akan mau melakukan koneksi. Lalu meskipun protokolnya HTTP biasa (tanpa SSL sekalipun), jika aplikasi menggunakan HMAC untuk menandatangani requestnya, seperti ini:
aksi?a=1&b=2&hmac=xxyyzz
Jika kita berusaha mengganti satu byte saja, maka requestnya akan langsung ditolak tanpa HMAC yang benar. Jika kita tidak bisa mereverse engineer caranya menandatangani request tersebut, maka fuzzing tidak bisa dilakukan.
Apalagi jika ternyata protokolnya tidak memakai HTTP, tapi socket langsung, dan aplikasi menggunakan custom encryption (misalnya sekedar mengenkrip dengan AES dengan kunci yang tetap), maka blackbox testing tidak berguna sama sekali. Pernah ketemu aplikasi semacam ini di aplikasi mobile banking dan ternyata ada bug super penting di mana kita bisa mentransfer uang dari rekening orang ke rekening kita. Bug ini sebenarnya super konyol, jika memakai HTTP, requestnya kira-kira:
transfer?from=rekening1&to=rekening2&amount=1000
Tapi di sisi server tidak divalidasi bahwa rekening “from” adalah benar milik user tersebut (seorang user bisa punya beberapa rekening). Jika requestnya menggunakan HTTP dengan testing sedikit, bug ini akan ketahuan, tapi karena requestnya menggunakan socket dan paketnya formatnya tidak standar (bukan XML atau JSON), dan menggunakan enkripsi (AES), maka bug ini tidak tertangkap sampai cukup lama.
Jika Anda beruntung, Anda bisa melaporkan hasil blackbox testing ke client, dan app tersebut tidak pernah ada yang membongkar, jadi Anda aman-aman saja, tapi jika suatu saat dibongkar oleh orang lain, reputasi Anda bisa jatuh.
Sekitar 1.5 bulan yang lalu, ada challenge RE yang namanya flare-on.com yang diberikan oleh perusahaan security besar di Amerika, FireEye. Sebenarnya challenge ini mirip dengan CTF biasa, yang membedakan adalah waktunya: sekitar 6 Minggu, dan tidak ada sistem scoring. Jumlah soal ada sebelas. Semua yang bisa menyelesaikan sampai soal terakhir adalah pemenang.
Karena waktunya 6 Minggu, maka ada cukup banyak waktu untuk siapapun untuk berpartisipasi. Orang tercepat bisa menyelesaikan semua soal ini dalam 27 jam.
Walau katanya dia perlu begadang untuk itu:
Biasanya jika ada CTF, sebagian akan beralasan: “kebetulan weekend saya nggak bisa”, atau “sayang pas hari kerja”, dsb. Untuk flare-on, silakan cari waktu sendiri dalam 42 hari itu. Alasan lain lagi: “saya belum pernah reversing android/.net/apapun”, “perlu waktu buat download emulator Android”, dsb. Lagi-lagi dalam 42 hari Anda bisa sempat belajar dulu, sempat mendownload tool apapun yang dibutuhkan.
Yang paling penting adalah: Anda punya niat atau nggak
Karena waktunya 6 minggu, ada banyak tweet yang berhubungan dengan flare on ini. Kita bisa melihat jalan dan perjuangan orang-orang yang melakukan reversing. Dari berbagai tweet ini, kita bisa belajar beberapa hal.
Contents
Bersabarlah
Kadang butuh berhari-hari untuk satu soal
#FLAREOn 11 was brutal. A dozen ways to go about it; a good choice to end on. I took the slow road of literally days of reading trace logs.
— Brian Baskin (@bbaskin) September 5, 2015
Single stepping untuk menelusuri itu butuh kesabaran tinggi. Tapi sebenarnya menurut saya reversing itu lebih jelas daripada harus mencoba-coba satu persatu parameter aplikasi web untuk testing berbagai bug yang mungkin.
Luangkan waktu
Punya anak bukan jadi halangan, apalagi kalo belum punya anak.
Get kid in bed. Open laptop. Start working on #FlareOn challenges
— m0n0sapiens (@m0n0sapiens) August 1, 2015
Saya sendiri santai mengerjakan ini dan bisa selesai dalam beberapa hari. Bahkan saya sempat jalan-jalan dulu ke Chiang Mai Night Safari hampir seharian penuh. Jika anak sedang tidur, mudah melakukan aktivitas.
Berlatihlah terus
Meskipun merasa sudah bisa, berlatihlah terus. Jangan sombong kalau baru bisa mengeksploit satu overflow. “Malware Protection team lead @FSecure” saja masih mau berlatih.
#flareon challenge *finally* solved. Took way too long… OTOH, I can't recall the last time I've improved my reversing skills this much 🙂
— Timo Hirvonen (@TimoHirvonen) August 6, 2015
Cari pendukung
Saya beruntung memiliki istri yang mendukung segala keisengan saya. Dan saya bukan satu-satunya yang beruntung seperti ini:
My wife knows more steganography than yours now #FlareON
— m0n0sapiens (@m0n0sapiens) August 8, 2015
Tidak selamanya Anda akan jadi newbie
Mungkin akan butuh waktu untuk belajar, tapi jika rajin, Anda akan bisa. Ini contohnya yang baru memulai belajar setahun sebelumnya
#FLAREon @nickharbour Finally finished the challenge, just over one year after my first attempt at RE via Xeno's Intro to x86 course 🙂
— Darien Huss (@darienhuss) August 23, 2015
Mulai dari mana?
Artikel ini akan saya tutup dengan petunjuk bagaimana belajar reversing.
Karena reversing adalah membaca kode, maka pertama Anda perlu belajar memprogram dulu dalam bahasa yang ingin Anda reverse. Jika ingin reversing Android, maka belajarlah Java. Jika ingin reversing kode mesin, belajarlah C dan atau Assembly. Anda bisa dengan cepat menggunakan tool-tool yang ada, misalnya apktool, dex2jar, JD-GUI untuk mengembalikan sebagian besar kode sebuah APK Android ke versi Java. Tapi jika Anda tidak bisa membaca kode bahasa Java percuma saja.
Resource yang bagus untuk Intel X86 adalah tulisan Xeno. Jika Anda sudah bisa menggunakan debugger, disassembler, decompiler, tapi tidak memahami yang Anda lihat, maka percuma saja, karena itu sebaiknya Anda punya dasar yang baik.
Jangan terpaku pada satu tutorial, pakailah Google, karena sekarang ini ada banyak informasi tersebar di Internet. Sebuah tutorial tidak akan cukup untuk mengajari semuanya. Saya kadang heran dengan banyaknya pertanyaan yang datang ke saya yang sebenarnya bisa di-Google. Ini bukan jaman kakek nenek di mana informasi harus dicari di kertas secara manual.
Sebagai pemberi semangat, carilah app untuk dibongkar dengan tujuan fun. Saya kadang membongkar game mobile jika ingin mendapatkan poin lebih banyak (dan tidak ingin membeli). Atau kadang saya iseng membongkar aplikasi yang sedang populer. Coba juga lihat berbagai app yang dipakai sehari-hari, pelajari protokolnya (misalnya bagaimana protokol Whats App, atau Line?).
Selamat membongkar kode. Saya yakin Anda bisa belajar kalo memang mau tekun. Tidak ada kata terlalu muda atau tua untuk belajar (tahukah Anda kalau Geohot pertama kali mengunlock iPhone di usia 17 tahun?). Buat Anda yang sekarang ini targetnya cuma mau jadi carder, ayo jadi lebih baik lagi.
Inspiring pak tulisannya,
Terutama buat nyubi di dunia security seperti saya ini…
🙂
sangat inspiratif sekali, karena masih newbie maen ollydbg
nyesel baru sekarang nemu blog ini 😀
inspiratif.
Nice Article, then.
ironi memang terlihat bahwa rata-rata hacker di indonesia gak bisa ngoding, yang akhirnya hanya menggunakan konsep exploit yang sudah ada.
terinspirasi yakin .. makasih bang!
Kebanyakan Resource pakai bahasa inggris, ini yang susah buat saya.