Mungkin mengenai teknologi pengamanan data pada e-KTP sudah pernah dibahas secara detail di sini. Mulai dari enkripsi data dengan algoritma enkripsi yang katanya paling kuat (walaupun masih symmetric) sampai dengan penggunaan biometric untuk autentikasi data.
Lalu data aman? secara teori keamanan data selain dari teknologi ada faktor lain yaitu lingkungan penggunaan teknologi tersebut. Ingat bagaimana social engineering bekerja? kurang lebih begitu maksud saya.
Saya coba membedah mengenai keamanan e-KTP ini melalui pendekatan tersebut.
Dari sisi teknis pengamanan data e-KTP diproteksi sedemikian rupa sehingga hanya program atau reader dengan program tertentu (tentunya program yang ada di Instansi Pemerintah) yang dapat membacanya.
Kalau dilihat mengenai teknologi yang dipergunakan oleh e-KTP ini adalah comply dengan ISO-14443 maka tidak jauh dengan pendekatan security contactless yaitu dengan APDU khusus untuk membaca data dalam e-KTP ini. Yang tentunya APDU ini dijaga sedemikian rupa sehingga hanya diketahui oleh internal pemerintah atau bahkan seharusnya Lembaga Sandi Negara? (err.. atau vendor?).
Pertanyaannya jika saya seorang attacker, tentunya untuk dapat membaca atau bahkan merubah data dalam e-KTP tentunya adalah bagaimana cara mendapatkan APDU ini? sekilas saya sudah menyebutkan sebelumnya. Ya! satu-satunya cara adalah “membedah” program yang dipergunakan untuk enrollment e-KTP, yang tentunya ada di instansi pemerintahan / kelurahan.
Selanjutnya bagaimana cara kita mendapatkan aplikasi tersebut untuk eksploitasi lebih lanjut? jawabannya sudah disebutkan sebelumnya tentunya: social engineering.
Tapi sebelum jauh-jauh membuat skenario untuk social engineering, coba metode paling gampang. Googling!
Hasilnya mengejutkan!
Dan percaya tidak percaya, dari hasil googling tersebut jika dirunut lebih jauh (tentunya setelah melibatkan analisa binary code dan reverse engineering) saya sudah bisa menemu data-data berikut :
- APDU apa saja yang dipakai untuk e-KTP (atas nama keamanan nasional tentunya saya tidak akan posting nilai APDU-nya di sini)
12345678910111213141516171819SelectMFSelectEvMFSelectDFKTPSelectEFGetChallengeExternalAuthGenerateMutualAuthGenerateSecMutualAuthVerifyMutualAuthResetSAMEncodeSMDecodeSMSetSignModeSAMVerifyConfigActivateCardControlSetKeyGetCUIDBGetUIDAGetCardType - Data-data apa saja yang terdapat di dalam e-KTP
1234567891011121314151617181920NIKAlamatRTRWTempatLahirKecamatanKelurahanKotaJenisKelaminGolonganDarahAgamaStatusPernikahanPekerjaanNamaTglLahirPropinsiFotoTandaTanganMinutiae1Minutiae2 - Format masing-masing data e-KTP, bagaimana data foto tersimpan, apa formatnya, bagaimana cara kompresinya dll..
Lessons learned?
IMHO, security sebuah data elektronis tidak hanya dibatasi oleh sandi atau teknologi yang melindunginya, tapi lebih kepada orang atau individu yang seharusnya menjaga data tersebut. Saya bisa sampai nemu library atau bahkan meng-exploit fungsi-fungsi di atas tidak lain tidak bukan karena ada aparat pemerintahan yang dengan “polos”-nya mengunggah aplikasi untuk enrollment e-KTP kelurahan di situs filesharing gratisan (yang kalau saya lihat maksudnya baik, yaitu menyediakan backup; bahkan ada yang publish connection string Database e-KTP).
Kegagalan e-KTP dalam melindungi data elektronis di dalamnya bukan pada kegagalan teknologi yang dipergunakannya, tapi lebih kepada individu yang seharusnya bisa menjaga kerahasiaan negara atau dalam hal ini setidaknya mengetahui materi atau data elektronis apa yang boleh diunggah untuk publik dan data elektronis mana yang memang bersifat rahasia, dalam hal ini rahasia negara. Btw, kalau ada temuan atau kemungkinan kebocoran keamanan nasional harus melapor kemana ya? 😀
Next: Bagian 2, PoC reader e-KTP berbasis Android? mumpung sedang semangat ngulik NFC
Update 0.1:
Sepertinya PoC e-KTP reader dengan Android harus ditunda. Karena kendala hardware. Setiap kali e-KTP coba dikirim APDU selalu gagal dengan error: Transceive failed
. Ini mirip dengan reader kartu CEPAS di handset saya, yang sering error untuk baca saldo kartu EZ-link (kartu multitrip-nya MRT Singapura).
Update 0.2 (01/04/2014):
Ujicoba di handset pabrikan lain ternyata jalan normal. Berikut beberapa hasil ujicoba dengan beberapa merk handset ber-NFC:
- Sony Xperia Acro S (HP sendiri :D) – Transceive failed
- Sony Xperia M – Transceive failed
- Samsung Galaxy Note 2 – Transceive failed
- LG G2 – OK
- Nexus 5 (LG) – OK
Update 0.3 (01/04/2014) :
Oke. Saya salah baca alur library-nya. Ternyata butuh SAM juga untuk membaca data e-KTP, karena hanya kartu SAM yang akan melakukan otorisasi perintah untuk me-retrieve data e-KTP.