Bagaimana Namecoin Blockchain Research Memprediksi Serangan Cyber ​​RTM



Namecoin blockchain dibuat sebagai alternatif dari pendaftar DNS tradisional, terlindung dari sensor dan perebutan domain paksa. Dalam beberapa tahun terakhir, operator botnet seperti Dimnie, Shifu, RTM, dan Gandcrab telah mulai menggunakannya untuk mengelola alamat server C&C.

Di satu sisi, desentralisasi dan stabilitas blockchain mencegah peneliti dan penyedia menghapus domain tersebut atau mengambil kendali mereka. Di sisi lain, infrastruktur berdasarkan blockchain memiliki fitur arsitektur: semua perubahan dalam jaringan tersedia untuk umum dan dapat digunakan untuk mempelajari dan melacak tindakan para penyerang.

Makalah ini menyajikan pendekatan yang digunakan untuk memetakan botnet di Namecoin dan selanjutnya melacak mereka untuk mengekstrak IOC baru. Menggunakan pendekatan yang dijelaskan, daftar aset (lihat lampiran) yang digunakan oleh botnet yang disebutkan di atas dikompilasi.

Penyimpangan liris


Penemuan yang mengubah Internet sering kali tidak hanya memecahkan dan tidak terlalu banyak masalah teknis sebagai masalah sosial. Justru teknologi dan layanan yang memungkinkan masyarakat untuk melihat dari sisi pada beberapa aksioma yang tampaknya tak tergoyahkan, memikirkan kembali, menciptakan kembali dari awal, hanya menyisakan ide dan menjatuhkan beban konvensi dan batasan warisan yang terakumulasi selama bertahun-tahun. Blockchain dan Bitcoin, Tor, Wikipedia - di belakang kesuksesan mereka masing-masing adalah sekelompok kecil penggemar dengan mata menyala-nyala, dengan tulus percaya bahwa mereka membuat masyarakat yang lebih baik.

Sayangnya, yang lain sering mengejar mereka - asing dengan cita-cita aneh para pelopor Internet, tetapi jauh lebih praktis. Mereka menemukan aplikasi alternatif untuk teknologi, yang tidak dipikirkan oleh pembuatnya (atau tidak ingin dipikirkan). Berada di perbatasan (dan lebih sering, untuk bersembunyi, terus terang di luar negeri) dari aplikasi alternatif ini, seringkali bukan tanpa bantuan media, karena mayoritas berubah menjadi default tersirat , atau bahkan satu - satunya .

Kesetaraan teknologi sebagai ide dan metode penggunaannya yang paling banyak dibahas dapat mengarah pada penolakan teknologi itu sendiri oleh masyarakat. Sebagai hasil dari kriminalisasi penggunaannya, layanan yang tidak matang dapat dikurangi ke tingkat budaya marjinal atau hancur total. Jadi itu sudah lama terjadi dengan Napster , belum lama ini - dengan BitTorrent dan Tor, sekarang ini terjadi dengan Bitcoin.

Ini belum melewati pahlawan karya ini - Namecoin. Namecoin adalah blockchain yang dirancang untuk menyimpan pasangan nilai kunci yang sewenang-wenang, yang paling terkenal adalah sistem registrasi nama DNS yang tahan desentralisasi dan tahan sensor - Dot-Bit.

Minat kami pada Namecoin tumbuh setelah grup manajemen botnet RTM mulai menggunakan Dot-Bit untuk mengelola server C&C mereka. Pada titik tertentu, kami bertanya-tanya - apakah mungkin mendeteksi C & C-server baru segera setelah mereka terdaftar di Dot-Bit? Dan jika tidak ada masalah dengan pembaruan domain terkenal, pengembangan pendekatan yang memungkinkan seseorang untuk mendeteksi bukti kuat tentang koneksi domain baru dengan orang yang menarik tiba-tiba menjadi tugas penelitian yang menarik, yang hasilnya adalah pekerjaan ini.

Secara umum, penelitian Namecoin dan pengumpulan indikator kompromi dalam Dot-Bit telah dilakukan sebelumnya. Karya paling detail dapat dianggap sebagai artikel oleh Kevin Perlow . Dia adalah orang pertama yang menarik perhatian pada kemungkinan mendasar untuk mengekstraksi data dari Namecoin dan menjelaskan beberapa teknik heuristik yang memungkinkan seorang ahli untuk menemukan domain yang serupa dengan karakteristik dengan server C&C terkenal dari kelompok tertentu.

Pendekatan yang disajikan dalam penelitian ini memiliki beberapa perbedaan signifikan dari teknik pengindeksan dan pivot yang dijelaskan oleh Kevin. Aturan heuristik yang kami kembangkan untuk menentukan pemilik domain berasal dari prinsip pengoperasian blockchain dan pembentukan transaksi di dalamnya dan, selain uraian umum, disajikan dalam bentuk formulasi logis yang ketat. Bersama dengan deskripsi formal dari algoritma bypass, ini memungkinkan Anda untuk mengotomatisasi pencarian IOC, yang secara signifikan meningkatkan efektivitas penyelidikan. Selain itu, algoritma yang dikembangkan membantu tidak hanya untuk menemukan nama lain yang pernah digunakan oleh kelompok studi, tetapi juga memungkinkan Anda untuk melacak pembuatan domain baru yang dikendalikan oleh orang yang sama.

Semua pekerjaan dibagi menjadi tiga bab. Bab pertama menjelaskan dasar-dasar Bitcoin, kode yang digunakan sebagai platform untuk menciptakan Namecoin. Banyak entitas, hubungan, dan implementasinya yang didefinisikan dalam Bitcoin telah diwarisi oleh Namecoin. Pemahaman mereka sangat penting untuk diskusi lebih lanjut.

Bab kedua dikhususkan untuk Namecoin dan aplikasi utamanya - Dot-Bit.

Bab ketiga menjelaskan pendekatan yang diusulkan untuk mengekstraksi data dari Namecoin, dan juga memberikan deskripsi formal tentang algoritma bypass blockchain dan aturan heuristik yang digunakan untuk membangun hubungan antar domain.

Lampiran berisi IOC yang dikumpulkan menggunakan metode yang dijelaskan untuk beberapa botnet, serta daftar referensi dan repositori yang akan membantu para peneliti yang ingin terus bekerja pada topik ini.

Bitcoin 201


Sebagian besar informasi dalam bagian ini dikumpulkan dari bahan-bahan dari serangkaian artikel oleh Sergey Pavlov_dog Potekhin " Bitcoin in a nutshell ". Bagi pembaca yang berbahasa Rusia, sumber ini, menurut kami, adalah yang paling komprehensif dan tersedia untuk umum, tetapi secara mengejutkan mudah dibaca. Para peneliti tertarik pada perangkat internal Bitcoin, kami mendesak untuk tidak membatasi diri pada kutipan yang diberikan dalam bagian ini, tetapi untuk membiasakan diri dengan teks lengkap dari artikel, tersedia dengan referensi dalam aplikasi. Sisa dari informasi yang disajikan di bawah ini akan cukup untuk memahami deskripsi algoritma dan aturan heuristik untuk menemukan hubungan antara alamat di Namecoin, yang diberikan pada bab terakhir.

Meskipun sudah biasa untuk memulai cerita tentang blockchain dengan blok dan kriptografi yang menghubungkannya, kita akan mulai dengan transaksi.

Transaksi


Seperti yang Anda ketahui, analog terdekat dengan Bitcoin adalah buku akun di mana semua transaksi dengan koin dicatat. Tapi, anehnya, di Bitcoin tidak ada tabel umum berupa <, > , sama seperti tidak ada kepala akuntan yang akan mengedit tabel ini.

Sebaliknya, blockchain sangat terkenal digunakan, yaitu, semua transaksi umumnya disimpan. Untuk kesederhanaan, kita dapat mengasumsikan bahwa ini adalah pesan dari formulir:

 <address 1> sent <amount> BTC to <address 2> 

Jadi, jika Anda menjelajahi seluruh blockchain, Anda dapat menghitung berapa banyak koin "milik" ke alamat tertentu.

Input dan output


Transaksi nyata pada jaringan Bitcoin sedikit lebih rumit daripada yang dijelaskan di atas. Ini adalah struktur yang komponen utamanya adalah input dan output.

Input adalah transaksi yang Anda "rujuk". Bayangkan tiga transaksi dikirim ke alamat X Anda sekali:

 TXN_ID: 123456, VALUE: 40 BTC TXN_ID: 645379, VALUE: 10 BTC TXN_ID: 888888, VALUE: 100 BTC 

Jika Anda perlu membelanjakan, misalnya, 45 BTC , maka Anda dapat merujuk ke transaksi 888888 atau dua transaksi sekaligus: 123456 dan 645379 .

