Reverse Engineering Aplikasi iOS

Sudah lama saya menuliskan tentang reverse engineering Android tapi sampai saat ini belum menuliskan untuk iOS. Tulisan ini akan memperkenalkan cara reverse engineering aplikasi iOS dengan berbagai pendekatan. Tujuan utamanya di sini adalah untuk pentesting. Reversing untuk tujuan lain (misalnya Tweak development) sebagian akan sama, tapi masih butuh usaha dan tool ekstra dan hanya akan saya bahas sekilas.

Mesin macOS dan XCode

Memiliki mesin macOS akan sangat membantu dalam reverse engineering. Mesin ini bisa fisik asli dari Apple (Macbook, MacMini atau yang lain), mesin tidak resmi (Hackintosh), atau bahkan Virtual Machine. Pengunaan utamanya adalah untuk menjalankan Xcode terbaru dan iTunes.

Sebenarnya ini tidak 100% wajib, karena kebanyakan tool bisa berjalan di OS Lain. Misalnya di Linux saya memakai libimobiledevice untuk menginstall IPA, membaca log dari device, dsb. Tapi biasanya jika ada iOS baru, berbagai tool di luar OS X akan berhenti bekerja sampai beberapa hari atau bulan, menunggu developernya memahami apa yang diubah Apple dan bagaimana memperbaikinya.

Device iOS dan Simulator

Di dunia Android, kita bisa menjalankan hampir semua APK Android di Emulator kecuali beberapa yang butuh akses hardware tertentu. Emulator Android mengemulasikan keseluruhan hardware dan bisa menjalankan APK meskipun APK tersebut memakai kode biner ARM/ARM64.

Tapi saat ini tidak ada emulator iOS yang bisa diakses umum dengan mudah. Hanya ada satu perusahaan bernama Correlium yang menyediakan emulator dan inipun saat ini clientnya masih sangat dibatasi. Masih lebih mudah dan murah membeli iPhone bekas daripada mendapatkan akses ke Correlium.

Apple hanya menyediakan simulator untuk x86, artinya kita harus mengcompile khusus source code kita supaya jalan di simulator yang disediakan. Jika kita mendownload IPA dari App Store, binarynya pasti ARM/ARM64/ARM64e dan tidak akan jalan di simulator.

Jadi jika kita ingin melakukan analisis dinamik, maka kita perlu hardware iOS tergantung aplikasinya mungkin akan butuh iPhone atau iPad. Beberpa aplikasi bisa juga berjalan di iPod Touch (tapi aplikasi banking yang butuh verifikasi SMS sering kali tidak mau jalan di iPod Touch).

Ketika membeli hardware iPhone/iPad bekas, harap diperhatikan versi iOS yang masih didukung dan kira-kira masih akan didukung atau tidak dalam waktu dekat ini. Contoh: saya membeli iPhone 5S baru sekitar 5 tahun yang lalu dan hardware ini masih bisa dipakai sampai sekarang (mendukung iOS 12), tapi kemungkinan besar tidak akan disupport lagi akhir tahun ini (kemungkinan tidak akan mendukung iOS 13). Update setelah WWDC: iPhone 5S tidak termasuk dalam device yang bisa memakai iOS 13, minimum adalah iPhone 6S.

Ketika tulisan ini dibuat (Mei 2019), jika ingin membeli iPhone, hardware minimal yang saya sarankan adalah iPhone 7 Plus. Alasannya:

  • Versi baru ponsel ini masih dijual oleh Apple
  • Harga second hand benda ini mulai reasonable
  • Prosessornya A10, sama seperti yang dipakai iPod Touch generasi 7 yang baru saja diluncurkan
  • versi 7 Plus memiliki RAM 3 GB (versi 7 saja tanpa plus, hanya 2 GB) jadi kemungkinan akan bisa dipakai untuk beberapa iOS mendatang

Jika dana terbatas belilah iPhone 6S yang bisa dipakai setidaknya setahun lagi. Jika ingin lebih jauh lagi, menurut saya iPhone XR merupakan pilihan yang baik:

  • Harganya cukup jauh di bawah iPhone XS
  • Sudah memakai A12, bisa belajar Pointer Authentication

Tapi tentu saja jika ada dananya, silakan saja beli iPhone terbaru dan termahal.

File IPA

Jika di Android kita memakai file APK untuk instalasinya, maka di iOS kita memakai format IPA. Seperti APK, format IPA ini sebenarnya juga hanya file berformat zip yang di dalamnya berisi resource (gambar, suara, dsb) dan program. Tapi tentu saja walau sama-sama file ZIP, keduanya tidak kompatibel karena isinya benar-benar berbeda.

Khusus untuk format PNG, Apple memakai optimasi khusus sehingga perlu dikonversi kembali. Di OS X ini bisa dilakukan dengan pngcrush. Perlu dicatat pngcrush di OS lain tidak memiliki opsi yang sama, jadi gunakan tool lain untuk mengembalikan PNG agar bisa dilihat. Ini hanya contoh kecil mengapa memiliki hardware macOS plus XCode bisa memudahkan proses RE.

Tanda tangan digital dan Enkripsi

Setiap aplikasi yang berjalan di iOS harus ditandatangani secara digital. Selain itu setiap aplikasi dari App Store dienkrip (memakai DRM Fair Play) dan hanya bisa dipakai di account tertentu. Artinya saya tidak bisa mendownload file IPA dari app store dengan account saya dan langsung ditransfer ke iPhone orang lain.

