Membuat Soal CTF

Setelah kemarin mengkritik mengenai soal CTF yang ngawur, saya ingin memberikan contoh soal CTF yang saya berikan di idsecconf. Harapan saya menulis ini adalah: supaya peserta CTF tahu apa yang saya pikirkan ketika membuat soal dan apa yang saya harapkan dari peserta.

Perlu diketahui bahwa saya menyumbangkan soal ini secara gratis, tidak ada imbalan apapun dari pihak idsecconf. Ini bukan mengiklankan idsecconf (buat yang tidak tahu: saya tinggal di Chiang Mai, Thailand, tidak ada kepentingan apapun dengan event apapun di Indonesia). Dan setelah membaca posting saya sebelumnya, Anda juga bisa membandingkan soal-soal ini dengan soal dari CTF internasional lainnya. Saya menuliskan ini untuk menunjukkan keterbukaan, saya tidak malu membuat soal ini, saya punya semangat berbagai ilmu.

Salah satu peserta telah mengirimkan writeupnya juga, sehingga Anda bisa melihat apakah jalan pikiran peserta sudah seperti yang saya harapkan: Cyber Security IPB dan Abdilah.

Tahun ini saya diminta agak mendadak untuk menyumbang soal CTF IDSECCONF. Karena mendadak, saya tidak mengeluarkan soal sulit. Soal yang sulit perlu ditest ulang untuk memastikan bisa berjalan dengan baik, dan perlu diuji oleh panitia lain. Soal-soal inipun sebenarnya sudah ada di komputer saya sejak lama.
Continue reading “Membuat Soal CTF”

Dunia CTF dan CTF Tingkat Dunia

Sebagian pihak ternyata “tidak terima” dengan pendapat saya di tulisan sebelumnya, bahwa event CTF (capture the flag) tertentu itu levelnya buruk. Mereka berpendapat itu hanya “pendapat sebagian orang saja”. Di tulisan ini saya akan membahas seputar dunia CTF, dan apa yang saya maksud dengan CTF Tingkat dunia. Buat Anda yang blank mengenai dunia CTF, bisa membaca perkenalan CTF oleh saya di posting ini.

Setelah membaca defense dari pihak Cyberjawara, yang penuh dengan kekonyolan, sampai tidak tahu harus mulai dari mana (contohnya: katanya tidak semua writeup dipublish publik karena pembuat soal tidak mengijinkan), saya memutuskan untuk memperkenalkan dengan gamblang dunia CTF bagi semua orang.
Continue reading “Dunia CTF dan CTF Tingkat Dunia”

Bikin CTF yang bener dong, jangan malu-maluin

Daripada sekedar menyindir (sindiran sudah dilakukan puluhan orang dari beberapa tahun lalu), sekalian lah saya posting terbuka bagi penyelenggara lomba Capture The Flag (CTF) yang super ngawur, terutama CTF Cyber Jawara. Beberapa CTF Indonesia sudah baik (seperti botani.cf Gemastik, atau idsecconf), tapi Cyberjawara ini sudah parah, jadi bahan tertawaan setiap tahun tetap saja tidak membaik (tahun ini saja sudah ada beberapa, misalnya ini, ini dan ini). Padahal ini adalah kegiatan ID SIRTII (Indonesia Security Incident Response Team on Internet Infrastructure)

ctf
Continue reading “Bikin CTF yang bener dong, jangan malu-maluin”

Mengenal ESP8266: SOC Wifi super murah dari China

Artikel ini adalah perkenalan SOC ESP8266, sebuah System On A Chip (SOC) berfitur WIFI yang sedang sangat populer. Salah satu penyebab kepopuleran ESP8266 untuk Internet Of Things (IOT) karena harga chipnya yang super murah: kurang dari 2 USD (sudah termasuk ongkos kirim dari China). Benda ini juga mudah diprogram menggunakan C, Python, Lua, Basic ataupun Wiring (dengan IDE Arduino).

