Peracunan alamat: serangan yang hanya butuh Anda menyalin yang keliru

·7 mnt baca·Oleh SSP Editorial Team
Sampul SSP Academy: peracunan alamat dan alamat kripto yang mirip

Peracunan alamat: serangan yang hanya butuh Anda menyalin yang keliru

Sebagian besar serangan terhadap pengguna kripto memerlukan Anda membuat kesalahan — mengeklik tautan, mengetik frasa benih ke sebuah formulir, menyetujui sesuatu yang tak Anda baca. Peracunan alamat butuh lebih sedikit dari itu. Ia butuh Anda menyalin sebuah alamat dari riwayat transaksi Anda sendiri.

Tak ada perangkat perusak, tak ada situs pengelabuan, tak ada tanda tangan yang harus diperdaya keluar dari Anda. Seluruh sumbangan penyerang hanyalah meletakkan untaian karakter yang tampak masuk akal di tempat yang nanti akan Anda jangkau.

Cara kerjanya

Mulailah dari hal yang membuatnya mungkin: tak ada yang membaca alamat. Alamat Bitcoin atau Ethereum adalah tiga puluhan karakter base58 atau heksadesimal tanpa makna, tanpa jumlah periksa yang bisa dinilai dengan mata, dan tanpa alasan untuk disimpan di kepala. Maka setiap dompet, penjelajah blok, dan bursa memendekkannya untuk ditampilkan — 0x8f3C…9A063 — dan setiap pengguna belajar memeriksa ujung yang terlihat lalu melompati bagian tengah.

Kebiasaan itulah seluruh permukaan serangannya.

Penyerang membangkitkan alamat dengan gaya paksa sampai ada satu yang berbagi beberapa karakter awal dan akhir dengan alamat yang benar-benar Anda pakai — biasanya alamat yang baru-baru ini Anda kirimi uang. Ini murah. Membangkitkan pasangan kunci itu cepat, dan mencocokkan, katakanlah, empat karakter depan dan empat karakter belakang butuh hitungan detik di perangkat keras biasa. Tak ada yang sedang membobol apa pun; mereka hanya melempar dadu sampai sebuah angka tampak akrab.

Lalu mereka memasukkan alamat itu ke riwayat Anda. Cara-cara yang lazim:

Rintik debu. Mereka mengirimi Anda jumlah yang teramat kecil — beberapa satoshi, sepersekian sen suatu token — dari alamat serupa itu. Itu transaksi masuk biasa, jadi ia mendarat di riwayat Anda seperti yang lain. Pada rantai UTXO, debu itu juga menjadi koin yang bisa dibelanjakan di dompet Anda, dan itu penting nanti.

Transfer bernilai nol. Pada rantai EVM, sebuah transfer ERC-20 sebesar nol token tetap transaksi yang sah. Penyerang mengirim 0 token dari alamat Anda ke alamat tiruan mereka, yang oleh sebagian antarmuka digambarkan sebagai pembayaran keluar yang Anda lakukan. Riwayat Anda kini menunjukkan Anda seolah mengirim ke alamat yang tak pernah Anda pilih.

Peristiwa palsu. Kontrak token yang jahat bisa memancarkan peristiwa Transfer yang tak pernah terjadi. Penjelajah dan dompet yang memercayai catatan peristiwa akan menampilkannya. Tak ada yang berpindah; catatannya sekadar dusta.

Lalu mereka menunggu. Berhari-hari, kadang berbulan-bulan. Serangan itu membuahkan hasil pada kali berikutnya Anda hendak membayar mitra yang sama, menggulir riwayat mencari «alamat yang saya pakai terakhir kali», lalu menyalin baris yang keliru. Keduanya tampak seperti 0x8f3C…9A063. Anda memeriksa ujungnya. Ujungnya cocok.

Mengapa nasihat yang biasa tak bertahan

«Selalu periksa ulang alamatnya» adalah anjuran baku, dan sendirian ia gagal, karena memeriksa persis itulah yang sudah diperhitungkan serangan ini. Anda memang memeriksa. Anda membandingkan enam karakter yang ditunjukkan dompet dengan enam karakter di ingatan Anda, dan keduanya identik — karena penyerang membuatnya identik.

Verifikasi hanya bekerja bila yang Anda bandingkan mahal untuk dipalsukan. Empat atau enam karakter yang cocok berbiaya hitungan detik. Enam belas karakter yang cocok akan berbiaya lebih besar daripada nilai curiannya. Seluruh permainannya adalah di ujung mana kurva itu kebiasaan Anda berada.

Ada jebakan kedua pada rantai UTXO. Pembayaran debu itu kini menjadi koin di dompet Anda, dan bila dompet Anda menggabungkan masukan secara otomatis, ia bisa tersapu ke dalam transaksi berikutnya — menautkan alamat berdebu itu dengan sisa koin Anda. Itu masalah privasi ketimbang pencurian, tapi itulah sebabnya debu layak diabaikan alih-alih dirapikan.

Yang benar-benar melindungi

