Lompat ke konten

Serangan tata kelola

Serangan tata kelola memperoleh kuasa suara atau eksekusi yang cukup untuk meloloskan perubahan berbahaya lewat jalur resmi protokol.

Diperbarui

Hanya untuk tujuan edukasi; bukan merupakan nasihat investasi atau rekomendasi investasi. Investasi dapat mengakibatkan kerugian.

Jawaban langsung

Serangan tata kelola memperoleh kuasa yang cukup untuk memilih, mengajukan, membatalkan, atau mengeksekusi sehingga protokol melakukan tindakan berbahaya melalui jalur tata kelola resminya. Semua panggilan bisa saja lolos dari pemeriksaan kontrak pintar. Kegagalannya terletak pada sistem yang membuat kendali terlalu murah, cepat, atau minim pertanggungjawaban dibandingkan nilai yang berada di bawah kendali tersebut.

Hak suara dapat berasal dari token milik sendiri, suara yang didelegasikan, token pinjaman, pemilih yang disuap, kunci yang dibobol, atau peran istimewa pada Governor dan timelock. Checkpoint historis dapat mencegah saldo yang sama digunakan kembali setelah transfer serta menggagalkan pinjaman setelah snapshot. Checkpoint tidak mencegah suara yang diperoleh sebelum snapshot, pemusatan delegasi, aturan kuorum yang lemah, atau eksekutor yang dibobol.

Tidak semua proposal yang tidak populer merupakan serangan; tata kelola memang dibuat untuk mengubah aturan. Pertanyaan keamanannya adalah apakah suatu pihak memperoleh kendali sementara atau tidak proporsional, menyembunyikan atau menyesatkan dampak yang dapat dieksekusi, atau melampaui batas kewenangan yang diumumkan. Tinjau panggilan sebenarnya, jalur termurah menuju kuasa penentu, waktu untuk merespons, dan nilai atau kendali maksimum yang dapat dicapai setelah eksekusi.

Cara kerja

  1. Petakan kewenangan dari aset pemungutan suara, melalui delegasi dan checkpoint, menuju Governor, timelock, administrator proxy, kas, peran darurat, dan kontrak tujuan akhir. Antarmuka tata kelola bukanlah grafik izin.
  2. Tetapkan jaringan, alamat kontrak, versi implementasi, mode jam, snapshot, ambang proposal, perhitungan kuorum, aturan penghitungan, jeda dan periode pemungutan suara, jeda antrean, kedaluwarsa, hak pembatalan, serta peran eksekusi.
  3. Rekonstruksi hak suara pada snapshot yang tepat dengan pembacaan historis seperti getPastVotes. Kelompokkan alamat yang dikendalikan atau dikoordinasikan satu pihak dan pisahkan saldo token dari bobot suara yang didelegasikan.
  4. Dekode setiap tindakan: targets, values, calldatas, dan descriptionHash. Uraikan proxy dan selector, periksa panggilan batch, lalu bandingkan payload yang dapat dieksekusi dengan deskripsi yang dapat dibaca.
  5. Reproduksi pembuatan proposal, pemungutan suara, antrean, dan eksekusi pada fork. Bandingkan saldo, kepemilikan, peran, allowance, implementasi, pengaturan oracle, parameter agunan, dan fungsi yang baru dapat diakses sebelum dan sesudah eksekusi.
  6. Hitung jalur kendali termurah melalui pembelian spot, pasar pinjaman, likuiditas flash, pinjaman di luar bursa, delegasi, insentif suara, lindung nilai derivatif, pembobolan kunci, dan pengambilalihan peran istimewa. Sertakan biaya, slippage, agunan, kerugian saat keluar, dan lamanya modal harus terikat.
  7. Uji jalur respons. Pastikan siapa yang dapat membatalkan atau menjeda, bukti yang diperlukan, apakah tindakan muat dalam waktu jeda, tempat pengguna memperoleh pengumuman resmi, dan cara tata kelola dilanjutkan tanpa menyisakan kunci darurat tanpa batas.