Secara praktis, kemampuan IP networking akan memungkinkan kita membuat benda yang bisa dikendalikan dari Internet (contohnya: mematikan atau menyalakan sesuatu), mengirimkan data ke Internet (mengirimkan pembacaan sensor), atau memanfaatkan data dari Internet (menampilkan cuaca, menampilkan jam akurat saat ini).

Tahun 2014, sebuah perusahaan China merilis chip WIFI ESP8266, chip ini awalnya hanya dijual dalam bentuk modul (bernama ESP-01) agar sebuah microcontroller (misalnya Arduino) bisa mengakses WIFI melalui serial port dengan menggunakan AT Command Hayes. Pada saat itu chip ini dokumentasinya minim sekali dalam bahasa Inggris, tapi satu hal yang pasti adalah: chip ini sangat murah. Karena sangat murah dan menarik, maka ada yang berusaha menerjemahkan datasheet lengkapnya.

20160131_155419
ESP-01

Continue reading “Mengenal ESP8266: SOC Wifi super murah dari China”

Catatan Elektronik, Pokemon, dan Satellite Receiver

Posting ini sekedar catatan beberapa oprekan beberapa waktu terakhir ini. Topiknya: elektronik (beberapa komponen elektronik yang saya beli), Pokemon (baik versi lama maupun Pokemon Go), dan Satellite Receiver baru saya.

Kadang saya melihat posting lama di blog ini, kadang saya banyak menulis dan kadang jarang sekali menulis. Di bulan ketika jarang menulis, saya kadang lupa apa yang dikerjakan bulan itu, jadi sekarang saya coba rangkum beberapa minggu terakhir.

Elektronik

Saya kadang iseng menambah lampu atau mekanisme lain di mainan Jonathan. Menambahkan suara biasanya merupakan hal yang repot. Beberapa waktu lalu waktu iseng browsing AliExpress, saya menemukan bahwa ada banyak chip melodi, gonggongan anjing, sirine yang dijual dengan sangat murah (1.0-1.7 USD untuk 5-10 chip, jadi harga per chipnya cuma 0.1-0.2 USD). Penggunaan chip ini juga sangat mudah: butuh power (3.0-4.5 VDC), saklar (untuk mentrigger mematikan/menyalakan suara), speaker (langsung saja ke speaker 8 ohm, tanpa perlu sirkuit amplifier apapun). Sebagian chip perlu sebuah transistor tambahan sebagian hanya butuh sebuah resistor.

  Continue reading “Catatan Elektronik, Pokemon, dan Satellite Receiver”

Hacking In App Purchase

Di artikel ini saya akan membas teknis hacking In App Purchase (IAP) Sebelum membahas teknis hacking IAP, saya perlu menegaskan dulu bahwa saya tidak setuju dengan berbagai bentuk pembajakan. Di artikel ini saya akan menyinggung Apple App Store, tapi pembahasan akan lebih banyak ke Android (karena sekarang ini saya lebih banyak memakai Android). Saya sengaja tidak melink ke berbagai tool hacking yang saya sebutkan di sini, silakan dicari sendiri.

Jangan Membajak

Sebagai developer saya tahu betapa tidak enaknya jika karya kita dibajak. Saya selalu berusaha membeli semua hal secara legal. Semua software yang saya pakai saya beli atau memakai versi gratis. Saya membeli OS Windows, membeli Office (sekarang subscribe Office 365), dan juga membeli tools-tools yang memang berguna saya, misalnya saya membeli/subscribe IntelliJ ultimate, VMWare Fusion, dsb. Saya juga berusaha membeli segala macam produk digital lain, seperti musik (dari iTunes), film (subscribe NetFlix, atau menonton dari Youtube), buku (membeli dari Amazon Kindle ataupun Google Play Books).

Tapi khusus untuk IAP dalam game, saya sering merasa pelit. IAP di aplikasi untuk meremove restriksi menurut saya bagus karena berfungsi sebagai trial. Contoh: saya memakai JuiceSSH di Android, jika kita ingin versi pro, kita hanya perlu unlock saja dengan IAP setelah mencoba bahwa itu cocok untuk kita.