Jika ingin disebarkan ke orang lain, sebuah program perlu didekrip. Proses dekripsi butuh iPhone/iPad yang sudah dijailbreak. Saat ini belum ada yang berhasil mengekstrasi key dari account, jadi sebuah hardware wajib dimiliki. Program yang dienkrip tidak bisa direverse engineer. Bisa saja dipaksa dibuka di disassembler, tapi instruksinya tidak masuk akal.

Dalam proses pentesting kadang client meminta kita testing dari app store dan kadang dari developer. Proses enkripsi ini dilakukan oleh Apple di server apple, jadi aplikasi yang belum diupload ke App Store masih dalam kondisi tidak terenkripsi. Jika kita dibolehkan meminta dari developer, maka akan lebih mudah melakukan reversing tanpa perlu hardware untuk mendekrip.

Jailbreak

Saat ini jailbreak sangat penting untuk security researcher iOS. Tidak semua versi iOS bisa dijailbreak dan pada semua versi iOS beberapa tahun terakhir kita tidak bisa dengan mudah downgrade ke versi sebelumnya. Satu-satunya cara untuk pindah ke sebuah versi tertentu adalah jika kita punya yang namanya SHSH blob untuk versi tersebut yang spesifik untuk device kita. Di ponsel dengan CPU A12, proses ini lebih kompleks lagi.

Jadi jika kita membeli ponsel dengan software terbaru dan belum ada jailbreaknya, tidak ada yang bisa kita lakukan selain menunggu sampai ada yang menjailbreak. Selagi menunggu, kita bisa menyimpan blob SHSH untuk versi berikutnya. Jadi misalnya kita ada di versi 12.3 (belum ada jailbreak) dan sudah ada versi 13 (belum ada jailbreak juga), kita bisa menyimpan blob untuk versi 13. Nanti misalnya ada jailbreak untuk versi 13 kita bisa upgrade ke versi tersebut.

Biasanya ketika ada jailbreak untuk versi tertentu (misalnya 13), dan Apple sudah merilis vesi lebih baru (misalnya 13.1) maka “signing window” akan ditutup, artinya kita tidak bisa lagi upgrade ke versi 13 tapi harus langsung ke 13.1. SHSH blob hanya bisa dipakai di device yang sudah dijailbreak karena perlu akses root untuk set nonce.

Ini berbeda dengan sebagian device Android yang mengijinkan unlocked bootloader. Pada device Android dengan unlocked bootloader, kita bisa me-root ponsel kita dengan sangat mudah. Di Android APK dari playstore juga tidak dienkripsi (hanya ditandatangi digital) jadi rooting juga tidak wajib dilakukan.

Perlu diperhatikan: banyak website menyesatkan yang menyatakan bisa jailbreak iOS terbaru. Informasi terkini dan valid mengenai berbagai device dan versi iOS yang bisa dijailbreak serta tool untuk jailbreaknya bisa dilihat di:

https://www.reddit.com/r/jailbreak/wiki/escapeplan/guides/jailbreakcharts

Setelah jailbreak, tool yang bisa digunakan untuk mendekrip aplikasi adalah Clutch (iOS versi lama), bfinject (iOS 11) dan CrackerXI (iOS 12).

Developer Account

Untuk device yang tidak dijailbreak, semua aplikasi yang diinstall harus ditandangani digital. Dulunya kita perlu memiliki developer account (99 USD/tahun) untuk bisa menjalankan aplikasi apapun di device kita. Ini termasuk juga aplikasi/IPA yang sudah didekrip tetap perlu ditandatangani agar berjalan di device kita.

Tapi sekarang sudah ada kelonggaran: kita bisa menandatangani gratis tapi hanya berlaku 7 hari. Artinya setelah 7 hari, aplikasi tersebut tidak bisa berjalan, kita harus menandatangani (sign) dan menginstall lagi tiap 7 hari. Maksimum dalam satu waktu kita bisa menginstall 3 aplikasi dengan account gratis ini dan maksimum hanya 2 device per Apple ID. Proses reinstall ini butuh waktu dan butuh komputer. Saat ini cara termudah instalasi tanpa developer account dan tanpa jailbreak adalah dengan Cydia Impactor.

Untuk proyek jangka pendek dan untuk testing, account gratis ini sudah cukup. Tapi jika kita perlu sering melakukan ini, developer account akan sangat membantu. Tanpa developer account, beberapa hal cukup mengesalkan, misalnya:

  • Cydia Impactor sering tidak jalan di iOS terbaru (harus menunggu rilis terbaru),
  • Kita perlu membuat password iCloud spesifik untuk Cydia Impactor (dan kadang password ini expire, harus diset ulang)
  • Cydia impactor ini tidak mengingat password (harus ketik ulang atau copy paste)
  • Jika instalasi gagal, harus memasukkan ulang password
  • Jika ada banyak pekerjaan pentest, batas jumlah aplikasi akan terlampaui

Jika ponsel sudah dijailbreak, kita bisa memakai Reprovision yang berjalan di ponsel dan otomatis menandatangani ulang aplikasi tiap 7 hari. Tapi tentunya batasan jumlah aplikasi tetap berlaku.

Karena hasil dari testing iOS ini sudah jauh lebih besar dari harga developer account per tahun, saya memilih memakai developer account. Selain itu accountnya bisa saya pakai untuk development.

Membuat Aplikasi iOS

