Membedah e-KTP

Posting ini sekedar membahas tentang kartu tanda penduduk elektronik (e-KTP). Sampai saat ini saya belum pulang ke Indonesia untuk mengurus e-KTP karena KTP lama masih berlaku. Waktu orang tua saya datang ke sini tahun lalu saya sudah sempat ngoprek e-KTP mereka sedikit, dan sekarang selagi mereka berkunjung saya teruskan dan tuliskan hasil eksplorasi saya.

Sebagian isi tulisan ini didapat dari reverse engineering, dan sebagian lagi dari berbagai informasi yang tersebar di Internet. Ada juga bagian yang merupakan spekulasi saya dari informasi yang ada.

Security sebuah smart card

Sebuah smart card adalah sebuah komputer kecil, di dalamnya ada CPU, RAM, dan juga storage. Smart card diakses menggunakan reader, secara umum ada dua jenis: contact (menggunakan konektor fisik seperti SIM card) dan contactless (tanpa konektor fisik seperti kartu e-Money berbagai bank saat ini). Dari sisi programming keduanya sama saja. Kartu smart card yang baru umumnya juga sudah tahan (immune) terhadap side channel attack (DPA/SPA/FI dsb).

Hal yang membuat smart card penting untuk security adalah kemampuan smart card untuk melakukan komputasi (menghitung, melakukan hasing, enkripsi, dekripsi, dsb), dan sangat sulit untuk melakukan ekstraksi data dari smart card. Bayangkan seperti disuruh mengekstrak data di sebuah komputer yang dicor dan dimasukkan ke lemari besi.

Dari segi security, kita bisa memandang smart card ini seperti komputer remote yang melakukan komputasi yang tidak kita ketahui, dan kita tidak bisa mengekstrak informasi jika tidak ada bug pada implementasinya. Bayangkan sebuah sevice php seperti ini

<?php echo hash_hmac (“sha256”, $_GET[“q”], “[email protected]!ku” );?>

Jika kita tidak memiliki akses ke source code program tersebut, maka kita bisa mencoba-coba berbagai input, dan dengan melihat outputnya kita tidak akan bisa mengetahui bahwa kita memakai key “[email protected]!ku”.

Untuk berkomunikasi dengan smart card, kita mengirimkan perintah dalam bentuk byte-byte (dinamakan PDU atau protocol data unit), dan dibalas oleh card dengan status dan byte-byte hasil. Sebenarnya ini tidak berbeda jauh dari komunikasi lain seperti HTTP: kita mengirimkan request, dan card akan mengirimkan status dan balasan. Bahkan smart card generasi baru memang memasukkan server HTTP di dalamnya.

Riset smart card di level protokol (bukan level serangan fisik) bisa dilakukan dengan biaya relatif rendah. Card reader jenis contact dengan konektor USB bisa didapatkan dengan dengan harga kurang dari 10 USD, dan versi contactless (NFC) dengan konektor USB harganya sekitar 30 USD (atau jika punya Raspberry Pi atau Arduino, harga modul NFC-nya saja bisa kurang dari 5 USD).

Perhatikan bahwa: sebuah smart card bisa diisi program. Programnya bisa melakukan apa saja, baik itu memenuhi standar tertentu, atau melakukan sesuatu yang sifatnya custom. Sebagai informasi, kebanyakan  (tapi tidak semua) card sekarang ini diprogram menggunakan Java (teknologi JavaCard). Eksperimen Java Card bisa dilakukan di PC tanpa kartu menggunakan JCardSim.

Smart card juga memiliki protokol standar untuk filesystem. Kita bisa memilih Master File/Dedicated File (MF/DF) yang merupakan struktur direktori, dan EF (Elementary File) yang merupakan file. Semua “nama” pada file hanyalah bilangan yang umumnya dituliskan dalam notasi heksa desimal. Sebuah MF/DF/EF bisa diproteksi dan hanya bisa diakses dalam kondisi tertentu saja (dalam kondisi lain statusnya access denied)

SAM (Secure Access Module/Secure Application Module)

Jika komputer biasa digunakan untuk melakukan komputasi kriptopgrafi untuk dimasukkan ke e-KTP maka programnya akan rawan sekali diubah dan keynya gampang dicuri. Untuk mengatasi hal ini digunakan smart card lain yang dinamakan SAM. Ini hanya merupakan nama peran/role untuk smart card. Sebuah smart card biasa bisa menjadi SAM. Jadi sebuah SAM juga bisa diberi program apa saja. SAM ini bisa berupa chip yang ditanam di hardware, atau berupa kartu biasa. Biasanya SAM ini akan menggunakan jenis kartu contact.

Sekarang masalah security berpindah ke SAM. Tentunya SAM ini berbahaya jika jatuh ke tangan yang salah, jadi ada mekanisme keamanan yang diterapkan pada SAM e-KTP. Mekanismenya cukup sederhana, sehingga jika cukup niat bisa diakali. Ketika Kartu SAM diberikan untuk dipakai dengan aplikasi di sebuah komputer, file konfigurasi diberikan. File konfigurasi ini dienkrip dengan “Machine ID” (yang bisa dengan mudah didapatkan oleh program apapun).

Dengan menggunaakan file konfigurasi yang di XOR dengan machine ID, didapatkan key untuk mengakses Kartu SAM. Kartu tidak bisa dengan mudah dipakai di komputer lain tanpa mengakali program dan/atau mengganti machine ID. Jika N kali salah memasukkan machine ID, maka kartu SAM akan terblokir, dan harus meminta kartu SAM baru.

Keamanan ini hanya sekedar menghindari SAM yang “tercecer” di jalan agar tidak bisa sembarang dipakai. Jika ada yang berniat mengambil kartu SAM dan tahu dipakai di komputer mana (atau device mana), maka keamanan ini tidak membantu. Jadi bisa saja seoarang operator meminjam kartu SAM, dibawa pulang dan dipakai di rumah.

Data Pada e-KTP