IAP dalam game terlalu berusaha menarik uang dari user. Bahkan sekarang istilahnya menjadi Pay To Win (PTW). Sudah ada banyak kasus di mana orang tua harus membayar banyak karena mereka tidak paham setting untuk membatasi IAP ini.

Untuk game yang sifatnya single player, saya biasanya akan mencoba menghack gamenya (saya tidak mau jadi orang mengesalkan yang menang di game multiplayer karena curang). Di game dengan IAP saya akan membeli sebagian item yang masuk akal (sebagai bentuk dukungan untuk developer). Contoh: Cut the Rope 2 saya ingin bisa main terus tanpa menunggu setelah game over sekian kali, jadi saya beli fitur ini, tapi jumlah koinnya saya hack.

Buat apa hacking IAP Game?

Hacking IAP di game ini banyak gunanya bagi saya:

  1. Melatih skill Reverse Engineering. Meski sudah ada beberapa tools untuk hacking IAP, saya lebih suka melakukan dengan cara manual.
  2. Mengupdate ilmu, agar jika kita membuat game atau aplikasi, tidak akan mudah dihack IAP-nya
  3. Membuat kita cepat bosan dengan game tersebut karena sudah memenangkan semuanya, plus anak saya gembira bisa mencoba semua fitur gamenya
  4. Hemat uang

Cara Kerja IAP

IAP di berbagai platform bekerja dengan cara seperti ini:

  1. Developer mendaftarkan item apa yang bisa dibeli dalam sebuah aplikasi
  2. Ketika user mengklik buy di sebuah aplikasi, kontrol dialihkan ke app store (Play Store/AppStore)
  3. App store yang akan mengkonfirmasi pembelian, menagih ke user (bisa dari kartu kredit, potong pulsa, dsb)
  4. App store mengembalikan receipt ke aplikasi
  5. Aplikasi memvalidasi pembelian

Ada beberapa “benda” yang bisa dijual. Benda pertama adalah yang sifatnya benar-benar virtual, seperti misalnya koin dalam game, benda ini bisa dihadirkan tanpa bantuan server. Benda kedua ada wujudnya secara digital dan sumbernya bukan dari aplikasi itu sendiri, misalnya ebook yang perlu didownload dari server.

Local Hacking

Salah satu hack pertama yang dilakukan pada ketika Apple memperkenalkan IAP adalah menggunakan Fake App Store. Caranya begini: request yang harusnya dikirim ke App Store diintercept secara lokal di device, and selalu dikembalikan: Sukses. Bug seperti ini sudah ditutup, tapi variannya masih ada.

Di Android, aplikasi menggunakan Intent untuk melakukan komunikasi. Jika kita tidak menyatakan package mana yang harus melakukan aksi tersebut, maka permintaan bisa diproses aplikasi lain (contohnya: buka file PDF ini, maka akan dimunculkan dialog kepada user untuk memilih PDF reader mana yang akan dipakai).

Salah satu hack yang ada adalah CreeHack. Dia akan mendaftarkan diri sebagai handler IAP. Cara ini bisa dilakukan pada device yang tidak diroot, tapi hanya aplikasi tertentu di mana developer kurang memperhatikan security. Seperti tertulis di panduan dari Google:

iap-Screenshot from 2016-08-02 10-09-56

Cara mengatasi hal seperti ini adalah dengan menggunakan server eksternal untuk melakukan pemeriksaan IAP. Jadi aplikasi mengirimkan request pembelian ke App Store, lalu Appstore akan mengembalikan receipt. Karena aplikasi bisa saja dipatch, maka kita perlu server eksternal yang memvalidasi ke servernya App Store apakah benar receipt tersebut terdaftar. Tentunya asumsinya hacker tidak bisa menjebol server eksternal kita.

media-20160802.png

Untuk benda berwujud buku, video dan konten digital lain, tentunya pemeriksaan di server ini wajib dilakukan. Beberapa tahun yang lalu, aplikasi seperti Scoop tidak melakukan pengecekan di server, hasilnya banyak orang yang menghack scoop untuk mengambil majalah secara gratis.

 

