e-KTP dan Security (Bagian II)

Update (29/11/2014):

  1. Aplikasi proof of concept pembacaan e-KTP ini saya putuskan untuk dipublish ke Play Store
  2. Jika ada yang berminat atau penasaran ingin mencoba ngulik contactless card berbasis ISO-DEP/ISO14443-4 (termasuk dalam pengujian pembacaan data foto e-KTP ini saya menggunakan tools ini); bisa langsung install aplikasi APDU Debug di Play Store

Melanjutkan postingan sebelumnya mengenai keamanan e-KTP karena terlalu panjang sebagai update postingan sebelumnya, maka saya putuskan untuk menjadi postingan terpisah.

Kembali ke tujuan awal dari postingan saya, yang sebenarnya adalah memberikan semacam alert kepada institusi pemerintahan pengelola e-KTP. Bahwa ada celah keamanan yang mungkin bisa dieksploitasi lebih lanjut oleh siapa pun di luar sana. Celah ini bukan pada desain sistem e-KTP, melainkan pada implementasi di lapangan. Sehingga memungkinkan orang yang tidak berkepentingan (red: non pemerintah) mendapat materi dalam hal ini aplikasi termasuk library untuk membaca e-KTP. Exploit lebih lanjut bisa saja dilakukan oleh expert-expert di luar sana πŸ˜€

Lalu PoC untuk membaca e-KTP?

Setelah saya coba trace lebih dalam dari library yang ada (setelah sebelumnya terkendala hardware) ternyata membaca data e-KTP selalu membutuhkan Secure Access Module (SAM). Sehingga ini yang menyimpulkan saya bahwa desain e-KTP sudah “mengikuti standard keamanan contacless” untuk saat ini. Dan hal ini merupakan desain standar implementasi NFC (dalam hal ini saya mengacu kepada implementasi e-money) di Indonesia, yang rata-rata menggunakan SAM sebagai security.

Namun, tidak semua pembacaan data perlu SAM. Sebagai contoh adalah data foto pada e-KTP. Data ini tidak perlu SAM. Sehingga saya putuskan untuk mencoba mengimplementasikan pembacaan data foto saja.

Berikut hasil debug, yang memberikan hasil positif, dalam arti berhasil me-retrieve data foto dari e-KTP:

Hasilnya adalah sebuah stream data image dalam format JPG. Berikut adalah hasilnya (atas seijin yang punya e-KTP):

Extracted data from e-KTP:

Resolusi gambar hanya 50x62p, sangat-sangat-sangat-sangat rendah sekali, tapi cukuplah untuk identifikasi.

Physical e-KTP

Tinggal bikin UI!

Oke, next…

Update (7/4/2014):

Setelah beberapa kali debugging karena harus memastikan algoritma pembacaan data berjalan sesuai dengan yang seharusnya dan terkendala handset sendiri yang tidak bisa dipakai untuk tes. Akhirnya, berikut ini adalah hasil implementasi pembacaan data foto pada e-KTP.

Ujicoba dilakukan dengan menggunakan handset Nexus 5. Beberapa handset yang mumpuniΒ dan sudah diuji adalah: Nexus 4, Nexus 5, dan HTC One X.

Saya penasaran kenapa NFC di pabrikan lain (Sony dan Samsung) tidak bisa digunakan dan selalu muncul exception “Transceive failed”. Dari hasil beberapa kali browsing terkait pemasalahan ini, akhirnya saya berkesimpulan (belum dicoba) bahwa solusinya adalah compile ulang Android, dan merubah parameter time out pada modul NFC. Atau mencoba implementasi NfcAdapter.ReaderCallback.

Mana link download .apk nya?

Sebagai praktisi keamanan informasi, saya sadar bahwa ini adalah salah bentuk security breach, yang mana telah saya sebutkan sebelumnya.Β Dan mengenai tujuan dari implementasi ini adalah memberikan bukti nyata adanya celah keamanan dalam implementasi e-KTP di lapangan.

Tentunya ini menjawab, bahwa saya tidak akan sembrono ikut memperparah dengan menyebarkan aplikasi ini πŸ˜€

Kecuali untuk beberapa orang yang sudah ikut terlibat ujicoba dengan membolehkan saya menginstall aplikasi di handset mereka. Tenang saja, pada saat update tulisan ini dibuat aplikasi yang terinstall sudah tidak bisa dipergunakan lagi πŸ˜€