Governor token yang umum melewati status proposal, jeda, snapshot, pemungutan suara, berhasil atau ditolak, antrean, timelock, dan eksekusi. Aturan persisnya bergantung pada implementasi. Dengan checkpoint seperti ERC-5805, bobot suara terdelegasi pada waktu lampau dapat ditanyakan; jam dapat memakai nomor blok atau timestamp. Gunakan jam dan konfigurasi yang benar-benar diterapkan, bukan menganggap durasi tampilan atau saldo token sebagai acuan mutlak.

Timelock membuat waktu pemberitahuan minimum, tetapi tidak menilai niat dan tidak membuat payload aman. Peran pengusul, eksekutor, pembatal, dan administratornya juga sangat penting. Jika administrator luar dapat melewati jeda, timelock bukan kewenangan akhir. Jika tidak ada yang dapat membatalkan tindakan jahat dalam antrean, deteksi saja tidak menghentikan eksekusi.

Contoh perhitungan

  • Pengambilalihan saat partisipasi rendah. Protokol memiliki total 100 million token dan 40 million beredar. Proposal memerlukan 2 million suara peserta, suara setuju lebih banyak daripada menolak, dan timelock 6-hour. Satu pihak membeli 1.2 million suara dan menerima 1 million suara delegasi. Suara menolak berjumlah 0.8 million, sehingga 2.2 million suara setujunya meloloskan panggilan yang dapat memindahkan 15 million USDC dari kas. Pihak itu menguasai 2.2 / 100 = 2.2% dari total pasokan dan 2.2 / 40 = 5.5% dari pasokan beredar, tetapi 2.2 / 3.0 = 73.3% dari suara yang masuk. Parameter penentu adalah partisipasi, delegasi, kuorum, kewenangan payload, dan jeda, bukan slogan 51%.
  • Batas snapshot. Jika bobot dibaca dari saldo saat ini dan eksekusi langsung, satu transaksi dapat meminjam token, memilih, mengeksekusi, dan mengembalikannya. Membaca bobot historis yang tidak dapat diubah dari waktu sebelum pemungutan suara menutup jalur satu transaksi ini. Modal yang dipinjam atau didelegasikan sebelum snapshot tetap dapat digunakan; karena itu jeda proposal dan jendela akumulasi suara yang dapat diamati tetap menjadi pertahanan.
  • Beanstalk pada 17 April 2022. Beanstalk Farms melaporkan bahwa penyerang memakai flash loan untuk mengeksploitasi mekanisme tata kelola protokol dan mencuri sekitar $77 million aset pengguna non-Beanstalk. Kasus ini menunjukkan bahwa likuiditas flash membiayai serangan, sedangkan kelemahan penentunya adalah tata kelola yang memungkinkan kuasa ekonomi sementara mencapai izin eksekusi bernilai tinggi.