Mengenal cara sebuah aplikasi dibuat akan sangat membantu dalam proses reverse engineering. Khusus untuk pentesting, kadang developer meminta saran pada kita bagaimana memperbaiki sesuatu. Terkadang memberikan link saja sudah cukup, tapi di kasus tertentu sebuah solusi tidak bisa dipakai dan kita akan dipandang sebagai pentester yang baik jika kita bisa memberi saran perbaikannya.

Aplikasi iOS dulunya hanya ditulis dengan Objective C. Objective-C masih merupakan bahasa utama yang dipakai di seluruh sistem operasi, sama seperti Java di Android. Seluruh API utama masih menggunakan Objective C. Selain itu sekarang Apple mendukung bahasa Swift.

Sebuah aplikasi iOS akan dikompilasi menjadi format MachO. Format ini berbeda dengan ELF (Linux) dan PE (Windows) sehingga tool yang dipakaipun berbeda. Program bawaan XCode adalah otool yang bisa dipakai untuk men-dump file MachO (seperti objdump di Linux). Selain itu ada jtool yang fungsinya lebih banyak.

Saya sangat menyarankan reverser iOS memahami minimal C dan Objective C. Jika memahami Swift akan lebih baik lagi karena aplikasi modern sekarang ditulis menggunakan Swift. Cobalah membuat aplikasi Objective-C sederhana, lalu reverse engineer aplikasinya.

