Dalam kompetisi untuk kata paling populer tahun ini, kata "blockchain" mungkin akan menjadi pemenang bidang TI. Terlepas dari kenyataan bahwa ada kecenderungan
tidak sehat untuk secara aktif memperkenalkannya di mana saja - dalam bidang kedokteran, ekonomi, internet, membesarkan kelinci dan membuat kue, cryptocurrency tetap menjadi ruang lingkup utama blockchain. Dan semua orang tahu: dompet virtual untuk peretas - seperti kucing dengan krim asam.
Dalam artikel ini, kami akan mempertimbangkan serangan βTimejackingβ, berdasarkan kerentanan dalam memproses stempel waktu blok dalam sistem cryptocurrency Bitcoin, dan mencoba menjelaskan mengapa serangan itu terjadi, dan implementasinya yang berhasil tidak.
PS Akan ada banyak turunan dari kata "waktu". Banyak.
Singkatnya
Untuk pertama kalinya, Alex Boverman menulis tentang serangan Timejacking. Anda dapat membiasakan diri dengan publikasi di
sini . Apa intinya: serangan itu mengeksploitasi kerentanan mekanisme untuk memeriksa cap waktu blok dan penghitung waktu dalam Bitcoin. Penyerang memanipulasi salah satu penghitung waktu dari simpul korban dan membuat blok "beracun". Korban akan menjatuhkan blok ini, dan sisa jaringan akan berhasil menerima, dan tolong - kami telah memprovokasi garpu! Seluruh jaringan menggunakan rantai blok yang dibangun setelah yang "diracuni", dan korban menganggap rantai alternatif dengan belanja token berulang (alias pengeluaran ganda), di mana blok "beracun" tidak muncul, valid.
Serangan itu dilakukan dalam dua tahap. Untuk membuatnya lebih jelas, mari kita bicara tentang masing-masing secara terpisah.
Babak 1. Membuat garpu dan mengisolasi korban
Seorang penyerang perlu membuat "APPLE of contention" - blok "keracunan" yang akan diabaikan korban. Dengan cara yang sama, korban akan menjatuhkan blok lain yang akan ditambahkan secara berurutan setelah yang "diracuni".
Bagaimana cara menipu korban dan memaksanya untuk menjatuhkan blok yang benar?Header setiap blok memiliki cap waktu yang diperiksa node selama verifikasi. Nilai ini harus berada dalam kisaran tertentu, kami akan menyebutnya jendela sementara. Rentang jendela waktu ditunjukkan pada gambar di bawah ini:
Jendela waktu memiliki dua batas:
- min rendah - t , sama dengan median prangko waktu 11 blok sebelum blok diverifikasi
- atas - sama dengan nilai waktu jaringan t 0 + 2 jam
Nilai cap waktu blok diverifikasi bukan sehubungan dengan waktu sistem node, tetapi sehubungan dengan waktu rata-rata tetangganya - waktu jaringan (alias waktu yang disesuaikan jaringan).
Bagaimana waktu jaringan dipertimbangkan:
- Ketika koneksi baru dibuat, node bertukar waktu sistem mereka
- Setiap node menghitung penyimpangan waktu sistem sendiri dari waktu sistem masing-masing tetangganya
- Untuk penyimpangan yang dihitung, nilai median dipilih.
- Waktu sistem asli + deviasi median = waktu jaringan
Berikut adalah contoh penghitungan waktu jaringan:
Dengan demikian, seorang penyerang dapat memanipulasi nilai waktu jaringan korban dengan menghubungkannya ke sejumlah tetangga yang cukup mengumumkan waktu sistem lagging. Nilai waktu jaringan korban berkurang - batas atas rentang nilai yang dapat diterima dari cap waktu blok diverifikasi berkurang. Tetapi jika penyimpangan waktu tetangga melebihi
70 menit , maka waktunya tidak akan diperhitungkan saat menghitung waktu jaringan. Oleh karena itu, nilai maksimum yang dapat digunakan untuk mengurangi waktu jaringan korban adalah 70 menit.
Dengan demikian, blok "beracun" kami adalah blok yang stempel waktunya harus jatuh ke jendela waktu semua node jaringan kecuali korban. Hanya dengan demikian seluruh jaringan akan berhasil menerimanya, dan korban yang waktu jaringannya diubah tidak kurang berhasil menjatuhkannya. Pada gambar di bawah ini - jendela waktu korban vs jendela waktu dari node yang tersisa.
Perhatikan bahwa, berkat protokol NTP, kita dapat mengasumsikan bahwa untuk sebagian besar node, waktu sistem kira-kira sama, yaitu, waktu jaringan masing-masing node mendekati nilainya dengan waktu sistem mereka.
Akibatnya, korban diisolasi dari jaringan utama dan menganggap rantai utama blok tidak benar, yang akan dibangun oleh sisa node dari blok "beracun". Pada saat yang sama, korban dengan percaya diri akan menerima blok lain, yang dihasilkan oleh penyerang untuk rantai alternatif.
Babak 2. Pengeluaran ganda
Pada tahap ini, penyerang menghasilkan rantai alternatif, di mana ia menambahkan transaksi yang mentransfer token ke dompet korban. Blok rantai alternatif dikirim ke korban. Pada gambar di bawah ini - kisaran nilai cap waktu dari blok "beracun".
Korban akan menerima rantai ini, karena nilai perangko waktu dipilih oleh pengganggu dari jendela waktunya sendiri, dan simpul yang tersisa akan mengabaikannya - setelah semua, mereka sudah membangun rantai mereka dari blok "beracun", yang lebih panjang daripada alternatif. Akibatnya, korban percaya bahwa ia menerima token dan mengirimkan barang. Dan jaringan utama yakin bahwa token tidak meninggalkan dompet penyerang, dan dia menerima barang untuk "terima kasih" - setelah semua, sebagian besar tidak dapat salah. Terakhir, pahlawan dari sisi gelap menang!
Tapi tidak sesederhana itu
Perangkap No. 1Kekuatan komputasi yang sangat besar terlibat dalam penambangan Bitcoin hari ini. Probabilitas keberhasilan pembuatan blok "beracun" dapat diperkirakan dengan rumus berikut:
Hari ini,
total hashrate dari jaringan Bitcoin kira-kira sama dengan H = 34 β 10
18 hash / s. Dalam hal ini, menggunakan perangkat paling produktif dari
daftar ini , tingkat hash yang dinyatakan di antaranya adalah h = 18 β 10
12 hash / s, probabilitas menghasilkan blok "keracunan" dalam 1 tahun (t = 365 β 24 β 60) adalah sekitar 3%. Dan jika kita ambil dari
statistik ini kumpulan penambangan yang relatif kecil yang memiliki 0,3% dari total hashrate, maka kemungkinan pembangkitan blok yang sukses dalam 3 hari adalah 73%.
Perangkap No. 2Dengan berlalunya waktu dari jaringan korban, cap waktu dari blok "beracun" akhirnya akan jatuh ke jendela waktu korban. Kemudian korban akan mengubah rantai alternatif ke rantai utama, karena seluruh jaringan bekerja di atasnya dan tingginya akan lebih besar. Blok "beracun" akan jatuh ke jendela waktu korban dalam waktu tidak lebih dari 70 menit - ini adalah waktu maksimum yang diperlukan untuk menyelesaikan tahap kedua.
Agar korban menerima transaksi dengan pengeluaran ganda, blok dengan itu harus dikonfirmasi oleh 6 blok lain (untuk klien standar). Pelanggar harus membuat blok konfirmasi secara independen, dan pada saat yang sama diperlukan untuk memenuhi 70 menit yang disebutkan di atas. Boverman
mempertimbangkan situasi di mana penyerang memiliki 10% dari kekuatan seluruh jaringan. Dalam situasi seperti itu, dibutuhkan ~ 5,5 jam untuk menghasilkan 6 blok dengan tingkat keberhasilan 10%. Selama 3,3 jam, probabilitas keberhasilan turun menjadi 1%, selama 140 menit - 0,147%. Menurut perkiraan ini, berhasil menghasilkan 6 blok dalam 70 menit adalah fantasi.
Perangkap No. 3Ketika node menghitung waktu jaringan, itu hanya memperhitungkan waktu sistem dari
200 tetangga pertama - maka deviasi median tidak akan dihitung ulang. Ini berarti bahwa serangan harus dilaksanakan hingga jumlah tetangga yang sudah terhubung dengan korban tidak melebihi 99 - jika tidak waktu yang diumumkan oleh penyerang tidak akan menjadi median. Jumlah tetangga ini akan berjalan sekitar 24 jam, dan setelah itu korban harus di-boot ulang - misalnya, menggunakan DoS.
Akhirnya
Sebagai kesimpulan, kita dapat mengatakan bahwa serangan βTimejackingβ sangat baik, tetapi dalam kenyataan pahit Bitcoin menjadi tidak bisa diterapkan. Bagaimana dengan sistem lain yang menggunakan blockchain? Biarkan kami meninggalkan pertanyaan ini untuk penelitian lebih lanjut!