Reverse Engineering

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?

mrrobot

 

“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.

nothing_wrong_here_by_midnightravenblaz17-d6wsno7

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.

photo106997557174052850

Walau katanya dia perlu begadang untuk itu:

photo106997557174052851

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

photo106997557174052858

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.

Bersabarlah

Kadang butuh berhari-hari untuk satu soal

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.

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.

photo106997557174052846

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.

Cari pendukung

Saya beruntung memiliki istri yang mendukung segala keisengan saya. Dan saya bukan satu-satunya yang beruntung seperti ini:

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

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.

search

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.

canlearn

6 thoughts on “Reverse Engineering”

  1. Nice Article, then.
    ironi memang terlihat bahwa rata-rata hacker di indonesia gak bisa ngoding, yang akhirnya hanya menggunakan konsep exploit yang sudah ada.

Tinggalkan Balasan

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.