Karena protokol DeFi terus memanas dalam ekosistem Ethereum, CipherTrace melihat semakin banyak eksploitasi dan vektor serangan terungkap. Minggu terakhir ini, pada 28 Desember 2020, kontrak penambangan pelindung Protokol Sampul, Blacksmith, dieksploitasi. Peretas menggunakan bug dalam kontrak penambangan untuk mencetak token COVER dalam jumlah tak terbatas dan menghabiskan lebih dari $ 4.4 juta dari proyek tersebut.
Protokol Sampul dirilis Post-Mortem mereka kemarin menyatakan bahwa, tidak diketahui oleh Devs, bug telah ada sejak penerapan awal kontrak Blacksmith, menyoroti pentingnya audit keamanan menyeluruh dan pentesting dari kontrak pintarApa itu kontrak pintar? Kontrak cerdas adalah pro komputer ... More.
Garis Waktu Pencetakan Tak Terbatas
Garis waktu penyerang awal
- Kolam likuiditas Balancer baru menambahkan ke kontrak Blacksmith.sol.
- Penyerang deposito 1,326,879.99 token BPT ke dalam kontrak Blacksmith.sol.
- Penyerang yang sama mengeksekusi eksploitasi, dengan menarik dana dari kontrak.
- Penyerang bisa melakukannya terus mencetak hadiah dan menarik dana sekitar $ 4.4 juta.
Dalam peristiwa yang menarik, konon "peretas kulit putih" yang ditautkan ke Grap Finance juga mengeksploitasi bug tersebut untuk mencetak token COVER senilai sekitar $ 4 juta. Grap Finance akhirnya mengembalikan dana tersebut ke Cover Protocol.
Timeline Grap Finance Deployer Externally Owned Account (EOA)
- Kolam likuiditas baru disetujui untuk penambangan likuiditas.
- EOA Penyebar Keuangan Grap disimpan 15,255.55 BPT (DAI / Basis) ke dalam pool di Cover melalui kontrak Blacksmith.sol.
- Sekitar empat menit kemudian, dana itu mengalir tersendiri pada Sampul meninggalkan 1 Wei dalam saldo EOA Penyedia Keuangan Grap.
- Pengguna luar lainnya mengundurkan diri sebagian besar saldo mereka dari kontrak Blacksmith.sol sekitar waktu yang sama yang menyebabkan Grap Finance dengan semua likuiditas untuk kumpulan DAI / Basis pada kontrak Blacksmith.sol.
- Penyebar Keuangan Grap disimpan mengembalikan 15,255.55 BPT (DAI / Basis) ke dalam pool.
- Kemudian Grap Finance Deployer klaim hadiah dan, karena eksploitasi, mencetak 40,796,131,214,802,500,000.21 PENUTUP.
- Setelah beberapa pembakaran token, Grap Finance Deployer mengirimkan kembali Ether ke Cover menyatakan "Lain kali, jaga dirimu sendiri."
Cara Mencetak Token Tak Terbatas — Analisis Teknis
Latar Belakang
Eksploitasi ini membawa kita kembali ke dasar-dasar bahasa pemrograman Solidity, yang digunakan untuk mengimplementasikan kontrak pintar dalam Ethereum. Setelah kontrak ini disusun, Ethereum Virtual Machine (EVM) akan dapat memahami instruksi (yaitu opcode) yang digunakan untuk menjalankan berbagai fungsi dan memanipulasi memori dan penyimpanan. EVM memiliki tiga area berbeda untuk menyimpan data: memori, penyimpanan, dan tumpukan. Memahami area ini penting untuk memahami bagaimana bug itu dieksploitasi.
Mirip dengan Random Access Memory (RAM) pada perangkat komputasi, "ingatanKata kunci dalam Solidity mengalokasikan memori untuk variabel tertentu. Dalam contoh ini, variabel tersebut dibatasi ke fungsi tertentu. Memori dihapus setelah fungsi dijalankan, tetapi dapat tetap ada jika konten memori tersebut didorong ke penyimpanan sebelum fungsi tersebut kembali.
The "penyimpananKata kunci dalam Solidity memungkinkan variabel untuk bertindak sebagai penunjuk ke dalam penyimpanan data dalam pemetaan atau struktur data. Data penyimpanan tetap ada antara panggilan fungsi dan transaksi. Di bawah tenda, penyimpanan pada dasarnya adalah penyimpanan nilai kunci yang memetakan kata 256-bit menjadi kata 256-bit.
Perhatikan bahwa EVM bukanlah mesin register tetapi mesin stack — jadi semua komputasi dilakukan pada area data yang dipanggil tumpukan. Tumpukan memiliki kapasitas maksimum 1024 item, tetapi hanya 16 teratas yang mudah diakses yang dapat digunakan untuk menukar elemen paling atas dengan salah satu dari 16 elemen di bawahnya dan banyak lagi.
Serangga
Peretas mengeksploitasi Blacksmith.sol Protokol Sampul — Kontrak Pertambangan Perisai yang memungkinkan para pemegang saham untuk mendapatkan hadiah dalam token proyek atau kumpulan tertentu, seperti token CLAIM dan NOCLAIM, dalam Protokol Sampul.
Untuk lebih memahami bug, pertama, mari kita lihat publik kolam variabel yang merupakan pemetaan (yaitu penyimpanan data):
At baris 118, kita melihat bahwa kontrak menyimpan data kumpulan dalam memori melalui kata kunci "memori".
Terus baris 121, kontrak memperbarui kumpulan di penyimpanan sebagai updatePool (alamat _lpToken) fungsi menggunakan Kolam penyimpanan kolam variabel.
Namun, jika Anda melihat lebih jauh ke dalam deposit (alamat _lpToken, uint256 _jumlah) fungsi, itu menggunakan yang sama kolam variabel dari baris 118 yang di-cache ke dalam memori dalam fungsi untuk penghitungan pool.accRewardsPerToken. Pada titik ini, file kolam variabel disalin dari kolam pemetaan dan disimpan ke memori.
Akibatnya, setiap perubahan yang dilakukan pada kolam variabel dalam deposit (alamat _lpToken, uint256 _jumlah) fungsi tidak akan mengubah kolam pemetaan dalam penyimpanan on-chain kontrak karena fakta bahwa variabel yang menggunakan kata kunci "memori" hanya tercakup dalam fungsi itu sendiri. Dari sana, kontrak memperbarui pool.accRewardsPerToken dalam updatePool (alamat _lpToken) fungsi, yang menggunakan penyimpanan. Jadi sekarang, di dalam updatePool (alamat _lpToken) berfungsi pool.accRewardsPerToken yang diperbarui meningkat pesat karena secara teknis merupakan kumpulan baru dan tidak terkait dengan kolam dalam kenangan.
Mengikuti kerentanan dan penyalahgunaan antara memori dan penyimpanan ini, file penambang.rewardWriteoff dalam deposit (alamat _lpToken, uint256 _jumlah) fungsi salah perhitungan serta penggunaan yang salah pool.accRewardsPerToken, karena kami masih dalam fungsi deposit yang menangani instance cache memori kolam.
Selain fungsi setoran, siapa pun, seperti Grap Finance, dapat memperoleh jumlah token yang dicetak tidak masuk akal saat mereka mengeksekusi claimRewards (alamat _lpToken) fungsi. Fungsi ini, yang digunakan untuk mengambil hadiah mereka, akhirnya menelepon _claimCoverRewards (Pool memory pool, Miner memory miner) yang mereferensikan penambang.rewardWriteoff yang kami soroti di atas. Karena variabel tersebut jauh lebih kecil dari yang sebenarnya pool.accRewardsPerToken, kontrak menghasilkan banyak sekali token.
Pengambilan Kunci
CipherTrace berharap latar belakang dalam bug yang dieksploitasi ini menjelaskan pentingnya audit keamanan menyeluruh dan pentesting kontrak pintar pada mana pun. blockchainSebuah rantai blok — teknologi yang mendasari bitcoin dan ... More satu memilih untuk diterapkan ke. Sementara Grap Finance mengembalikan dana yang mereka terima melalui eksploitasi, peretas asli masih bisa mendapatkan lebih dari $ 4 juta dari protokol DeFi, dan nilai token COVER sejak itu anjlok hampir 99%.
Sumber: https://ciphertrace.com/infinite-minting-exploit-nets-attacker-4-4m/