Yang mau mencoba silakan donlot di sini. Kadang orang lebih percaya kalau sudah mencoba sendiri. Termasuk anda! πŸ˜€

  • cyrus

    Wah menarik ini untuk dicoba. Saya bisa minta sample aplikasinya? Thx.

    • sybond

      Terakhir aplikasi bisa didownload disini.

    • Mc Antonio Gunawan

      Pertamax gan infonya πŸ˜€

  • tole

    weeeleeh yg bisa HP mahal semua

    • sybond

      Memang rata-rata HP highend yg sudah bisa NFC. Beberapa vendor HP (Xperia M) saya rasa cukup fair membundling handset mereka yg ber-NFC dengan harga yg wajar. *jadi promosi HP*

      Salam kenal!

  • Saputra Ahmad Edi

    boleh minta email untuk diskusi atau bertukar ilmu?

  • Bondan Sumbodo
  • boni

    gan yang apdu d sterip itu angkanya berapa ya? boleh minta gak? minimal dari yang apdu ke 0 sampai apdu ke dua

  • beno

    EKTP.cs nya donk pak Bondan

  • ujek

    pak bondan boleh minta email untuk diskusi, saya mahasiswa informatika, tugas akhir saya membuat e-voting, dan untuk proses authentikasi usernya saya berfikiran untuk menggunakan e-ktp ini. TKS

  • Brifeb

    IMHO. menurut pemikiran bodoh saya πŸ˜€ e-ktp ini harusnya bisa dibaca pake reader dengan mudah, ga usah security2an, pemerintah bikin desain open command biar developer2 bisa bikin aplikasi buat baca informasinya. toh secara kasat mata sudah bisa dilihat pake mata telnajang data2nya foto tercantum secara jelas di bagian belakang.
    Atau mungkin saya yg gatau fungsi etkp ini? hehehe.
    inti pertanyaan bodohnya adalah “ngapain pake2 dienkrip datanya atau command buat bacanya”? toh dibagian belakang tertulis jelas. Mas bond mungkin bisa bantu jawab kemungkinan apa yg bisa timbul jika data ini terbuka? toh smartcard juga bisa dibacanya dalam range yang “near”, toh sama aja ngeliat fisiknya kan?
    *yang dibuka command baca saya tentunya, read only, tapi ga bisa ngerubah isinya.

    Kan jadi mudah kalo mau daftar2 atau apalah pake ktp, semua deloper bisa bikin, dimana2 tinggal tap, atau mungkin emang sengaja didesain sama developer ektp biar jadi proyek pemerintah.. hehe. biar proyeknya ke dia terus.. hahaha.

    • ngapain pake2 dienkrip datanya atau command buat bacanya?

      Pencurian identitas, beda dengan melihat/membaca dengan mata informasi yang secara fisik tercantum pada KTP. Coba aja ada orang tiba-tiba pengen lihat KTP anda, kemudian difoto dengan kamera, apa yang ada di pikiran anda? jika tidak diencrypt fraudster bisa dengan mudah mengambil informasi identitas anda, tinggal tempel dompet dapet semua info-info tentang anda.

      Saya setuju dengan open system, terlebih untuk pembacaan data KTP-el. Namun memastikan developer untuk tidak semena-mena melakukan develop program untuk tujuan tidak baik tentunya langkah pengamanan perlu dilakukan.

      ..atau mungkin emang sengaja didesain sama developer ektp

      Kalo ini saya ragu, dan lebih yakin bahwa dari pemerintah memang meminta desainnya demikian. Dan hal ini tertuang klo gak salah dalam permendagri no. 34 tahun 2014.

    • mb

      Data pribadi seseorang itu penting, jika di salah gunakan pihak lain maka yang terkena imbas pemilik data tersebut, makanya perlu diproteksi/disembunyikan dengan encryption untuk bagian yang dianggap penting.

  • mb

    Saya mencoba pakai samsung Galaxy A5 response “transceive failed”. Apakah hp samsung tidak support protocol yang digunakan e-KTP?

    Saya coba membaca eKTP dengan TagInfo bawaan NXP, NFC support ISO/IEC 14443-2/3/4 dengan tag type IsoDep dan NfcA.

    • Terakhir saya cari tau mengenai masalah transceive failed kesimpulannya adalah firmware NFC adapter HP kurang lama menunggu response dari smartcard (nilai timeout kecil). Beberapa model dari pabrikan samsung mengalami hal ini, tapi seingat saya A5 tidak termasuk, dan bisa dipergunakan membaca data foto KTP-el tanpa masalah.

    • mb

      bener mas, ternyata hp saya NFCnya rusak. Setelah saya coba beli type yang sama, saya coba untuk retrieve photo berhasil.
      Untuk APDU debug saya coba kirim command {C000000000} untuk memperoleh versi dari kartu respon 6800, artinya apa? Contoh penggunaan APDU debug seperti apa? Trims

    • Silakan lihat di sini untuk list kode error http://techmeonline.com/apdu-status-error-codes/

    • Mb

      Trims mas list kode errornya, List error tersebut sangat membantu saya untuk mencari APDU authentication. Setelah ketemu cmd authentication. Ketika saya kirim req authentication cmd 84, card akan mengirim data 10bytes yaitu 8bytes random setiap session connection, sedangkan 2 bytes diakhir selalu tetap 9000 yang artinya APDU berfungsi normal. Algoritma mutual authenticationnya bagaimana untuk merespon balik apakah antara UID dan Random challenge di encrypt menggunakan DES, AES atau OMAC? trims

  • Mb

    mas, apdu di apk di proteksi dalam bentuk native (*.so), jadi tidak terlihat saat di decompile. Saya coba brute-force dengan melakukan clusterring terlebih dulu, apdu muncul juga πŸ™‚

  • alex

    Pak bondan, sangat menarik artikelnya. Datasheet untuk chip eKTP bisa di download dimana? Thx

    • NXP tentunya, karena produsennya. Namun sepertinya harus bayar untuk mendapat datasheet-nya.

    • alex

      Pak bondan itu tipe cardnya MF P3**G002 ?

    • Coba discan dengan app TagInfo-nya NXP, harusnya muncul tipe cardnya.

    • alex

      Pak tidak muncul tipe cardnya, hanya teknologi yang digunakan yaitu nfca dan isodep. Menurut pak bondan itu mifare tipe apa? Apakah di hp pak bondan muncul tipe cardnya?

    • alex

      muncul teknologinya yaitu nfca dan isodep, tidak muncul tipe kartunya.

  • alex

    Bagaimana cara mengetahui algoritma yang digunakan untuk proses mutual authentication, jika kita tidak mengetahui type chip card tersebut?
    Mutual auth:
    1. send challenge, get randomA (8)
    2. generate randomB (8)
    3. generate randomC (16)
    4. proses randomA, randomB, randomC dengan algoritma tertentu untuk menghasilkan plain(16)
    5. proses plain dengan encryption tertentu untuk menghasilkan crypto
    6 send crypto, get result (2) [ 0x9000(true) || !0x9000(false)]

    Untuk melangkah ke step 4 harus mengetahui chip card, dari datasheet chip card kita nanti bisa tahu jenis encryption dan algoritma yang digunakan untuk proses mutual authentication. Tanpa mutual authentication, kita tidak akan bisa membaca content yang terencrypt.

    • Ya justru itu salah satu faktor securitynya menurut saya. Kemudian jika tau pun algo yang dipergunakan, adalah bagaimana data tersebut diconstruct sebelum diproses dengan key tersebut?

    • alex

      Menurutku mencari algoritma untuk mutual authentic lebih sulit dibandingkan mencari Key dan Inital vector untuk proses encrypt/decryipt. Apalagi jika tidak tahu type chip card tersebut.

      Key dan Initial vector bisa dicari dengan melakukan bruto force jika mengetahui algoritmanya. Mirip dengan cara mencari APDU.

      Apakah proses mutual authentic melibatkan asymmetric algorithm (public/private key) atau hanya symmetric alorithm saja?

  • paseo

    Apa sebenarnya tipe chip dari eKTP?

    1. TagInfo NXP: terbaca “teknologi nfca dan isodep” dan “tidak muncul jenis card”.

    2. NFC TagInfo: terbaca “teknologi nfca dan isodep” dan “jenis desfire”. Tetapi ketika saya coba kirim apdu select application, response negatif dari chip, artinya kartu tersebut bukan jenis desfire.

    3. Website NXP: mengatakan chip berupa “smartmx2”.

    4. Website Pemerintah: mengatakan chip berupa “P3XXXXX”.

    Penjelasan yang berbeda-beda untuk satu chip yang sama, sangat membingungkan :).

    Setiap chip yang berbeda tipe, akan memiliki algoritma mutual authentic yang berbeda. Bagaimana kita bisa mengetahui algoritma yang digunakan jika tipe chip saja tidak tahu?

  • Comment saya tutup, untuk diskusi silakan melalui jalur email.