Cerita hacking dari masa lalu

Sebagian teman angkatan di Informatika ITB tahu kalau saya dan Deny dulu hampir di-DO karena “ngehack” kampus, tapi cerita detailnya belum pernah saya tuliskan. Nah kali ini dengan persetujuan dan encouragement dari Deny, Tintin, dan Okta saya akan tuliskan ceritanya. Karena ini cerita lama (lebih dari 20 tahun yang lalu), saya akan banyak memberikan latar belakang cerita.

Cerita ini sudah sangat lama, sebagian detail sangat saya ingat, tapi sebagian lagi benar-benar lupa. Ketika bertanya ke Tintin dan Deny mereka juga banyak lupa detailnya, jadi saya ceritakan saja di sini sekarang sebelum tambah lupa lagi.

Kenalan dengan Hacker

Saya awali dulu dengan cerita ketemu Deny. Sekedar background: kok bisa ketemu dengan orang lain yang suka ngehack?

Saya ketemu Deny kali pertama waktu kuliah di Informatika ITB, tahun 1998. Di ITB tingkat 1 adalah Tahap Persiapan Bersama, di tahun pertama semua jurusan pelajarannya sama yaitu ilmu-ilmu dasar dengan tujuan agar ilmunya seragam di tingkat berikutnya. Pelajaran yang diberikan misalnya: Fisika, Kimia, Matematika (Kalkulus), Bahasa Inggris, dan bahkan ada juga pelajaran Olah Raga.

ITB

Nah saya jadi ngobrol dengan Deny karena waktu itu saya membawa buku komputer. Kalau tidak salah ingat judul bukunya: Meningkatkan Dayaguna Komputer dengan Turbo Pascal karangan Busono. Buku ini mengajarkan cara mengakses hardware komputer secara low level (serial port, parallel port, dsb) dengan Turbo Pascal.

Perlu dicatat bahwa saat itu (nggak tau sekarang) banyak yang masuk Informatika ITB tapi pengetahuannya mengenai komputer sangat dasar sekali. Informatika ITB dipilih banyak orang karena passing grade-nya waktu itu adalah yang tertinggi. Jadi saya senang ketemu dengan seseorang yang bisa ngobrol programming selagi programming belum diajarkan di kelas.

Meski belum diajarkan programming, HMIF (Himpunan Mahasiswa Informatika) ITB memberikan pelatihan dasar Linux pada seluruh mahasiswa baru setelah selesai masa OSPEK. Pelajarannya sangat dasar: bagaimana mengakses Linux, mengakses email, membuat file, mengedit dengan vi, dsb.

Di pelatihan itu (Agustus 1998) kali pertama saya dan Deny belajar mengenai Linux. Sebelumnya kami cuma memakai DOS dan Windows. Setelah masa pelatihan selesai, mahasiswa (tingkat manapun, termasuk tingkat 1) boleh bebas mengakses lab ketika tidak ada praktikum. Bahkan kadang diperbolehkan juga pada jam praktikum kalau kenal dengan asistennya, selama masih ada komputer kosong di belakang dan tidak mengganggu sesi praktikum.

Lab

Di semua waktu luang tingkat 1, saya dan Deny menghabiskan sebagian besar waktu ngoprek di Lab. Waktu itu belum ada Google (tepatnya lagi baru September 1998 Google didirikan, itupun tidak langsung populer), jadi sumber utama ilmu kami adalah:

  • Majalah Phrack
  • Halaman manual (man page), bahkan saya pernah memprint banyak sekali manual page “perl” untuk dibaca di kost
  • Mailing list (misalnya bugtraq)
  • Beberapa website dan e-Zine

Entah kenapa saya dan Deny tidak tertarik sama sekali untuk join dengan berbagai “group hacker” seperti hackerlink, kecoak elektronik, dsb. Tapi saya dapat cerita dari teman kami Tintin (sekelas/seangkatan juga), bahwa group yang ada itu ya cuma bisa compile exploit dari Packet Storm, dan bahkan kadang mereka bingung kalau ketemu error waktu compile.

Waktu tahun kami masuk, kondisi mesin di lab sedang cukup parah. Baru dua tahun setelah itu ada dana baru sehingga mesinnya diupgrade secara signifikan. Dulu sudah jaman Pentium tapi mesin di lab masih 486 DX dan keyboardnya banyak yang mulai error. Mesinnya bisa dual boot: network boot ke Linux (diskless, memakai NFS) dan ke Novell Netware. Dari Netware kita bisa telnet ke salah satu server yang bisa diakses mahasiswa (Puntang/x86 dan kerinci/Sparc).

Sebagai catatan: di berbagai jurusan lain (misalnya Teknik Elektro) waktu itu yang banyak dipakai adalah BSD (biasanya FreeBSD), tapi di jurusan Informatika yang banyak dipakai adalah Linux dari awal. Dari setup yang dilakukan, bisa dilihat bahwa adminnya (mas Budi Aprianto mahasiswa yang dipandu oleh dosen, Pak Riza Satria Perdana ) sangat capable dan sudah mensetup sistemnya dengan baik:

  • Network boot dengan PXE waktu itu belum umum, harus burn EPROM di Network Card
  • Diskless boot juga tidak terlalu umum. Server NFS-nya memakai Solaris di server dengan CPU SPARC

Awalnya rasanya aneh memakai Linux, beberapa ilmu DOS seperti TSR, mengakses layar secara langsung atau memakai Library “<conio.h>” untuk mewarnai layar tidak berlaku di Linux. Tapi saya dan Deny cukup rajin belajar mengimplementasikan banyak hal, dari network programming (bikin port scanner dengan full TCP connect), sampai termasuk juga yang berhubungan dengan security.

Di tahun 1998 sebenarnya mekanisme shadow password sudah disupport di Linux, tapi entah kenapa belum diimplementasikan di distribusi yang kami pakai. Salah satu “hack” pertama yang kami lakukan adalah membuat program untuk membrute force password seseorang. Waktu itu password requirement belum diterapkan, jadi passwordnya masih relatif gampang ditebak.

Seperti yang saya jelaskan: kondisi lab waktu itu cukup parah, banyak keyboard yang error, kadang menekan 1 huruf tapi hurufnya tertekan 2 kali atau malah tidak tertekan. Ini biasanya jadi masalah ketika mengganti password (ada kelebihan/kekurangan huruf). Daripada selalu merepotkan admin, waktu itu kami membantu teman yang lupa password dengan mencoba-coba otomatis menambah dan mengurangi karakter dari password terakhir yang diingat.

Perpustakaan

Lab di Informatika ITB tutup di sore hari (lupa jam 4 atau 5), tapi ada rental Internet di perpustakaan ITB yang tutup sampai jam 7 malam. Jika saya belum ingin pulang (toh di kost nggak banyak yang bisa dikerjakan) saya akan menghabiskan uang untuk nongkrong di rental internet perpustakaan (memakai Windows 97).

Perpustakaan ITB

Akses internet di perpustakaan ITB adalah per 30 menit: bayar dulu, komputer tertentu akan diaktifkan, dan jika waktu habis koneksi akan dimatikan otomatis. Tapi lama-lama kan mahal, jadi saya mempelajari bagaimana prosesnya sejak memberi uang, dapat akses internet, sampai aksesnya dimatikan lagi.

Ternyata operator akan melakukan telnet ke sebuah server dan dari situ ada skrip untuk membuka akses internet. Saya perhatikan juga bahwa ada admin yang suka memakai salah satu komputer di dalam ruangan rental.

Saya menulis sendiri keylogger yang memakai API windows. Tepatnya sebenarnya bukan keylogger karena tidak mencatat semua tombol, tapi hanya akan mencari semua single line textbox dan password textbox dan melog teks serta passwordnya ke file. Di Windows lama (95 sampai ME) ini sangat mudah, kita cukup mengenumerasi handle Window dan mengirimkan WM_GETTEXT (waktu itu tidak ada sistem permission di Windows). Dengan teknik tersebut, segala macam password yang sudah tersimpan juga bisa didapatkan passwordnya (tidak hanya yang diketik manual).

Saya hanya memasang logger di komputer yang saya tahu dipakai admin. Dengan logger itu saya bisa mendapatkan akses internet unlimited di perpustakaan. Supaya tidak mencurigakan biasanya saya akan membayar 30 menit pertama dan hanya meneruskan kalau sepi. Di semester baru, saya baru tahu dari Deny kalau dia bawa logger saya dan dia pakai di warnet di Medan.

