"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.
Dan sebenarnya skrip audit keamanan itu sendiri:
→
Sumber Informasi API JC-WebClient