Data yang disimpan pada e-KTP pada MF/DF 7F0A. Untuk memilih MF/DF ini bisa digunakan PDU

00A40000027F0A

Beberapa data yang ada di kartu:

  1. Data kontrol kartu (Card Control, pada EF: 6FF0), terbuka tapi spesifikasinya tidak diketahui
  2. Foto (EF: 6FF2), data ini terbuka
  3. Data Demografik/Biodata (6FF1), datanya diproteksi
  4. Data sidik jari: Minutiae1 (6FF4) dan Minutiae2 (6FF5), datanya diproteksi
  5. Scan tanda tangan (6FF3), datanya diproteksi
  6. ECDSA Signature (6FF6), datanya diproteksi

Mengekstrak Foto dari e-KTP

Foto dapat diekstrak dari e-KTP karena memang tidak diproteksi. Cara membacanya cukup mudah, pertama pilih MF/DF dan EF foto, lalu baca 2 byte pertama

00A40000027F0A
00A40000026FF2
00B0000002

Pada 2 byte pertama terdapat panjang (ukuran) data JPEG yang perlu dibaca.  Perhatikan bahwa apapun perintahnya akan selalu ada 2 byte status kembalian (9000 artinya adalah OK, bisa dibandingkan dengan HTTP Code 200):

=> 00 a4 00 00 02 7f 0a
<= 90 00 
Response : 
=> 00 a4 00 00 02 6f f2
<= 90 00 
Response : 
=> 00 b0 00 00 02
<= 06 fe 90 00
Response : 06 fe

Dalam kasus ini panjang file adalah 0x6fe byte = 1790 byte.

Berikutnya data bisa dibaca dengan mengirimkan PDU berikut ini berulang sampai selesai terbaca. Misalnya kita membaca dari offset 2 sebanyak 16 byte, berikutnya dari offset 18 sebanyak 16 byte, dst.

00BB<Offset High><Offset Low><Size>

Jika kita memiliki offset: 0x1234, maka Offset High adalah 0x12 dan Offset Low 0x34.  Teorinya kita bisa membaca sampai 255 byte sekali baca, kenyataannya card readernya bisa error. Di aplikasi e-KTP digunakan 112 byte sekali baca tapi di salah satu card reader saya, saya perlu memakai ukuran 16 byte sekali baca supaya reliable.

Data yang didapatkan adalah file JPEG biasa dengan ukuran 96×96 piksel.


Autentikasi Kartu

Untuk membaca data yang diproteksi, diperlukan key yang berada di SAM. Langkah pertama adalah mutual authentication untuk mendapatkan session key. Berdasarkan hasil reverse engineering,  protokol ini sepertinya berdasarkan Doc 9303 ICAO (Machine Readable Travel Documents) terutama Part 11 (Security Mechanisms for MRTDs).

Di dalam dokumen di atas, diasumsikan mesin pembaca memiliki key dalam memori komputer. Dalam dokumen itu protokolnya seperti ini (hanya garis besar, lihat contoh Appendix D di dokumen 9303 Part 11). Masing-masing pihak (kartu dan app desktop) memiliki SEED yang menjadi dasar untuk pembuatan key:

  • To Card: 0084000008 (request challenge/random number)
  • From Card: 8 byte random
  • From App: Generate random X1 (8 byte) dan X2 (16 byte), lalu  hoitung P1 = 3DES(X1 + RandomFrom Card +X2) , P2 = MAC(P1), hasilnya P1 + P2 ukurannya 40 byte, kirimkan ini ke kartu
  • From Card: kartu melakukan perhitungan serupa dan mengembalikan 40 byte
  • App melakukan komputasi dan menghasilkan session key.

Sedangkan protokolnya e-KTP seperti ini:

  • To SAM: Reset 00FF000000
  • From SAM: OK
  • To CARD: Get Challenge: 0084000008
  • From Card: challenge (8 byte)
  • To SAM: GenerateMutualAuth 00F10000 + CardControl + UID (8) + Challenge (8)
  • From SAM: 40 byte
  • To Card: ExternalAuth: 0082000028 + response from SAM
  • From Card: 40 byte
  • To SAM: VerifyMutualAuth: 00F2000028 + Response From Card

Perbedaannya adalah ada data Card Control dan UID kartu yang dikirim ke SAM. Sepertinya Card Control ini berisi informasi untuk pembuatan SEED, tapi tanpa source code ini tidak bisa diketahui detailnya.

Akan sangat panjang untuk membuktikan bahwa ini aman, tapi pada dasarnya: jika kita tidak punya key enkripsinya, meskipun kita bisa mengubah apapun di sisi app, maka kita tidak bisa mencari tahu key-nya.

Secure Messaging

Berdasarkan pada session key yang didapat pada proses autentikasi, maka setiap PDU yang dikirim akan dienkrip  dulu sebelum dikirim ke kartu dan yang diterima akan didekrip dulu sebelum diproses. Deskripsi ini cukup panjang, tapi ada gambar di dokumen yang menjelaskan ini.

Karena session key tidak pernah di simpan di PC, tapi di SAM, maka secara praktis yang terjadi adalah:

  1. Aplikasi membuat PDU unprotected (misalnya select EF)
  2. Aplikasi mengirimkan PDU unprotected ke SAM
  3. SAM membalas dengan PDU versi Secure Messaging
  4. Aplikasi mengirimkan PDU terenkripsi ke kartu e-KTP
  5. Kartu e-KTP membalas dalam PDU yang terenkrip
  6. Aplikasi mengirimkan PDU terenkrip dari e-KTP ke SAM
  7. SAM akan mendekrip PDU dan hasilnya dibaca oleh aplikasi di PC

Jadi dalam proses ini, meskipun kita mengetahui data terenkripsi dan hasil dekripsinya, kita tetap tidak tahu key yang digunakan (session ini selalu random dalam setiap koneksi).

Emulasi SAM dan e-KTP