Tempat Lain

Lab IF dan Perpustakaan sebenarnya bukan satu-satunya tempat nongkrong. Banyak tempat lain di ITB yang punya lab komputer dan jadi tempat belajar untuk banyak orang, misalnya ada PAU (Pusat Antar Universitas), unit ARC (Amateur Radio Club), berbagai lab di berbagai jurusan.

Masing-masing orang punya kisahnya di tempat mereka, dari mulai kisah teknis seperti kami, sampai ada yang ketemu pasangan di tempat-tempat tersebut. Saya sendiri dulu sempat juga main ke ARC sebentar, tapi karena merasa kurang cocok, jadi lebih sering di lab IF (sementara Deny cukup sering ke ARC).

Root

Saya tidak ingat kapan kami mulai berani mengakses root. Tapi ini terjadi kira-kira akhir tahun (sekitar 3-4 bulan sejak kami belajar Linux). Akses root pertama kami dapatkan dari backdoor di port yang kami temukan dengan port scan. Selain cara itu, waktu itu ada banyak sekali eksploit yang bisa dipakai asalkan kita mencari di Internet (atau melihat mailing list bugtraq).

Sebagai catatan: dari adanya backdoor berarti sudah ada yang lebih dulu dari kami mendapatkan root. Salah satu teman kami, Okta juga dapet root dengan eksploit sendmail.

Salah satu alasan kami mendapatkan root adalah: untuk mengakses internet dari lab IF ITB. Di semester pertama kami cuma dapat akses email. Kami berusaha mencari host yang memiliki akses internet dan/atau username/password proxy yang bisa dipakai.

Berikutnya setelah jadi root di satu host, mau ngapain? Bagian pertama adalah: jadi root di host lain. Kami bisa telnet ke mesin x86 dan Sparc. Di mesin x86 kami sudah punya root, tapi di Sparc kami nggak punya exploit apa-apa. Kami bisa mengakses home dir yang sama (via NFS). Jadi pertama adalah pivoting: mengcopy shell di Sparc ke home directory, lalu di-chmod setuid root dari server x86. Sekarang kami punya akses di kedua server utama. Dari mana dulu tahu ilmu ini? sebenarnya semuanya cuma logika dasar aja. Setelah tahu konsepnya, mengembangkan hal-hal dasar seperti itu tidak sulit.

Keisengan berikutnya muncul: Deny mendownload source code program “login”, lalu menambahkan kode logging agar password disimpan ke file. Executable baru itu dipakai untuk menggantikan program login asli di kedua server. Hasilnya: kami dapat password semua orang.

Sebagai catatan: programming itu sangat perlu untuk seorang hacker. Sekarang ini banyak yang mengaku “hacker”, tapi kalau saya berikan source code saja dan saya minta untuk menambahkan logging kebanyakan tidak bisa.

Meskipun mendapatkan akses ke semua account, kami tidak tertarik membaca email atau file-file orang lain. Segala macam yang kami lakukan waktu itu cuma karena penasaran aja. Kami juga nggak mau mencoba teknik-teknik yang kami anggap nggak butuh skill teknis, contoh yang tidak kami lakukan:

  • Denial Of Service
  • Email bombing
  • Social engineering

Bagian social engineering ini: kami nggak pengen seseorang jadi merasa bersalah jadi korban Social engineering. Tujuan hacking waktu itu adalah: belajar teknis.

Tertangkap

Saya tidak tahu tepatnya apa yang membuat kami tertangkap. Seingat saya kami sudah sangat teliti: tidak memakai home directory sendiri, tapi memakai home directory dua mahasiswa ITB yang diterima tapi pindah keluar negeri. Kalau tidak salah ingat: ada keanehan di sistem dan itu menyebabkan penelusuran yang mendalam di sistem dan malah mengarah ke kami berdua.

Saya ingat waktu itu ada kuliah di salah satu gedung di tengah ITB (lupa tepatnya, antara Oktagon atau TVST), dosennya adalab Bu Putri. Kami sadar ada yang salah, karena di akhir kuliah tiba-tiba beliau memanggil: yang namanya Yohanes Nugroho mana ya? (saya berdiri), terus “kalau Deny Saputra?” (Deny berdiri). Terus udah: “silakan duduk, cuma pengen tahu yang mana sih orangnya”. Urutan memanggilnya begitu, karena NIM saya lebih rendah dari Deny.

Selesai kuliah itu saya dan Deny sudah tahu bahwa kami tertangkap. Saya diwawancara oleh Pak Riza Satria Perdana, lalu Deny juga (wawancaranya terpisah). Setelah semuanya selesai, kami diberi tahu bahwa sebenarnya yang kami lakukan itu bisa membuat kami di DO. Tapi Pak Riza mau memberi kesempatan, bahkan akhirnya saya menjadi administrator jaringan Informatika ITB.

Saya sebutkan di atas bahwa Okta juga mendapatkan root, tapi lolos dari interogasi. Kenapa? karena waktu interogasi, saya ditanya itu setuid shell punya siapa? saya bilang “nggak tau, mungkin Deny yang taruh situ”, dan ketika Deny ditanya: “nggak tau, mungkin Yohanes yang taruh di situ”.

Supaya jelas: meskipun kami sering ngehack bareng , bukan berarti tiap hari duduk berdua dan ngobrol berdampingan. Kami hacking terpisah, dan banyak diskusi. Kadang saya dan Deny duduk di lab terpisah dan berbicara dengan software “talk“. Jadi kami nggak tahu 100% apa yang dilakukan yang lain.

Penutup

Sejak kami tertangkap, kami jadinya pelan-pelan meninggalkan dunia security dan lebih fokus ke programming. Memasuki tahun kedua, sudah ada banyak tantangan dari berbagai tugas kuliah yang diberikan, jadi sudah tidak bosan lagi. Tapi masih ada juga sedikit jejak yang saya lakukan di bidang security setelah itu (misalnya ini).

Setelah itu saya banyak terlibat berbagai kegiatan lain, misalnya mengurus TOKI, ikut jadi programmer pengolah data di ITB, ikut proyek dosen, jadi asisten di universitas swasta, memberi les, dsb). Sedangkan Deny mengambil jalan hidup lain (silakan tanya sama Deny buat yang ketemu, nggak akan diceritakan di sini). Okta sekarang jadi expat di Timur Tengah.

Baru tahun 2014 saya mulai terlibat lagi di dunia security. Kerjanya hanya part time pentesting (sampai sekarang masih part time). Part time di sini artinya: dari Senin sampai Jumat saya kerja di perusahaan di Thailand sini menjadi programmer yang tidak ada hubungannya dengan produk security dan cuma di malam hari/weekend saya melakukan pentesting.

Tahun 2016 ikutan ngajak Deny untuk ikutan Flare On dan Pentesting. Ternyata ilmu Deny di bidang RE dan pentesting masih tajam walau tidak pernah khusus pentesting. Contohnya kelakuan hardcorenya ketika mengerjakan RHME (Hardware CTF): reversing statik assembly AVR (bukan kode C hasil decompiler), pake listing HTML dari IDA, di handphone, di kereta pulang sambil berdiri (dan flagnya ketemu).

Kami minta maaf buat yang dulu merasa kesal dengan kelakuan kami. Kami juga mengucapkan terima kasih untuk Pak Riza dan para dosen lain yang masih memberi kesempatan pada kami untuk bertobat dari kenakalan kami dan bisa meneruskan di ITB.

Setelah lama lulus, dapet cerita dari Tintin, ternyata kelakuan kami dulu sangat menginspirasi dia untuk belajar security. Bahkan Tintin sekarang sudah mengambil S2 security dari Carnegie Mellon University. Syukurlah, ternyata yang kami lakukan nggak sepenuhnya berefek negatif untuk orang lain :).

Kalau dari ingatan Tintin, ada banyak hal iseng lain yang kami lakukan, tapi karena saya nggak ingat, saya tidak ceritakan di sini. Walau mungkin dulu sengaja saya lupakan karena terlalu iseng. Seingat saya sih saya nggak pernah berniat jahat.