Output - secara harfiah "output". Kita dapat berasumsi bahwa ini adalah "alamat" tempat koin akan "dikirim" sebagai hasil dari transaksi. Bisa juga ada beberapa pintu keluar, masing-masing memiliki jumlah sendiri.

Pada gambar di bawah ini, transaksi C baru C , yang mengacu pada dua output - A dan B Akibatnya, transaksi memiliki 0.008 BTC pada input, yang kemudian dibagi menjadi dua output - 0.001 BTC dikirim ke alamat pertama, dan 0.006 BTC ke alamat kedua.

gambar

Kemampuan untuk menentukan beberapa output sekaligus adalah fitur yang sangat penting, karena output transaksi dapat digunakan sebagai input hanya sekali dan hanya secara keseluruhan . Jika Anda memiliki transaksi masuk pada 10 BTC , dan Anda harus membelanjakan 8 dari mereka, Anda cukup membuat transaksi dengan satu input dan dua output: 8 BTC ke penjual dan 2 BTC kembali ke alamat Anda. Jika Anda membuat transaksi di mana jumlah output kurang dari jumlah input (seperti pada gambar), maka perbedaan dikirim ke alamat penambang yang menulis transaksi Anda di blok.

Biaya


Inilah perbedaan antara jumlah input dan jumlah output yang disebut " transaction fee ", transaction fee . Ini adalah sumber pendapatan terpenting kedua bagi penambang, dan waktu yang dibutuhkan untuk transaksi untuk dimasukkan ke dalam blockchain tergantung padanya. Ini disebabkan oleh fakta bahwa setiap penambang memiliki kumpulan transaksi tidak terverifikasi tertentu yang mengklaim berada di blok, dan, sebagai suatu peraturan, penambang hanya mengurutkannya dalam urutan menurun, sehingga memaksimalkan laba mereka. Karena itu, semakin tinggi komisi, semakin tinggi Anda dalam antrian dan semakin cepat pembayaran Anda.

Pandangan umum transaksi dijelaskan dalam spesifikasi resmi protokol , di sini diberikan salah satu kasus khusus yang paling umum.



previous output hash - identifier (hash) previous output hash dari transaksi yang kami maksud. previous output index - karena kita perlu merujuk bukan pada transaksi itu sendiri, tetapi ke salah satu outputnya, maka dalam parameter ini kami menunjukkan output tertentu yang kami minati. Penomoran dimulai dari awal. value - jumlah Satoshi ( 1/100000000 BTC) yang dikirim ke pintu keluar. Itu direkam dalam bentuk little-endian, mis. 62 64 01 00 00 00 00 00 - itu adalah 0x016462 atau 0.00091234 BTC .

Parameter block lock time dan sequence block lock time jarang digunakan dalam praktik. Kami tidak tertarik pada mereka, jadi kami akan menghilangkan deskripsi tujuan mereka.

Tetapi pada parameter dengan kata script dalam judul kita tinggal lebih detail.

Skrip


Jaringan Bitcoin memiliki mekanisme yang didasarkan pada algoritma kriptografi dengan kunci publik yang memungkinkan Anda membuat sistem di mana hanya pemilik kunci yang dapat menggunakan koin yang terkait dengan alamat yang diperoleh dari kunci ini. Kami akan mencari tahu bagaimana ini diterapkan di bawah tenda.

Untuk memulainya, di dalam Bitcoin ada bahasa pemrograman susun sederhana yang disebut Script . Berikut adalah program Script yang paling sederhana:

 2 3 OP_ADD 5 OP_EQUAL 

Setiap instruksi disebut opcode , totalnya ada sekitar 80. Gambar di bawah ini menunjukkan proses pelaksanaan program di atas.











Dalam Bitcoin Script digunakan untuk menetapkan kondisi di mana dimungkinkan untuk menghabiskan output, dan untuk dapat mengkonfirmasi bahwa kondisi terpenuhi. Kondisi ( locking script ) disimpan dalam transaksi di bidang scriptPubKey untuk setiap pintu keluar. Konfirmasi bahwa kondisi terpenuhi ( unlocking script ) ditulis dalam bidang scriptSig untuk setiap input.

Untuk memeriksa hak untuk menggunakan output, Anda harus menghubungkan unlocking script + locking script dan menjalankan program yang dihasilkan secara keseluruhan. Jika setelah eksekusi, TRUE tetap di atas tumpukan, maka transaksi tersebut valid.


Bayar untuk Public Key Hash (P2PKH)


Skrip P2PKH digunakan dalam sebagian besar transaksi, jadi Anda harus memahami cara kerjanya. Berikut ini adalah pandangan umumnya:



Script ini telah dikenal sejak kedatangan Bitcoin, dan melakukan tugas yang disebutkan di awal bab - untuk memastikan bahwa hanya pemilik kunci yang dapat menggunakan koin yang terkait dengan alamat yang diperoleh dari kunci ini.

Idenya adalah ini: biarkan teman Anda B memiliki sepasang kunci - P (pribadi) dan K (publik). Menggunakan fungsi hash, dia mendapatkan alamat A dari kunci publik dan memberi tahu alamat itu kepada Anda. Selanjutnya, Anda mengirim, misalnya, 1 BTC ke alamat A dan menulis yang berikut di bidang locking script :

Hanya seseorang yang memiliki kunci pribadi untuk alamat A dapat menggunakan transaksi ini. Sebagai bukti, tulis di unlocking script , pertama, kunci publik K , dan kedua, tanda tangan transaksi dengan kunci pribadi P

Ketika B memutuskan untuk menggunakan transaksi Anda sebagai input, ia akan membuat, misalnya, 0.5 BTC , dan di bidang unlocking script menempatkan tanda tangan transaksi dengan P - sig kunci pribadi dan kunci publik K - PubK .

Berikut adalah proses eksekusi dari program gabungan:















Blok dan blok rantai


Jika seluruh blockchain adalah sebuah buku, maka setiap blok dapat direpresentasikan sebagai halaman di mana transaksi dicatat. Setiap blok "merujuk" ke yang sebelumnya, dan seterusnya sampai blok pertama ( genesis block ). Inilah yang membuat fitur blockchain sebagai kekekalan. Anda tidak dapat mengambil dan mengubah blok #123 sehingga tidak ada yang akan melihat: blockchain dirancang sedemikian rupa sehingga akan memerlukan perubahan di blok #124 , lalu #125 dan seterusnya, ke bagian paling atas.

Struktur blok terlihat seperti ini:



Enam parameter pertama (semua kecuali txn_count dan txns ) membentuk header blok. Hash header disebut blok hash; Transaksi itu sendiri tidak secara langsung berpartisipasi dalam hashing. merkle_root bertanggung jawab atas kekekalannya - jika disederhanakan, maka ini adalah hash dari semua transaksi dalam blok. Anda dapat membaca lebih lanjut tentang algoritma untuk membangun pohon Merkle di tautan ini.

Nonce dan bits secara langsung berkaitan dengan proses munculnya blok - mining.

Penambangan


Penambangan adalah proses penting untuk Bitcoin, yang terdiri dari menciptakan blok baru dan mengejar dua tujuan sekaligus. Yang pertama adalah produksi pasokan uang. Setiap kali seorang penambang membuat blok baru, ia dihadiahi untuk ini dengan jumlah koin ke-N yang ia habiskan di suatu tempat, sehingga meluncurkan dana baru ke dalam jaringan.

Tujuan kedua, dan yang jauh lebih penting, adalah mengontrol kepatuhan terhadap aturan di jaringan. Penambanglah yang memeriksa skrip dan input transaksi sebelum memasukkannya ke dalam blok.

Mereka yang ingin mempelajari lebih lanjut tentang dasar-dasar keuangan Bitcoin dapat menyarankan artikel ini . Saya tidak akan terlalu memperhatikan aspek pertama penambangan dan berkonsentrasi pada transaksi pengecekan kedua dan meluncurkannya di jaringan.

Bukti kerja


Biarkan Anda menjadi penambang. Anda memiliki 10 transaksi yang ingin Anda sertakan dalam blok. Anda memeriksa transaksi ini untuk validitas, membentuk blok keluar dari mereka, tentukan 0 di bidang nonce dan pertimbangkan hash blok. Kemudian ubah nonce menjadi 1, hitung hash lagi.

Tugas Anda adalah untuk menemukan nonce sehingga blok hash (angka 256-bit) kurang dari angka N telah ditentukan Pencarian hash semacam itu hanya dimungkinkan melalui brute force nonce . Oleh karena itu, semakin cepat Anda ingin menemukan, semakin banyak kekuatan yang Anda butuhkan.

