Artikel ini merupakan kontribusi dari komunitas. Penulisnya adalah Minzhi He, auditor di CertiK.
Pandangan yang diungkapkan dalam artikel ini adalah milik kontributor/penulis dan tidak mencerminkan pandangan Binance Academy.
Secara singkat
Jembatan Blockchain adalah landasan untuk mencapai interoperabilitas di sektor blockchain. Oleh karena itu, pengamanan jembatan sangatlah penting. Beberapa kerentanan keamanan jembatan yang umum mencakup autentikasi on-chain dan off-chain yang lemah, penanganan token asli yang tidak tepat, dan kesalahan konfigurasi. Jembatan harus diuji untuk memastikannya dapat menahan semua vektor serangan dan memastikan logika verifikasi yang tepat.
Memperkenalkan
Jembatan blockchain adalah protokol yang menghubungkan dua blockchain untuk memungkinkan interaksi di antara keduanya. Jika Anda memiliki bitcoin tetapi ingin berpartisipasi dalam aktivitas DeFi di jaringan Ethereum, jembatan blockchain akan memungkinkan Anda melakukannya tanpa menjual bitcoin Anda.
Jembatan Blockchain merupakan fondasi untuk mencapai interoperabilitas dalam ruang blockchain. Mereka bekerja menggunakan validasi on-chain dan off-chain yang berbeda, sehingga memiliki kerentanan keamanan yang berbeda.
Mengapa keamanan jembatan penting?
Jembatan biasanya menyimpan token yang ingin ditransfer pengguna dari satu rantai ke rantai lainnya. Sering digunakan sebagai kontrak pintar, jembatan menahan sejumlah besar token saat transfer lintas rantai terakumulasi, menjadikannya target yang menguntungkan bagi para peretas.
Selain itu, jembatan blockchain memiliki permukaan serangan yang besar karena melibatkan banyak komponen. Mengingat sifatnya, pelaku kejahatan sangat termotivasi untuk menargetkan aplikasi lintas rantai guna menguras sejumlah besar uang.
Serangan jembatan akan mengakibatkan kerugian lebih dari $1,3 miliar pada tahun 2022, yang mencakup 36% dari total kerugian tahun ini, menurut perkiraan CertiK.
Kerentanan Keamanan Jembatan Umum
Untuk meningkatkan keamanan jembatan, penting untuk memahami kerentanan keamanan jembatan yang umum dan menguji jembatan sebelum meluncurkannya. Kerentanan ini dapat diklasifikasikan menjadi empat jenis berikut.
Otentikasi on-chain yang lemah
Untuk jembatan sederhana, terutama yang dirancang untuk DApps tertentu, validasi on-chain seringkali minimal. Jembatan ini mengandalkan backend terpusat untuk melakukan operasi dasar seperti pencetakan, pembakaran, dan transfer token sementara semua verifikasi dilakukan di luar jaringan.
Sebaliknya, jenis jembatan lainnya menggunakan kontrak pintar untuk memvalidasi pesan dan melakukan verifikasi on-chain. Dalam kasus ini, saat pengguna menyetorkan dana ke dalam rantai, kontrak pintar membuat pesan yang ditandatangani dan mengembalikan tanda tangan dalam transaksi. Tanda tangan ini berfungsi sebagai bukti penyetoran, yang digunakan untuk memverifikasi permintaan penarikan pengguna di rantai lain. Proses ini akan dapat mencegah berbagai serangan keamanan, termasuk serangan ulang dan catatan setoran palsu.
Namun, jika ada kerentanan dalam proses validasi on-chain, penyerang dapat menyebabkan kerusakan serius. Misalnya, jika sebuah jembatan menggunakan pohon Merkle untuk mengautentikasi catatan transaksi, penyerang dapat membuat bukti palsu. Artinya, mereka dapat melewati validasi bukti dan mencetak token baru ke akun mereka jika proses validasinya rentan.
Beberapa jembatan menerapkan konsep “token yang dibungkus”. Misalnya, saat pengguna mentransfer DAI dari Ethereum ke BNB Chain, DAI mereka diambil dari kontrak Ethereum dan jumlah DAI yang setara akan diterbitkan di BNB Chain.
Namun, jika transaksi ini tidak divalidasi dengan benar, penyerang dapat menyebarkan kontrak berbahaya untuk mengarahkan token yang dibungkus dari jembatan ke alamat yang salah dengan memanipulasi fungsionalitas.
Penyerang juga memerlukan korban untuk menyetujui kontrak jembatan untuk mentransfer token dengan menggunakan fungsi “transferFrom” untuk menarik aset dari kontrak jembatan.
Sayangnya, hal ini diperparah karena banyak jembatan memerlukan persetujuan token tak terbatas dari pengguna DApp. Ini adalah metode populer yang mengurangi biaya gas tetapi menciptakan risiko tambahan dengan memungkinkan kontrak pintar mengakses token dalam jumlah tak terbatas dari dompet pengguna. Penyerang dapat memanfaatkan kurangnya autentikasi dan persetujuan berlebihan untuk mentransfer token dari pengguna lain kepada mereka.
Validasi off-chain yang lemah
Dalam beberapa sistem jembatan, server backend luar-rantai memainkan peran penting dalam memverifikasi keabsahan pesan yang dikirim dari blockchain. Dalam kasus ini, kami fokus pada verifikasi transaksi deposit.
Jembatan blockchain dengan validasi off-chain bekerja seperti ini:
Pengguna berinteraksi dengan DApp untuk menyetorkan token ke dalam kontrak pintar di rantai sumber.
DApp ini kemudian akan mengirimkan string hash transaksi deposit ke server backend melalui API.
Rantai hash transaksi tunduk pada beberapa autentikasi server. Jika dianggap sah, penanda tangan menandatangani pesan dan mengirimkan tanda tangan kembali ke UI melalui API.
Setelah tanda tangan diterima, DApp akan memverifikasi tanda tangan dan memungkinkan pengguna untuk menarik token mereka dari rantai target.
Server backend harus memastikan bahwa transaksi penyetoran yang diprosesnya benar-benar terjadi dan tidak dirusak. Server backend ini menentukan apakah pengguna dapat menarik token pada rantai target dan oleh karena itu merupakan target bernilai tinggi bagi penyerang.
Server backend perlu memvalidasi struktur peristiwa transaksi yang dipancarkan, serta alamat kontrak yang memancarkan peristiwa tersebut. Jika yang kedua diabaikan, penyerang dapat menyebarkan kontrak jahat untuk memalsukan peristiwa penyetoran dengan struktur yang sama seperti peristiwa penyetoran yang sah.
Jika server backend tidak memverifikasi alamat mana yang memancarkan peristiwa tersebut, server menganggap ini sebagai transaksi valid dan menandatangani pesan. Penyerang kemudian dapat mengirim hash transaksi ke backend, melewati verifikasi dan memungkinkan mereka untuk menarik token dari rantai target.
Penanganan token asli yang tidak tepat
Bridge memiliki pendekatan yang berbeda dalam menangani token asli dan token utilitas. Misalnya, pada jaringan Ethereum, token asli adalah ETH dan sebagian besar token utilitas mematuhi standar ERC-20.
Saat pengguna bermaksud mentransfer ETH mereka ke rantai lain, mereka harus terlebih dahulu menyetorkannya ke dalam kontrak jembatan. Untuk mencapai hal ini, pengguna hanya perlu melampirkan ETH ke transaksi dan jumlah ETH dapat diperoleh dengan membaca kolom “msg.value” dari transaksi tersebut.
Mengirim token ERC-20 sangat berbeda dengan mengirim ETH. Untuk mengirim token ERC-20, pengguna harus terlebih dahulu mengotorisasi kontrak jembatan untuk membelanjakan token mereka. Setelah mereka menyetujuinya dan mengirim token ke kontrak jembatan, kontrak ini akan membakar token pengguna menggunakan fungsi "burnFrom()" atau mentransfer token pengguna ke kontrak menggunakan fungsi "transferFrom()".
Salah satu pendekatan untuk membedakannya adalah dengan menggunakan pernyataan if-else dalam fungsi yang sama. Pendekatan lain adalah membuat dua fungsi terpisah untuk menangani setiap situasi. Mencoba menyetorkan ETH menggunakan fungsi setoran ERC-20 dapat mengakibatkan hilangnya dana ini.
Saat memproses permintaan penyetoran ERC-20, pengguna biasanya memberikan alamat token sebagai masukan ke fungsi penyetoran. Hal ini menimbulkan risiko yang signifikan karena panggilan eksternal yang tidak dapat diandalkan dapat terjadi selama transaksi. Menerapkan daftar putih yang hanya menyertakan token yang didukung oleh jembatan adalah cara umum untuk mengurangi risiko. Hanya alamat yang masuk daftar putih yang boleh diteruskan sebagai argumen. Ini mencegah panggilan eksternal karena tim proyek telah memfilter alamat token.
Namun, masalah juga dapat muncul saat jembatan menangani transfer lintas rantai token asli, karena token asli tidak memiliki alamat. Alamat 0 (0x000...0) mewakili token asli. Hal ini dapat menjadi masalah karena meneruskan alamat 0 ke suatu fungsi dapat melewati verifikasi daftar putih bahkan jika diterapkan secara tidak benar.
Ketika kontrak jembatan memanggil "transferFrom" untuk mentransfer aset pengguna ke kontrak, panggilan eksternal ke alamat nol mengembalikan false karena tidak ada fungsi "transferFrom" yang diimplementasikan di alamat nol. Namun, transaksi masih dapat terjadi jika kontrak tidak menangani nilai pengembalian dengan benar. Hal ini memberi penyerang kesempatan untuk melakukan transaksi tanpa mentransfer token apa pun ke kontrak.
Konfigurasi salah
Pada sebagian besar jembatan blockchain, peran istimewa bertanggung jawab untuk memasukkan token dan alamat ke dalam daftar putih atau daftar hitam, menetapkan atau mengubah penanda tangan, dan konfigurasi penting lainnya. Memastikan semua konfigurasi sudah benar adalah penting, karena kesalahan yang tampaknya kecil sekalipun dapat menyebabkan kerugian yang signifikan.
Faktanya, ada insiden di mana penyerang berhasil melewati proses verifikasi catatan transfer karena kesalahan konfigurasi. Tim proyek telah melakukan peningkatan protokol beberapa hari sebelum peretasan, yang melibatkan perubahan variabel. Variabel yang digunakan untuk mewakili nilai default dari pesan tepercaya. Perubahan ini mengakibatkan semua pesan secara otomatis dianggap terbukti, sehingga memungkinkan penyerang untuk mengirim pesan sembarangan dan melewati proses verifikasi.
Cara meningkatkan keamanan jembatan
Empat kerentanan jembatan umum yang dijelaskan di atas menunjukkan tantangan dalam memastikan keamanan dalam ekosistem blockchain yang saling terhubung. Ada pertimbangan penting untuk menangani masing-masing kerentanan ini, dan tidak ada satu pun pedoman yang berlaku untuk semua kerentanan.
Misalnya, memberikan pedoman umum untuk memastikan verifikasi bebas kesalahan merupakan tantangan karena setiap jembatan memiliki persyaratan verifikasinya sendiri. Pendekatan yang paling efektif untuk mencegah pelanggaran verifikasi adalah menguji jembatan secara menyeluruh terhadap semua kemungkinan vektor serangan dan memastikan logika verifikasi yang baik.
Singkatnya, penting untuk melakukan pengujian ketat terhadap serangan potensial dan memberikan perhatian khusus pada kerentanan keamanan yang paling umum untuk jembatan.
Ringkasan
Karena nilainya yang tinggi, jembatan lintas rantai telah lama menjadi target penyerang. Pengembang dapat meningkatkan keamanan jembatan mereka dengan melakukan pengujian menyeluruh sebelum penyebaran dan menggunakan pihak ketiga untuk berpartisipasi dalam audit, mengurangi risiko serangan dahsyat yang telah mengganggu jembatan selama beberapa tahun terakhir. Jembatan merupakan komponen krusial dalam dunia multi-rantai, tetapi keamanan harus menjadi perhatian utama dalam merancang dan membangun infrastruktur Web3 yang efektif.
Baca selengkapnya:
Apa itu Blockchain Bridge?
Apa itu Interoperabilitas Lintas Rantai?
Tiga Jembatan Cryptocurrency Populer dan Cara Kerjanya
Apa itu token yang dibungkus?
Penafian dan Peringatan Risiko: Konten ini disajikan kepada Anda "apa adanya" untuk tujuan informasi umum dan pendidikan saja, tanpa pernyataan atau jaminan apa pun. Saran ini tidak boleh ditafsirkan sebagai nasihat keuangan, hukum atau profesional lainnya, juga tidak dimaksudkan sebagai rekomendasi untuk membeli produk atau layanan tertentu. Anda harus mencari nasihat sendiri dari penasihat profesional yang tepat. Jika suatu artikel disumbangkan oleh kontributor pihak ketiga, harap diperhatikan bahwa pandangan yang diungkapkan adalah pandangan kontributor pihak ketiga dan belum tentu mencerminkan pandangan Binance Academy. Silakan baca penafian lengkap kami di sini untuk keterangan lebih rinci. Harga aset digital dapat berfluktuasi. Nilai investasi Anda dapat turun atau naik dan Anda mungkin tidak mendapatkan kembali jumlah yang Anda investasikan. Anda bertanggung jawab penuh atas keputusan investasi Anda dan Binance Academy tidak bertanggung jawab atas kerugian apa pun yang mungkin Anda alami. Materi ini tidak boleh ditafsirkan sebagai nasihat keuangan, hukum, atau nasihat profesional lainnya. Untuk informasi lebih lanjut, lihat Ketentuan Penggunaan dan Peringatan Risiko kami.