Tapi saya harap yang kami lakukan di atas tidak ditiru mentah-mentah. Jangan menghack kampus, sudah ada banyak cara lain yang legal untuk belajar security:

  • Ada bug bounty
  • Ada berbagai CTF
  • Ada berbagai sertifikasi yang bisa diambil

Hal yang patut ditiru adalah:

  • Semangat membaca artikel teknis
  • Semangat mencoba berbagai hal teknis secara umum
  • Semangat belajar programming

Kalau bisa ketemu orang atau kelompok yang membantu bertumbuh akan lebih baik lagi.

Happy Hacking

Mengenal Frida untuk Reverse Engineering

Salah satu tools reverse engineering yang sering saya pakai adalah Frida. Frida memungkinkan kita meng-intercept fungsi dalam C/native code (di berbagai sistem operasi), Java (di Android) dan Objective C (di macOS/iOS) dengan menggunakan JavaScript. Mungkin bagi sebagian orang deskripsi ini masih agak terlalu mengawang-awang, jadi akan saya berikan contoh nyata apa maksudnya mengintercept fungsi.

Saya berikan contoh program kecil seperti ini dalam C, yang hanya melakukan loop membuka satu file, mencetak sebaris dari file tersebut, lalu program akan sleep selama 1 detik. Program ini akan saya intercept dengan Frida.

Saya mengisi file1 dengan string “Yohanes Nugroho” dan file2 dengan string “Risnawaty”, jadi ketika dijalankan outputnya seperti ini:

Jenis intercept pertama adalah hanya sekedar memonitor pemanggilan fungsi. Dalam kasus ini saya memakai cara mudah memakai frida-trace dan meminta agar fungsi “open” ditrace. Pertama kita jalankan test-open di satu window, dan frida-trace di Window lain.

Sebagai catatan: fungsi C fopen akan memanggil fungsi “open”. Jadi kita juga bisa mengintercept “open”, dan hasilnya seperti ini:

Saya lebih suka bekerja dengan fungsi yang levelnya lebih dekat ke kernel, karena tidak perlu khawatir dengan berbagai detail implementasi di library C. Contohnya: fungsi fwrite akan membuffer penulisan ke file, sedangkan jika kita memakai write, akan langsung dituliskan. Contoh masalahnya ketika memakai fwrite kadang bingung: loh kenapa isi filenya masih sama? oh ternyata belum di-flush.

Dari contoh ini sudah bisa terlihat satu kegunaan tools ini: untuk melihat parameter sebuah fungsi. Dalam kasus tertentu ini sangat berguna, misalnya Kita bisa melihat key apa yang dipakai oleh sebuah fungsi enkripsi dengan memonitor fungsi enkripsi. Selain memonitor, kita bisa mengubah mengganti sesuatu, tidak sekedar memonitor.

Program frida-trace akan otomatis membuat file javascript sesuai nama fungsinya di direktori __handlers__. Dalam kasus ini didapati ada dua fungsi open: didalam libc dan libpthread. Dalam kasus ini yang akan terpakai adalah open di dalam libc. File Javascript yang dihasilkan oleh frida-trace seperti ini:

Intinya adalah: ketika masuk ke fungsi open, maka log/cetak parameter fungsinya. Sekarang kita bisa mengganti agar jika file1 dibuka, kita ganti dengan file2, seperti ini:

Sekarang kita bisa mencoba lagi menjalankan frida-trace. Di Window atas adalah program sebelumnya. Di bawahnya saya menjalankan frida-trace (dengan Javascript yang sudah dimodifikasi). Hasilnya di awal program akan mencetak “Yohanes Nugroho”, dan ketika frida-trace dijalankan, file yang dibuka diganti dengan file2 yang berisi “Risnawaty”. Ketika frida-trace dihentikan, fungsi dikembalikan seperti semua.

Perhatikan bahwa saya tidak mengubah sama sekali program test-open. Program tersebut dijalankan apa adanya seperti semula. Dengan kemampuan untuk mengubah parameter (dan juga kembalian fungsi, dalam onLeave), maka kita bisa membypass berbagai proteksi sederhana misalnya membuat isJailbroken() mengembalikan false, atau membuat layar administrator di aplikasi mobile bisa diakses user biasa. Dalam kasus tertentu ini bisa gawat jika ternyata checking hanya dilakukan lokal dan bukan di server.

Ketika mengintercept fungsi, Frida bisa memetakan dari calling convention menjadi objek javascript, misalnya register RDI di calling convention x86_64 menjadi isi args[0], dan ketika mengubah args[0] ini dipetakan agar mengubah RDI. Translasi calling convetion ini otomatis, jadi kita tidak perlu tahu di ARM memakai register apa untuk parameter pertama. Selain intercept fungsi, frida juga bisa mengintercept alamat tertentu (satu titik). Di mode ini, kode kita akan dipanggil tiap kali alamat tersebut dilewati (seperti breakpoint di debugger) tapi tidak ada pemetaan register atau stack ke argumen, jadi register dan memori perlu diakses manual.

Dalam banyak kasus, Frida bisa menggantikan peran debugger. Biasanya ketika melakukan RE Native Code, saya akan membaca kodenya, memahaminya, lalu biasanya perlu tahu nilai sebuah register atau isi memori tertentu. Dengan debugger, saya akan melakukan breakpoint di sebuah fungsi, lalu melihat isi registernya di titik itu atau mengubah nilai registernya. Dengan Frida, saya bisa menulis skrip untuk mengintercept alamat tertentu, dan di situ saya bisa melakukan aksi apapun dengan Javascript, misalnya:

  • Memprint isi register (atau mengubah registernya)
  • Mencetak backtrace fungsi (mengetahui fungsi mana yang memanggil fungsi ini)
  • Memprint isi memori (atau bahkan mengubahnya)

Perlu diperhatikan bahwa: kita perlu tahu dengan tepat fungsi apa yang perlu diintercept. Ini bisa dilakukan dengan static analysis (menggunakan disassembler/decompiler). Seperti contoh yang saya berikan: kita bisa melakukan intercept pada fungsi/API yang umum (open) tanpa mengetahui kodenya.

Cara kerja Frida

Ada banyak tulisan mengenai Frida, tapi kebanyakan hanya membahas satu hal kecil saja (kebanyakan untuk intercept API di Android saja). Di sini akan saya bahas sedikit lebih luas, supaya bisa memakai Frida di platform mana saja, bukan hanya untuk intercept aplikasi mobile.

Secara umum sebagian besar kode Frida ditulis dalam C dan bahasa Vala. Karena Frida memakai Javascript sebagai bahasa untuk mengontrol target, sebagian API Frida ditulis dalam Javascript. Tools command line Frida ditulis dengan Python, dan API utama Frida adalah dalam C. API Frida juga bisa diakses berbagai bahasa (Python/Java/.NET/Node dsb).

Hal pertama yang harus dipahami adalah: Frida perlu berjalan di address space proses yang menjadi target. Ada beberapa cara frida bisa masuk ke address space proses lain:

  • Kita compile source code kita dengan menginclude library Frida (dengan frida-gum-devkit, atau frida-gumjs-devkit)
  • Kita load library Frida (frida-gadget) dengan fitur OS tertentu, misalnya LD_LIBRARY_PATH di berbagai OS sejenis Unix (misalnya Linux), atau injeksi dylib di iOS/macOS. Intinya kita mengubah program atau lingkungan program agar library Frida diload sebelum program berjalan.
  • Injeksi program yang sudah berjalan menggunakan ptrace atau API sejenis. Injeksi bisa dilakukan secara langsung atau menggunakan frida-server.

Injeksi ke proses menggunakan API ptrace hanya bisa dilakukan jika kita memiliki permission untuk melakukan debugging pada proses tersebut (di iOS kita butuh jailbreak jika ingin memakai cara ini). Program frida-server berguna jika kita ingin mengakses API dari device lain, misalnya di Android yang sudah di-root, kita bisa memakai frida-server untuk melakukan injeksi dan sekaligus menjadi jembatan agar API-nya bisa diakses dari PC.

Saya tidak akan membicarakan dengan detail bagaimana melakukan berbagai langkah di atas, karena tiap OS butuh penjelasan yang detail. Contoh di iOS (tanpa jailbreak) kita harus mengekstrak IPA (harus unencrypted), mengcopy library, mengedit load command di binary utama, menandatangani file IPA. Masing-masing langkah butuh penjelasan yang tidak singkat. Intinya adalah: kita harus bisa membuat Frida berjalan di aplikasi target.