Angka N persis parameter itu (juga disebut target ), yang disesuaikan jaringan tergantung pada kekuatan total penambang. Jika besok blok mulai keluar, secara relatif, setiap tiga menit, maka N akan berkurang, lebih banyak waktu akan diperlukan untuk mencari nonce dan block time lagi akan meningkat menjadi 10 menit. Begitu juga sebaliknya.

Beginilah algoritma Proof-of-Work yang mendasari Bitcoin dan banyak blockchain lainnya. Dengan kesederhanaan yang jelas, ia memiliki sejumlah karakteristik penting:

  • Membuat blok baru adalah tugas yang sulit secara komputasi. Pada saat yang sama, memeriksa kebenaran blok adalah operasi sederhana dan hampir instan.
  • Seluruh jaringan membutuhkan waktu 10 menit untuk menghitung blok baru (rata-rata). Waktu spesifik berbeda untuk setiap blockchain, tetapi intinya adalah bahwa waktu rata-rata sudah ditentukan sebelumnya. Apalagi kali ini tidak tergantung pada jumlah peserta jaringan. Bahkan jika suatu hari akan ada seratus kali lebih banyak penambang, algoritme akan mengubah parameternya sehingga menjadi lebih sulit untuk menemukan block time dan block time turun kembali ke sekitar waktu yang ditentukan.

    Seperti dijelaskan di atas, proses penambangan turun untuk menemukan hash blok kurang dari angka yang disebut target . Dalam struktur blok, angka ini ditulis dalam bidang bit. Misalnya, untuk blok #277316 target adalah 1903a30c .

Seperti dijelaskan di atas, proses penambangan turun untuk menemukan hash blok kurang dari angka yang disebut target . Dalam struktur blok, angka ini ditulis dalam bidang bits . Misalnya, untuk blok #277316 target adalah 1903a30c .

 $ bitcoin-cli getblock 0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4 { "hash" : "0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4", "confirmations" : 35561, "size" : 218629, "height" : 277316, "version" : 2, "merkleroot" : "c91c008c26e50763e9f548bb8b2fc323735f73577effbc55502c51eb4cc7cf2e", "tx" : ["d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda16c737e7424afba2f", ...], "time" : 1388185914, "nonce" : 924591752, "bits" : "1903a30c", // <--   "difficulty" : 1180923195.25802612, "chainwork" : "000000000000000000000000000000000000000000000934695e92aaf53afa1a", "previousblockhash" : "0000000000000002a7bbd25a417c0374cc55261021e8a9ca74442b01284f0569", "nextblockhash" : "000000000000000010236c269dd6ed714dd5db39d36b33959079d78dfd431ba7" } 

Dalam bits pada kenyataannya, dua angka ditulis sekaligus: byte pertama 0x19 adalah eksponen, tiga byte 0x03a30c yang 0x03a30c adalah mantissa. Untuk mendapatkan target dari bits , Anda perlu menggunakan rumus berikut:

 target = mantissa * 2^(8 * (exponent - 3)) 

Tapi itu adalah bits , sebagai suatu peraturan, yang ditunjukkan dalam semua pendaftar blok online, seperti, misalnya, https://namecha.in/ - Registri blok Namecoin.

Dan ya, cukup teori. Segala sesuatu yang kita bicarakan di atas ketika diterapkan pada Bitcoin juga berlaku untuk Namecoin - kecuali untuk perbedaan kecil, yang akan kita bicarakan di bagian selanjutnya.

Namecoin


Namecoin adalah blockchain yang didasarkan pada algoritma dan kode sumber Bitcoin, gagasan utamanya adalah menggunakan skema registrasi transaksi terdistribusi untuk mengelola sistem nama domain, analog dari DNS tradisional.

Namecoin menyalin pendekatan Bitcoin utama (Proof-of-Work, interval pembuatan blok 10 menit) dan format data, dengan pengecualian penambahan kecil, yang akan kita bicarakan nanti.

Domain Namecoin memiliki akhiran .bit. Zona ini tidak dialokasikan oleh IANA dan tidak ditugaskan ke daftar domain tujuan khusus . Server DNS reguler biasanya menanggapi permintaan NXDOMAIN tersebut. Tetapi ada gateway dari DNS ke Namecoin (misalnya, OpenNIC ), proxy publik dengan dukungan Namecoin, plugin browser, dan proyek sumber terbuka yang memungkinkan Anda untuk memulai server DNS Anda sendiri dengan dukungan Namecoin.

Untuk mengelola domain dengan nama, katakanlah, facebook.bit , cukup untuk mendaftarkan kunci d/facebook awalan d/facebook digunakan dalam Namecoin untuk domain) dan menentukan nilainya. Format JSON digunakan untuk mengatur nilai. Entri yang menetapkan resolusi domain ke alamat IP 1.2.3.4 terlihat seperti ini:

 {"ip": ["1.2.3.4"]} 

Namecoin mengalokasikan nama berdasarkan siapa datang pertama dilayani . Bahkan untuk Mark Zuckerberg sendiri, secara kriptografis mustahil untuk mengambil domain facebook.bit dari pemiliknya.

Bahkan, tidak ada yang membatasi penggunaan Namecoin hanya untuk mengelola bundel nama DNS - alamat IP. Namecoin dapat digunakan (dan digunakan) sebagai tabel terdistribusi untuk memetakan kunci arbitrer ke nilai. Tapi kami akan berkonsentrasi tepat pada skenario penggunaannya di mana ia mewakili DNS alternatif dari blockchain.

Manajemen domain


Namecoin menggunakan transaksi untuk menyimpan catatan domain. Yaitu, bidang scriptPubKey berisi program ini adalah kondisi untuk menggunakan transaksi keluar, yang kami curahkan begitu banyak waktu pada bab sebelumnya. Untuk mengelola catatan, Namecoin memperkenalkan tiga operator baru (lebih tepatnya, mendefinisikan yang sudah ada):

  • NAME_NEW
  • NAME_FIRSTUPDATE
  • NAME_UPDATE

Makna mereka jelas dari namanya, namun kami akan menganalisis tujuan dan format penggunaan masing-masing.

Anda mungkin memperhatikan bahwa operator penghapusan domain atau pembatalan tidak ada. Untuk membersihkan registri dari nama-nama yang tidak digunakan, suatu mekanisme dibangun ke dalam jaringan yang secara otomatis merilis nama yang belum diperbarui selama 36.000 blok (~ 250 hari).

NAME_NEW


Langkah pertama adalah mengumumkan niat untuk mendaftarkan nama baru di jaringan. Untuk melakukan ini, cukup buat koin khusus (keluaran) dengan berat setidaknya 0.01 NMC , output script yang akan terlihat seperti ini:

 OP_NAMENEW <20 byte hash> OP_2DROP <lock script> 

Untuk menunjukkan, saya akan menggunakan transaksi yang dilakukan Stephen Morse untuk menggambarkan artikelnya .

Jadi, jika kita ingin mengumumkan pendaftaran nama d/stephenmorse , maka kita perlu melakukan hal berikut:



Melihat hasil transaksi, Anda dapat melihat dua fakta aneh. Pertama, terlepas dari kenyataan bahwa output script ditulis dalam notasi Namecoin, itu masih berlaku dari sudut pandang Bitcoin asli. Pembuat Namecoin telah berhasil memilih kode untuk operasi mereka sehingga dalam Bitcoin mereka sesuai dengan operasi yang pada dasarnya setara dengan menulis ke tumpukan konstan. NAME_NEW (0x51) sesuai dengan OP_1 , yang mendorong OP_1 stack 1. Kisah serupa dengan NAME_FIRSTUPDATE ( 0x52 atau OP_2 , menempatkan 2) dan dengan NAME_UPDATE ( 0x53 atau OP_3 , menempatkan 3). Jadi dua langkah pertama dari skrip hanya menempatkan dua nilai pada stack. Dan operasi selanjutnya OP_2DROP menghapusnya dari stack, sehingga P2PKH selanjutnya bekerja "dari awal". Oleh karena itu, semua trik skrip yang kami bahas dalam bab tentang Bitcoin juga berlaku untuk Namecoin, meskipun ada beberapa definisi ulang operasi.

Kedua, kunci yang membuka koin khusus dan perubahan berbeda. Meskipun secara teknis tidak ada yang mencegah Anda menggunakan kunci yang sama berulang kali, merupakan praktik umum untuk menghasilkan kunci baru untuk setiap tanda terima. Hal ini dilakukan untuk mempersulit mengidentifikasi korelasi antara transaksi dan meningkatkan tingkat anonimitas dalam jaringan.

Sekilas tampaknya aneh bahwa, berlawanan dengan akal sehat, tidak mungkin untuk segera mengambil dan mendaftarkan nama plus alamat IP untuk itu. Ini dilakukan agar tidak ada yang dapat mencegat nama begitu mereka melihat bahwa Anda ingin mendaftarkannya (dan kemudian menjualnya kembali kepada Anda).