Jangan pernah mengambil alamat dari riwayat transaksi. Ini satu-satunya perubahan yang penting. Riwayat Anda adalah catatan tentang apa yang terjadi, bukan daftar siapa yang Anda percayai — dan siapa pun di dunia bisa menulis ke sana. Ambil alamat dari mitra Anda, lewat saluran di mana Anda akan menyadari adanya penyamar, atau dari buku alamat yang Anda isi sendiri.

Bandingkan alamat utuh, atau bandingkan sesuatu yang merangkum seluruh alamat. Membaca keempat puluh dua karakter itu tak realistis. Membandingkan identicon — gambar kecil yang dibangkitkan secara tertentu dari seluruh untaian — realistis, karena tiruan yang berbeda di mana pun di bagian tengah akan menghasilkan gambar yang tampak berbeda. Mata Anda mengerjakan apa yang tak akan dikerjakan kesabaran Anda.

Pakai kontak tersimpan. Alamat yang Anda simpan sekali, dari sumber yang Anda verifikasi sekali, tak bisa diracuni belakangan. Untuk itulah buku alamat ada, dan itulah sebabnya SSP menyimpan kontak di perangkat Anda alih-alih di server: daftar kontak hanya bisa dipercaya bila tak ada orang lain yang bisa menyuntingnya.

Kirim pembayaran uji untuk transfer besar atau yang pertama kali. Jumlah kecil, konfirmasikan penerimaannya lewat jalur lain, lalu kirim sisanya. Biaya membuat ini merepotkan, dan itu tetap langkah yang benar untuk pembayaran yang sayang sekali kalau hilang.

Abaikan debunya. Jangan dibelanjakan, jangan «dibersihkan», dan hati-hati dengan penggabungan otomatis kalau privasi penting bagi Anda.

Apa yang SSP lakukan soal ini

Peracunan alamat adalah persoalan penggambaran sebanyak persoalan keamanan, jadi sebagian jawabannya tinggal di cara alamat digambar.

SSP memendekkan alamat dengan enam karakter awal dan enam karakter akhir0x8f3C4b…9A0631 — alih-alih tiga atau empat seperti banyak antarmuka. Itu bukan pilihan kosmetik. Setiap karakter tambahan melipatgandakan biaya gaya paksa untuk menghasilkan kecocokan, dan dua belas karakter yang terlihat menempatkan tiruan yang meyakinkan jauh di luar jangkauan pembangkitan santai.

Bagian tengahnya diredupkan, bukan dihapus. Dalam bentuk yang dibentangkan, dompet menampilkan untaian lengkap dengan kedua ujung ditebalkan dan bagian tengah berwarna lebih pucat, sehingga bagian yang diandalkan penyerang untuk Anda lewati tetap hadir secara fisik di layar, bukan digantikan titik-titik yang bisa menyembunyikan apa saja.

Kode yang sama berjalan di kedua aplikasi. splitAddressForDisplay di SSP Wallet adalah pemindahan langsung dari milik SSP Key, sengaja dijaga identik supaya sebuah alamat tampak sama di peramban dan di ponsel Anda. Itu penting karena SSP menunjukkan transaksinya dua kali, di dua perangkat — dan tatapan kedua baru menjadi pemeriksaan sungguhan bila kedua permukaan menggambar hal yang sama dengan cara yang sama. Dua pemendekan yang berbeda akan membiarkan sebuah ketidakcocokan bersembunyi di dalam perbedaannya.

Di layar persetujuan SSP Key, penerima ditampilkan dengan identicon yang dibangkitkan dari alamat lengkap, berdampingan dengan teks yang dipendekkan, dan mengetuknya membentangkan alamat utuh sebagai teks yang bisa dipilih. Identicon itulah bagian yang mengalahkan penukaran di tengah untaian: penyerang bisa mencocokkan karakter awal dan akhir Anda, tapi tak bisa mencocokkan sebuah gambar yang diturunkan dari setiap karakter tanpa memecahkan persoalan yang jauh lebih berat.

Tak satu pun dari ini adalah jaminan. Kalau Anda menempelkan alamat yang teracuni lalu menyetujuinya di kedua perangkat, SSP akan menandatanganinya — itulah artinya menjadi dompet yang Anda kendalikan, bukan kustodian yang menyangsikan keputusan Anda. Multisig dua-dari-dua menghalangi orang lain membelanjakan koin Anda; ia tak bisa menghalangi Anda membayar orang yang salah dengan sengaja. Seperti pada setiap serangan yang bekerja dengan membuat Anda bertindak, pertahanannya harus mendarat sebelum penandatanganan, bukan selama penandatanganan.

Versi ringkasnya

Peracunan alamat berhasil karena Anda membandingkan enam karakter alih-alih empat puluh dua, dan penyerang tahu enam yang mana. Pertahanannya bukan ketelitian yang lebih tinggi — melainkan tak pernah mengambil alamat dari tempat yang bisa ditulisi penyerang, serta memakai perkakas yang mengembalikan ke hadapan Anda bagian-bagian yang biasanya Anda lewati.

Bagikan artikel ini

Artikel terkait