{"id":182,"date":"2014-04-02T13:11:12","date_gmt":"2014-04-02T06:11:12","guid":{"rendered":"http:\/\/sybond.web.id\/blog\/?p=182"},"modified":"2015-08-05T08:57:13","modified_gmt":"2015-08-05T01:57:13","slug":"e-ktp-dan-security-bagian-ii","status":"publish","type":"post","link":"https:\/\/sybond.web.id\/blog\/2014\/04\/02\/e-ktp-dan-security-bagian-ii\/","title":{"rendered":"e-KTP dan Security (Bagian II)"},"content":{"rendered":"<p><strong>Update<\/strong> (29\/11\/2014):<\/p>\n<ol>\n<li>Aplikasi proof of concept pembacaan e-KTP ini saya putuskan untuk dipublish ke <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=sybond.poc.ektpread\">Play Store<\/a><\/li>\n<li>Jika ada yang berminat atau penasaran ingin mencoba <em>ngulik<\/em> <em>contactless<\/em> <em>card<\/em> berbasis ISO-DEP\/ISO14443-4 (termasuk dalam pengujian pembacaan data foto e-KTP ini saya menggunakan <em>tools<\/em> <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=sybond.nfc.RawAPDU\">ini<\/a>); bisa langsung install aplikasi <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=sybond.nfc.RawAPDU\">APDU Debug<\/a> di <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=sybond.nfc.RawAPDU\">Play Store<\/a><\/li>\n<\/ol>\n<hr \/>\n<p>Melanjutkan postingan sebelumnya mengenai keamanan e-KTP karena terlalu panjang sebagai update postingan sebelumnya, maka saya putuskan untuk menjadi postingan terpisah.<\/p>\n<p>Kembali ke tujuan awal dari postingan saya, yang sebenarnya adalah memberikan semacam <em>alert<\/em> 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 <em>library<\/em> untuk membaca e-KTP. <em>Exploit<\/em> lebih lanjut bisa saja dilakukan oleh<em> expert-expert<\/em> di luar sana \ud83d\ude00<\/p>\n<p><strong>Lalu PoC untuk membaca e-KTP?<\/strong><\/p>\n<p><!--more--><\/p>\n<p>Setelah saya coba <em>trace<\/em> lebih dalam dari <em>library<\/em> yang ada (setelah sebelumnya terkendala hardware) ternyata membaca data e-KTP selalu membutuhkan<em> Secure Access Module<\/em> (SAM). Sehingga ini yang menyimpulkan saya bahwa desain e-KTP sudah &#8220;mengikuti standard keamanan contacless&#8221; 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 <em>security<\/em>.<\/p>\n<p>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.<\/p>\n<p>Berikut hasil <em>debug<\/em>, yang memberikan hasil positif, dalam arti berhasil me-<em>retrieve<\/em> data foto dari e-KTP:<\/p>\n<pre class=\"striped:false marking:false ranges:false nums:false nums-toggle:false wrap-toggle:false plain-toggle:false lang:diff decode:true\">ExtraID: [-stripped-]\r\nTechList=2\r\n- android.nfc.tech.IsoDep\r\n- android.nfc.tech.NfcA\r\nRaw connect...\r\nisConnected=true\r\ngetMaxTransceiveLength=261\r\ngetTimeout=618\r\nNumOfAPDU=18\r\n-----------Start-----------\r\n0-Send APDU:\r\n[-stripped-]\r\n0-Response APDU:\r\n[9000]\r\n1-Send APDU:\r\n[-stripped-]\r\n1-Response APDU:\r\n[9000]\r\n2-Send APDU:\r\n[-stripped-]\r\n2-Response APDU:\r\n[0634ffd8ffe000109000]\r\n3-Send APDU:\r\n[-stripped-]\r\n3-Response APDU:\r\n[4a46494600010101006000600000ffdb004300080606070605080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb0043010909090c0b0c180d0d1832211c21323232323232323232329000]\r\n4-Send APDU:\r\n[-stripped-]\r\n4-Response APDU:\r\n[32323232323232323232323232323232323232323232323232323232323232323232323232323232ffc0001108003e003203012200021101031101ffc4001f0000010501010101010100000000000000000102030405060708090a0bffc400b5100002010303020403050504040000019000]\r\n5-Send APDU:\r\n[-stripped-]\r\n5-Response APDU:\r\n[7d01020300041105122131410613516107227114328191a1082342b1c11552d1f02433627282090a161718191a25262728292a3435363738393a434445464748494a535455565758595a636465666768696a737475767778797a838485868788898a92939495969798999aa2a3a4a5a69000]\r\n6-Send APDU:\r\n[-stripped-]\r\n6-Response APDU:\r\n[a7a8a9aab2b3b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae1e2e3e4e5e6e7e8e9eaf1f2f3f4f5f6f7f8f9faffc4001f0100030101010101010101010000000000000102030405060708090a0bffc400b51100020102040403040705040400010277000102031104059000]\r\n7-Send APDU:\r\n[-stripped-]\r\n7-Response APDU:\r\n[2131061241510761711322328108144291a1b1c109233352f0156272d10a162434e125f11718191a262728292a35363738393a434445464748494a535455565758595a636465666768696a737475767778797a82838485868788898a92939495969798999aa2a3a4a5a6a7a8a9aab2b39000]\r\n8-Send APDU:\r\n[-stripped-]\r\n8-Response APDU:\r\n[b4b5b6b7b8b9bac2c3c4c5c6c7c8c9cad2d3d4d5d6d7d8d9dae2e3e4e5e6e7e8e9eaf2f3f4f5f6f7f8f9faffda000c03010002110311003f00e16ce08a5b24cc71e4203f707a7d2b9ad4ef9199e38e34550700851cd694da81b2d28153fbc740abf975aa7a3787e5d60e412101e4d7a19000]\r\n9-Send APDU:\r\n[-stripped-]\r\n9-Response APDU:\r\n[8ec42845453f530c3d294a4cc55949c7caa39cf4a9e19806e1578ee477af46b2f87b6613f7be63b9ec0f02aa5dfc3c5593742eea08e47a1ff0af1d62a9df73d0784a9639fb1be4b8b810c90459238c20ad3f262c1fdd478ff705656ada1de68f3a49f7947465edf5ad485fcd891c1e189000]\r\n10-Send APDU:\r\n[-stripped-]\r\n10-Response APDU:\r\n[035eee06baad177d4f331149d3976275b78368fdda74fee8a294630393457a365d8e5bb399d4d58c368b8f9481fc8577fe0f80a69d1928150b9d9efef593a5785e4d7b4a96e12758feca14852b9dc76e7f0e95d9f876cd4689048aa647584155ce327d2be57339c5cdc53edf91efe5f09000]\r\n11-Send APDU:\r\n[-stripped-]\r\n11-Response APDU:\r\n[6973b5e8759a65abb200906ee33d29f79692146c5b91ebc563d925ddbcad3c96f6f6c43111bc25c974c672d9e873c62aceb53dcea398436e3e50758e42caaede84839c678fc6bccf66be13bb9dbd4e17c630b25b4b818650188fa1e6b95b06ff00428f8f5c7d33c57797da6bcfa5ccb79000]\r\n12-Send APDU:\r\n[-stripped-]\r\n12-Response APDU:\r\n[36b1c4ea830620768247cc327a807bd7237f631e9b75f648e53208d10312318254123f5af6f27694dc4f2f338b71521a3a0a29aac768f97b515f4678c6b7827589349d62dc065115cc6b132b0c8dd8f94ff31f8d77de1f55b2beb9b17db849094ef8079c7e19af2111ab5aa2b0054a2e9000]\r\n13-Send APDU:\r\n[-stripped-]\r\n13-Response APDU:\r\n[47e15d2f826f069f712c380b031041feeb1f5fae2be7b34c25d3aebcae7b380c4ffcba67addfaaada1f2c82ec40071d05674e2259ad244326e5f95c3a6383dbfad472c973716c1ed9a32d8e8fcfe559ce6fdda3c4db8a9f98344404f5e4f5fc2bc44aeae7ac97996bc43345069cdf3229000]\r\n14-Send APDU:\r\n[-stripped-]\r\n14-Response APDU:\r\n[a920166601473d493d2bc96f2e0de5ecf72e4334b233923a1c9cf15d478d7505644d3c36ff0030e5c1fee8ff00138ae408c0e95efe4d47960ea3ea78b9955e69282e84a31b47d3d68a40381cd15ee1e58c41fb888f41e5aff2aeef46f07dfe9305b5f6a4b12c3a82ec48724b8e3702c39000]\r\n15-Send APDU:\r\n[-stripped-]\r\n15-Response APDU:\r\n[181c565f827c293f8a2fade359a28e08823cdbc9c95001c018efef5ec7e2dd2ee9e4b09c4d18b542418b1cf98470c0fa606315e36695ad4b91753d0c0c3f78a4ce2d21beb193cab61e7a75505b0c296faef5568c24968d08e80c8e31fa574234f62d13865c9e0d4577612cb3a09645659000]\r\n16-Send APDU:\r\n[-stripped-]\r\n16-Response APDU:\r\n[5ed935f3973da381d5bc31757f6d75716a4cb3d9c626963c7cd22938247d38e3d2b8a2304f6f515f47f86b46c0bcb9caee936c43d80e4ff4a7eaff000f341d65ddee2c625b86e5a68894627d491dfeb5eee5f8bf6749466b43c8c652e6aada3e711d0515ece7e09581276ead74a3b0da9000]\r\n17-Send APDU:\r\n[-stripped-]\r\n17-Response APDU:\r\n[a71fa515ea7d768f738bd84cffd9000]\r\n------------End------------<\/pre>\n<p>Hasilnya adalah sebuah <em>stream<\/em> data <em>image<\/em> dalam format <a title=\"Joint Photographic Experts Group\" href=\"http:\/\/en.wikipedia.org\/wiki\/JPEG\">JPG<\/a>. Berikut adalah hasilnya (atas seijin <a href=\"http:\/\/mbebek.wordpress.com\/\">yang <\/a>punya e-KTP):<\/p>\n<p><em>Extracted<\/em> data from e-KTP:<br \/>\n<img loading=\"lazy\" class=\"alignnone\" src=\"http:\/\/sybond.files.wordpress.com\/2014\/04\/adit_extracted.jpg\" alt=\"\" width=\"50\" height=\"62\" \/><\/p>\n<p>Resolusi gambar hanya <code>50x62p<\/code>, sangat<del>-sangat-sangat-sangat<\/del> rendah sekali, tapi cukuplah untuk identifikasi.<\/p>\n<div style=\"width: 310px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" src=\"http:\/\/sybond.files.wordpress.com\/2014\/04\/ktp_adit.jpg\" alt=\"\" width=\"300\" height=\"193\" \/><p class=\"wp-caption-text\">Physical e-KTP<\/p><\/div>\n<p><em><span style=\"line-height: 1.714285714; font-size: 1rem;\"><strong>Tinggal bikin UI!<\/strong><\/span><\/em><\/p>\n<p>Oke, <em>next&#8230;<\/em><\/p>\n<p><strong>Update<\/strong> (7\/4\/2014):<\/p>\n<p>Setelah beberapa kali <em>debugging<\/em> karena harus memastikan algoritma pembacaan data berjalan sesuai dengan yang seharusnya dan terkendala <em>handset<\/em> sendiri yang tidak bisa dipakai untuk tes. Akhirnya, berikut ini adalah hasil implementasi pembacaan data foto pada e-KTP.<\/p>\n<p><iframe width=\"560\" height=\"315\" src=\"\/\/www.youtube.com\/embed\/videoseries?list=PLjfI-Z4qN0vVtnDJiOlx7DaoIOk4phQMS\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>Ujicoba dilakukan dengan menggunakan handset Nexus 5. Beberapa handset yang <em>mumpuni<\/em>\u00a0dan sudah diuji adalah: Nexus 4, Nexus 5, dan HTC One X.<\/p>\n<p>Saya penasaran kenapa NFC di pabrikan lain (Sony dan Samsung) tidak bisa digunakan dan selalu muncul <em>exception<\/em> &#8220;Transceive failed&#8221;. Dari <a title=\"Control of NFC IsoDep setTimeout (for smart cards) not able to use since Gingerbread\" href=\"https:\/\/code.google.com\/p\/android\/issues\/detail?id=37882\" target=\"_blank\">hasil<\/a> beberapa kali <em>browsing<\/em> terkait pemasalahan ini, akhirnya saya berkesimpulan (belum dicoba) bahwa solusinya adalah <em>compile<\/em> ulang Android, dan merubah parameter <em>time out<\/em> pada modul NFC. Atau <a title=\"NfcAdapter.ReaderCallback\" href=\"http:\/\/developer.android.com\/reference\/android\/nfc\/NfcAdapter.ReaderCallback.html\" target=\"_blank\">mencoba<\/a> implementasi <code>NfcAdapter.ReaderCallback<\/code>.<\/p>\n<p><strong>Mana link download .apk nya?<\/strong><\/p>\n<p><del>Sebagai praktisi keamanan informasi, saya sadar bahwa ini adalah salah bentuk <em>security breach<\/em>, yang mana telah saya sebutkan <a title=\"e-KTP dan Security (Bagian I)\" href=\"http:\/\/sybond.web.id\/blog\/2014\/03\/26\/e-ktp-dan-security\/\">sebelumnya<\/a>.\u00a0Dan mengenai tujuan dari implementasi ini adalah memberikan bukti nyata adanya celah keamanan dalam implementasi e-KTP di lapangan.<\/del><\/p>\n<p><del>Tentunya ini menjawab, bahwa saya tidak akan <em>sembrono<\/em> ikut memperparah dengan menyebarkan aplikasi ini \ud83d\ude00<\/del><\/p>\n<p><del>Kecuali untuk beberapa orang yang sudah ikut terlibat ujicoba dengan membolehkan saya menginstall aplikasi di <em>handset<\/em> mereka. <em>Tenang saja, pada saat update tulisan ini dibuat aplikasi yang terinstall sudah tidak bisa dipergunakan lagi<\/em> \ud83d\ude00<\/del><\/p>\n<p><a title=\"Link to .APK file\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=sybond.poc.ektpread\" target=\"_blank\">Yang mau mencoba silakan donlot di sini<\/a>. Kadang orang lebih percaya kalau sudah mencoba sendiri. Termasuk anda! \ud83d\ude00<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[78,10],"tags":[89,91,92,83,105],"_links":{"self":[{"href":"https:\/\/sybond.web.id\/blog\/wp-json\/wp\/v2\/posts\/182"}],"collection":[{"href":"https:\/\/sybond.web.id\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sybond.web.id\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sybond.web.id\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sybond.web.id\/blog\/wp-json\/wp\/v2\/comments?post=182"}],"version-history":[{"count":25,"href":"https:\/\/sybond.web.id\/blog\/wp-json\/wp\/v2\/posts\/182\/revisions"}],"predecessor-version":[{"id":345,"href":"https:\/\/sybond.web.id\/blog\/wp-json\/wp\/v2\/posts\/182\/revisions\/345"}],"wp:attachment":[{"href":"https:\/\/sybond.web.id\/blog\/wp-json\/wp\/v2\/media?parent=182"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sybond.web.id\/blog\/wp-json\/wp\/v2\/categories?post=182"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sybond.web.id\/blog\/wp-json\/wp\/v2\/tags?post=182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}