Data Hacking

Untuk benda kategori pertama (tidak butuh remote server), data akan disimpan secara lokal, contohnya: jumlah koin saat ini atau apakah level sudah dibuka. Jika data tidak dilindungi dengan hashing atau enkripsi tertentu, maka ini akan mudah diubah.

Contohnya: saya membeli Plant vs Zombie yang pertama, ada versi bayar yang tanpa iklan dan tanpa IAP. Untuk mendapatkan banyak koin, kita cukup mengedit file data. Di Android yang sudah diroot, penggantian data bisa dilakukan dengan mudah. Di Android yang tidak diroot, data bisa diubah dengan fitur backup/restore (asalkan kita enable developer mode).

adb backup -f namafile.ab com.namapackage

File bisa dikonversi dengan Android Backup Extractor menjadi file tar.

java abe.jar unpack namafile.ab namafile.tar

Ketika mengupdate file tar, kita harus membuatnya lagi dengan urutan file yang sama, jadi ini perlu disimpan

tar tf namafile.tar > package.list

Setelah itu kita bisa mengekstrak filenya, dan mengeditnya:

tar xf namafile.tar

Setelah selesai, kita pack lagi

tar cf restore.tar -T package.list

Setelah itu kita konversi lagi menjadi format Android backup

java -jar abe.jar pack-kk restore.tar restore.ab

Dan kita kembalikan ke device:

adb restore restore.ab

 

Screenshot_2016-08-01-23-01-40

 

Memory Hacking

Data yang ada memori juga bisa dihack dengan berbagai tool. Saya jarang melakukan ini karena perlu Android yang sudah diroot.

Cara kerja tool ini biasanya begini: kita masukkan skor atau koin saat ini, lalu tool tersebut akan mencari semua alamat memori dalam game yang berisi angka tersebut. Kita mainkan gamenya sebentar sampai nilai skor atau koinnya berubah, lalu kita scan lagi, sekarang tool tersebut akan memfilter lagi memori yang tadi. Ini bisa diulangi sampai kita mendapatkan alamat memori yang berisi koin atau skor dan langsung bisa diubah. Sebagian orang juga sudah menshare alamat memori mana yang perlu diubah sehingga langkah di atas bisa diskip.

Sebagai game developer, Anda bisa memakai representasi yang berbeda sampai titik di mana skor/koin itu ditampilkan. Misalnya skor selalu disimpan dalam 17 + skor (17 hanya sekedar angka sembarang), dan ketika ditampilkan, kita kurangkan lagi 17). Tentunya cara yang lebih rumit bisa dilakukan, tidak sekedar menambah dengan sebuah angka.

Protocol Hacking

Kadang data yang datang dari Internet bisa kita modifikasi supaya aplikasi membuka fiturnya atau memberi koin. Contoh: beberapa aplikasi memberi reward jika kita menonton video iklan (atau me-like fb, atau melakukan aksi lain) dan jumlah koin ini diminta via jaringan.

Dengan mengubah response dari server (saya menggunakan OWASP ZAP, tapi ada banyak tool lain yang bisa melakukan ini) maka saya bisa mendapatkan puluhan juta koin dari menonton satu video (biasanya hanya 15 ribu koin). Anda bisa melihat betapa mahalnya koin (harga dalam rupiah karena saya menggunakan account Indonesia), 80 juta koin harganya hampir 800 ribu rupiah, sedangkan 80 juta koin ini tidak cukup untuk membuka semua fitur game (semua kendaraan + semua level + semua upgrade mesin).

Screenshot_2016-08-01-20-00-51

Karena jumlah pembelian koin maksimum adalah 80 juta koin, saya coba mengganti supaya tiap kali menonton video, saya mendapatkan 80 juta koin.

Screenshot_2016-08-01-22-28-20

App Hacking