Sekarang ada banyak teknologi yang bisa dipakai untuk mengembangkan aplikasi iOS misalnya:

  • Cordova dan teknologi lain berbasis HTML
  • Unity (berbasis C#)
  • RubyMotion (Ruby)

Saya akan mengasumsikan aplikasi yang akan direverse engineer menggunakan Objective C atau Swift. Jika menggunakan bahasa lain, maka pelajarilah teknologi tersebut (di luar scope artikel ini). Ketika belajar Objective-C jangan lupa belajar teknik tingkat lanjut seperti Method Swizzling yang bisa dipakai untuk runtime patching sebuah method/class Objective C.

Assembly ARM64

iPhone versi awal memakai Thumb/ARM32, tapi saat ini semua device iOS terbaru memakai instruction set ARM64 jadi jika Anda belum pernah belajar ARM 32 bit bisa langsung skip ke ARM64. Secara teori jika kita memakai decompiler kita tidak perlu memahami level assembly, tapi kenyataanya:

  • Decompiler sering salah atau tidak lengkap hasil dekompilasinya
  • Beberapa aplikasi menggunakan proteksi yang menyulitkan decompiler
  • Untuk patching, kita tetap perlu paham assembly

Jadi saran saya: pelajarilah dasar assembly ARM64. Semakin dalam eksplorasi yang dilakukan, pengetahuan ARM64 yang dibutuhkan juga semakin banyak.

Untuk memulai belajar ARM, saya menyarankan website https://azeria-labs.com/. Websitenya sangat lengkap dan berfokus pada ARM secara umum (tidak spesifik ke teknologi untuk iOS).

Contoh dekompilasi dengan Ghidra

Langkah-langkah reverse engineering

Secara umum langkah-langkah reverse engineering Aplikasi iOS adalah sebagai berikut:

  • Dapatkan versi aplikasi yang tidak terenkripsi (langkah wajib). Bisa dari developernya atau dari dekrip aplikasinya
  • Opsional: gunakan class-dump untuk mendapatkan gambaran aplikasi
  • Bongkar aplikasinya dengan disassembler/decompiler
  • Opsional: lakukan dynamic reverse engineering dengan Frida atau Cycript
  • Opsional: lakukan patching aplikasi jika ada jailbreak detection

Langkah pertama sudah jelas, dan langkah-langkah berikutnya pada dasarnya adalah memakai berbagai tool.

Class-dump

Tool class-dump dapat digunakan untuk menghasilkan header objective-c dari binary Mach-O. Berbagai decompiler seperti Hopper, IDA Pro dan juga Ghidra bisa mengekstrak informasi ini secara otomatis, tapi class dump ini masih berguna karena:

  • Prosesnya cepat
  • Setelah mendapatkan header kita bisa dengan cepat melihat-lihat nama fungsi yang ada

Disassembler/Decompiler

Baik jtool maupun otool bisa mendisassemble file MachO, tapi untuk file yang berukuran besar proses membaca assembly memakan waktu lama. Biasanya sama memakai gabungan decompiler dan disassembler untuk memahami sebuah program.

Ghidra tools gratis dari NSA

Dulu satu-satunya decompiler untuk iOS adalah IDA Pro yang harganya mahal. Sekarang ini ada opsi gratis: Ghidra (pernah saya bahas di sini) dan ada opsi yang harganya relatif murah: Hopper. Kualitas dekompilasi Ghidra lebih bagus dan bisa berjalan cross platform, sementara tampilan Hopper lebih menarik.

Frida dan Cycript

Seringkali reversing statik sulit dilakukan dan modifikasi dinamik lebih cepat untuk memahami sebuah aplikasi. Ada dua tool yang berguna untuk ini: Frida dan Cycript. Untuk saat ini saya lebih menyarankan Frida karena masih dipelihara terus.

Frida bisa dijalankan di ponsel yang sudah dijailbreak (bisa meng-hook semua aplikasi) atau pada satu aplikasi di ponsel yang tidak dijailbreak. Untuk yang sudah dijailbreak, langkahnya lebih sederhana. Untuk yang belum dijailbreak:

  • Ekstrak IPA-nya (harus sudah didekrip)
  • Edit binarynya agar meload Frida (misalnya dengan insert_dylib)
  • Masukkan shared library Frida ke dalam aplikasi

Aplikasi kemudian perlu dijalankan dalam mode debug, karena tanpa ini beberapa fungsionalitas Frida tidak akan berjalan. Setelah frida berjalan, kita bisa menulis skrip dalam javascript untuk menginspeksi atau mengubah jalannya program.

Binary Patching

Jika jailbreak detection dilakukan di satu method terpisah (misalnya: isJailBroken) maka ini biasanya bisa diintercept oleh Frida dan tinggal diganti agar mengembalikan falses (“return 0”). Tapi kadang deteksi jailbreak dilakukan sambil melakukan hal lain. Kelemahan frida adalah: kita hanya bisa menambah/mengubah sesuatu di awal/akhir fungsi, jadi dalam kasus tertentu kita masih butuh melakukan patching.

Tidak ada yang istimewa dalam patching file MachO. Asalkan kita bisa mengerti ARM64, kita bisa mempatch opcode seperti biasa dengan hex editor.

Tweaks

Jika kita memakai iOS yang dijailbreak, maka kita bisa menginstall Tweaks. Tweaks ini pada dasarnya adalah shared library (dylib) yang akan diinjeksikan oleh daemon jailbreak ke proses target. Ada tweak tertentu yang bisa membantu proses reverse engineering/pentesting, misalnya ssl-kill-switch 2 untuk mendisable SSL Pinning.

Kita juga bisa membuat sendiri Tweaks untuk iOS dengan menggunakan Xcode, tapi biasanya tweaks dibuat menggunakan Theos. Kelebihan Theos dibandingkan Xcode adalah tersedianya SDK dengan private headers, yang berisi interface fungsi-fungsi yang tidak publik.

Penutup

Artikel ini masih merupakan perkenalan dan baru menyentuh hal-hal dasar reversing aplikasi iOS. Seperti bisa dilihat bahwa untuk terjun ke reversing iOS secara nyaman dibutuhkan uang yang lumayan (untuk membeli hardware macOS dan iPhone) atau waktu yang cukup banyak (setup Hackintosh).

Beberapa aplikasi dan game terkenal memakai berbagai teknik yang membuat reverse engineering iOS menjadi cukup sulit. Karena tingkat kesulitannya. para hacker game iOS bisa mendapatkan uang cukup banyak dari hacking berbagai game dan aplikasi iOS (contohnya developer ini).

Hacking di Serial Phantom/Ghost/유령 (bagian 4)

Ini merupakan bagian terakhir dari seri posting ini yang membahas episode 15 sampai 20. Di akhir seri ini adegan hacking yang dilakukan semakin sedikit dan fokus lebih pada cerita. Walau demikian, adegan hackingnya tetap lebih meyakinkan dari “hacker wannabe” dengan tag yang sempat trending di masa setelah pemilu ini.

Fokus akhir cerita masih ke software security/antivirus yang diberi backdoor. Kasus ini sangat mungkin terjadi seperti dalam berita tentang antivirus Kaspersky yang dicurigai dipakai menghack NSA. Sebagai catatan: cerita tentang Kaspersky di dunia nyata bahkan lebih seru dari di film ini.

Ada bagian mereka mengambil rekaman dari dashcam mobil. Setahu saya tidak ada dashcam yang bisa menyimpan video sampai puluhan hari, apalagi yang diakses adalah SD card yang menempel di dash cam. Andaikan ada sistem yang bisa menyimpan jangka panjang, kemungkinan medianya adalah harddisk (atau data ditransmit ke server ketika sampai di garasi).

Ada adegan waktu koneksi internet tiba-tiba mati: program yang dilihat adalah PRTG Traffic Grapher yang cukup masuk akal. Penyebab trafficnya tiba-tiba berhenti agak kurang masuk akal yaitu DDOS, seharusnya tiba2 ada traffic besar. Kecuali ada bug di firewallnya yang justru mematikan koneksi ketika ada serangan.

Di dalam film ini juga digambarkan bahwa tidak semua hal bisa dihack secara remote, tapi harus datang ke tempat langsung. Ini memang benar, tidak semua sistem bisa dihack dari jauh jika tidak terhubung ke jaringan. Di kasus tertentu bahkan kita tidak tahu data apa yang harus diambil, jadi di film ini mereka membuat clone harddisk komputer target.

Di sini juga diceritakan tentang malware yang “tidak meninggalkan jejak”. Ini masuk dalam kategori “fileless malware“. Malware jenis ini memang ada walau masih cukup jarang. Malware jenis ini hanya ada ketika sedang aktif dan ketika komputer direstart/dimatikan, malware hilang, tidak ada jejaknya di disk. Kebanyakan malware ingin tetap ada ketika direstart, jadi biasanya kebanyakan malware adalah file based malware.

You have to catch them in the act

Berikutnya ketika mencari tahu situs terakhir yang dikunjungi, sang tokoh utama melihat ke Event Viewer. Perlu dicatat bahwa informasi di sini memang banyak, tapi jika tidak disetting khusus informasi situs terakhir yang dikunjungi tidak ada di sini. Dalam kasus ini ceritanya di PC ini sudah terinstall program jahat versi beta yang masih melog ke Event Log.

Ada juga kasus pembunuhan oleh gamer karena masalah game online. Kasus seperti ini sudah pernah terjadi beberapa kali di dunia nyata (contohnya ini), jadi cukup masuk akal.

Penggunaan steganografi juga dimunculkan lagi. Kali ini dipakai untuk menjebak seseorang sehingga tanpa password. Sebenarnya agak aneh menyembunyikan file dengan software steganografi tapi tanpa password.

Salah satu tokoh di film ini memiliki 10000 PC Zombie (bagian dari botnet). Definisi Zombie Computer dari wikipedia adalah: a computer connected to the Internet that has been compromised by a hacker, computer virus or trojan horse and can be used to perform malicious tasks of one sort or another under remote direction. Atau intinya: PC yang sudah diinfeksi malware dan bisa dikendalikan dari jauh. PC yang mereka kendalikan ini bisa digunakan untuk menyerang sistem lain.

Ada adegan tokoh jagoan film ini gantian mengirim malware ke tokoh jahat. Ketika menyadari ada yang aneh, si tokoh jahat segera mencabut koneksi internet (hal yang bijaksana) lalu melihat proses yang berjalan. Di sini terlihat nama prosesnya svch0st.exe (dengan angka 0, sedangkan proses Windows asli adalah svchost.exe dengan huruf o). Cara seperti ini sering digunakan oleh malware (variannya misalnya menggunakan spasi ekstra atau nama yang panjang)

Tentunya proses semacam ini perlu di-kill jika sudah ketemu. Software yang digunakan adalah Process Explorer dari Microsoft.

Kadang hacking tidak bisa dilakukan karena alasan teknis dan juga bisa bermasalah dengan hukum. Dalam film ini yang dilakukan adalah: pemerasan. Kadang cara ini memang lebih efektif dari hacking.

Dalam film ini juga beberapa kali tokohnya menghack display reklame LCD (videotron). Seberapa sulitkah ini? tidak sulit jika kita memang tahu targetnya. Contoh kejadian yang pernah ada di Indonesia adalah ketika film porno diputar di sebuah videotron. Intinya hanya perlu remote desktop (atau di kasus Indonesia memakai team viewer). Dan itu yang dilakukan di film ini.

Koneksi ke remote desktop

Sebagai catatan: banyak orang yang menjual akses shell/remote desktop ke berbagai sistem di forum-forum underground.

Hacking videotron

Ada kamera yang berisi SD Card yang memegang bukti penting dalam film ini. Katanya isi SD Cardnya kosong (sudah dihapus), tapi polisi bisa mengembalikan file yang terhapus. Sebenarnya ini masuk akal, yang tidak masuk akal adalah kamera dan SD Cardnya tidak dipakai selama setahun selama kameranya dipegang seseorang (kameranya tidak dipakai mengambil foto sama sekali). Ada banyak software file recovery yang bisa ditemui di internet untuk tujuan ini.

Ada satu bagian adegan yang agak kurang masuk akal dan sedikit mengganggu, tapi saya mengerti mereka membuat ini supaya ada sesuatu yang bisa dikenali penonton (logo H untuk Hades). Tokoh utama mengetik suatu perintah, lalu muncul sederetan teks tidak berguna (supaya keliatan keren, padahal itu hanya sekedar type sesuatu.js). Ini agak mirip tagar konyol yang sedang trending saat ini.

Ceritanya tokoh utamanya memiliki aplikasi (mungkin dengan bug zero day) yang mampu menghentikan segala jenis program (baik itu disk erase atau apapun). Lalu di akhir selalu muncul payload animasi yang sampai akhir film tidak diganti padahal ceritanya penggunaan logo ini mencurigakan sekali karena hacker yang membuatnya dianggap sudah mati.


Demikian akhir dari seri review serial TV Phantom ini. Secara umum ceritanya cukup baik. Ada beberapa bagian yang dibuat terlalu bertele-tele supaya jadi 20 episode. Secara umum ceritanya cukup cerah dan bersih. Tidak seperti Mr Robot yang terlalu gelap ada penggunaan drugs dsb. Bahkan di film ini tidak ada adegan ciuman.

Detail semua yang tampil di layar cukup diperhatikan. Software yang dipakai meyakinkan, dan bahkan listing assembly pun cukup masuk akal. Bahkan detail tanggal di listing program juga benar. Jumlah adegan hacking pun cukup banyak (setidaknya di awal seri ini). Mungkin di masa depan saya akan mencoba menonton ulang film lain untuk mereview adegan hackingnya.

Hacking di Serial Phantom/Ghost/유령 (bagian 3)

Mulai dari episode 7, jumlah hacking dan tool hacking yang muncul semakin sedikit, jadi untuk bagian 3 ini episode yang dibahas lebih banyak: dari 7 sampai 14. Ada laporan teknis yang muncul sekilas, dan dibuat cukup meyakinkan dengan screenshot program di dalamnya.

Ada juga adegan akuisisi data dari ponsel.

Sementara itu ketika mengakses komputer orang lain (secara tidak legal) dan butuh akses browser history, Yoo Kang-mi memakai BrowserHistorySpy.

Ada sedikit omongan teknis tentang ARP attack, tapi tidak detail diceritakan.

Dan software forensik sebelumnya masih muncul lagi

Dalam kecelakaan mobil, ditemukan USB flash drive dengan firmware ECU. Entah kenapa di Flash drive itu ada software WinHex. Tapi bisa saya pahami ini dibuat agar ceritanya berjalan dengan cepat. Tokoh utama membuka file itu dan menemukan kata-kata “ECU”.

Saya tidak tahu jenis mobil dsb, tapi mobil jenis tertentu memang bisa ditamper kontrolnya, bahkan dari jauh (jika mobil itu punya konektivitas wireless. Di Blackhat 2016 bahkan ada sesi Car Hacking Hands On.

Sayangnya waktu melakukan analisis firmware ECU, software yang dipakai masih ollydbg juga dan yang ditampilkan adalah program PE Windows. Ini juga bisa saya mengerti: di tahun tersebut hanya IDA Pro yang cukup bagus untuk melakukan reverse engineering firmware non x86, dan mereka tidak ingin membayar mahal hanya demi film tersebut.

Setelah itu ada aksi remote akses menggunakan software radmin.

Dan ada adegan keylogging juga. Tokoh utamanya melakukan keylogging sambil memonitor hasilnya realtime.

Ketika melakukan analisis cepat terhadap software beta, mereka membuka log file untuk melihat kelakuan program. Ini sangat masuk akal.

Seingat saya sisa film ini tidak banyak lagi hackingnya, jadi kemungkinan bagian berikutnya akan jadi bagian terakhir. Meskipun episode-episode ini kurang banyak hackingnya, tapi mereka tetap berusaha memasukkan program yang akurat jika memungkinkan. Ceritanya sampai titik ini juga masih cukup baik (penuh misteri dan kerja detektif).

Hacking di Serial Phantom/Ghost/유령 (bagian 2)

Meneruskan posting sebelumnya, ini episode 4 sampai 6. Pertama ada program tak bernama yang bisa digunakan untuk SQL injection dsb, fiturnya mirip dengan sqlmap tapi ada GUI-nya. Program ini ternyata namanya HDSI (saya nemu ini karena menemukan tulisan berbahasa korea yang membahas film ini).

EnCase juga muncul lagi beberapa kali di film ini.

Program open source wireshark yang dipakai untuk memonitor traffic jaringan juga muncul di film ini.

Beberapa serial TV tidak pernah menampilkan IP address beneran, tapi serial ini sering sekali memberikan alamat IP.

Walau yang di atas itu bukan alamat IP hong kong

Ada juga tampilan log firewall Cisco

Dan berikutnya adalah bagian yang paling menarik menurut saya. Ada malware yang memiliki tanggal aktivasi. Reverse engineering dilakukan dengan ollydbg. Program dihentikan di instruksi:

CMP DWORD PTR DS:[EDX], 0x4FD68680

Instruksi ini sangat masuk akal (instruksi perbandingan, bukan instruksi yang lain), lalu tokohnya menggunakan konverter time stamp untuk mengubah 0x4FD68680 menjadi tanggal saat ini.

Saya bisa mengkonfirmasi dengan python bahwa angka timestamp yang ditampilkan adalah benar.

Dibahas juga mengenai stuxnet, malware yang sempat merepotkan Iran dalam riset nuklirnya.

Tapi indicator of compromise (IOC)-nya tidak dibuat realistis. Dengan hanya dengan melihat beberapa proses yang normal bisa disimpulkan bahwa ini stuxnet. Padahal mereka bisa membuat seolah-olah ada nama yang lebih masuk akal untuk indikator stuxnet.

Program DDOS Master yang mereka pakai sepertinya custom atau mengubah program yang sudah ada. Tampilannya sangat masuk akal, nama-nama serangan DOS-nya juga masuk akal.

Tampilannya agak mirip dengan botmaster console

Sekarang ke bagian nostalgia masa lalu. Pertama tentang Y2K dan virus CIH yang terkenal di jaman itu.

Ditampilkan debugger mode DOS. Ini bukan virus CIH yang didebug, tapi sekedar program “Hello World” yang memakai interrupt 21 dengan fungsi AH=9. Yang menariknya, dokumen di belakang debugger itu merupakan source code virus CIH yang beneran.

Debugging program hello world, dengan source code CIH di latar belakang
Potongan Virus CIH yang sebenarnya

Untuk virus Melissa, mereka tidak memperlihatkan isi macronya. Hanya adegan mengirimkan dokumen berisi virus ke seseorang.

Demikian pembahasan kali ini. Akan saya teruskan pembahasannya di posting berikutnya. Tapi setelah 6 episode ini jumlah “hacking”-nya semakin menurun dan ceritanya yang semakin banyak.

Hacking di Serial Phantom/Ghost/유령 (bagian 1)

Sebenarnya film drama Phantom ini sudah cukup lama (tahun 2012) dan sudah pernah saya tonton beberapa tahun sebelumnya, tapi karena sekarang Risna lagi rajin nonton drama korea kami jadi nonton lagi film ini. Saya akan membahas mengenai berbagai tool yang dipakai di serial ini. Beberapa konsep yang rumit yang tidak cukup ditulis di posting ini akan saya posting di posting yang lain.

Saya berusaha untuk tidak memberikan spoiler di posting ini, tapi ya mungkin saja tetap ada sedikit. Sebagai catatan: ini sekedar film fiksi, jadi banyak juga hal-hal yang kurang realististis supaya filmya lebih seru. Sama seperti adegan baku tembak atau kejar-kejaran mobil di berbagai film lain yang juga sering tidak masuk akal. Tapi meski demikian film ini cukup realistis dari segi software yang dipakai.

Posting bagian pertama ini hanya membahas Episode 1 sampai 3. Di tiap episode pemakaian komputer/toolnya bervariasi, jadi dalam tiap bagian posting ini saya tidak akan selalu membahas tiap 3 episode, bisa lebih bisa kurang.

Hal pertama yang menarik ketika Kim Woo-hyun mengcompile program custom. Dia secara manual mengetik: gcc -v .. dst. Padahal di situ ada Makefile, harusnya tinggal ketik “make” saja sudah cukup.

Compile program

Sementara itu Park Ki-young memakai metasploit dalam aksinya. Metasploit adalah software standar yang dipakai baik hacker maupun pentester untuk melakukan banyak hal (scanning system, eksploitasi sistem, membuat payload, dsb).

Metasploit

Ketika tim forensik menerima laptop barang bukti mereka tidak langsung mengakses komputernya. Sebelum analisis forensik dilakukan mereka membuat dulu “disk image”. Juga ditunjukkan harddisk laptop bersanding dengan harddisk target.

Cloning/imaging disk

Software yang dipakai adalah Image Master Forensic. Ini software yang benar-benar ada.

Image master forensic

Analisis kemudian dilakukan menggunakan software Encase yang sangat dikenal oleh kalangan Digital Forensik.

Encase

Di episode pertama ada juga beberapa software yang tidak saya kenal, misalnya software untuk mengakses kamera. Ada kemungkinan softwarenya adalah software lokal Korea.

Saya tidak mengenali software ini

Di sana mereka memiliki beberapa software yang lebih umum dibandingkan dengan yang kita pakai sehari-hari. Contohnya format dokumen yang umum bukan DOC tapi HWP (dari software Hangul Office). File dengan ekstensi HWP ini banyak muncul di film ini karena memang terkenal di kalangan pemerintah Korea Selatan.

Saya tidak bisa berbahasa Korea, jadi tidak tahu apakah terjemahannya 100% benar atau tidak, tapi secara umum penjelasanya cukup baik. Misalnya dikatakan bahwa Steganografi digunakan untuk menyembunyikan informasi di file gambar atau musik. Secara teori file apapun bisa, walau di file multimedia (gambar, video, suara) datanya bisa lebih tersembunyi karena ukuran filenya sudah besar.

Sebenarnya file apa saja bisa digunakan untuk steganografi.

Software yang digunakan dalam film ini adalah OpenStego

OpenStego

Beberapa software tampaknya dibuat custom, contohnya ketika Yoo Kang-mi mengedit data pasien, terlihat bahwa ikonnya merupakan ikon standar aplikasi .NET (C#/VB.NET) yang dibuat dengan visual studio.

Software custom

Bisa dibandingkan Ikon HIS di aplikasi tersebut dengan ikon aplikasi yang belum diganti di Visual Studio.

Ikon standar aplikasi dengan Visual Studio

Bukan cuma program GUI itu saja yang dibuat custom, program command line juga dibuat custom. Program pertama yang saya sebutkan ternyata di dalam cerita itu adalah untuk melakukan tracing. Saya agak tersenyum dia mengcompile pakai parameter -v (verbose) cuma supaya layarnya terlihat lebih penuh.

Ternyata program di screen capture pertama adalah REVERSE TRACER (ini tidak beneran ada)

Sebelum melakukan serangan, dilakukan recon dulu dengan nmap (GUI interface untuk nmap)

Scanning dengan GUI Nmap

Outputnya juga diperlihatkan

Ini targetnya server Linux. Nggak tau kenapa ke server itu, karena targetnya adalah user yang memakai Windows.

Yang jadi target port 9929, ini nggak masuk akal (port ini tidak standar digunakan).

bagian ini juga kurang masuk akal

Selain masalah tool, film ini juga kadang menjelaskan konsep tertentu. Misalnya di episode 3 ini dijelaskan tentang konsep Phishing attack. Dijelaskan juga contoh-contoh kenapa orang membuka attachment yang tidak dikenal di email.

Contoh email phishing

Sekian pembahasan kali ini. Saya tidak akan membahas dalam mengenai ceritanya: dari segi cerita, kadang ceritanya agak terlalu ribet/kurang masuk akal, tapi lumayan seru juga. Bagi saya ini cukup menarik karena mereka punya flashback ke tahun 1999/2000 di masa virus CIH, Melissa dan masalah Y2K. Nostalgia kembali ke masa kuliah saya. Bagian mengenai flashback masa lalu ini akan saya bahas di bagian berikutnya.

Mencari bug

Ada yang bertanya ke saya: bagaimana sih caranya mencari bug di aplikasi? Karena jawabannya tidak bisa ditulis singkat di chat, di tulisan kali ini saya akan berusaha menjawab pertanyaan itu.

Apa itu bug?

Kalau Anda disuruh mencari sebuah benda tapi tidak tahu benda itu seperti apa bentuknya maka Anda tidak akan bisa menemukannya (Contoh: tolong ambil logic analyzer di laci saya). Sama halnya dengan bug: pertama pahami dulu berbagai jenis bug yang ada, baru Anda bisa menemukannya.

Contoh-contoh bug web misalnya: SQL Injection, IDOR, XSS, dan command injection. Contoh bug aplikasi misalnya: buffer overflow. Selain tahu apa itu sebuah bug, kita juga perlu tahu bagaimana cara mengeksploitasinya.

Black box testing

Ini testing yang paling umum. Kita coba-coba berbagai input dengan harapan keluar suatu pesan error yang bisa menunjukkan kesalahan di sebuah program. Contoh kecil: jika ada input petik tunggal (‘) dan programnya menampilkan SQL error, maka kemungkinan ada bug SQL injection.

Tentunya coba-coba ini harus yang masuk akal. Ini biasanya tergantung pada: aplikasinya seperti apa, servernya memakai OS apa. Contoh: berusaha melakukan command injection dengan berbagai command Windows di server Linux maka tidak akan berhasil. Berusaha melakukan angular template injection di aplikasi yang tidak memakai Javascript juga tidak akan berhasil.

Intinya: meskipun ini adalah black box testing, yang sepertinya sekeda menebak-nebak, ada hal-hal masuk akal yang bisa kita coba. Jika kita ingin membeli suatu barang, kita bisa mencoba mengganti nilai pembelian, berusaha membypass proses pembayaran, dsb.

White box testing

Jika kita memiliki akses ke source code, maka kita bisa mencari bug dengan membaca source code aplikasinya. Source ini bisa didapat dari beberapa cara:

  • Aplikasinya memang open source (contoh: berbagai aplikasi web seperti WordPress ada source codenya)
  • Dari hasil dekompilasi (contohnya: berbagai game bisa didekompilasi)
  • Dari bug lain (contoh: jika menemukan bug web untuk membaca sebuah file, maka bisa kita manfaatkan untuk membaca source code aplikasi)

Nah di sini kemampuan membaca source code diperlukan. Dengan adanya source code, kita bisa melihat alur program dan menentukan apakah sebuah input dicek atau tidak, dan apakah inputnya bisa dipakai untuk membypass sesuatu atau mengeksekusi apa yang seharusnya tidak boleh dieksekusi.

Memahami Tool

Untuk melakukan testing, kita perlu paham berbagai tool yang sesuai. Contohnya untuk testing aplikasi web, kita sebaiknya memakai intercepting proxy (seperti Burp atau Zaproxy). Dengan memakai tool tersebut, kita bisa mengganti request dari browser atau dari aplikasi baik desktop maupun mobile yang akan berkomunikasi dengan server di internet.

Untuk testing aplikasi mobile, keahlian mengekstrak package, melakuan dekompilasi diperlukan. Berbagai tools yang spesifik juga bisa dipakai (misalnya XPosed Framework di Android, atau Frida di berbagai OS lain).

Fuzzing

Untuk bug jenis tertentu, kita bisa memakai tools untuk melakukan fuzzing. Intinya adalah mencoba-coba berbagai input secara otomatis. Ini bisa diaplikasikan ke aplikasi web, atau bahkan aplikasi desktop (contohnya ada yang namanya AFL). Penggunaan fuzzer ini relatif mudah, tapi hasilnya tetap harus dipahami oleh orang yang memiliki skill.

Otomasi

Sebagian bug bisa ditemukan dengan menggunakan tool otomatis. Saya tidak akan membahas ini secara dalam. Intinya ada beberapa scanner aplikasi web yang bisa menemukan berbagai bug yang umum. Ada juga source code analyzer yang bisa menemukan berbagai masalah di source code.

Penutup

Mencari bug kadang mudah kadang sulit, tergantung program yang kita cari bugnya. Sebagian orang yang meretas web tidak mencari bug khusus, tapi biasanya yang terjadi seperti ini:

  • ada yang menemukan bug di aplikasi tertentu (contoh: Drupal)
  • ada yang membuat exploit untuk bug tersebut
  • script kiddies menggunakan Google untuk mencari website yang memakai Drupal (dengan dorking, misalnya mencari “Powered By …”
  • script kiddies mencoba exploit drupal pada website yang ditemukan

Selamat mencari bug.

Bug Insecure Direct Object References (IDOR)

Bug Insecure Direct Object References (IDOR) ini merupakan bug yang sangat sederhana, sangat umum dan biasanya sangat berbahaya. Intinya pengguna aplikasi bisa mengubah input sedemikian hingga bisa mengakses objek/data yang bukan miliknya.

Bug paling sederhana adalah jika ada URL seperti ini:

http://example.com/edit.php?produk=1

Jika kita ganti produk menjadi 2 (atau nilai lain) dan keluar detail produk yang seharusnya bukan milik kita, itu namanya IDOR. Sering kali bug IDOR tidak bisa dieksploitasi dengan sederhana seperti itu. Biasanya untuk mengeksploitasi bug semacam ini kita akan memanfaatkan intercepting proxy seperti burp suit atau zaproxy (pernah saya bahas di sini).

Kadang kala ketika berusaha mengedit suatu data, kita tidak bisa memakai IDOR, tapi ketika kita menekan tombol “UPDATE” dan datanya di POST ke server, ternyata kita bisa mengedit id produknya. Jadi dalam kasus ini kita bisa menimpa/update produk lain walaupun tidak bisa melihat hasilnya.

Dalam aplikasi mobile, IDOR ini juga banyak ditemui, tapi secara umum lebih sulit dieksploitasi. Pertama kita perlu mensetup proxy, lalu jika aplikasinya melakukan SSL pinning maka perlu dibypass, dan kadang kala di atas itu masih ada enkripsi custom.

IDOR yang tipenya sangat berbahaya adalah dalam aplikasi yang melibatkan uang. Sering kali saya temu kasus di mana kita bisa mengganti id pengirim transaksi sehingga bisa memindahkan uang dari satu account ke yang lain. Kebanyakan kasus ini terjadi pada aplikasi mobile yang mengakses API dari web dan dienkripsi dengan sangat ribet. Proteksi di sisi client sering kali lebih dipentingkan daripada sisi server.