Misalnya, penambang, yang menganalisis transaksi yang belum dikonfirmasi (belum termasuk dalam blok mana pun) dalam jaringan, dapat membuat transaksi mereka sendiri untuk pendaftaran domain yang sama dan memasukkannya (dan bukan milik Anda) di blok mereka. Untuk menerapkan serangan ini, bahkan tidak perlu menambang blok Anda. Ini akan cukup untuk menempatkan transaksi Anda di jaringan dengan biaya besar. Oleh karena itu, dua operasi terpisah NAME_NEW dan NAME_FIRSTUPDATE , dan yang kedua hanya dapat dilakukan oleh orang yang melakukan yang pertama, dan hanya setelah NAME_NEW masuk ke blok mana pun.

Bahkan, batasan ini bahkan sedikit lebih ketat: NAME_FIRSTUPDATE dimungkinkan tidak lebih awal dari 12 blok setelah NAME_NEW (yaitu sekitar 2 jam). Untuk memahami mengapa blok dalam batasan ini bukan 1, bukan 2, bukan 3, tetapi secara khusus 12, kita harus mundur sedikit dari cerita utama dan mencari tahu apa fork dan 51% attack .

Fork
Bayangkan bahwa para penambang mencari blok #123456 . Dan pada waktu yang hampir bersamaan, ia ditemukan secara independen oleh dua penambang, satu di antaranya tinggal di Australia, dan yang lainnya di Amerika Serikat. Masing-masing dari mereka mulai menyebarkan versi bloknya melalui jaringan, dan sebagai hasilnya ternyata separuh dunia memiliki satu blockchain, dan yang lainnya memiliki yang lain.



Apakah ini mungkin? Ya itu mungkin. Apalagi ini sering terjadi. Dalam hal ini, setiap node terus mematuhi versi sendiri dari blockchain sampai seseorang menemukan blok berikutnya. Misalkan blok baru melanjutkan cabang hijau, seperti pada gambar di bawah ini. Dalam kasus ini, simpul-simpul yang mematuhi versi merah secara otomatis menyinkronkan yang hijau, karena aturan tersebut berfungsi dalam Bitcoin (dan, karenanya, dalam Namecoin): versi terpanjang dari blockchain adalah benar. Versi merah dari blockchain hanya akan dilupakan, bersama dengan hadiah bagi mereka yang menemukannya.



Tentu saja, secara teoritis, pada langkah kedua, situasinya dapat terulang kembali dan pada saat yang sama dengan ungu mereka akan menemukan yang lain yang akan melanjutkan versi merah dari blockchain. Dan yang ketiga, dan seterusnya. Tetapi probabilitas bahkan garpu pertama agak kecil, yang kedua bahkan lebih sedikit dan seterusnya. Garpu terpanjang dalam sejarah Bitcoin hanya empat blok . Jadi pada titik tertentu, salah satu cabang akan tetap maju, dan seluruh jaringan akan menuju ke sana.

51% serangan
Fakta bahwa rantai terpanjang di blockchain dominan didasarkan pada serangan bertuliskan 51%.

Bayangkan Anda seorang penipu dan membeli barang seharga 1000 BTC di sebuah toko. Anda setuju dengan penjual dan mengiriminya uang. Penjual memeriksa blockchain, melihat bahwa transaksi semacam itu benar-benar, melewati semua cek dan bahkan masuk ke beberapa blok, misalnya #123 . Setelah itu, penjual pergi ke pos dan mengirimkan barang kepada Anda.

Saat ini, Anda menghidupkan pertanian penambangan dan mulai menambang, mulai dari blok #122 . Jika Anda memiliki kekuatan yang cukup, maka Anda dapat menyalip sisa jaringan dan menghitung tercepat untuk memblokir #124 , setelah itu seluruh dunia akan beralih ke versi blockchain Anda. Pada saat yang sama, Anda tidak akan memasukkan transaksi Anda untuk 1000 BTC di salah satu blok, yang berarti bahwa itu akan selamanya dilupakan, seolah-olah tidak pernah terjadi. .

, . . 11 , , 6 , 0,1% , 10% . , . , Namecoin , 20% .

. , . , NAME_NEW , 12 , NAME_FIRSTUPDATE .

NAME_FIRSTUPDATE


Tujuan dari operasi NAME_FIRSTUPDATEini adalah untuk mempublikasikan nama yang saya umumkan NAME_NEW, dan menentukan nilai untuknya. Untuk melakukan ini, saya perlu meluncurkan transaksi di jaringan, inputnya adalah koin yang sangat istimewa yang saya hasilkan di output NAME_NEW. Untuk mengkonfirmasi hak untuk menggunakannya, saya mempresentasikan dalam skrip input kunci publik saya dan tanda tangan transaksi yang NAME_NEWdibuat oleh kunci pasangan pribadi, persis sesuai dengan skema yang kami periksa pada bab tentang P2PKH.

Salah satu hasil dari transaksi adalah koin khusus baru dengan berat, seperti yang sebelumnya, tidak kurang 0.01 NMC. Naskah keluarannya harus seperti ini:

 OP_NAME_FIRSTUPDATE <Name> <Salt> <Value> OP_2DROP OP_2DROP <lock script> 

SaltAdalah angka acak 0xd5eeb22ee8117f57yang kami buat pada tahap pertama persiapan skrip NAME_NEW. Name- itu adalah d/stephenmorsedalam heksadesimal 0x642f7374657068656e6d6f727365.

Bidang Valueharus berisi array asosiatif yang mewakili aturan yang dengannya nama akan diselesaikan. Daftar lengkap kemungkinan kunci dan aturan untuk mengisinya di sini . Dalam perkiraan pertama, ini adalah analog dari file zone; tautan di atas menunjukkan pemetaan entitas Namecoin ke entitas DNS yang dikenal. Yang paling populer di antaranya adalah ip, contoh yang lebih tinggi, dan ns, yang kita gunakan sekarang.

Untuk menunjukkan apa yang akan menjadi server NS untuk domain, kami akan 1.2.3.4menempatkan nilai dalam Nilai {“ns”:[“1.2.3.4”]}, tetapi, tentu saja, dalam heksadesimal - 0x7b226e73223a5b22312e322e332e34225d7d.

Seperti terakhir kali, tutup koin dengan P2PKH. Dalam contohnya, Stephen sengaja membuat koin pada langkah NAME_NEW dengan bobot yang tidak tepat 0.01 NMC, tetapi dengan margin, sehingga pada langkah berikutnya margin ini akan cukup untuk komisi kepada penambang. Dalam kasus umum, transaksi akan memiliki satu lagi pintu masuk untuk memastikan komisi - dan satu lagi jalan keluar untuk pengiriman.

Kami mengumpulkan semuanya menjadi transaksi dan membuangnya ke jaringan .



Ketika transaksi jatuh ke blok, host akan memperbarui nilai untuk kunci d/stephenmorsepada tabel mereka {“ns”:[“1.2.3.4”]}. Semua browser dengan dukungan Namecoin sekarang akan menyelesaikan domain stephenmorse.bitdan subdomainnya ke alamat IP melalui server DNS yang terletak di 1.2.3.4.

NAME_UPDATE


"Meja" dengan kunci dan artinya, yang saya sebutkan di akhir bagian terakhir, sebenarnya disebut UTXO set (unspent transaction output). Karena sangat penting bagi jaringan untuk mencegah pengeluaran dana yang berulang, sebelum menambahkan transaksi ke blok, penambang memeriksa untuk melihat apakah input yang sebelumnya ditentukan dalam transaksi digunakan. Untuk mempercepat operasi ini, semua output yang tidak digunakan disimpan dalam struktur data yang terpisah. Struktur ini tidak ada di tingkat jaringan, tetapi dihitung dan disimpan oleh setiap node secara lokal.

Setelah saya menyelesaikan transaksi NAME_FIRSTUPDATE, output dari koin saya dengan berat 0.01 NMC, di mana nilai untuk kunci terpasang d/stephenmorse, tekan tabelUTXO. Jika output ini tidak dihabiskan untuk 36.000 blok (yang lebih dari 8 bulan dengan rata-rata 10 menit per blok), maka itu akan dianggap tidak valid, dan nama yang sesuai sebagai gratis.

Periode 36.000 blok ini (serta nilai minimum koin khusus 0.01 NMC) jelas ditentukan pada awal jaringan dan tidak berubah. Untuk memperpanjang pendaftaran nama, serta untuk setiap perubahan pada catatan atau mentransfernya ke pemilik lain, transaksi digunakan NAME_UPDATE.

