(Bagian 3) Lebih dari $300 juta hilang akibat kerentanan ini!

Bagian 1

Bagian 2
Berikut adalah contoh kontrak pintar langsung dan pelajari cara kerjanya, bahkan jika Anda bukan seorang pengembang

Serangan masuk kembali merupakan kerentanan umum dalam kontrak pintar EVM, yang memungkinkan kontrak eksternal membajak alur kontrol dan masuk kembali, sehingga berpotensi menguras dana korban.
Serangan ini masih menjadi masalah signifikan dalam pengembangan kontrak pintar dan ditanggapi dengan sangat serius oleh pengembang.

Image

Serangan kontrak pintar re-entrancy yang populer meliputi:
ā€¢ Peretasan DAO: Mereka kehilangan ETH senilai sekitar $50 juta.
ā€¢ Cream Finance: Mereka kehilangan berbagai aset senilai lebih dari $30 juta.
ā€¢ Siren Protocol: Mereka kehilangan aset berbeda senilai lebih dari $30 juta.


Mari terapkan contoh ini menggunakan kontrak pintar Solidity.
Jangan khawatir, kita akan melakukannya selangkah demi selangkah.
Saya akan menggunakan @EthereumRemix (X), antarmuka pengembangan tempat Anda dapat menulis, mengompilasi, menguji, dan menjalankan kode.
Kami akan menulis beberapa kode dan mensimulasikan serangan.

ā€¢ Pertama, mari buat file bernama "Bank.sol", yang akan berisi semua kode.
ā€¢ Kemudian, buat pemetaan untuk menyimpan saldo setiap alamat.
Di sini, setiap alamat akan sesuai dengan akun seseorang.

Berikutnya, kita akan membuat fungsi penyetoran sederhana yang memungkinkan klien untuk menyetorkan uang ke bank.
Kontrak pintar di sini mewakili bank.
Setiap kali penyetoran dilakukan, pemetaan diperbarui dengan menambahkan penyetoran baru ke alamat masing-masing.

Kita juga memerlukan fungsi penarikan yang memungkinkan deposan untuk menarik semua atau sebagian saldo mereka.
Untuk menyederhanakan, setiap kali klien memanggil fungsi ini, mereka akan menarik seluruh saldo mereka, dan kami menetapkan saldo mereka ke 0 dalam pemetaan.

Terakhir, kami menambahkan fungsi yang tidak mengubah pemetaan tetapi hanya memungkinkan klien memeriksa saldo mereka.
Ini disebut fungsi tampilan, yang tidak mengonsumsi gas apa pun karena tidak mengubah data on-chain, hanya menampilkan informasi yang diminta.

Kontraknya tampaknya cukup sederhana dan, sekilas, tampak tidak dapat dibatalkan.
Mari kita coba serangan reentrancy terhadapnya. Kita akan membangun kontrak pintar penyerang dengan fungsi penerimaan yang akan terus menarik selama saldo kontrak di atas 1 ETH.

Untuk menyelesaikannya, kami akan menambahkan fungsi tampilan, getBalance, yang akan mengembalikan saldo Ether dari kontrak Penyerang.
Sekarang, mari kita terapkan semuanya dan uji apakah serangan re-entrancy kita akan berhasil.

Pertama, kita perlu menerapkan kontrak Bank:
ā€¢ Mulailah dengan mengkompilasi kedua kode tersebut.
ā€¢ Terapkan kontrak Bank.
ā€¢ Salin alamat kontrak Bank yang disebarkan dan gunakan sebagai input untuk menyebarkan kontrak Penyerang.
ā€¢ Lalu, setorkan 10 ETH ke dalam kontrak Bank.
ā€¢ Setorkan 1 ETH ke dalam kontrak Penyerang.
ā€¢ Terakhir, luncurkan serangan menggunakan fungsi serangan.

Seperti yang bisa kita lihat, serangan itu berhasil.
Kami telah menyetorkan 10 ETH dengan satu alamat dan 1 ETH dengan alamat penyerang.
Pada akhirnya, alamat penyerang tersebut menampung 11 ETH.

Bagaimana ini bisa dicegah?
Hal ini bisa dihindari dengan menetapkan saldo klien ke 0 sebelum mengirimkan dana kepada mereka ketika mereka memanggil fungsi penarikan.
Yang diperlukan hanyalah memindahkan satu baris kode.

Saya harap Anda menganggap artikel ini bermanfaat.
Ikuti aku@Bluechip untuk informasi lebih lanjut.
Sukai/Repost kutipan tersebut jika Anda bisa.

#TON #DOGSONBINANCE #CryptoMarketMoves #TelegramCEO #USNonFarmPayrollReport