Untuk membuat aplikasi e-KTP tanpa memiliki SAM. kita bisa menggunakan SAM dan e-KTP buatan kita sendiri dengan key yang kita masukkan sendiri tentunya ini tidak akan jalan di e-KTP “beneran” sampai kita memiliki akses untuk SAM yang benar. Hal ini sudah pernah diimplementasikan oleh BPPT dalam paper PERANCANGAN EMULATOR KTP ELEKTRONIK BERBASIS JAVA CARD UNTUK MENDUKUNG PENGUJIAN FUNGSIONALITAS PEMBACA KTP ELEKTRONIK INDUSTRI NASIONAL.

Dalam paper ini disebutkan bahwa metode key derivation yang digunakan e-KTP sifatnya rahasia dan mereka mengimplementasikan sendiri algoritma yang sekedar bisa dipakai oleh kartu SAM dan kartu KTP mereka sendiri.

Amankah e-KTP

Aman tergantung dari sudut pandang mana: dari pembuatan KTP, dan dari pemilik/pengguna KTP. Keamanan e-KTP ada pada SAM-nya.  Ini berarti beberapa hal:

  • Kartu SAM harus dijaga ketat, karena jika bisa dipinjam, maka bisa digunakan membuat KTP Aspal
  • Semoga key generation-nya aman. Saya sudah pernah menemukan kode SAM yang aman, tapi cara membuat key yang random hanya mengandalkan fungsi random biasa (bukan secure random) dan menggunakan seed waktu saat ini.
  • Semoga key utama disimpan dengan baik oleh kemendagri

Saat ini data foto sama sekali tidak diproteksi, sehingga seseorang bisa mengambil foto dari dompet yang tertutup. Menurut standar security MRTD, seharusnya data yang bisa dibaca dienkrip dengan informasi yang tertera di kartu. Misalnya untuk paspor, dari nomor paspor, tanggal lahir, tanggal kadaluarsa. Informasi ini tertera di kartu, jadi seseorang yang berusaha membaca dokumen tidak bisa membaca jika memang tidak memegang kartunya. Dengan ini kita bisa memastikan apakah benar isi data elektronik sama dengan data yang dicetak.

Sempat ada aplikasi POC reader e-KTP tapi sayangnya sudah dihapus dari Google Play (tapi masih bisa didownload dari sini). Aplikasi ini membaca data foto seperti saya jelaskan di atas. Sebenarnya agak berbahaya mempercayai data ini, karena mudah sekali membuat card yang jika dibaca dengan aplikasi tersebut akan keluar foto.

Semoga programmernya handal dan tidak membuat kesalahan implementasi. Saya agak khawatir membaca kode seperti ini di salah satu aplikasi yang saya dekompilasi.

Dari mana bisa tahu ini semua?

Pertama adalah mencari dulu aplikasi desktop e-ktp. Ini bisa dicari dengan query berikut di Google.

“index of” e-ktp inurl:.go.id/

Sekarang sepertinya sudah cukup sadar sehingga installernya lebih sulit dicari, tapi tahun lalu ini mudah sekali dicari. Programnya ditulis dalam .NET tanpa obfuscation sehingga mudah dibuka.

Berikutnya eksperimen diteruskan dengan e-KTP orang tua saya. Saya sudah mencoba beberapa attack yang umum, dan sepertinya semuanya aman.

Saat ini saya baru menemukan hal-hal kecil yang undocumented. Seperti halnya web server yang bisa dicari direktori tersembunyi dengan teknik “forced browsing”, kita bisa mengirimkan perintah berurutan ke smart card untuk mencari tahu perintah mana yang menghasilkan sesuatu tapi tidak terdokumentasi.

Demikian hasil oprekan e-KTP untuk saat ini. Mungkin di masa depan akan saya teruskan lagi. Saat ini belum ada ide serangan baru.

 

Memperbaiki mainan Dinosaurus ABC

Joshua punya mainan dinosaurus dengan banyak tombol ABC. Mainan ini sudah beberapa kali hilang suaranya, tapi ketika dibongkar belum diapa-apain udah bisa muncul lagi. Tapi akhirnya suatu hari suaranya benar-benar berhenti. Hari ini akhirnya iseng dibongkar lagi.

Joshua memainkan dinosaurus yang sudah diperbaiki

Ternyata agak ribet juga membongkar benda ini, dan ternyata masalahnya sederhana sekali: speakernya rusak. Banyak mainan memakai speaker murahan. Biasanya speaker seperti ini magnetnya akan lepas/bergeser. Lanjutkan membaca “Memperbaiki mainan Dinosaurus ABC”

Retrogaming

Salah satu minat saya kalau lagi iseng adalah retrogaming. sederhananya main game console lama (baik itu di device asli maupun emulator). Ini cuma sekedar cerita, bukan posting teknis yang serius.

Saat ini saya punya beberapa Game Boy: Game Boy biasa, Game Boy Color, Game Boy Advance, dan juga clone Game Boy Color yang layarnya memiliki backlight (namanya GB Color). Saya juga punya Link Cable, kamera dan juga printer Gameboy. Koleksi saya ini tidak seberapa dibandingkan dengan koleksi banyak orang lain. Adik saya di Indonesia juga punya hobi yang sama, dan bahkan punya lapak online di Instagram yang menjual retro console. Hobinya membeli berbagai console bekas, lalu menukar isinya, mengganti komponennya atau mengakali supaya jalan lagi (adik saya ini dosen elektro). Lanjutkan membaca “Retrogaming”

Bulan Penuh Diskon

Bulan November merupakan bulan penuh diskon, karena ada 11/11 (singles day) dan ada banyak diskon dari berbagai situs di China, lalu diikuti dengan Black Friday dan Cyber Monday yang penuh dengan diskon global.

Dibandingkan tahun lalu, tidak terlalu banyak diskon yang diberikan oleh AliExpress, benda mahal yang saya beli  hanya Proxmark3 versi paling sederhana (tidak memiliki konektor batere) dengan harga 66 USD (termasuk ongkos kirim). Proxmark3 ini adalah tool untuk eksplorasi RFID/NFC.