Aturan untuk pembentukan transaksi semacam itu praktis tidak berbeda dari yang dijelaskan di atas. Input untuk transaksi harus merupakan output dari koin yang diperoleh dalam transaksiNAME_FIRSTUPDATE. Input tambahan diperlukan untuk memastikan komisi. Dari dua output transaksi, satu adalah koin baru dengan nilai yang diperbarui untuk nama, dan yang kedua dirancang untuk mentransfer perubahan dari komisi. Format skrip keluaran untuk koin adalah:

 OP_NAME_UPDATE <Name> <Value> OP_2DROP OP_DROP <lock script> 

Seperti dalam kasus sebelumnya, Nameini adalah d/stephenmorse, dan Value- JSON dengan nilai, keduanya dalam heksadesimal. Tutup pintu keluar menggunakan P2PKH dan buang transaksi ke jaringan .


Secara umum, ini hampir semua yang ingin saya ceritakan tentang manajemen nama di Namecoin. Yang tersisa hanyalah mengatakan beberapa kata tentang biaya memiliki domain.

Biaya


Mari kita hitung berapa banyak isi nama dalam Dot-Bit(nama zona DNS .bit, yang beroperasi berdasarkan Namecoin) biaya dalam cryptocurrency dan, menerjemahkan angka-angka ke dalam mata uang kertas, sebanding dengan biaya dari domain DNS "normal".

Jadi, seperti yang dapat dilihat dari bagian sebelumnya, untuk transaksi, NAME_NEWbiaya pemilik domain adalah 0.01 NMCuntuk membuat koin tempat zona tersebut akan dipasang, ditambah komisi dari penambang. Untuk transaksi, NAME_FIRSTUPDATEkoin baru dibuat dengan mengorbankan yang lama, dan sebagai tambahan pemilik hanya membayar komisi. Setelah sekitar 8 bulan, pemilik harus menyelesaikan transaksi NAME_UPDATEuntuk mempertahankan nama yang terdaftar. Dan di sinilah biaya yang diperlukan untuk akhir tahun pertama.

Sebagian besar artikel tentang Namecoin (termasuk artikel yang sebelumnya dikutip oleh Stephen Morse) didasarkan pada data dari tahun-tahun pertama keberadaan jaringan dan mengklaim bahwa komisi penambang adalah 0,005 NMC. Namun sejak itu, nilai median komisi tersebut secara bertahap menurun dan pada awal 2019 adalah sekitar 0,0003 NMC. Nilai tukar NMC terhadap dolar AS, sebaliknya, setelah mengalami beberapa kenaikan, kembali ke level 2015 dan berjumlah sekitar $ 0,7 untuk 1 NMC. Sangat mudah untuk menghitung bahwa domain di zona .bit pada tahun pertama akan dikenakan biaya pemilik dari 0,0109 NMC atau $ 0,00763. Mungkin akan lebih mudah bagi seseorang untuk mengingat perkiraan analog dari jumlah ini dalam mata uang Rusia - 50 kopecks.

Nah, ini adalah batas bawah yang cocok dengan skenario untuk membeli nama untuk penggunaan atau cybersquatting di masa depan. Bagaimana dengan batas atas? Karena input dari setiap transaksi yang memperbarui zona harus berupa koin dari salah satu blok sebelumnya, maksimum teoretis dari frekuensi pembaruan nama sama dengan frekuensi kemunculan blok baru. Mengingat bahwa nilai rata-rata dari nilai ini ditetapkan pada awal jaringan dan sekitar 10 menit, dapat diperkirakan bahwa batas atas biaya pemeliharaan domain adalah 15,7744 NMC atau sedikit lebih dari $ 11.

Seperti yang Anda lihat, bahkan skenario fantastis menggunakan nama di Namecoin dengan biaya kurang lebih setara dengan tahun pertama memiliki domain reguler di zona .com paling populer. Jika kami membandingkan skenario yang lebih realistis dengan pembaruan rata-rata sekali sehari, maka nama di zona .bit akan dikenakan biaya sekitar 8 sen setahun, yang jauh lebih murah daripada penawaran paling menguntungkan dalam DNS tradisional, yang tidak jatuh di bawah $ 1. Dalam skenario penggunaan jangka pendek dari domain (dari beberapa jam hingga sebulan), perbedaan dalam mendukung Namecoin akan menjadi dua urutan besarnya.

Mempertimbangkan daya tarik finansial dari layanan, serta anonimitas pemilik domain, termasuk kurangnya "jejak uang" tradisional untuk DNS biasa, menjadi jelas mengapa Namecoin telah menjadi jaringan populer bagi pemilik layanan dengan peningkatan risiko pemutusan atau pemblokiran, khususnya botnet.

Botnet di Namecoin


Memang, fakta bahwa operator botnet mulai menggunakan anonimitas Dot-Bituntuk melindungi server C&C mereka tidak mengejutkan. Hal lain yang lebih menarik - berapa lama botnet di .bit tetap aktif.

Domain C&C yang terdaftar di zona DNS "normal" cepat atau lambat ditarik dari pemilik, yang memaksa operator membayar untuk mendaftarkan nama baru dan meluncurkan perakitan bot baru di jaringan dengan server manajemen baru. Ketidakmungkinan mendasar untuk menghapus domain di zona .bit meningkatkan masa pakai botnet atas perintah besarnya.

Ambil contoh pationare.bitdomain yang terdaftar pada Desember 2016. Itu digunakan untuk mengontrol botnet Chthronic(mendistribusikan trojan perbankan yang dibangun berdasarkan ZeuS yang terkenal). Kampanye distribusiChthronicdikaitkan dengan penggunaan paket eksploit RIG dan dijelaskan secara rinci oleh berbagai peneliti (misalnya, malware-traffic-analysis.net ) pada akhir 2016 - paruh pertama 2017.

Dapat diasumsikan bahwa botnet ini sudah hancur sejak lama. Tapi tidak - lebih dari dua tahun setelah peluncuran, domain C & C botnet dan jaringannya masih aktif. Seperti dapat dilihat dari tangkapan layar di bawah ini, pembaruan terakhir dibuat pada bulan Desember 2018.



Terlihat menggoda, bukan? Karena nama DNS server manajemen tetap utuh, tidak perlu sering memperbarui kode bot dan memulai kembali kampanye distribusi. Masih ada biaya untuk mengubah hosting setelah memblokir alamat IP, tetapi biaya ini juga dapat dikurangi dengan menggunakan server web yang diretas sebagai proxy, cangkang yang harganya kurang dari satu dolar.

Di sisi lain, semua transaksi dalam blockchain tersedia untuk umum untuk setiap peserta. Seperti yang telah kita bahas secara rinci dalam bab-bab sebelumnya, koin di Namecoin tidak menghilang tanpa jejak, yang berarti kita dapat melacak redistribusi mereka di antara alamat. Dan mengetahui aturan dan batasannya, dengan mempertimbangkan transaksi mana yang dibentuk di Namecoin, kita dapat menemukan pola yang bermakna di mana manajemen seragam dari beberapa alamat yang terlibat dalam transaksi akan terlihat jelas. Dalam hal ini, domain yang dibayar dengan koin dari alamat ini akan memiliki pemilik yang sama - grup yang kami kelola, yang mengontrol botnet.

Kami akan mengembangkan ide ini lebih lanjut.

Skema Pengumpulan IOC Umum


Mari kita jelaskan skema pencarian umum menggunakan contoh botnet nyata dari grup RTM. Kami akan membangun sampel ini , yang diidentifikasi sebagai Win32/Spy.RTM.N.





Seperti yang dapat Anda lihat dari tangkapan layar di atas, setelah mulai mencoba untuk mendapatkan alamat IP untuk nama tersebut stat-counter-4.bit. Kami mendapatkan informasi tentang riwayat transaksi untuk nama ini di Namecoin.



Pengidentifikasi transaksi yang membuat domain ini, kami dapatkan dengan mengklik tautan ke operasi NAME_NEW. Alamat input dari transaksi ini, dengan bantuan domain yang dibuat, jelas dikelola oleh grup yang menarik bagi kami. Dia akan menjadi set awal data: N3KPt8py24EAsAiKquyFgoKGyTYeR5Tmry.



Berdasarkan kumpulan data awal, kami melakukan iteratif di sekitar blockchain, bergerak ke arah pertumbuhannya (gerakan ke atas, atau gerakan ke atas). Di awal setiap langkah, kami mendapatkan transaksi, koin tertentu dengan input milik orang yang kami minati. Pada langkah pertama, kami memeriksa transaksi dari set data awal, pemilik koin pada input yang kami tahu apriori.