Setelah bisa berjalan di address space target, Frida akan menulis ulang implementasi assembly fungsi yang kita intercept supaya melakukan jump ke library frida yang sudah ada di address space proses tersebut. Di sini ada magic yang dilakukan Frida: frida akan melakukan tracing statik untuk mengetahui di mana saja titik keluar fungsi dan membuat hook juga di situ untuk onLeave.

Frida kemudian akan bisa memanggil kode Javascript yang kita tulis. Ada dua opsi engine Javascript yang bisa dipakai: V8 dan Duktape, secara umum V8 lebih cepat, tapi butuh lebih banyak memori, dan duktape sebaliknya: lebih lambat tapi hemat memori. Ketika melakukan detach, frida akan mengembalikan kode yang diubah kembali seperti semula.

Modul Frida

Jika melihat halaman release frida, akan ada banyak sekali file yang bisa didownload. Ini mungkin akan sangat membingungkan buat pemula, jadi akan saya jelaskan secara singkat berbagai file yang bisa didownload di situ.

Frida tertarget sangat spesifik untuk sistem operasi tertentu, jadi ada banyak rilis Berdasarkan sistem operasi (android, ios, windows, dsb). Frida juga perlu dicompile spesifik untuk arsitektur CPU tertentu, jadi ada banyak arsitektur CPU: x86-64, arm, arm64, dsb. Jadi pertama kita bisa menyaring untuk OS dan CPU mana yang ingin kita pakai.

Frida dipisahkan menjadi banyak modul:

  • Kita bisa menginjeksikan kode langsung dengan memanggil API Frida dalam C. Jika ingin melakukan ini downloadlah frida-core-devkit
  • Jika kita ingin memakai frida di aplikasi yang ada source codenya, kita bisa mendownload frida-gum-devkit atau frida-gumjs-devkit
  • Jika kita ingin menginjeksi satu proses saja di iOS/Android, kita bisa memakai frida-inject
  • Jika kita ingin menginjeksi berbagai proses mengaksesnya dari device lain (misalnya injeksi Android/iOS dan akses API-nya dari PC) kita bisa memakai frida-server
  • Jika kita ingin manual memasukkan library dengan LD_LIBRARY_PATH atau dylib injection, kita bisa memakai frida-gadget

Selain kode di atas, ada beberapa API bindings untuk berbagai bahasa: Python, nodejs, Java, QML (Qt), Swift, dan .NET. Untuk pemula: sebaiknya gunakan Python saja, ada banyak contohnya, sedangkan untuk bahasa lain masih minim.

Secara praktis, berikut ini yang perlu dilakukan untuk pemula:

  • Di desktop: “pip install frida frida-tools” ini sudah cukup untuk debugging aplikasi lokal di desktop
  • Di Android: sebaiknya root HP Anda, lalu gunakan frida-server
  • Di iOS (karena Jailbreak semakin sulit): gunakan frida-gadget

Penutup

Sudah ada banyak sekali contoh penggunaan Frida di berbagai situs lain, misalnya untuk: disable certificate pinning, mendapatkan key enkripsi, bypass jailbreak check, dsb. Jadi silahkan dicari sendiri sesuai kebutuhan. Di Artikel lain saya akan membahas beberapa trik yang saya pelajari setelah cukup lama memakai Frida.

Menurut saya Frida merupakan tools yang sangat powerful yang bisa membantu banyak task reverse engineering. Tahun lalu saya banyak menyelesaikan Flare-On dengan Frida. Bahkan saya juga memakai Frida ini untuk debugging secara umum di aplikasi saya yang ditulis dalam C/C++.

Meskipun demikian Frida juga memiliki berbagai masalah: dokumentasi Frida cukup terbatas dan sering kali saya harus membaca source codenya untuk memahami berbagai hal. Selain itu Frida juga masih terus diupdate, sering kali versi baru membawa banyak fitur baru, tapi seringkali juga membuat error baru. Tadinya saya ingin membuat contoh yang lebih sederhana, tapi terkena error ini (saat artikel ini ditulis: belum ada solusinya).

Saran saya: cobalah memakai Frida. Tools ini masih terus dikembangkan secara aktif. Frida juga cross platform, jadi toolsnya akan terpakai di banyak tempat tidak seperti tools spesifik OS tertentu (misalnya WinDBG yang hanya untuk Windows).

Pinjaman Online Ilegal dan Data Anda

Beberapa waktu yang lalu sempat ada berita tentang pinjaman online (ilegal) yang servernya terbuka dan ternyata di dalamnya ada banyak data lain, termasuk data dari provider seperti Telkomsel, XL, Go-Jek dsb. Saya tidak akan membahas mengenai kasus ini secara spesifik karena informasinya sudah diserahkan ke kominfo dan OJK via Xynexis dan saat ini sedang diproses.

Saya hanya ingin membahas: dari mana pinjaman online ini mendapatkan berbagai data pribadi. Data yang saya maksud contohnya data telkomsel ( berapa sisa saldo, kapan terakhir kali mengisi), gojek ( data perjalanan yang pernah dilakukan), dan berbagai layanan lain.

Jawabannya sangat sederhana: dari user itu sendiri secara sukarela. Loh kok ada yang mau memberikan data secara sukarela? karena ada rewardnya. Dalam kasus pinjaman online: jika user bersedia login ke layanan tertentu, maka limit pinjamannya akan dinaikkan.

Perlu diketahui ada beberapa perusahaan (setahu saya semuanya dari China) yang menyediakan SDK (software development kit) untuk memudahkan mendapatkan data dari user Jadi sebuah perusahaan pinjaman tidak perlu repot-repot mempelajari bagaimana protokol Go-jek atau Telkomsel, cukup install SDK tersebut maka aplikasi bisa menerima data dari pengguna.

Contoh penggunaan SDK

Sumber data yang bisa diminta sangat banyak, ini contohnya dari satu perusahaan saja bisa menyediakan ini semua. Masih ada juga beberapa perusahaan yang menyediakan sumber data lain, misalnya BPJS.

Tentunya pihak ketiga tersebut juga bisa menyimpan data untuk tiap orang yang datanya diambil. Jadi jangan kaget kalau data yang tidak pernah diinput di satu aplikasi bisa didapatkan oleh aplikasi lain.

Dengan data ekstra ini para pemberi pinjaman online akan bisa melakukan banyak hal, misalnya:

  • melakukan profiling apakah seseorang punya risiko tinggi untuk kabur
  • mengetahui semua alamat pengiriman belanja online
  • memberi tahu debt collector untuk menunggu Anda di tempat yang biasa Anda datangi dengan Gojek

Penutup

Saya menyarankan: jangan pakai jasa peminjaman online. Alasan utamanya: bunganya sangat tinggi. Untuk yang ilegal, ada banyak masalah:

  • Mereka kadang menggunakan cara kasar untuk penagihan
  • Data pribadi Anda bisa bocor ke mana-mana (dengan sengaja oleh mereka)
  • Mereka tidak menginvestasikan uang untuk keamanan server, jadi data Anda bisa tersebar ke mana-mana karena server mereka dijebol orang lain (atau bahkan kadang terbuka di Internet)
  • Anda juga membocorkan data orang lain (data orang-orang di phonebook Anda)

Kalau bisa sih, jangan miskin supaya tidak butuh pinjaman, tapi tentunya ini sulit.

Sumber dari Video: Lessons from the longest study on human development | Helen Pearson

Biaya Reverse Engineering

Saya pernah menuliskan mengenai mahalnya membuat aplikasi mobile. Saya juga pernah menulis mengenai ransomware dan RE dan betapa sulitnya hal tersebut. Tapi sepertinya banyak yang belum paham bahwa RE juga mahal (untuk yang tidak tahu apa itu RE, silakan baca FAQ berbahasa Indonesia di sini). Ini untuk menjawab berbagai pertanyaan orang yang ini minta bantuan untuk: Reverse engineering game, reverse engineering malware/ransomware, cracking software tertentu, dan segala macam bantuan yang berhubungan dengan reverse engineering.