Risiko dan pengendalian

  • Kekuasaan efektif terpusat. Ukur delegasi dan entitas yang terkoordinasi, bukan hanya alamat pemegang. Publikasikan porsi delegasi teratas, distribusi partisipasi, dan ketergantungan pada yayasan, kustodian, pembentuk pasar, dan perwakilan.
  • Aturan proposal dan kuorum lemah. Bandingkan ambang dengan hak suara aktif, pasokan yang dapat dipinjam, dan eksposur kas. Bedakan syarat untuk parameter rutin dan upgrade atau transfer berdampak tinggi.
  • Snapshot tidak aman. Gunakan checkpoint historis yang tidak dapat diubah dan jam bersama antara token dan Governor. Sisakan jeda sebelum snapshot agar akumulasi atau delegasi abnormal dapat terlihat.
  • Pemungutan suara mendadak atau terlambat. Pertimbangkan perpanjangan minimum saat kuorum tercapai dekat tenggat dan pantau perubahan delegasi besar sepanjang siklus proposal.
  • Payload tidak transparan. Publikasikan panggilan terdekode dan simulasi independen. Pisahkan tindakan berisiko yang tidak terkait agar satu item wajar tidak menyamarkan perubahan administrator atau transfer kas.
  • Jeda eksekusi tidak memadai. Sesuaikan timelock dengan dampak dan publikasikan operasi dalam antrean. Jeda harus memberi waktu untuk peninjauan, peringatan, pembatalan atau jeda, serta jalan keluar pengguna yang layak.
  • Peran darurat terlalu kuat. Batasi guardian menurut fungsi, nilai, durasi, dan standar peninjauan. Ungkap anggota, ambang, rotasi, bukti yang diperlukan, serta proses pemberhentian dan pemulihan.
  • Jalur upgrade tidak ditinjau. Lacak administrator proxy, beacon, initializer implementasi, deployment metamorfik, dan kontrak yang dapat di-upgrade setelah menerima kewenangan.
  • Risiko eksekusi lintas jaringan. Autentikasi Governor dan pesan sumber, cegah replay, batasi fungsi tujuan, tambahkan jeda lokal untuk panggilan penting, dan tentukan perilaku saat bridge gagal atau ditangguhkan.
  • Pemantauan tidak memadai. Beri peringatan atas pembuatan proposal, pemusatan suara, perubahan kuorum, antrean dan pembatalan, perubahan status terdekode, upgrade, pemberian peran, allowance, dan arus keluar kas.
  • Respons insiden gagal. Latih proposal jahat, kehilangan penanda tangan, pembobolan front-end, gangguan bridge, dan jeda yang keliru. Catat siapa yang memutuskan, berkomunikasi, menandatangani, memverifikasi, dan memulihkan operasi dengan aman.
  • Nilai berisiko tanpa batas. Batasi transfer kas per tindakan dan akumulatif, cakupan upgrade, pencetakan, perubahan agunan, dan allowance. Suara yang lolos tidak boleh otomatis memberi kewenangan tanpa batas.

Hasil peninjauan harus berupa buku kendali yang dapat direproduksi: setiap tindakan istimewa, pengendalinya, suara atau kunci yang diperlukan, waktu eksekusi paling awal, jalur pembatalan, sumber pemantauan, dan nilai maksimum yang dapat dicapai. Hitung ulang setelah upgrade, distribusi token, perubahan delegasi, migrasi bridge, atau perubahan besar pada likuiditas dan partisipasi.

Kesalahpahaman umum

  • “Penyerang memerlukan 51% dari total pasokan.” Kebanyakan sistem bergantung pada suara terdelegasi atau yang berpartisipasi, kuorum, dan aturan kelolosan. Kendali penentu dapat berbiaya jauh di bawah separuh pasokan.
  • “Snapshot menghapus serangan tata kelola.” Snapshot mencegah bentuk tertentu dari penggunaan ulang suara atau pinjaman menit terakhir, bukan pinjaman lebih awal, pembelian, pemusatan delegasi, suap, atau pembobolan kunci istimewa.
  • “Suara on-chain yang lolos membuktikan legitimasi.” Itu hanya membuktikan syarat kode terpenuhi, bukan bahwa deskripsi cocok dengan payload atau hasilnya aman, adil, dan sesuai komitmen publik.
  • “Timelock lebih panjang selalu lebih aman.” Jeda hanya berguna bila pemantauan, analisis, pembatalan atau jeda, komunikasi, dan keluar dapat dilakukan di dalamnya. Jeda berlebihan juga dapat menghambat pemeliharaan mendesak.
  • “Menambah dewan keamanan menyelesaikan risiko.” Dewan dapat mempercepat respons, tetapi menciptakan jalur kendali lain. Kewenangan, akuntabilitas, pemberhentian, dan kegagalannya harus masuk model ancaman yang sama.

Topik terkait

Sumber

Navigasi

Cari di wiki...