Transaksi diperiksa untuk kepatuhan terhadap aturan heuristik (kami akan merumuskannya di bawah), yang menjamin bahwa koin tertentu (atau koin) di pintu keluar transaksi milik orang yang sama dengan koin input yang diketahui. Jika transaksi tersebut memenuhi satu atau lebih heuristik, maka koin panduan tersebut akan menunjukkan arah pergerakan lebih lanjut. Transaksi yang menghabiskan koin penuntun akan menjadi langkah berikutnya dalam iterasi.

Pada setiap langkah iterasi, kami mengisi kembali daftar domain yang berpartisipasi dalam transaksi dan daftar alamat IP tempat domain ini diselesaikan. Ini adalah pengidentifikasi sejarah kompromi (IOC), yang dapat digunakan untuk forensis, serta untuk mengidentifikasi taktik dan metode pengelompokan.

Pergerakan berhenti jika transaksi yang dimaksud tidak memenuhi heuristik mana pun. Ini berarti bahwa kami tidak dapat mengatakan dengan pasti bahwa salah satu output dari transaksi tersebut dikontrol oleh orang yang kami minati.

Situasi lain yang menghentikan pergerakan adalah kurangnya transaksi dari alamat output. Kami akan menyimpan alamat tersebut dalam daftar koin yang tidak terpakai (UTXO) yang terpisah. Mereka mewakili nilai terbesar dalam seluruh studi. Karena kami yakin bahwa alamat ini dikelola oleh orang yang kami minati, setiap transaksi di masa depan yang menggunakan alamat ini akan menghasilkan IOC baru - yang sebelumnya tidak dikenal - nama domain atau alamat IP - yang belum digunakan oleh pengelompokan. Tetapi dengan probabilitas tinggi itu akan segera terjadi.

Untuk mem-bypass blockchain, lebih mudah untuk mengekspornya ke database. Untuk ini, Anda dapat menggunakan, misalnya, utilitas rusty-blockparser yang dimodifikasi , di mana kami meningkatkan dukungan untuk Namecoin dengan menambahkan pengenalan operasi NAME_*, struktur data, Auxiliary Proof-of-Workdan memperluas format ekspor.

Kode pseudo Python untuk gerakan ke atas disajikan di bawah ini. Selanjutnya, diasumsikan bahwa data transaksi blockchain disimpan dalam MongoDB.

 start = "37d40bc2f3ca7415908dc9e276593b50d3120158cd540cb088246f2e2cf88b16" tx = namecoin.transactions.find_one({"id": start}) def upstream_movement(tx): global names global IPs global utxo global known_addresses heuristic_result = upstream_heuristic_test(tx) if heuristic_result and heuristic_result.guiding_outs: if tx.has_name_op(): names.add(tx.name_op.name) for ip_address in tx.name_op.get_ip(): IPs.add(ip_address) for guiding_out in heuristic_result.guiding_outs: known_addresses.add(guiding_out.address) tx = namecoin.transactions.find_one({"in.id": guiding_out.id}) if tx: upstream_movement(tx) else: utxo.add(guiding_out) 

Bagian kedua dari bypass blockchain adalah gerakan melawan pertumbuhan blockchain (gerakan ke bawah, atau gerakan hilir). Secara umum, algoritma gerakan ke bawah tidak berbeda dari algoritma ke atas. Gerakan dimulai dengan transaksi dari kumpulan data asli. Pada setiap langkah, transaksi diperiksa untuk kepatuhan terhadap aturan heuristik (secara umum, berbeda dari aturan untuk gerakan ke atas). Satu-satunya perbedaan adalah bahwa koin, yang keanggotaannya dikenal sebagai apriori, ada di pintu keluar transaksi, dan heuristik menjamin bahwa orang yang sama memiliki satu atau lebih koin di pintu masuk.

Pergerakan ke bawah juga berhenti jika transaksi saat ini tidak memenuhi heuristik mana pun. Berbeda dengan gerakan ke atas, kami tidak dapat memenuhi koin yang tidak terpakai di antara panduan, dan opsi ini untuk keluar dari rekursi dalam gerakan ke bawah tidak akan berfungsi. Tetapi, seperti halnya pergerakan ke atas, kami mengisi kembali daftar nama dan daftar alamat IP.

Kode pseudo python untuk gerakan ke bawah akan terlihat seperti ini:

 start = "37d40bc2f3ca7415908dc9e276593b50d3120158cd540cb088246f2e2cf88b16" tx = namecoin.transactions.find_one({"id": start}) def downstream_movement(tx): global names global IPs global utxo global known_addresses heristic_result = downstream_heuristic_test(tx) if heuristic_result and heuristic_result.guiding_ins: if tx.has_name_op(): names.add(tx.name_op.name) for ip_address in tx.name_op.get_ip(): IPs.add(ip_address) for guiding_in in heuristic_result.guiding_ins: known_addresses.add(guiding_in.address) tx = namecoin.transactions.find_one({"out.id": guiding_in.id}) if tx: downstream_movement(tx) 

Sekarang pertimbangkan aturan heuristik yang akan kita gunakan saat bergerak di sepanjang blockchain.

Aturan heuristik


Perubahan umum


Mari kita lihat lagi transaksi, tangkapan layar yang diberikan di atas. Alamat yang N3KPt8py24EAsAiKquyFgoKGyTYeR5Tmryberisi uang untuk membuat nama baru dikirimkan ke input transaksi . Akan ada dua alamat untuk transaksi NAME_FIRSTUPDATEdan NAME_UPDATEdi pintu masuk - koin khusus dengan zona dari transaksi sebelumnya menurut domain dan dana tambahan untuk menutup komisi.

Saya akan segera mencatat bahwa dalam konteks transaksi, kita akan berbicara tentang koin dan alamat. Terlepas dari kenyataan bahwa dalam beberapa karya konsep-konsep ini dianggap hampir setara, penting bagi kami untuk secara jelas menunjukkan perbedaan antara istilah-istilah ini, karena dalam perjalanan studi kami akan menarik kesimpulan tentang koin dan alamat.

Mengatakan "koin", kami akan berarti keseimbangan positif terbentuk sebagai output dari transaksi. Koin ini diidentifikasi oleh nomor transaksi yang menghasilkannya dan indeks keluar. Misalnya, koin pada input transaksi yang dipertimbangkan di atas memiliki pengidentifikasi 5778be8e1901e9931e9b41a128a0b7f963e6e1ae72e461df2cba26e6279d433a:1, karena koin itu dibentuk sebagai output (dengan indeks 1) dari transaksi tersebut 5778be8e1901e9931e9b41a128a0b7f963e6e1ae72e461df2cba26e6279d433a.

Koin khusus, seperti sebelumnya, kami akan memanggil koin dengan nilai nominal b 0.01 NMC, locking scriptyang berisi operasi dengan nama domain. Kami memeriksa secara rinci mekanisme pembentukan koin tersebut di bagian Manajemen Domain. Koin biasa kita sebut koin denominasi sewenang-wenang, di mana operasi dengan domain tidak terikat.

Properti utama dari koin adalah kekekalannya. Koin apa pun dapat dihabiskan hanya sekali dan hanya secara keseluruhan. Jadi, apa pun yang disebutkan di jaringan Namecoin maksimal dua kali: sekali pada saat penciptaan, dan yang kedua saat pengeluaran.

Mengatakan "alamat", kami akan berarti pengidentifikasi yang secara unik mengidentifikasi pasangan kunci yang dapat membuka skrip penguncian dalam format P2PKHyang menutup koin yang terletak di input atau output transaksi. Karena hanya kunci yang sesuai dengan alamat yang dapat menghabiskan koin, analogi terdekat dari dunia fisik dengan alamat adalah dompet tempat koin disimpan (dan dari mana mereka dihabiskan).

Terlepas dari kenyataan bahwa di Namecoin alamat sering juga hanya digunakan dua kali, tidak perlu menerima dan mengonsumsi satu koin. Fakta menggunakan kembali alamat akan sedikit membantu kita di masa depan.

Kami berbicara lebih rinci tentang input, output, dan alamat dalam bab Bitcoin 201.

Jadi, dua koin terbentuk pada saat keluar dari transaksi. N2hgZoWaTKoJ7FPmLuytTow3XrCCfEj2caKoin khusus yang sama, dengan berat 0,01 NMC, yang terikat domain, pergi ke alamat . NKMMLwyMw4nwGuke6vd3AuDBMP18FWRaF1Koin biasa dengan uang kembalian dikirim ke alamat kedua .

Ini adalah skema transaksi yang paling umum. Masih ada opsi ketika ada lebih dari satu koin di pintu masuk, tetapi properti umum mereka adalah bahwa koin dengan perubahan selalu persis sama.