Sebenarnya dalam banyak kasus berbagai penstest dan hacking NFC bisa dilakukan dengan reader sederhana yang harganya kurang dari 5 USD, tapi proxmark ini diperlukan untuk sniffing dan juga untuk mengakses berbagai kartu yang tidak standar.

Texas Instruments baru saja meluncurkan board MSP43  baru (Launchpad dengan FRAM), dengan harganya 9.9 USD belum termasuk ongkos kirim, tapi saat ini  diskon menjadi 4.30 USD (sudah termasuk ongkos kirim). Diskonnya masih ada sampai Desember 2017. Development board dari TI ini bisa dipakai juga memprogram chip MSP430 lain.

Waktu pindah ke rumah baru, UPS yang tadinya baik-baik saja menjadi tidak berfungsi sama sekali. Setelah dibongkar, ternyata ada kabel yang kendor di dalamnya (mungkin kendor waktu pindahan). Tapi UPS-nya sudah tidak menyimpan daya lagi dan baterenya agak melendung (batere dari tahun 2012). Akhirnya  beli baru dan UPS-nya bisa berfungsi lagi.

Ada kit yang namanya Makey Makey yang fungsinya mengubah berbagai benda konduktif menjadi input device. Contoh benda dan aplikasinya bisa dilihat di situs tersebut, tapi beberapa di antaranya: mengubah pisang menjadi alat musik atau membuat tangga musikal dengan conductive tape.

Harga makey makey cukup mahal, jadi ketika saya lihat ada modul MPR121  di aliexpress yang harganya kurang dari 2 USD, saya langsung cek apakah mudah dipakai (dari beberapa tutorial dan video youtube), dan ternyata mudah. Dengan menghubungkan modul ini ke Arduino Leonardo, saya bisa membuat tiruan makey makey. Sebagai catatan, seri Arduino Leonardo dan Pro Micro bisa dengan mudah mengemulasikan USB, seri lain defaultnya tidak bisa kecuali dengan menambah beberapa komponen dan memakai software Lufa atau V-USB.

Cukup seru memainkan ini, tapi setiap kali selesai bermain dari kamar lain dan melihat pisangnya, Joshua berusaha ambil untuk dimakan.

Dan setelah share ini di Facebook, beberapa hari kemudian muncul iklan diskon Makey makey di Facebook feed.

Selain bulan diskon, di bulan November kami banyak melakukan aktivitas lain.  Tahun ini festival Loi Krathong dirayakan di awal bulan. Kami datang ke sungai dekat rumah untuk melihat orang-orang melarung krathong. Festival ini selalu bersamaan fetival Yi Peng, di mana orang menerbangkan sky lantern (seperti di film Tangled).

Beberapa kali ulang tahun Jonathan dirayakan bersama orang Indonesia di Chiang Mai, dan tahun ini lagi. Sekarang lebih ramai dari dulu karena lebih banyak keluarga yang punya anak. Tema tahun ini Doctor Who (sebelumnya Pokemon, dan sebelumnya lagi Paw Patrol).

Risna berhasil membuat tempe lagi tahun ini dengan ragi yang dibawakan oleh mama saya. Seperti biasa, demi privasi, foto-foto yang ada orang lain hanya diupload di Facebook untuk friends saja.

Untuk kesekian puluh kalinya, kami jalan-jalan di Night Safari. Sebenarnya tempat ini mahal (800 baht sekitar 320 rb rupiah per orang) tapi kami punya membership gratis masuk berapa kalipun dalam 6 bulan (membership 6 bulan hanya 500 baht sekitar 200 rb rupiah). Kami bisa menghabiskan waktu 3-6 jam di sini tiap kali datang. Ada bus keliling 2 jalur, totalnya sudah 1 jam, plus ada play ground (biasanya sekitar 1 jam main di play ground).

Joshua menjatuhkan iPad ke jempol kakinya dan hasilnya dalam beberapa hari kuku kakinya lepas, jadi kami membatasi jalan-jalan ke tempat yang tidak berdebu/berpasir. Ketika dibawa ke night safari, Joshua dengan semangat berlari di walking trail.

Ada tempat baru yang kami kunjungi: Rabbit Union. Di sini anak-anak bisa memberi makan dan mengelus-elus kelinci. Awalnya cukup menyenangkan bermain dan mengejar kelinci, tapi di akhir Joshua mulai berusaha mengangkat kelincinya.

Chiang Mai Citylife Garden Fair adalah acara tahunan outdoor. Di sini ada musik, banyak penjual makanan, pembaca kartu tarot, dan ada juga kegiatan untuk anak-anak.

Jonathan ikut menghias pot bunga, dan setelah itu potnya (dengan bunganya) bisa dibawa pulang.

Wii kami yang umurnya sudah hampir 10 tahun rusak. Sepertinya NAND-nya error secara fisik karena sudah dicoba restore dari backup (yang dibuat dengan BootMi) tapi gagal. Format ulang dan recreate juga gagal.

Terpikir untuk upgrade ke Wii U atau Switch, tapi akhirnya beli second hand console Wii lagi dari eBay. Nintendo Switch masih mahal dan tidak kompatibel dengan Wii Fit Board, sedangkan Wii U sepertinya masih agak bahaya jika Joshua membawa-bawa controllernya.

Teringat dulu saya pernah bikin beberapa app homebrew di console ini yang sampai saat ini masih berjalan karena Wii tidak mengupdate lagi firmwarenya.

Saya tidak mengikuti berita kalau Rasberry Pi meluncurkan majalah baru untuk oprekan hardware secara umum, bukan hanya Raspberry Pi. Versi PDFnya gratis bisa didownload dari hsmag.cc dan kita juga bisa berlangganan versi fisiknya.

