Analisis serangan Sonne Finance: Bagaimanakah $100 boleh memanfaatkan $6.5 juta? Intipati serangan ini ialah apabila pasaran (soToken) dicipta, penyerang melakukan operasi pemutus gadai janji pertama dan menghasilkan sangat sedikit soToken dengan sejumlah kecil token asas, menyebabkan nilai "totalSupply" soToken menjadi terlalu kecil. Penyerang kemudian mengeksploitasi kelemahan kehilangan ketepatan kontrak Solidity, dan kemudian menghantar token asas terus kepada kontrak soToken (soToken tidak akan ditempa, yang bermaksud "totalSupply" kekal tidak berubah dan "totalCash" menjadi lebih besar) dan bukannya kaedah staking + casting untuk mendepositkan token asas. Operasi sedemikian menjadikan pembolehubah "totalCash" dalam kontrak menjadi lebih besar, tetapi "totalSupply" kekal tidak berubah, menyebabkan ExchangeRate menjadi lebih besar. Pada akhirnya, apabila penyerang menebus token asas, soToken yang perlu dimusnahkan adalah kurang daripada soToken yang dicetak semasa gadai janji Penyerang menggunakan soToken yang diperoleh untuk meminjamkan token pendasar WETH dan USDC kepada soToken lain (seperti soWETH. , soUSDC), dan akhirnya memperoleh Keuntungan setinggi AS$20 juta.
Pada 15 Mei 2024, Sonne Finance telah diserang pada rangkaian Optimisme, menyebabkan kerugian sehingga $20 juta. Selepas serangan, pengguna @tonyke_bot dihidupkan . . Protokol Sonne Finance mengagregatkan aset token pengguna untuk membentuk kumpulan kecairan pinjaman, menyediakan pengguna dengan perniagaan pinjaman seperti bank. Seperti Compound, peserta protokol boleh menggadaikan token mereka ke dalam kumpulan kecairan pinjaman Sonne Finance dan mendapatkan sijil soToken (sama seperti cToken). SoToken ialah sijil aset berfaedah, yang akan menjana sejumlah pendapatan semasa blok itu berjalan, dan juga akan menerima insentif token SONE. Peserta juga boleh meminjam token lain daripada kumpulan aset pinjaman Sonne dengan soToken di tangan mereka Sebagai contoh, peserta boleh menggadaikan sejumlah USDC untuk mendapatkan sijil soUSDC, dan kemudian meminjamkan WETH untuk edaran selanjutnya. Pinjaman gadai janji dalam protokol Sonne Finance boleh menjadi hubungan aset banyak-ke-banyak Semasa proses pinjaman gadai janji, protokol akan mengira secara automatik faktor kesihatan (Faktor Kesihatan) alamat peserta Apabila faktor kesihatan lebih rendah daripada 1. gadai janji alamat Produk akan menyokong pembubaran, dan pelikuidasi juga boleh menerima ganjaran pembubaran tertentu.
Hubungan antara token asas yang didepositkan oleh pengguna dan soToken yang dicetak terutamanya berkaitan dengan pembolehubah yang dipanggil Kadar pertukaran Pembolehubah ini secara kasar boleh digunakan untuk menunjukkan nilai token asas setiap soToken. Formula pengiraan Kadar pertukaran adalah seperti berikut:
Dalam formula di atas, totalCash merujuk kepada bilangan token pendasar yang dipegang oleh soToken, totalBorrows merujuk kepada bilangan token pendasar yang dipinjamkan dalam pasaran tertentu, dan totalReserves merujuk kepada jumlah bilangan rizab (yang mengandungi faedah yang dibayar oleh peminjam), totalSupply merujuk kepada bilangan soToken yang dicetak.
Apabila menebus, pengguna boleh menentukan bilangan token asas yang ingin ditebus, redeemAmount, untuk mengira bilangan soToken yang perlu dimusnahkan, redeemTokens Kaedah pengiraan secara kasarnya adalah "redeemTokens = redeemAmount / exchangeRat". tiada ketepatan di sini.
Intipati serangan ini ialah apabila pasaran (soToken) dicipta, penyerang melakukan operasi pemutus gadai janji pertama dan menghasilkan sangat sedikit soToken dengan sejumlah kecil token asas, menyebabkan nilai "totalSupply" soToken menjadi terlalu kecil . Penyerang kemudian mengeksploitasi kelemahan kehilangan ketepatan kontrak Solidity, dan kemudian menghantar token asas terus kepada kontrak soToken (soToken tidak akan ditempa, yang bermaksud "totalSupply" kekal tidak berubah dan "totalCash" menjadi lebih besar) dan bukannya kaedah staking + casting untuk mendepositkan token asas. Operasi sedemikian menjadikan pembolehubah "totalCash" dalam kontrak menjadi lebih besar, tetapi "totalSupply" kekal tidak berubah, menyebabkan ExchangeRate menjadi lebih besar. Pada akhirnya, apabila penyerang menebus token asas, soToken yang perlu dimusnahkan adalah kurang daripada soToken yang dicetak semasa gadai janji Penyerang menggunakan soToken yang diperoleh untuk meminjamkan token pendasar WETH dan USDC kepada soToken lain (seperti soWETH. , soUSDC), dan akhirnya memperoleh Keuntungan setinggi AS$20 juta.
Transaksi penyediaan serangan:
https://optimistic.etherscan.io/tx/0x45c0ccfd3ca1b4a937feebcb0f5a166c409c9e403030d409c9e403030d
Urus niaga keuntungan serang: https://optimistic.etherscan.io/tx/ 0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db50e42b7f attack EOA related address:0x5d0d99e9886581ff8fcb01f35804317f5ed80 bbb0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43Attacker (contract) related address: 0xa78aefd483ce3919c0ad55c8a2e5c97cbac1caf80x02fa 2625825917e9b1f8346a465de1bbc150c5b9underlying token (VELO Token V2): 0x9560e827af36c94d2ac33a39bce1fe78631088dbVulnerability Contract (soVELO, Serupa dengan Compound's cToken): 0xe3b81318b1b6776f0877c3770afddff97b9f5fe5X pada transaksi penyelamatan pengguna @tonyke_bot: https://optimistic.etherf9escan. 86 c200c0470c6456603c967f82ab559a5931fd181c2Analisis proses seranganRingkasan awalProjek Sonne Finance Fang baru-baru ini meluluskan cadangan untuk menambah pasaran VELO kepada Sonne Finance (https://twitter.com/SonneFinance/status/1786871066075206044) dan mengatur lima transaksi melalui dompet berbilang tandatangan untuk dilaksanakan dua hari kemudian (https:/ /optimistic .etherscan.io/tx/0x18ebeb958b50579ce76528ed812025949dfcff8c2673eb0c8bc78b12ba6377b7), lima urus niaga ini digunakan untuk mencipta pasaran VELO (kontrak soVELO) dan menetapkan kadar pasaran beberapa konfigurasi utama seperti penetapan faktor harga, penetapan faktor harga, penetapan harga tidak. , dan lain-lain. Selepas pasaran VELO dicipta, pengguna boleh mendepositkan token VELO untuk mencetak token soVELO, yang seterusnya boleh digunakan untuk meminjam soToken lain. Persediaan seranganPeringkat penyediaan serangan terutamanya melibatkan penyerang mewujudkan pasaran VELO (kontrak soVELO) berdasarkan maklumat dalam cadangan projek Sonne Finance selepas tempoh kunci masuk dua hari cadangan, menyediakan konfigurasi utama, dan mempertaruhkan token VELO Mata wang memasuki kontrak soVELO untuk mencetak token soVELO Pada masa yang sama, ia juga menghantar token VELO yang dipegangnya terus ke kontrak soVELO untuk meningkatkan Kadar pertukaran dan bersedia untuk serangan seterusnya untuk mendapat keuntungan. Langkah khusus adalah seperti berikut:Fasa keuntungan serangan terutamanya melibatkan penyerang yang melaksanakan transaksi kelima cadangan dan meminjamkan token VELO terus kepada kontrak soVELO melalui pinjaman kilat untuk meningkatkan lagi Kadar pertukaran. Kemudian penyerang menggunakan token soVELO dengan nilai 2 di tangannya untuk meminjam token asas seperti WETH dan USDC daripada kontrak soToken lain (seperti soWETH, soUSDC, dll.), dan bahagian ini menjadi keuntungan penyerang. Kemudian penyerang pergi untuk menebus token asasnya dalam kontrak soVELO Disebabkan oleh peningkatan dalam Kadar pertukaran dan kehilangan ketepatan dalam mengira token soVELO yang perlu dimusnahkan untuk penebusan, penyerang akhirnya hanya menggunakan token soVELO dengan nilai sebanyak. 1. Hampir semua token VELO yang didepositkan sebelum ini telah ditebus, yang boleh difahami sebagai penyerang menggunakan token soVELO tambahan dengan nilai 1 untuk memperoleh token asas seperti WETH dan USDC dengan meminjam daripada soToken lain. Penyerang menggunakan teknik yang sama untuk mengulangi serangan berkali-kali dan akhirnya mendapat keuntungan yang besar.
Langkah khusus adalah seperti berikut:
Penyerang melaksanakan transaksi kelima dalam cadangan dan menetapkan faktor pinjaman yang dinyatakan dalam cadangan.
Penyerang kilat meminjamkan token VELO dengan nilai "35,469,150,965,253,049,864,450,449" daripada kumpulan VolatileV2 AMM - USDC/VELO, yang mencetuskan fungsi cangkuk penyerang. Dalam fungsi cangkuk, penyerang terus melakukan operasi serangan.
Penyerang menghantar token VELO yang dipegangnya kepada kontrak soVELO untuk meningkatkan lagi Kadar pertukaran. Pada masa ini, terdapat sejumlah token VELO dengan nilai "35,471,703,929,512,754,530,287,976" dalam kontrak soVELO (jumlah token VELO yang dipindahkan oleh penyerang sebanyak tiga kali).
Penyerang mencipta kontrak baharu 0xa16388a6210545b27f669d5189648c1722300b8b Dalam pembina, dia memindahkan 2 token soVELO yang dipegangnya kepada kontrak 10xa163 yang baru dirujuk sebagai 10inxa163 yang baru dibuat.
Penyerang 0xa163 menggunakan token soVELO yang dipegangnya untuk meminjam WETH dengan nilai "265,842,857,910,985,546,929" daripada soWETH.
Penyerang 0xa163 memanggil fungsi "redeemUnderlying" soVELO, menyatakan nilai token VELO yang ditebus sebagai "35,471,603,929,512,754,530,287,976 penyerang yang sebelumnya telah dipindahkan ke dalam hampir semuaOG kontrak soVELO). bilangan token soVELO yang perlu dimusnahkan untuk penebusan perlu dikira mengikut formula "redeemTokens = redeemAmountIn / ExchangeRate".
Ia boleh dilihat daripada fungsi "exchangeRateStoredInternal" memandangkan _totalSupply ialah 2 dan bukan 0 pada masa ini, nilai ExchangeRate perlu dikira melalui formula "exchangeRate = (totalCash + totalBorrows - totalReserves) / totalSupply" , Kadar pertukaran semasa ialah "17,735,851,964,756,377,265,143,988,000,000,000,000,000,000", nilai ini jauh lebih besar daripada kadar pertukaran awal yang ditetapkan "200,000,000,000,000".
Nilai "redeemTokens" yang dikira berdasarkan Kadar pertukaran baharu ialah "1.99". Ini bermakna penyerang 0xa163 menggunakan token soVELO dengan nilai 1 untuk menebus hampir semua token VELO yang disimpan sebelum ini. Pada masa yang sama, penyerang 0xa163 juga memperoleh WETH dengan nilai "265,842,857,910,985,546,929" yang dipinjam daripada soWETH.
sovelo.redeemunderlying:
sovelo.exchangeratestoredinternal:
The penyerang 0xa163 memindahkan semua token Velo yang dipinjam dan ditebus ke penyerang peringkat atas, dan kemudian memusnahkan diri.
Penyerang memanggil fungsi "liquidateBorrow" soWETH untuk mencairkan beberapa aset yang dipinjam daripada kontrak 0xa163 yang baru dibuat untuk mendapatkan kembali token soVELO yang dikunci dengan nilai 1. Pada masa ini penyerang hanya memegang token soVELO dengan nilai 1.
Penyerang memanggil fungsi "pudina" soVELO dan gadai janji serta memint token soVELO sekali lagi Tujuannya adalah untuk mengumpul token soVELO yang mencukupi dengan nilai 2, dan kemudian melakukan langkah 3-8 di atas sekali lagi untuk mendapat keuntungan daripada token yang tidak bermasalah. .
Penyerang melakukan langkah 9 beberapa kali, membayar balik pinjaman kilat, dan pergi dengan keuntungan.
Selepas serangan, pengguna @tonyke_bot Sebab mengapa operasi ini boleh menghalang penyerang daripada serangan selanjutnya adalah kerana transaksi ini mengubah saiz totalSupply dalam soVELO dan bilangan token VELO totalCash yang dipegang, dan kesan pertumbuhan totalSupply pada pengiraan Kadar pertukaran adalah lebih besar daripada kesan. daripada pertumbuhan totalCash Oleh itu, Kadar pertukaran menjadi lebih kecil, menyebabkan penyerang tidak lagi boleh menggunakan kehilangan ketepatan untuk mendapatkan soVELO apabila menyerang, menjadikan serangan tidak lagi boleh dilakukan.
Penyerang memindahkan dana sejurus selepas memperoleh hasil haram Kebanyakan dana telah dipindahkan ke 4 alamat berikut, beberapa untuk menukar alamat untuk meneruskan serangan, dan beberapa untuk mencuci wang:
0x4ab93fc50b82d4dc457db858888dfdae28d2 9b98d
kepada 0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb.
0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb0xbd18100a168321701955e348f03d0df4f dipindahkan 33 WETH ke alamat dan pakai Try peel rantaian untuk membasuh wang. 21 bde5e53f537ff208970152b75a003093c2b4->0x9f09ec563222fe52712dc413d0b7b66cb5c7c795. . 1e2aCf9C68, tiada tindakan lanjut buat masa ini.
Kaedah pengubahan wang haram penyerang kali ini agak profesional, dan kaedahnya menunjukkan trend kepelbagaian. Oleh itu, bagi kami peserta Web3, kami mesti terus meningkatkan keupayaan anti-pengubahan wang haram kami dari segi keselamatan, dan meningkatkan keselamatan projek Defi melalui KYT, AML dan produk keselamatan transaksi blockchain lain yang berkaitan.Atas ialah kandungan terperinci Bagaimanakah $100 boleh memanfaatkan $6.5 juta? Analisis serangan Sonne Finance. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!