Cara terakhir jika mengubah data tidak bisa dilakukan (karena prokteksi hash dan atau enkripsi) adalah dengan app hacking. Level pertama hanya membaca kode saja, untuk mengetahui key yang dipakai. Ini kadang tidak berhasil, contohnya begini, untuk mengaktifkan fitur tertentu, app mengirimkan IMEI + receipt ke server, dan server mengenkrip dengan private key nya (IMEI + kode aktivasi). Sekarang app bisa memvalidasi dengan mengecek menggunakan public keynya, tapi kita tidak bisa menciptakan data ini karena tidak tahu private key server.

Dalam kasus seperti itu, level kedua adalah: patching aplikasinya. Untuk bisa patching aplikasinya, tentunya kita harus melakukan reverse engineering. Ini dilakukan dengan membaca smali atau assembly (jika app-nya menggunakan native code seperti Cocos2D-x), sebagian besar game saat ini ditulis dalam native code agar portabel ke platform iOS.

Jarang sekali saya sampai harus menggunakan cara ini, karena meskipun pasti selalu berhasil, di versi berikutnya ketika mereka mengubah hal kecil app ini harus dipatch lagi. Patching juga tidak mudah jika harus dilakukan jika aplikasi sudah diobfuscate atau di level native code (pacthing kode Java/Smali lebih gampang) .

Binary APK Android tidak dienkripsi, jadi kita bisa dengan mudah mendapatkan binarynya mempatchnya dan menandatangani ulang APK-nya. Anda bisa membaca lebih lanjut soal ini di tulisan saya: Reverse Engineering APK Android.

Untuk iOS agar bisa patching app, Anda perlu mendapatkan binary executable yang tidak dienkrip (menggunakan Clutch atau sejenis di device yang sudah dijailbreak). Setelah itu app bisa dipatch dan disign ulang (dengan iResign misalnya) agar bisa dijalankan di device iOS lain yang tidak dijailbreak.

Di Android ada aplkasi Lukcy Patcher yang mengotomasi patching dasar aplikasi yang membutuhkan IAP. Tentunya tidak semua aplikasi bisa dipatch dengan cara seperti ini. Perlu diperhatikan juga bahwa saya belum pernah mengecek security Lucky Patcher ini.

Sebagai catatan: JANGAN percaya dengan APK yang sudah dimodifikasi orang, kecuali Anda bisa mengetahui dengan tepat apa modifikasinya. Kasus terbaik adalah mereka cuma menambahkan atau mengganti iklan. Kasus terburuk: mereka bisa menginstall Trojan di HP Anda.

Sebagai Developer

Jika item Anda memang berharga, misalnya untuk aplikasi penjual ebooks, tiap buku berharga karena penerbit, penulis harus dibayar, maka buatlah sistem pengecekan IAP yang sebagus mungkin sejak awal.

Jika Anda membuat game, dan yakin game itu akan terkenal (misalnya karena sudah ada dana marketing sangat besar), maka siapkan juga proteksi IAP yang baik sejak awal untuk menjaga investasi Anda.

Untuk Anda yang hanya membuat game casual, silahkan buat strategi yang baik bagi Anda. Mengamankan IAP butuh waktu (dan juga server eksternal). Sebagian game yang tadinya kurang populer, mereka awalnya tidak menggunakan proteksi yang baik (dan ini mungkin membuat banyak orang jadi ingin bermain), tapi ketika menjadi populer, mereka memperketat pemeriksaan IAP.

Bacalah berbagai artikel mengenai hacking IAP, dan lakukan berbagai langkah pengamanan, kadang ada sesuatu yang sederhana yang bisa dilakukan untuk menambah keamanan. Contoh paling sederhana adalah selalu memanggil setPackage di Android, dengan ini hack seperti CreeHack tidak akan bekerja. Contoh lain adalah menggunakan obfuscator agar kode tidak bisa dengan mudah dicari.

Setiap beberapa bulan, ketika membuat fitur baru, ubahlah sedikit kode pemeriksaan IAP Anda (misalnya mengubah nama method, menambahkan method sampah), supaya orang bosan berusaha menghack aplikasi Anda.