Saya sempat heran kenapa ada majalah baru di kotak surat, ternyata sebagai pelanggan MagPi, saya dapat edisi pertama fisik gratis. Dan jika Anda ingin berlangganan, ada kode diskon 25 GBP di kertasnya.

Kesibukan dan Oprekan Agustus 2017

Seperti biasa, jika sudah lama tidak posting, ceritanya digabung. Posting ini campuran cerita mengenai SIM Card Hologram, RHME3, perjalanan ke Singapore dan cerita mengenai tablet Android.

SIM Card Hologram

Tanggal 26 Juli 2017 saya melihat posting mengenai program developer untuk Hologram dan saya segera mendaftar untuk mendapatkan SIM Card gratis.

Secara singkat, dengan SIM card Hologram dan kerjasama mereka dengan jaringan GSM di (hampir) seluruh dunia, kita bisa membuat produk IOT (Internet of Things) yang bekerja secara internasional dan relatif murah.  Tidak perlu memikirkan roaming data dan tarif yang berbeda di tiap negara.

SIM card hologram ini bukan untuk dipakai di handphone dan browsing, tapi ditujukan untuk dipakai di embedded system yang butuh konektivitas data yang ukurannya relatif kecil dan di luar jangkauan WIFI, walau bisa juga sebagai komplemen atau cadangan WIFI.

Khusus untuk developer plan, diberikan jatah 1 MB/bulan gratis untuk development. Jika dipakai untuk browsing, satu megabyte itu bahkan tidak cukup untuk membuka halaman depan blog ini, tapi untuk keperluan pengiriman data dari sensor ini sudah cukup.

Tanggal 11 Agustus SIM Cardnya sudah sampai, dan saya test menggunakan modem HSDPA murah (kurang dari 9 USD, sudah termasuk ongkir). Percobaan saya lakukan di Linux dengan wvdial, dan koneksi bisa mudah dilakukan.

IP yang didapatkan adalah IP internal. Device bisa mengakses IP eksternal, dan waktu saya coba asal IP nya dari Saint Helier, Jersey. Untuk koneksi kebalikannya (dari eksternal ke device), kita bisa memakai API yang disediakan hologram (atau membeli nomor supaya bisa dikirimi SMS).

Sebenarnya saat ini saya nggak punya proyek khusus yang ingin saya lakukan, tapi ini bisa saya pakai untuk melakukan koneksi ke server rumah jika koneksi internet sedang mati.

CTF RHME3

Karena waktu saya semakin terbatas, sekarang ini saya hanya sempat mengikuti CTF jangka panjang, bukan CTF 2 hari di akhir pekan. Saat ini sudah ada beberapa yang rutin: Flare-On, Labyrenth, dan RHME.

Saya mulai ikut CTF RHME tahun lalu, dan tahun ini sudah dimulai lagi: The world first automotive CTF, begitu slogan RHME tahun ini. Registrasinya kemarin dibuka tanggal 7 Agustus dan ditutup tanggal 28 Agustus. Ada tiga soal yang cukup sulit, mereka mengalokasikan 500 device, tapi hanya 486 orang yang menyelesaikan minimal 1 soal.

Dari Indonesia cuma teman saya Deny yang berhasil mendaftar (padahal dah beberapa kali saya umumkan di group RE Indonesia yang anggotanya ratusan). Dari Thailand ada 7 orang yang mendaftar.  Device akan dikirimkan ke peserta mulai 1 November nanti.


Sekarang ini Joshua sedang sangat senang nempel ke saya, kadang minta dipangku nonton Youtube padahal bisa nonton di TV yang besar atau di tablet, sementara saya coding (split screen). Sepertinya sudah saatnya beli dua monitor.

HITB Singapore

Tahun ini saya mencoba lagi HITB ke Singapore, walau hasilnya kurang memuaskan (peringkat 14 offline dari 28 team). Pesertanya jauh lebih kompetitif dari terakhir kali kompetisi beberapa tahun yang lalu. Soal-soalnya juga jauh lebih sulit.

Meski tidak menang, tapi saya senang bisa bertemu lagi dengan teman-teman yang sudah lama tidak saya temui, dan juga bertemu teman baru.

Buat orang-orang yang meng-add saya di Facebook: segala macam hal-hal menarik saya buat jadi public di timeline saya atau di blog. Hal-hal yang sifatnya hanya untuk teman saja, saya publish untuk “Friend” (seperti misalnya foto teman-teman yang saya temui di Singapore), jadi sebenarnya nggak seru nge-add saya jadi friend di Facebook.

Bug Bounty

Meski sudah banyak bug yang saya laporkan ke berbagai pihak, biasanya balasannya cuma: makasih mas. Ada juga bahkan yang gak pake terima kasih, terus diem-diem benerin. Ada beberapa yang nawarin kerjaan/proyek, tapi kemudian nggak ada kabarnya lagi.

Setelah tahun lalu menemukan bug di payment gateway Master Card (dan menerima 8500 USD), tahun ini saya coba-coba lagi dan menemukan lagi bug di beberapa payment gateway. Sayangnya yang sangat tanggap cuma satu: Fusion Payments. Di bulan ini saya sudah menemukan 2 critical level bug di sana, yang pertama 400 USD dan berikutnya 500 USD.

Sebagai catatan: bug-bug yang saya temukan akan saya tuliskan detailnya, tapi saat ini masih belum bisa/boleh.

Tablet Android

Beberapa waktu yang lalu saya mendapatkan pekerjaan testing aplikasi Android yang hanya berjalan di versi tablet (layar besar). Ternyata aplikasinya berisi form yang banyak sekali sehingga perlu layar lebar. Biasanya saya memakai tablet Samsung Note 8 yang sudah bertahun-tahun umurnya, tapi sekarang ini tabletnya sudah rusak (mati/tidak bisa boot lagi). Karena aplikasinya selalu hang di emulator, akhirnya saya memakai Android di Pinebook.

Semua bisa berjalan dan testing bisa selesai, tapi ada yang mengganggu: Pinebook tidak punya touch screen, dan aplikasinya hanya mau jalan di mode landscape. Jadi saya terpaksa memakai laptop dalam posisi miring, dengan menggunakan keyboard eksternal.