Jumlah orang yang bisa melakukan reverse engineering di dunia ini tidak banyak. Sesuai hukum supply dan demand: karena yang bisa melakukan RE relatif sedikit maka harga jasanya jadi mahal. Reverse engineering juga butuh waktu cukup lama. Jangan bayangkan RE ini sekedar membuka IDA Pro atau tool sejenis dan langsung bisa menemukan di mana harus patch sesuatu atau menemukan algoritma tertentu.

Coba minta seorang programmer membaca kode program di github dan minta dia memodifikasi sesuatu. Berapa banyak yang langsung bisa memahami isi sebuah program yang lumayan kompleks? Banyak programmer bahkan sudah menyerah duluan karena tidak bisa mengcompile programnya. Reverse engineering kode biner akan butuh waktu jauh lebih lama dari membaca source code yang lengkap ada komentar dan dokumentasinya.

Harga jasa RE juga akan lebih mahal jika program memiliki proteksi kompleks. Jika harga sebuah software hanya puluhan hingga ratusan USD: masih lebih murah membeli software tersebut daripada membayar orang untuk mengcracknya.

Dalam kasus malware dan ransomware : jarang sekali malware yang tidak diproteksi, jadi proses reversingnya tidak sebentar. Belum lagi ada banyak sekali varian ransomware yang masing-masing versinya sudah berbeda sama sekali. FireEye dulu menyediakan jasa decrypt ransomware, tapi kemudian terlalu banyak varian yang ada, jadi mereka sudah tidak mau lagi menghabiskan sumber daya untuk ini:

If your computer has recently been infected with ransomware, chances are that the infection has been caused by one of the many copycat attacks that use the same or similar name and method of operation. Since these new ransomware variants use different encryption keys, we have discontinued the DecryptCryptoLocker website and its associated decryption service.

https://www.fireeye.com/blog/executive-perspective/2014/08/your-locker-of-information-for-cryptolocker-decryption.html

Saat ini saya tidak tertarik untuk mereverse engineer ransomware, apalagi jika diminta tolong secara gratis. Analisis malware butuh waktu minimal beberapa jam dan bisa sampai berhari-hari. Meskipun jika sedang tidak ada proyek lain, saya lebih senang menghabiskan waktu ini bersama keluarga. Saya sudah menulis lebih banyak mengenai ransomware di posting ini.

Orang yang ahli dan terbukti bisa melakukan RE biasanya sudah punya pekerjaan. Ada banyak jalan untuk menghasilkan uang dari skill RE, baik jalan legal, ilegal, atau yang di tengah-tengah. Orang-orang yang sudah mendapatkan banyak uang dari aktivitas-aktivitas tersebut biasanya akan malas menerima pekerjaan baru.

Melakukan RE pada aplikasi tertentu secara rutin biasanya akan lebih mudah. Kode program biasanya tidak berubah drastis dari satu versi ke berikut, jadi jangan heran juga jika seseorang lebih memilih melakukan pekerjaan RE yang rutin daripada menerima proyek yang sesekali datang.

Pekerjaan RE Legal

Pekerjaan RE legal biasanya di bidang software security (walau tidak selalu). Ada beberapa pekerjaan yang berhubungan dengan RE:

  • Reversing malware. Kerjanya membongkar berbagai malware/virus baru tiap hari
  • Mencari bug di software dan membuat exploit untuk software tersebut
  • Mencari bug di hardware dan membuat eksploit untuk hardware tersebut
  • Memberikan training. Banyak perusahaan mulai memperhatikan masalah security, jadi para engineer diharapkan bisa membongkar sendiri hasil kerja mereka apakah aman atau tidak
  • Pentesting aplikasi (baik resmi ataupun untuk bug bounty)
  • Rekonstruksi program berdasarkan program lama yang source codenya hilang

Saat ini kebanyakan pekerjaan legal seperti ini didapatkan dari luar Indonesia karena belum terlalu banyak riset security tingkat lanjut di Indonesia. Negara paling dekat yang membutuhkan banyak reverse engineer adalah Singapura.

Ada juga jalan legal unik yang dilakukan oleh Jane Wong. Dia melakukan RE berbagai aplikasi mobile untuk mengetahui fitur apa yang belum dirilis. Dalam artikel tersebut dituliskan bahwa dia menghabiskan 18 jam sehari untuk melakukan reverse engineering berbagai aplikasi.

Dengan jalan legal, gaji yang didapatkan bisa cukup banyak. Semakin tinggi skillnya, makin besar yang bisa didapatkan. Gaji terendah sudah setara dengan gaji programmer level menengah. Untuk kasus yang sangat ekstreem: jika sudah sangat jago RE, maka bisa menemukan dan membuat eksploit zero day yang harga per eksploitnya puluhan ribu hingga ratusan ribu USD. Bahkan exploit untuk iOS bisa dihargai hingga 1 juta USD.

Pekerjaan RE ilegal

Bagaimana dengan yang ilegal? Ada banyak hal ilegal yang bisa dilakukan, misalnya:

  • Cracking aplikasi (menghilangkan proteksi tertentu)
  • Hacking game (modifikasi game)
  • Hacking aplikasi (mengubah/menambah fungsionalitas tertentu, misalnya aplikasi Go-Jek)

Apakah bisnis ilegal ini menghasilkan uang banyak? jawabannya: iya, banyak sekali. Baru-baru ini Niantic (pembuat Pokemon Go) menuntut group Hacker yang membuat mod IPA game Pokemon Go dan Wizards Unite. Dalam tuntutannya disebutkan bahwa para hacker ini menggunakan Patreon di mana para pengguna bisa membayar biaya bulanan untuk mendapatkan modnya. Para pengguna harus membayar minimum 5 USD, dan jumlah total pengguna sudah lebih dari 10 ribu orang. Artinya mereka mendapatkan minimum 50 ribu USD per bulan.

Pokemon Go bukan satu-satunya game yang dicurangi hacker, masih ada banyak contoh game yang lain, hanya saja yang lain lebih susah dilacak karena memakai cryptocoin dan memakai group yang tertutup. Biasanya proses mencurangi game bukan sekedar membaca kode, tapi juga menulis kode baru. Contoh game lain juga masih banyak, misalnya ada hacker yang didenda 5.1 juta dollar karena hacking PUBG dan mencuri informasi user. Bahkan tanpa RE pun, cheating di berbagai game ini imbalannya sangat menjanjikan, misalnya ada contoh kisah bagaimana seorang remaja 16 tahun mendapatkan 200 ribu USD dari hacking game.

Di dalam negeri Indonesia ada juga mereka yang memodifikasi APK Gojek dan Grab (contoh berita: Grab rugi 6 milyar dari order fiktif). Saya tidak tahu berapa jumlah pengguna yang memakai APK yang dimodifikasi ini, tapi dari pengamatan saya di berbagai forum internet, jumlahnya setidaknya ribuan orang. Saat ini ada lebih dari 2 juta driver Go-jek, jadi mungkin perkiraan saya itu terlalu rendah, mungkin ada puluhan ribu orang yang memakai APK yang dimodifikasi. Uang bulanan untuk mendapatkan APK antara puluhan sampai ratusan ribu rupiah. Jadi para hacker ini mendapatkan setidaknya puluhan juta rupiah per bulan.

Di Singapore, Aplikasi Grab dan GO-JEK juga dihack dengan tarif 200-350 SGD/bulan. Andaikan bagian RE mendapatkan 10% saja (20-35 USD per driver), dari 100 driver bisa didapatkan 2000-3500 SGD (20-35 juta rupiah per bulan). Angka tersebut merupakan perkiraan yang sangat rendah, baik dari share untuk RE (bisa 25% atau lebih), maupun jumlah usernya (bisa ribuan).

Dengan banyaknya kesempatan mendapatkan uang dari RE ilegal, jangan heran jika tidak banyak yang mau mengcrack software untuk Anda (meskipun Anda berani membayar). Kemungkinan sudah ada pekerjaan ilegal lain yang hasilnya lebih besar dan lebih teratur.

Pekerjaan RE abu-abu

Lalu bagaimana dengan yang abu-abu? contohnya adalah reverse engineering aplikasi untuk mendapatkan API-nya, reverse engineering hardware untuk membuat clonenya atau membuat aksesori tambahan. Di beberapa negara ini ilegal, di tempat lain bisa dianggap legal karena bertujuan untuk interoperabilitas.