Anda dapat menebak bahwa transaksi seperti itu berkaitan dengan pembaruan sederhana informasi domain. Pembayaran untuk pembaruan dilakukan menggunakan satu (lebih jarang beberapa) koin milik satu orang. Memang, karena transaksi selalu hanya memiliki satu penulis, ia harus mengelola semua alamat input. Tanpa ini, ia tidak akan dapat membuat skrip pembuka kunci, yang diperlukan untuk menggunakan koin dari dompet ini.

Nah, karena semua perubahan dari operasi ini dikumpulkan dalam satu koin, jelas bahwa koin ini milik orang yang sama dengan koin di pintu masuk.

Skema serupa untuk Bitcoin dijelaskan dalam karya ini , di mana namanya one-time change. Ini mencerminkan metode dimana aplikasi Bitcoin asli melakukan transaksi - bitcoinddanbitcoin-qt. Satu kali (satu kali) itu disebut karena fitur lain dari aplikasi ini. Secara default, mereka menghasilkan alamat baru untuk koin pada output dari transaksi yang dibuat.

Namecoin, bersama dengan basis kode Bitcoin, telah mewarisi sebagian besar kode untuk aplikasi ini, yang disebut namecoinddan namecoin-qt. Mengenai koin biasa, kita dapat menggunakan heuristik ini dengan aman tanpa perubahan.

Statistik penggunaan kembali alamat untuk menyimpan koin khusus menunjukkan bahwa aturan ini biasanya juga berlaku untuk mereka. Penggunaan kembali alamat semacam itu sangat jarang. Alamat yang digunakan lebih dari sekali, sekitar 6% dari total; lebih dari dua kali - sekitar 1%. Berdasarkan tujuan Namecoin, tampaknya masuk akal untuk mengasumsikan bahwa sebagian besar transaksi dengan koin khusus pada jaringan adalah operasi pembuatan dan pembaruan yang sederhana, di mana pemilik domain tidak berubah. Oleh karena itu, kita dapat berargumen bahwa operasi semacam itu berkaitan dengan penarikan koin khusus ke alamat baru yang sebelumnya tidak digunakan.

Sekarang mari kita lihat contoh transaksi dengan alamat yang digunakan kembali untuk koin keluaran khusus. Untuk melakukan ini, lakukan transaksi lain dari grup RTM -b3c7ce9ca3a689c6236b9d6df3c257c5fab6c3985187669ccf731ac42a127a11.



Alamat NDpWDEx1mBkUYywqxDTAZZeGCfUV4GkVE8tempat koin khusus itu digunakan sudah digunakan dalam transaksi sebelumnya.



Seperti yang disebutkan sebelumnya, skrip default dalam aplikasi klien asli untuk Namecoin tidak menghasilkan penggunaan kembali alamat. Untuk mengirim koin khusus ke alamat yang ada, pemilik perlu melakukan upaya terpisah dan opsional, mencari tahu dan menunjukkan alamat keluar secara eksplisit pada tahap pembentukan transaksi.

Mengapa ini diperlukan? Satu-satunya penyebutan situasi di mana alamat keluar ditentukan secara manual, saya hanya bertemu dalam instruksi untuk mentransfer domain ke pemilik lain.



Dugaan ini terkonfirmasi jika kami mempertimbangkan nasib lebih lanjut dari alamat pada saat keluar dari transaksi yang dimaksud. Dalam diagram di bawah ini, transaksi ini ditandai oleh tonggak hijau cerah. Dapat dilihat bahwa transaksi berikutnya 9e16f6bepada domain stat-counter-4 terjadi menggunakan alamat uang NJ8xUePvyang tidak memiliki koneksi eksplisit dengan alamat yang digunakan dalam transaksi "induk". Jelas, domain dipindahkan ke manajemen orang lain.



Dalam kasus umum, ini bisa berupa penjualan domain ke pemilik lain yang tidak terkait dengan aktivitas orang tersebut, atau transfer domain antara akun satu orang. Opsi kedua adalah kesederhanaan dan biaya rendah untuk mendaftarkan domain baru, serta kurangnya minat yang terlihat dari organisasi dan pemilik merek dagang dalam mendaftarkan domain di zona .bit. Kami tidak dapat memunculkan setidaknya sedikit motivasi yang dibenarkan untuk membeli domain, diperhatikan dalam aktivitas jahat. Oleh karena itu, kami percaya bahwa terlepas dari kemungkinan transfer domain ke orang lain, transaksi dengan alamat yang dapat digunakan kembali untuk penarikan koin khusus menunjukkan penataan ulang aset antara beberapa akun yang dikendalikan oleh satu grup.

Kami merumuskan argumen di atas dalam bentuk aturan heuristik, yang kami sebut perubahan bersama:

, , , .

, , .

, , .

Skema untuk menggunakan aturan ini ditunjukkan pada gambar. Aliran abu-abu - koin biasa, hijau - koin khusus. Panduannya adalah semua koin dari akhir transaksi yang berlawanan dengan koin yang digunakan untuk transaksi ini: semua output adalah untuk gerakan ke atas, dan semua input adalah untuk gerakan ke bawah.



Kami mencatat beberapa fitur heuristik ini. Pertama, dua arah: ini bekerja baik untuk gerakan ke atas, ketika kita tahu pemilik pintu masuk, dan untuk gerakan ke bawah, ketika kita tahu pemilik salah satu koin di pintu keluar.

Kedua, ketersediaan opsional koin khusus: terlepas dari kenyataan bahwa jika tidak ada transaksi tidak terkait dengan memperbarui domain, alasan logis yang diberikan di atas mengenai pemilik koin biasa tetap valid.

Kode pseudo untuk menguji transaksi untuk kepatuhan dengan aturan perubahan umum akan terlihat seperti ini:

 def common_change(tx): result = {"guiding_outs": [], "guiding_ins": []} if len(tx.outs.money) != 1: return {} addr = tx.outs.money[0].address first_tx = namecoin.tx.find_one({"out.id": addr}, sort=[("block", 1)]) if first_tx.id != tx.id: return {} else: result["guiding_outs"] = tx.outs.all result["guiding_ins"] = tx.ins.all return result 

Pengeluaran umum


Heuristik yang dipertimbangkan di atas memiliki properti penting lainnya, selain dua arah. Perubahan umum - heuristik "tanpa ingatan"; hasil verifikasi hanya ditentukan oleh karakteristik transaksi yang dipermasalahkan dan tidak bergantung pada hasil heuristik lain dan data yang terakumulasi. Heuristik seperti itu sangat diperlukan dalam iterasi pertama dari traversal, untuk pengisian awal set data. Di sisi lain, mudah untuk memperhatikan keterbatasan aplikasinya. Misalnya, dia akan fokus pada transaksi yang mengandung dua atau lebih output tunai.

Sebagai contoh transaksi semacam itu, pertimbangkan db4ff4082f39d0a501508706e627f26aa92712d27b4f633ded59917d201cfae5. Transaksi ini berkaitan dengan aktivitas grup yang mengelola botnet Dimnie.



Kami turun transaksi ini melalui alamatMy7Ap3nH5f4X6Us2KiUWisd77wRpMG1MDYyang digunakan dalam transaksi CC sebelumnya sebagai alamat login. Terlepas dari kenyataan bahwa sikapnya terhadap orang yang sedang dipelajari tidak dapat diragukan, kita tidak dapat mengatakan hal yang sama (juga sebaliknya) tentang pintu keluar dan pintu masuk lainnya. Ini mungkin redistribusi koin antar alamat grup, dalam hal ini semua alamat dikendalikan oleh orang yang kami minati. Atau, mungkin, isi ulang dari alamat salah satu bursa yang menjual token Namecoin. Atau transfer dari anggota jaringan lain yang tidak terkait dengan kegiatan orang yang sedang dipelajari. Tidak mungkin untuk membuat kesimpulan yang pasti tentang atribut transaksi ini saja.

Pertimbangkan alamatnyaN4XtLb7xpC4Zk72T8QcshKhTW17ZCyQ1j1pada input dari transaksi ini. Alamat ini telah digunakan sebelumnya ("sebelumnya" untuk gerakan ke bawah berarti "di masa depan", "ke arah pertumbuhan blockchain") pada input transaksi CC 6bffc741eb66de074c09a380fb5e6bd13d4bd5205c36a76e3682674dba08461e, yang memungkinkan kami untuk mempertimbangkan alamat ini untuk dikelola oleh orang yang kami minati. Dan karena, seperti yang telah ditunjukkan, kunci untuk semua koin pada input transaksi dikendalikan oleh satu orang (yang tidak dapat dikatakan tentang pintu keluar), kami memiliki alasan untuk percaya bahwa semua input lain juga termasuk dalam kelompok yang menarik bagi kami.

Kondisi ketat dari pengeluaran umum heuristik terlihat sangat sederhana:

Jika diketahui bahwa setidaknya salah satu alamat pada input transaksi dikendalikan oleh orang tertentu, maka semua alamat lain pada input transaksi ini dikendalikan oleh orang yang sama. Koin di pintu masuk ini milik orang yang sama.

Seperti yang Anda lihat, heuristik ini hanya masuk akal untuk gerakan ke bawah. Ketika bergerak ke arah pertumbuhan blockchain, kita sampai pada transaksi yang sedang dipelajari melalui salah satu input. Dalam hal ini, kondisi aturan terpenuhi secara otomatis, tetapi tidak mengatakan apa-apa tentang output transaksi dan tidak memungkinkan Anda untuk terus bergerak ke arah hulu. Dengan kata lain, ini adalah heuristik searah.

Fitur kedua heuristik ini, yang patut dicatat, adalah bahwa di sini kami pertama kali menggunakan data yang terakumulasi sebagai hasil dari memeriksa transaksi sebelumnya - daftar alamat yang dikelola oleh orang yang sedang diselidiki. Untuk alasan ini, heuristik sekunder ini tidak dapat digunakan untuk gerakan independen, tanpa heuristik primer yang tidak bergantung pada hasil akumulasi (seperti perubahan umum).

Kode pseudo untuk menguji transaksi untuk kepatuhan dengan aturan pengeluaran umum akan terlihat seperti ini:

 def common_spending(tx): result = { "guiding_ins": [] } for input in tx.get_ins(): if input.address in known_addresses: return {"guiding_ins": tx.ins.all} return {} 

Alamat yang dikenal


Heuristik terakhir yang akan kami pertimbangkan dalam kerangka bagian ini adalah yang paling sederhana. Ini adalah heuristik dua arah sekunder yang (karena itu adalah dua arah) dapat digunakan untuk gerakan ke atas dan ke bawah. Formulasi ketat dari alamat heuristik yang diketahui untuk gerakan ke atas terlihat seperti ini:

Jika diketahui bahwa alamat pada input (output) dari transaksi dikendalikan oleh orang tertentu, maka koin yang diterima di alamat ini (dihabiskan dari alamat ini) milik orang yang sama.

Meskipun heuristik tampak seperti disangkal jujur, aturan ini membantu menemukan cabang dan persimpangan dalam aliran koin dan menambah konektivitas ke pohon transaksi. Selain itu, ini memungkinkan Anda untuk tidak menghentikan pergerakan transaksi yang tidak termasuk dalam heuristik lainnya. Contohnya adalah transaksi 7a35b9cb0a16b3eba92781be014555eaa4255bd17655bb00f2b3f42c3950ac69botnet Dimnie yang sudah disebutkan.



Setelah mencapainya dengan gerakan ke atas, kita tidak akan dapat bergerak maju dengan bantuan perubahan bersama, karena hasilnya lebih dari satu koin biasa. Melihat suatu transaksi, kita tidak bisa mengatakan berapa banyak koin dalam output milik orang yang sama dengan koin dalam input - keduanya, satu, atau tidak sama sekali. Penggunaan heuristik alamat yang diketahui memungkinkan Anda untuk bergerak maju karena fakta bahwa alamat tersebutMwMdTb8WQvoRW9jEW5dHn9SkkCJTRn31wQterlibat dalam transaksi CC cf7ac8986f9855246c6cf26df9a24aa5645cb9258bf787e034a33e75101ae1fcyang menciptakan domain yang ditemui sebelumnya dalam gerakan hulu d/sectools.

Demi kelengkapan, kami memberikan pseudocode alamat heuristik yang dikenal:

 def known_address(tx): result = { "guiding_outs": [], "guiding_ins": [] } for output in tx.get_outs(): if output.address in known_addresses: result["guiding_outs"].append(output) for input in tx.get_ins(): if input.address in known_addresses: result["guiding_ins"].append(input) return result 

Jadi, sekarang kita memiliki algoritma pintas umum dan heuristik yang diperlukan untuk bergerak di sepanjang blockchain, sehingga kita dapat menyatukannya untuk mendapatkan IOC dari Namecoin.

Ayo pergi!


Kami akan melalui transaksi RTM dengan gerakan naik dan turun, dimulai dengan 37d40bc2f3ca7415908dc9e276593b50d3120158cd540cb088246f2e2cf88b16. Dalam perjalanan maju di blockchain, kami akan mengumpulkan tidak hanya IOC, tetapi juga transaksi itu sendiri yang memenuhi heuristik. Aliran koin di antara transaksi yang kami visualisasikan menggunakan grafik Sankey.

Diagram lengkap terlalu besar untuk ditampilkan dalam format dokumen ini, jadi saya hanya akan memberikan sebagian saja yang diperlukan untuk cerita selanjutnya.



Aliran koin biasa disorot dalam warna abu-abu. Warna yang tersisa sesuai dengan aliran koin khusus. Warna terpisah dipilih untuk setiap nama. Tonggak putih terkait dengan transaksi yang memenuhi kondisi heuristik. Tonggak merah cerah di sebelah kanan adalah UTXO.

Elemen bagan yang ingin saya menarik perhatian disorot dengan tonggak biru. Ini adalah entri yang menggantung - koin yang muncul pada input transaksi yang diberikan algoritma pada gerakan ke atas, tetapi transaksi yang membuat koin ini tidak menemuinya.

Input menggantung adalah tanda-tanda bahwa struktur yang diteliti memiliki cabang samping yang tidak terhubung ke trunk utama di mana algoritma bergerak. Dalam kasus yang ditunjukkan, ini adalah akun independen lain. Itu, seperti yang bisa dilihat dalam diagram, mulai digunakan untuk membayar perubahan dalam domain yang sudah kita ketahui. Dari fakta ini kita dapat menyimpulkan bahwa akun ini juga dikendalikan oleh orang yang sedang diselidiki. Untuk membuat IOC terkait dengan operasi pada akun ini hingga muncul pada grafik, kami akan memulai gerakan ke bawah yang terpisah, mulai dalam transaksi dengan entri yang menggantung.

Demikian pula, dalam gerakan ke bawah, pintu keluar yang menjuntai dapat terjadi. Untuk masing-masing dari mereka, kami akan meluncurkan gerakan ke atas yang terpisah mulai dari transaksi yang sesuai.

Selain transaksi grup yang mengontrol botnet RTM, kami juga memeriksa transaksi grup yang mengontrol bot Shifu, Dimnie, dan GandCrab. Akibatnya, 164 domain terdaftar untuk kepentingan kelompok-kelompok ini dan 277 alamat IP yang terkait dengan nama-nama ini ditemukan. Pada saat penulisan ini, dari UTXO yang dikumpulkan milik kelompok-kelompok ini, 39 koin tetap berlaku.

Daftar IOC, serta alamat Namecoin tempat koin-koin yang tidak digunakan dari kelompok-kelompok itu tetap, diberikan dalam Lampiran A.

Kesimpulan


Pengujian kehidupan nyata merupakan tantangan bagi hampir semua teknologi. Pada pertengahan 2000-an, Wikipedia telah menjadi sumber informasi tepercaya yang begitu populer, sehingga dengan mengubah teks artikel menjadi mungkin untuk mengendalikan opini publik, memulai, mendapatkan uang. Periode dalam sejarah layanan ini terkenal dengan perang revisinya yang sangat besar - penggunaan agresif mekanisme untuk memperbaiki artikel dan kemunduran suntingan oleh beberapa pihak yang bertikai untuk memenangkan perselisihan atas konten artikel. Halaman Wikipedia berubah menjadi pameran rias internasional, tempat semua orang ingin benar-benar mengucapkan kata terakhir.

Di satu sisi, mereka mulai berperang amandemen, menetapkan aturan khusus yang memungkinkan, jika terjadi perselisihan, untuk sementara waktu mengecualikan kemungkinan mengedit artikel - sampai debat di bagian "Diskusi" menemukan kata-kata kompromi. Di sisi lain, perang revisi memaksa Wikipedia untuk meluncurkan mekanisme dinamis untuk mengelola sumber daya administrator, yang memungkinkan mereka untuk dengan cepat terlibat dalam menyelesaikan konflik di wilayah terpanas. Selain itu, ensiklopedia mengambil keuntungan dari perhatian publik yang berselisih tentang artikel individual untuk menarik lebih banyak peserta untuk mengedit artikel ini dan mencapai cakupan yang paling benar dan lengkap dari topik tertentu.

Bisakah Namecoin, seperti Wikipedia, tumbuh dan mengatasi tantangannya? Tunggu dan lihat.

Tabel PS dengan indikator kompromi tersedia di GitHub .

Diposting oleh Alexey Goncharov, Pusat Keamanan Pakar PT

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


All Articles