Akhirnya saya beli Android murah dari AliExpress. Ratingnya bagus, katanya CPUnya 8 core, memorinya 4 GB dengan ROM 32 GB. Setelah sampai, kenyataannya CPUnya cuma 4 core, RAM nya cuma 2GB dan ROM cuma 16 GB. Ternyata kernelnya diakali sehingga jika memakai software dari play store pun, akan muncul kalau memorinya 4 GB, CPUnya 8 core, dan ROM-nya 32 GB.

Waktu mau coba root dengan langsung flash recovery partition baru, ternyata malah error, tidak bisa boot sama sekali dan nggak bisa dicharge juga. Akhirnya saya charge baterenya dengan cara membuka soldernya lalu memakai modul charger Lithium. Setelah mendapatkan file ROM asli dari sellernya, akhirnya bisa jalan normal lagi. Tapi benda ini sangat ringkih, jadi saya simpan saja untuk pentest berikutnya.

 

Sebenarnya masih banyak cerita dan detail lain bulan ini, tapi akan saya geser ceritanya ke bulan depan.

Ponsel Anda disadap? (bagian 1)

Beberapa waktu yang lalu ada yang mengirim pesan di Facebook: “Mas, saya merasa ada yang mengintip pesan WhatsApp saya”. Pertanyaan dilanjutkan dengan bagaimana caranya mengetahui apakah memang benar disadap, bagimana cara membersihkannya, dan juga bagaimana orang tersebut bisa masuk?

Ada banyak alasan kenapa seseorang mungkin mau menyadap Anda. Mungkin Anda orang penting dan pemerintah mau menyadap Anda. Mungkin ada rekan atau lawan bisnis yang ingin tahu soal bisnis Anda. Mungkin Anda berteman dengan orang penting yang terlalu sulit didekati untuk disadap. Mungkin Anda punya mantan pacar yang masih belum bisa melupakan Anda.

Secara umum, seseorang bisa saja tidak bertujuan menyadap. Bisa saja seseorang masuk ke HP Anda untuk  sekedar merampok: mengakses rekening bank Anda atau informasi kartu kredit Anda, atau bahkan sekedar mengambil pulsa Anda. Bahkan kadang sekedar agar uang dari iklan yang tampil di berbagai aplikasi masuk ke rekening penyerang.

Serangan Massal vs Serangan Spesifik

Tidak selamanya kita menjadi korban karena kita ditargetkan spesifik. Sering kali ada serangan massal (menebar jala), dengan harapan dapat korban empuk. Ketika ada sebuah serangan massal dan penyerang menyadari Anda punya akses penting, mungkin mereka akan memfokuskan diri pada Anda.

Ada contoh yang baru saja terjadi. Ada software open source OS X bernama Handbrake yang servernya dihack dan softwarenya disisipi malware selama 3 hari. Siapapun yang mendownload dan menginstall dalam rentang 3 hari tersebut kena malware. Sebenarnya sekarang ini software ini sudah cukup jarang dipakai karena selain untuk konversi video fungsi utamanya dulu adalah me-rip (menyalin film dari) DVD.

Ada satu developer OS X dari perusahaan Panic.com kebetulan saja sedang mengupdate software Handbrake di dalam rentang waktu 3 hari tersebut. Karena orang itu merupakan developer maka dia memiliki akses source code perusahaan, dan hasilnya: source code produk perusahaan mereka dicuri.

OS X merupakan sistem operasi yang relatif aman, jumlah penggunanya tidak sebanyak Windows, dan jumlah malware yang ada juga tidak sebanyak Windows, tapi karena sedang apes ya tetap saja bisa kena. Pembuat malwarenya tentunya tidak bisa memprediksi siapa yang akan mendownload softwarenya, tapi kebetulan saja ada korban menarik yang ketemu.

Tiap hari ribuan malware didistribusikan dengan berbagai cara, dengan email, dengan link web, dsb. Para pembuat malware ini tidak berfokus pada orang tertentu. Jika kebetulan pembuat malwarenya mengamati bahwa Anda adalah target penting (atau mungkin berhubungan dengan orang penting), maka dia bisa meneruskan manual proses penyerangan.

Serangan spesifik juga bisa dilakukan, tingkat kesulitannya tergantung banyak hal. Tapi biasanya yang pertama dilakukan adalah mengenal target dulu. Kemudian titik lemahnya bisa dicari. Yang dimaksud titik lemah adalah titik manapun untuk bisa menguping: bisa HP-nya langsung, bisa account onlinenya, bisa Laptopnya, bisa routernya, dsb.

Keamanan Sistem Operasi Ponsel

Pertama perlu dicatat bahwa keamanan ponsel berbeda-beda tergantung sistem operasi dan versinya, saat ini yang paling aman adalah iPhone (sistem operasinya iOS), dan bisa dibilang yang paling tidak aman adalah Android (kebanyakan model selain yang terbaru).

Ada trade-0ff antara kenyamanan dan keamanan. Di Android hampir semua aplikasi bisa mengakses apapun, bahkan aplikasi apapun bisa diganti dengan aplikasi lain. Contoh sederhana: SMS bisa ditangani oleh program tertentu, di iOS tidak bisa. Dengan adanya akses SMS, di Android bisa ada program auto forward SMS ke email atau ke SMS lain, sementara hal ini tidak bisa di iOS.

iOS bisa dibuat jadi lebih nyaman dengan jailbreak, tapi ini mengurangi keamanannya. Dengan jailbreak, berbagai software yang tidak diijinkan Apple bisa diinstall.

Kenyamanan Android ditukar dengan keamanannya: program yang semestinya memforward SMS ke email Anda bisa saja ternyata jahat dan sekaligus memforward SMS bank Anda ke email penjahat. Di sini pengguna Android perlu belajar percaya pada pembuat aplikasi. Jika Aplikasi didapat dari Play Store resmi Google, maka kemungkinan besar aplikasi itu aman.