Contoh hal lain yang abu-abu adalah membongkar skrip trading untuk mengetahui strategi apa yang dipakai seseorang. Selama strateginya tidak dicopy dan disebarkan umum, ini sulit dituntut karena tujuannya hanya untuk mempelajari sesuatu.

Penutup

Seperti saran saya di tulisan mengenai aplikasi mobile: jika Anda merasa memakai jasa orang lain terlalu mahal, cobalah belajar sendiri RE. Sering kali orang merasa sesuatu terlalu mahal, tapi tidak mau juga belajar sendiri.

Saya sendiri jarang sekali menerima pekerjaan RE ekstra dari yang sudah saya lakukan sehari-hari. Jika ditanya siapa kenalan yang bisa melakukan RE, saya juga sering bingung karena mereka masing-masing juga sudah penuh dengan pekerjaan legal/ilegal/abu-abu.

OSCP

Posting ini akan membahas pengalaman saya mengambil sertifikasi Offensive Security Certified Professional (OSCP). OSCP merupakan sertifikasi di bidang security yang fokusnya adalah pentesting. Kebanyakan sertifikasi security hanya merupakan pertanyaan pilihan berganda, tapi dalam OSCP ujiannya adalah praktik langsung dengan mendapatkan akses ke 5 mesin dalam sebuah lab dalam waktu 23 jam 45 menit. Tidak ada soal pilihan ganda sama sekali. Setelah itu peserta perlu menulis laporan dalam 24 jam berikutnya untuk menjelaskan bagaimana bisa mendapatkan aksesnya.

Sebelum Agustus 2018 OSCP ini ujiannya tidak diawasi. Jadi seseorang diberi akses VPN ke lab, lalu ditunggu hasilnya besok. Hasilnya: banyak orang curang, memakai joki, meminta bantuan, dsb. Akhirnya sekarang OSCP ini diawasi dengan webcam dan screen sharing (istilahnya: proctored).

Buat yang tidak ingin membaca detail: saya lulus dengan akses lab 30 hari (saya hanya pakai sekitar 3 minggu) dan lulus di ujian pertama dengan skor 100 poin. Total biaya untuk sertifikasi ini dengan akses lab minimum dan sekali ujian langsung lulus adalah: 800 USD (~11 jt rupiah).

Perlukah sertifikasi ini?

Sebenarnya bagi saya pribadi, sertifikasi ini tidak terlalu perlu. Saya masuk ke dunia security tanpa sertifikasi apa-apa. Berbagai tulisan berbahasa Inggris yang ada di blog saya tinyhack.com dan berbagai karya di github dan tulisan di blog ini sudah lebih dari cukup untuk mendapatkan tawaran pekerjaan di berbagai negara. Saya sendiri saat ini masih kerasan di Chiang Mai dalam bidang software development dan belum berniat pindah ke mana-mana.

Karena saya tidak memiliki tekanan mendapatkan sertifikasi ini, saya tidak memiliki beban sama sekali dalam mengerjakan lab dan ujiannya. Dan ini membuat saya bisa mengerjakan dan mendapatkan sertifikasinya dengan relatif mudah.

Sebagai catatan: sering kali dalam hidup ini ijazah dan sertifikasi tidak menunjukkan skill tertentu. Tapi tetap saja ijazah dan sertifikasi bisa membuka banyak jalan. Contohnya: jika ingin bekerja di luar negeri, ijazah sarjana atau master akan sangat memudahkan untuk urusan Visa dibandingkan ijazah SMP atau SMU. Jika ingin melamar pekerjaan tertentu, kadang-kadang HR sudah membuang duluan CV tanpa sertifikasi padahal mungkin kemampuannya lebih hebat.

Sertifikasi OSCP ini cukup dipandang positif di banyak tempat (internasional). Setidaknya jika seseorang lulus OSCP (secara jujur), maka kemampuan memakai berbagai tool dasar, kemampuan menggunakan eksploit baru tanpa bergantung metasploit sudah teruji. Sedangkan pada sertifikasi lain yang teruji hanya kemampuan menghapal teks.

Meski OSCP ini cukup dikenal, tapi ada juga perusahaan-perusahaan yang butuh sertifikasi “hapalan” seperti CEH. Menurut saya seseorang yang sudah lolos OSCP akan relatif mudah mengambil sertifikasi lain yang sifatnya hapalan.

Untuk mahasiswa atau orang IT secara umum (baik itu software developer, sysadmin dsb) yang ingin terjun ke dunia security atau pentesting, sertifikasi ini cukup disarankan. Dengan sertifikasi ini, akan cukup mudah untuk mencari pekerjaan di dunia pentesting.

Jika Anda merasa bahwa Anda sudah jago dalam bidang security tapi tidak punya karya yang bisa ditampilkan (misalnya karena kebanyakan yang Anda lakukan adalah illegal), maka ikut OSCP ini juga bisa jadi jalan untuk menunjukkan kemampuan Anda secara legal. Kalau memang sudah beneran jagoan, maka ikut OSCP ini akan sangat mudah. Tapi kalau ternyata belum sejago itu, berarti masih ada hal-hal yang ternyata belum dikuasai dan perlu diperdalam.

Motivasi pribadi

Lucunya beberapa hari sebelum ujian, saya baru mendapatkan wawancara teman saya Tintin tahun lalu:

https://book.theprasojos.id/download/169/pdf/169.pdf

Kalau merasa tidak perlu, lalu kenapa mengambil sertifikasi ini? Tahun ini saya sedang ingin belajar banyak hal. Menurut saya perlu untuk sesekali merefresh ilmu. Minat saya terlalu banyak, dari mulai elektronik, embedded system, security, jaringan, software development, sampai AI. Awal tahun saya sudah mengambil 6 course dalam topik AI dari Coursera. Lalu saya menimbang-nimbang ingin belajar topik tertentu dengan sertifikasi.

Saya memiliki beberapa kriteria sertifikasi:

  • Sertifikasinya yang ada nilainya, andaikan suatu saat dibutuhkan di masa depan (contoh sertifikasi lain yang berharga adalah dari Cisco, sedangkan sebagian sertifikasi tidak dipandang sama sekali)
  • Tidak akan expired (saya malas memperbarui)
  • Bisa dilakukan online (saya malas datang ke tempat tertentu untuk sertifikasi saja)

Sebenarnya saya tadinya lebih tertarik ke berbagai sertifikasi jaringan (seperti dari Cisco atau Juniper), tapi semua sertifikasinya butuh diperbarui setiap beberapa tahun padahal sertifikasinya tidak akan saya pakai (tidak berniat pindah jadi network admin).

Pilihan akhirnya jatuh ke OSCP. Sebenarnya ada juga sertifikasi lain dari Offensive Security: OSCE dan OSEE. OSCE berfokus pada exploit development level menengah dan OSEE di level yang lanjut. Tapi sepertinya saat ini kebutuhan di banyak tempat baru di level OSCP, jadi saya putuskan untuk mengambil OSCP. Saya sering menyarankan orang mengambil OSCP, tapi saya sendiri belum pernah, jadi ya sekalian biar bisa merasakan nasihat saya.

Sebagai informasi saja: jika tertarik bekerja di tempat yang berfokus pada reverse engineering dan exploit development, saya lebih menyarankan menyelesaikan Flare On. Jika selesai Flare On, kita bisa langsung wawancara dengan FireEye. Dari Flare On saya juga jadi kenal banyak orang di dunia malware dan low level research yang menawarkan pekerjaan dan proyek di bidang RE.

Materi dan Lab

Saat ini saya menjadi remote pentester untuk PT Xynexis (sudah beberapa tahun jadi pekerjaan part time, pekerjaan full time saya tetap di Chiang Mai). Xynexis mendukung rencana saya mengambil OSCP, jadi saya mendaftar di bulan April, dan mengambil lab 30 hari (biayanya 800 USD), jika ingin 60 hari 1000 USD, dan jika ingin 90 hari: 1150 USD. Akses lab di sini artinya secara remote dengan VPN.

Sebagai catatan: waktu kita mendaftar kita tidak langsung akan bisa mendapatkan langsung akses lab maupun materi. Biasanya akses lab dan materi akan didapatkan beberapa minggu sesudah kita mendaftar nanti. Dalam salah satu langkah pendaftaran akan ditunjukkan kapan lab bisa tersedia. Jadi jika ingin mengakses lab mulai saat tertentu (misalnya pas liburan), maka daftarlah jauh-jauh hari.

