Update (29/11/2014):
- Aplikasi proof of concept pembacaan e-KTP ini saya putuskan untuk dipublish ke Play Store
- 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
ExtraID: [-stripped-] TechList=2 - android.nfc.tech.IsoDep - android.nfc.tech.NfcA Raw connect... isConnected=true getMaxTransceiveLength=261 getTimeout=618 NumOfAPDU=18 -----------Start----------- 0-Send APDU: [-stripped-] 0-Response APDU: [9000] 1-Send APDU: [-stripped-] 1-Response APDU: [9000] 2-Send APDU: [-stripped-] 2-Response APDU: [0634ffd8ffe000109000] 3-Send APDU: [-stripped-] 3-Response APDU: [4a46494600010101006000600000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c21323232323232323232329000] 4-Send APDU: [-stripped-] 4-Response APDU: [32323232323232323232323232323232323232323232323232323232323232323232323232323232ffc0001108003e003203012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000019000] 5-Send APDU: [-stripped-] 5-Response APDU: [7d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a69000] 6-Send APDU: [-stripped-] 6-Response APDU: [a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104059000] 7-Send APDU: [-stripped-] 7-Response APDU: [2131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b39000] 8-Send APDU: [-stripped-] 8-Response APDU: [b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00e16ce08a5b24cc71e4203f707a7d2b9ad4ef9199e38e34550700851cd694da81b2d28153fbc740abf975aa7a3787e5d60e412101e4d7a19000] 9-Send APDU: [-stripped-] 9-Response APDU: [8ec42845453f530c3d294a4cc55949c7caa39cf4a9e19806e1578ee477af46b2f87b6613f7be63b9ec0f02aa5dfc3c5593742eea08e47a1ff0af1d62a9df73d0784a9639fb1be4b8b810c90459238c20ad3f262c1fdd478ff705656ada1de68f3a49f7947465edf5ad485fcd891c1e189000] 10-Send APDU: [-stripped-] 10-Response APDU: [035eee06baad177d4f331149d3976275b78368fdda74fee8a294630393457a365d8e5bb399d4d58c368b8f9481fc8577fe0f80a69d1928150b9d9efef593a5785e4d7b4a96e12758feca14852b9dc76e7f0e95d9f876cd4689048aa647584155ce327d2be57339c5cdc53edf91efe5f09000] 11-Send APDU: [-stripped-] 11-Response APDU: [6973b5e8759a65abb200906ee33d29f79692146c5b91ebc563d925ddbcad3c96f6f6c43111bc25c974c672d9e873c62aceb53dcea398436e3e50758e42caaede84839c678fc6bccf66be13bb9dbd4e17c630b25b4b818650188fa1e6b95b06ff00428f8f5c7d33c57797da6bcfa5ccb79000] 12-Send APDU: [-stripped-] 12-Response APDU: [36b1c4ea830620768247cc327a807bd7237f631e9b75f648e53208d10312318254123f5af6f27694dc4f2f338b71521a3a0a29aac768f97b515f4678c6b7827589349d62dc065115cc6b132b0c8dd8f94ff31f8d77de1f55b2beb9b17db849094ef8079c7e19af2111ab5aa2b0054a2e9000] 13-Send APDU: [-stripped-] 13-Response APDU: [47e15d2f826f069f712c380b031041feeb1f5fae2be7b34c25d3aebcae7b380c4ffcba67addfaaada1f2c82ec40071d05674e2259ad244326e5f95c3a6383dbfad472c973716c1ed9a32d8e8fcfe559ce6fdda3c4db8a9f98344404f5e4f5fc2bc44aeae7ac97996bc43345069cdf3229000] 14-Send APDU: [-stripped-] 14-Response APDU: [a920166601473d493d2bc96f2e0de5ecf72e4334b233923a1c9cf15d478d7505644d3c36ff0030e5c1fee8ff00138ae408c0e95efe4d47960ea3ea78b9955e69282e84a31b47d3d68a40381cd15ee1e58c41fb888f41e5aff2aeef46f07dfe9305b5f6a4b12c3a82ec48724b8e3702c39000] 15-Send APDU: [-stripped-] 15-Response APDU: [181c565f827c293f8a2fade359a28e08823cdbc9c95001c018efef5ec7e2dd2ee9e4b09c4d18b542418b1cf98470c0fa606315e36695ad4b91753d0c0c3f78a4ce2d21beb193cab61e7a75505b0c296faef5568c24968d08e80c8e31fa574234f62d13865c9e0d4577612cb3a09645659000] 16-Send APDU: [-stripped-] 16-Response APDU: [5ed935f3973da381d5bc31757f6d75716a4cb3d9c626963c7cd22938247d38e3d2b8a2304f6f515f47f86b46c0bcb9caee936c43d80e4ff4a7eaff000f341d65ddee2c625b86e5a68894627d491dfeb5eee5f8bf6749466b43c8c652e6aada3e711d0515ece7e09581276ead74a3b0da9000] 17-Send APDU: [-stripped-] 17-Response APDU: [a71fa515ea7d768f738bd84cffd9000] ------------End------------ |
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! π