Akses SMS hanyalah salah satu contoh saja, masih banyak contoh lain yang dibolehkan di Android tapi tidak di iOS. Lebih mudah membuat dan menginstall aplikasi ke sebuah handset Android, dalam hitungan menit saya bisa menginstall aplikasi buatan saya ke HP orang lain, cukup dengan mengganti sedikit setting. Untuk iOS, agar bisa menginstall aplikasi kita perlu mendaftar jadi developer di situs Apple, dan jika kita tidak membayar 99 USD/tahun, aplikasi yang diinstall di device akan expired dalam seminggu.

Keamanan Aplikasi Messaging

Berbagai macam aplikasi messaging (misalnya WhatsApp, BBM, Line, Telegram) sudah sangat aman, sehingga data yang ada di perjalanan tidak bisa disadap, tapi data yang ada di ponsel bisa disadap. Jika Anda tidak percaya bahwa ada bentuk enkripsi yang tidak bisa dibuka, Anda bisa membaca artikel saya tentang ubreakable encryption.

Sekali lagi: meskipun ISP atau orang lain tidak bisa menyadap data di perjalanan, tapi data yang ada di salah satu ujung bisa disadap. Ibaratnya jika ada orang mengintip di belakang Anda waktu Anda mengetik pesan, maka orang itu akan bisa membaca pesan Anda, tidak peduli dikirim dengan metode apapun.

Yang di belakang Anda bisa ngintip

Aplikasi messaging juga perlu menyimpan data di ponsel Anda, menyimpan semua pesan masuk dan keluar. Ini ibaratnya seperti surat datang ke rumah Anda, jika surat ini ingin bisa dibaca berulang, maka perlu disimpan.

Beberapa aplikasi messaging, seperti Line menyimpan pesan di database dalam bentuk plaintext. Ini lebih mudah dibaca. Ini seperti menaruh surat di atas meja, sedangkah yang lain seperti WhatsApp dan BBM, pesan yang tersimpan di ponsel/sd card ini juga dienkripsi. Perlu dicatat bahwa ini hanya mempersulit saja, isi pesan tetap bisa dibuka, karena jika tidak bisa dibuka maka tidak mungkin bisa ditampilkan di ponsel kita. Ibaratnya kita hanya memasukkan pesan ke dalam lemari besi. Bisa dibuka, tapi kuncinya masih ada di dalam rumah.

Aplikasi lain di ponsel Anda, dalam situasi tertentu bisa mengintip seperti seseorang di belakang Anda. Aplikasi-aplikasi di ponsel itu seperti orang yang berada di “rumah” yang sama. Jika aplikasi “nakal”, maka ada kemungkinan bisa mengintip data aplikasi lain. Sekarang ini di sistem operasi yang baru sudah lebih sulit untuk bisa mengakses data aplikasi lain, tapi tetap saja terkadang masih ada celah.

Beberapa aplikasi messaging, seperti WhatsApp, Telegram dan BBM memungkinkan kita mengakses pesan di Desktop/Web. Untuk memonitor orang awam, hal ini bisa dipakai. Pinjam HP orang tersebut sebentar saja, aktifkan chat via web, dan semua pesan bisa dilihat online. Metode ini tidak akan bekerja untuk orang yang aware dengan security. WhatsApp akan menampilkan bahwa koneksi web aktif dan notifikasi ini tidak bisa dihilangkan dengan swipe.

 

Notifikasi Web WhatsApp

Line hanya menampilkan pesan sekali dan bisa diswipe, jadi kalau seseorang baru saja meminjam HP dan login ke Line di PC, tidak akan terlihat dengan mudah.

Saat ini untuk Line kita harus pergi ke Settings, Account, Devices. Parahnya lagi jika seseorang sudah logout, tapi sempat sebelumnya login, kita tidak bisa mengeceknya (tidak ada historynya).

 

Informasi device yang login di Linux

Sebagai catatan tambahan: ada banyak aplikasi baik mobile app maupun web online untuk membuat chat palsu, baik WhatsApp ataupun yang lain. Bagaimana membuktikan keasliannya? hanya dengan akses ponsel orang tersebut, dan melakukan proses forensik yang benar. Benar di sini artinya terdokumentasi dengan jelas semua proses akuisisi datanya, supaya yakin tidak ada tampering (modifikasi) terhadap data yang diselidiki.

Screenshot posting Facebook/instagram atau apapun juga gampang dipalsukan.  Saya kadang tertawa melihat banyak kubu yang yang share bahwa chat WA gampang dipalsukan, tapi di posting berikutnya memposting fitnah kepada seseorang berdasarkan screenshot Facebook yang mungkin juga palsu.

Keamanan Account Online

Rasanya tidak ada orang yang memakai smartphone tanpa account online, baik itu email, Facebook, Instagram, maupun layanan lainnya. Sangat penting untuk mengamankan account-acount tersebut.

Contoh: Jika seseorang memiliki akses ke account facebook Anda, maka orang itu bisa melihat semua foto dan pesan yang pernah Anda kirim di Facebook messenger tanpa perlu akses ke HP Anda. Jika seseorang memiliki akses email, maka orang tersebut bisa mereset banyak password (misalnya password Facebook).

Contoh lain kejadian besar yang pernah terjadi adalah bocornya foto-foto artis dari iCloud dari berbagai artis terkenal. Jika mungkin aktifkan Two Factor Authentication, agar ketika login dibutuhkan token tambahan.

Sebagai catatan, berbagai macam hack yang dilakukan berikutnya biasanya tujuan utamanya adalah: menginstall aplikasi di ponsel Anda yang menjadi “mata-mata”. Sebuah ponsel adalah komputer mini.

If someone can persuade you to run his program on your computer, it’s not your computer anymore.

David Salomon (Elements of Computer Security)

Keamanan Komputer Desktop/Laptop