Materi yang diberikan berupa Video dan satu diktat. Saya hanya menonton sekilas beberapa videonya. Bagi saya melihat video memakan waktu terlalu lama dan menurut saya materinya terlalu sederhana. Untuk pemula, video akan sangat membantu.

Perlu diperhatikan bahwa materi dan video di-watermark per orang, jadi tidak boleh dibocorkan/diberikan pada siapapun. Risikonya adalah: OSCP bisa dicabut sertifikasinya dan akan di-ban tidak boleh mengambil sertifikasi lain apapun dari offensive security.

Diktat yang diberikan juga hanya menyentuh berbagai permukaan saja. Tapi ini tidak apa-apa, karena dalam kehidupan nyata kita harus banyak mencari di Google untuk informasi keamanan dan eksploit terbaru. Ada banyak soal latihan yang bisa dikerjakan. Jika kita mengerjakan semua soal latihannya, maka jawabannya bisa dituliskan dan digabung dengan laporan lab untuk mendapatkan 5 point ekstra. Point ekstra ini hanya berguna kalau misalnya ketika ujian nilai kita ada di ambang batas.

Selain video dan diktat, peserta juga mendapatkan akses ke forum OSCP. Di dalamnya ada beberapa informasi ekstra dan diskusi mengenai masing-masing mesin. Tentunya selain forum resmi, peserta juga bisa bergabung dengan berbagai komunitas lain di tempat lain (misalnya di reddit).

Tidak ada panduan khusus dalam mengerjakan lab. Intinya adalah kita harus bisa masuk ke sebuah mesin dan mendapatkan file bukti di dalamnya. Di forum diberikan satu contoh bagaimana masuk ke sebuah mesin, lalu sisanya perlu dipikirkan sendiri. Jika bingung, kita bisa membaca sedikit hint di forum (tapi hintnya biasanya tidak jelas). Ada puluhan mesin yang bisa kita hack dalam beberapa jaringan yang terhubung, awalnya kita hanya diberi akses ke jaringan publik dan jaringan lain baru bisa terbuka setelah kita menyelesaikan mesin tertentu.

Walau punya akses 30 hari, saya hanya mengakses lab sekitar 3 minggu pertama, menyelesaikan seluruh jaringan publik dan sebagian jaringan lain. Seminggu terakhir saya sudah sibuk dengan hal lain. Saya juga sempat berlatih di Hack The Box (HTB) menyelesaikan sekitar 10 mesin. Sebagian besar mesin di HTB menurut saya lebih sulit dari lab OSCP.

Akses lab saya berakhir di pertengahan Mei dan saya menjadwalkan ujian di awal bulan Juli. Jadwal ujian dipilih oleh kita sendiri dalam batas tanggal dan slot waktu yang tersedia. Sebenarnya menurut saya awal Juli sudah terlalu jauh dari tanggal lab, tapi saya perlu mengatur agar tidak mengganggu jadwal kegiatan hidup yang lain.

Ujian

Sebelum ikut ujian, baca dulu segala macam aturan di URL ini dan pahami semuanya. Kalau ada yang kurang jelas, tanyakan pada offensive security:

https://support.offensive-security.com/oscp-exam-guide/

hal-hal yang sering tidak diperhatikan peserta:

  • Ada batasan pemakaian tool metasploit (cuma boleh maksimum sekali, tidak boleh diulangi jika gagal)
  • Screenshot sangat penting untuk laporan, jangan sampai terlewat requirementnya (harus terlihat IP server dan isi file bukti)
  • Isi file bukti harus dikirimkan ke control panel. Cek lagi sebelum ujian selesai. Saya sempat salah klik dan ada submission terhapus, untungnya ini saya cek ulang
  • Ada tool-tool yang tidak boleh dipakai (misalnya sqlmap dan berbagai tool otomatis lain, cek di url di atas untuk lebih jelasnya)

Saya pernah membaca: ada yang ujiannya nilai 100 tapi gagal karena memakai metasploit 2 kali. Jadi perhatikanlah hal-hal kecil seperti itu. Saya sendiri tidak memakai metasploit sama sekali ketika ujian.

Untuk ujian sebaiknya kita melakukannya di tempat yang tidak terlalu banyak gangguan. Pastikan koneksi internet stabil dan punya cadangan akses internet misalnya via 4G. Sekitar 15 menit sebelum ujian kita akan diberi email instruksi bagaimana melakukan koneksi. Akan ada instruksi spesifik yang diberikan mengenai target, jadi bacalah ini dengan teliti. Dijelaskan masing-masing poin dari tiap mesin, jadi kita bisa mengatur strategi mesin mana duluan yang akan kita serang.

Untuk bisa lolos minimal kita mendapatkan skor 70 dari 100. Ada target yang terbagi dalam dua bagian: mendapatkan shell user dan shell root/administrator. Nilai poin adalah jika kita mendapatkan akses penuh menjadi root/administrator, tidak diberikan penjelasan berapa poinnya jika hanya berhasil shell user saja (kalau saya baca di forum nilainya: 50% atau kurang dari poin penuh). Perlu diperhatikan bahwa laporan juga harus lengkap, jadi walaupun nilai sudah cukup di ambang batas ada kemungkinan tidak lulus jika laporan tidak lengkap.

Ketika ujian disarankan memakai Virtual Machine (VM) Kali Linux, tapi saya memutuskan memakai Linux saja (Debian) langsung tanpa VM di laptop Thinkpad X230 (dengan RAM 6 GB). Waktu berlatih/mengakses lab saya memakai VM Kali, dan ternyata di laptop saya ada beberapa tool yang lupa saya install dan memakan waktu saya. Kalau Anda khawatir dengan berbagai hal, pakailah VM.

Bos saya tahu mengenai ujian ini dan saya diberi tawaran oleh bos untuk menggunakan satu ruangan di kantor untuk ujian jadi bisa bebas dari gangguan anak-anak. Saya memilih waktu mulai jam 9 pagi, istirahat makan siang sejam dan istirahat makan malam 30 menit, saya selesai seluruhnya 100 poin pada jam 9 malam. Sebenarnya sore hari saya sudah memiliki poin yang cukup untuk lulus, tapi saya masih penasaran dan akhirnya menyelesaikan semua sisanya.

Karena ada jeda waktu cukup lama dari sejak terakhir mengakses lab dan waktu ujian, saya tidak langsung bisa fokus dan bahkan 3 jam pertama hanya berhasil mendapatkan user shell di mesin 20 poin (artinya nilai saya baru dapat 10 poin atau kurang). Andaikan bisa langsung fokus, maka seharusnya bisa selesai jauh lebih cepat.

Beberapa tips yang bisa saya berikan adalah:

  • OSCP adalah sertifikasi level awal, kita tidak diminta membuat eksploit sendiri. Jika eksploit tidak ditemukan di exploit-db, maka kemungkinan bukan itu targetnya. Kadang saya berpikir terlalu jauh ingin membuat eksploit sendiri.
  • Jika eksploit tidak jalan, cek segala macam detailnya dan apa yang membuat eksploitnya tidak jalan
  • Laporan merupakan komponen sangat penting. Jangan lupa memastikan bahwa catatan dan screenshot sudah lengkap. Saya sempat kehilangan catatan karena ketika ditinggal makan siang, komputer saya sleep dan hang, jadi perlu restart paksa
  • Berlatihlah dan buat catatan ketika mengerjakan lab. Jika sudah cukup berlatih di lab, maka seharusnya sudah terbentuk kebiasaan yang baik dan terstruktur dalam menangani sebuah mesin: nmap, nikto, gobuster, dst.
  • Kerjakan latihan buffer overflow di diktat dan pahami semuanya

Jika kita gagal dalam ujian, maka ada dua jalan yang bisa diambil:

  • mengambil ujian saja lagi (150 USD)
  • mengambil perpanjangan lab sehingga dapat gratis kesempatan ujian, minimal perpanjangan akses lab 15 hari (200 USD)

Kali pertama mendaftar kita harus membeli akses lab dengan satu kali kesempatan ujian, tidak bisa membeli ujian saja. Jadi biaya minimal sertifikasi ini jika langsung lulus adalah 800 USD (30 hari lab dan sekali ujian) atau nilai rupiah saat ini sedikit lebih dari 11 juta rupiah.