Bagian ini ditujukan bagi mereka yang menghubungkan komputernya ke ponsel, untuk backup/sinkronisasi, atau untuk pembuatan aplikasi (khusus untuk developer). Bayangkan saja kejadian seperti kasus Panic.com yang saya sebutkan di atas.

Jika seseorang mengambil alih komputer Anda dengan malware/RAT (Remote Access Trojan), dan Anda menghubungkan ponsel ke komputer, maka data dari ponsel biasanya bisa diambil. Apalagi jika ternyata datanya memang sudah dibackup di komputer Anda, maka tinggal diambil tanpa repot masuk ke ponsel Anda.

Pada kebanyakan komputer orang awam yang saya cek, biasanya saya menemukan malware jinak. Biasanya malware tersebut hanya mengganti search engine yang default, menampilkan popup, dsb, malware yang menghasilkan uang recehan dari iklan. Kalau software jinak bisa dengan mudah masuk, tentunya yang ganas pun kemungkinan masuknya cukup besar.

Jika punya akses fisik ke komputer yang tidak dipassword, maka serangannya cukup mudah, cukup install sebuah aplikasi dari USB atau dari Internet.

Keamanan Koneksi Data

Meskipun secara umum program messaging saat ini sudah aman terhadap penyadapan online, tapi keamanan koneksi data tetap perlu diperhatikan, karena bisa menjadi batu loncatan untuk serangan lain. Perlu dicatat bahwa di ponsel ada puluhan aplikasi, tidak semuanya memakai HTTPS untuk melakukan koneksi data. Jika salah satu aplikasi ini bisa dibajak, maka bisa menjadi batu loncatan masuk ke ponsel secara umum.

Jika Anda melakukan koneksi via WIFI, seseorang bisa membuat access point dengan nama dan password yang sama, dan kebanyakan ponsel akan otomatis melakukan koneksi ke access point tersebut.

Banyak modem ADSL atau fiber di Indonesia yang tidak aman, seseorang bisa gampang masuk. Bahkan baru-baru ini modem-modem di Indonesia pernah dijadikan bagian dari botnet. Di rumah biasanya modem ini terhubung ke komputer, atau ke ponsel melalui WIFI. Biasanya ada beberapa device (komputer/laptop/game console) yang terhubung.

Kadang kalau saya sedang iseng chat dengan seseorang, saya memberikan URL ke server saya yang akan diklik orang tersebut. Dari server saya bisa melihat alamat IP orang tersebut. Dari alamat IP kadang saya bisa masuk ke dalam modemnya.

Dari modem saya bisa melakukan banyak hal, tergantung kecanggihan modemnya. Beberapa modem berbasis Linux sudah sangat canggih, saya bisa langsung melakukan serangan ke rumah orang tersebut dengan sangat mudah.

Beberapa modem fiturnya sangat sederhana, tapi inipun sudah cukup untuk masuk. Contohnya yang bisa dilakukan di modem jenis murahan adalah mengganti alamat server DNS (Domain Name System) di modem.

Server DNS adalah server yang menerjemahkan nama menjadi alamat. Jika saya ganti DNS menjadi milik saya, maka  saya bisa melihat domain situs mana yang dikunjungi orang tersebut (dan biasanya jadi tahu aplikasi mana yang dipakai orang tersebut).

Jika saya tahu bahwa salah satu domain yang dikunjungi ternyata tidak memakai HTTPS, saya bisa mengarahkan domain tersebut ke server saya, yang memforward requestnya ke server asli. Hasilnya: saya bisa melihat koneksi yang dilakukan, saya bisa tahu sistem operasi apa yang dipakai di ponsel atau komputer di rumah tersebut (baik dari User-Agent saja, atau dari javascript yang disisipkan di web). Jika saya sudah yakin akan sebuah target (misalnya ada PC Windows), saya bisa mengeset firewall di modem untuk mengijinkan koneksi dari luar masuk ke PC yang spesifik.

Semua yang saya bicarakan di atas adalah sesuatu yang sifatnya real dan bisa dilakukan relatif mudah (bahkan kedua adik saya mengganti modem mereka setelah saya berhasil masuk).

Sebagai catatan tambahan: modem 4G juga banyak yang memakai Linux. Jika seseorang cukup punya niat, maka modem 4G juga bisa ditukar (atau diflash ulang) dengan firmware yang berisi backdoor. Beberapa investigasi awal sudah dilakukan teman saya y3dips terhadap modem Bolt.

Keamanan benda lain

Saya tidak bisa mengcover semua hal yang mungkin bisa menjadi jalan masuk untuk penyerang. Ada banyak teknologi baru terus bermunculan, dan ada risiko baru. Contoh: banyak smartwatch yang bisa dijadikan unlock method, artinya ponsel tidak akan meminta passcode atau PIN jika smartwatch itu di dekat ponsel.

Meskipun itu sangat praktis, tapi juga jadi jalan masuk baru. Jika Anda sedang mandi dan meninggalkan ponsel dan smartwatch Anda di luar, maka seseorang mudah sekali mengakses ponsel tanpa perlu tahu PIN/Password.

Di masa lalu, charger USB juga dengan mudah bisa mencuri data kita karena tidak diperlukan otorisasi dari pengguna. Sekarang HP sudah akan menanyakan: Allow access to device data? atau semacam itu jika HP dihubungkan ke komputer  atau device lain yang berusaha mengakses data. Tentunya walaupun ada pengamanan ekstra ini, pengguna awam yang masih saja menekan: Yes, akan tetap kena.

Penutup

Posting bagian ini sekedar menunjukkan dua hal. Pertama Anda tidak harus jadi orang penting atau terkenal untuk disadap, dan kedua: ada banyak cara untuk masuk ke ponsel seseorang. Cara-cara ini ada yang sangat mudah, dan ada juga yang cukup rumit dan butuh waktu.

Jika seseorang memiliki niat dan dana untuk menyadap Anda, kemungkinan besar mereka akan bisa melakukannya.