Jika Anda gagal, jangan terlalu kecewa karena sertifikasi ini memang termasuk sulit. Silakan baca pengalaman berbagai orang di https://reddit.com/r/oscp/ dan berbagai forum lain sejenis. Beberapa orang bahkan mengambil ujian ini sampai lebih dari 5 kali.

Setelah ujian, ada waktu 24 jam untuk menyelesaikan laporan. Seperti materi, laporan ini juga tidak boleh dibocorkan/dishare ke siapapun, jika ketahuan maka akan dicabut sertifikasinya dan di-ban tidak boleh ikut sertifikasi Offensive Security yang lain. Ada instruksi sangat spesifik bagaimana mengirimkan hasil laporannya. Jangan sampai salah, karena nilai bisa menjadi nol.

Pengumuman hasil maksimum akan datang dalam 5 hari kerja setelah laporan dikirimkan. Banyak orang dapat hasil dalam 2-3 hari kerja, tapi dalam kasus saya: tepat 5 hari, bahkan sudah hari kerja ke 5 dan hampir jam 5 sore waktu New York baru dapat hasilnya. Jadi bersabarlah jika belum ada hasilnya.

Ketika menunggu hasil, saya sendiri sempat sedikit khawatir karena setelah membaca ulang laporannya ada beberapa hal yang terlewat (padahal sudah dibaca ulang beberapa kali sebelum dikirimkan):

  • Ada screenshot yang tidak menunjukkan apa perintahnya, hanya outputnya saja
  • Ada screenshot yang terlewat saya buat (akhirnya hanya dijelaskan dengan kata-kata)
  • Ada beberapa salah ketik

Saran saya adalah: coba pelajari contoh laporan yang diberikan, dan buatlah kira-kira seperti itu. Biasakan melakukan screenshot seluruh layar dan juga me-log seluruh output terminal ke file. Kalau perlu, cobalah membuat laporan untuk mesin di lab agar terlatih ketika ujian nanti.

Penutup

Dari materi pelajaran saya hanya mendapatkan sedikit ilmu baru, tapi labnya cukup berguna untuk membentuk kebiasaan baik bagi saya agar meminimalisasi hal yang terlewat. Saya biasanya hanya melakukan pentest aplikasi mobile dan web eksternal jarang pentest internal, jadi pengalamannya cukup berguna.

Semoga pengalaman saya bisa berguna untuk orang lain karena saya lihat berbagai tulisan OSCP berbahasa Indonesia dibuat di jaman sebelum proctored test. Jangan takut dengan ujian yang proctored (diawasi), karena jika kita memang mampu, tidak peduli diawasi atau tidak, maka akan tetap bisa melakukannya. Anggap saja tidak ada yang melihat apa yang kita lakukan.

Naik Sepeda

Menurut beberapa sumber yang saya baca di Internet, kebanyakan anak umur 5-6 tahun (kadang kurang) sudah bisa diajari naik sepeda tanpa roda pembantu (training wheels). Tapi tidak semua anak bisa dan tidak semua anak mau diajari. Ini sekedar cerita bagaimana mengajari Jonathan yang agak telat, baru bisa bersepeda tanpa roda pembantu di usia 8 tahun.

Waktu saya baca di Internet, banyak juga orang tua yang bingung: anaknya sudah berusia X tahun (dengan X lebih dari 6), tapi belum bisa naik sepeda, perlukah dipaksa belajar? jawabannya pun beraneka ragam, ada yang bilang ini penting, dan ada yang bilang tidak penting. Tapi ada beberapa hal yang disetujui hampir semua orang:

  • Sepeda merupakan alat transportasi yang praktis, misalnya untuk dalam kampus atau tempat wisata tertentu
  • Bisa naik sepeda akan membantu nanti kalau mau naik motor, dan bahkan ketika naik mobil (belajar memperhatikan jalan dan lalu lintas)

Sejak umur 6 tahun itu sebenarnya Jonathan sudah dicoba untuk naik sepeda tanpa roda pembantu, tapi masih gagal. Masalah utama Jonathan adalah: tidak punya keinginan untuk bisa naik sepeda biasa. Di berbagai forum yang saya baca juga sama, masalah utama adalah: anaknya tidak mau belajar. Selalu ada alasan: panas, pengen pipis, jatuh sedikit bilang sakit lalu minta berhenti, dsb. Setelah dicoba beberapa kali akhirnya saya menyerah. Tahun berikutnya dicoba lagi, hasilnya masih sama, jadi saya menyerah lagi.

Di tahun sebelumnya saya juga pernah menunjukkan beberapa video Youtube tentang belajar naik sepeda. Tapi itupun masih tidak bisa diikuti. Sebagai catatan, tidak semua metode bisa dicoba karena alasan teknis:

  • banyak metode yang butuh tempat dengan karakteristik tertentu. Misalnya: tempat yang cukup landai tapi agak menurun dan luas
  • sebagian menyarankan melepas pedal sepeda, sedangkan tidak semua sepeda bisa mudah dilepas

Terpikir juga: mungkin sepedanya sudah terlalu kecil, jadi kami ganti sepeda, tapi tetap tidak berhasil.

Sekarang sedang masa liburan Jonathan, jadi tanggal 5 Juni lalu kami memutuskan untuk mencoba lagi. Hari pertama dan kedua masih sama: tidak ada niat belajar dan dalam 10 menit Jonathan sudah menyerah. Akhirnya saya suruh sendiri cari video belajar naik sepeda di Youtube yang menurutnya paling gampang.

Alfred Pennyworth: Why do we fall sir? So that we can learn to pick ourselves up

Setelah Jonathan mencari-cari beberapa video, dia ingin mencoba-coba yang dia lihat, tapi masih gagal juga. Akhirnya salah satu cara yang agak berbahaya dicoba: didorong oleh saya sampai kecepatan yang agak tinggi, lalu saya lepaskan agar dikayuh sendiri. Ini sebenarnya berisiko karena kalau belum bisa seimbang, jatuhnya bisa lumayan keras di aspal. Tapi ternyata Jonathan bisa mengayuh beberapa kayuhan. Dan setelah diulangi lagi: beberapa kayuhan lagi bisa. Sepanjang pagi itu saya terus mendorong dia. Walau sudah bisa mengayuh, dia sudah merasa capek setelah 15 menit latihan dan minta berhenti.

Esok harinya, tanggal 9, saya masih meneruskan mendorong. Tapi Jonathan akhirnya kepikiran berlari sedikit di atas sepeda, lalu pas sepeda mulai jalan, dia bisa mengayuh sampai beberapa meter. Ini titik di mana saya anggap dia sudah bisa: tidak dibantu mulainya, bisa mengayuh, bisa berhenti sendiri.

Setelah itu pelajaran masih terus berlanjut: dia harus bisa lebih lama lagi menyeimbangkan diri, tidak hanya beberapa kayuhan. Setelah beberapa hari, akhirnya keseimbangannya sudah lebih bagus. Sekarang semangatnya tinggi sekali untuk naik sepeda sendiri. Sekarang setelah bisa, dia menganggap naik sepeda itu fun, bahkan ketika gerimis pun ingin latihan. Kemarin Jonathan sudah bisa keliling kompleks rumah tidak saya temani.

Senang rasanya akhirnya berhasil mengajari Jonathan. Walau masih khawatir juga kalau dia akan jatuh. Sepupunya yang sudah bisa naik sepeda pernah jatuh dan harus dijahit lalu trauma belum mau naik sepeda lagi. Sebagai hadiah saya pergi bersama Jonathan membelikan sepeda baru, saya juga sekalian membeli sepeda lipat supaya bisa masuk mobil jika ingin dibawa ke tempat wisata yang tidak ada penyewaan sepedanya.

Dari pengalaman mengajari Jonathan, kesimpulan saya: Tiap anak tidak sama, harus ditunggu niatnya dan kemampuannya naik sepeda. Tapi bukan berarti harus ditunggu dengan pasif, menurut saya tetap harus dicoba sambil diberi semangat. Kalau sudah dicoba beberapa kali dan tidak ada kemajuan, mungkin memang belum saatnya dan perlu dicoba lagi beberapa bulan ke depan.

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