Analisis Kerentanan Compiler Solidity: Risiko Keamanan dan Cara Menghadapinya

robot
Pembuatan abstrak sedang berlangsung

Analisis Kerentanan Compiler Solidity dan Strategi Penanggulangannya

Kompiler adalah salah satu komponen dasar dari sistem komputer modern, yang berfungsi utama untuk mengubah kode sumber bahasa pemrograman tingkat tinggi menjadi kode instruksi yang dapat dieksekusi oleh komputer.

Meskipun sebagian besar pengembang dan profesional keamanan lebih fokus pada keamanan kode aplikasi, keamanan compiler itu sendiri juga tidak boleh diabaikan. Sebagai program komputer, compiler juga dapat memiliki kerentanan keamanan, yang dalam beberapa kasus dapat membawa risiko keamanan yang serius. Misalnya, saat browser mengompilasi dan mengeksekusi kode frontend JavaScript, kerentanan pada mesin pengurai JavaScript dapat menyebabkan pengguna mengalami serangan eksekusi kode jarak jauh saat mengunjungi situs web berbahaya, yang pada akhirnya memungkinkan penyerang mengendalikan browser korban bahkan sistem operasi.

Kompiler Solidity juga tidak terkecuali, ada celah keamanan di beberapa versi kompilernya. Fungsi dari kompilator Solidity adalah untuk mengubah kode kontrak pintar menjadi kode instruksi Ethereum Virtual Machine (EVM), yang akhirnya akan dieksekusi di EVM.

Perlu dicatat bahwa kerentanan compiler Solidity berbeda dari kerentanan EVM itu sendiri. Kerentanan EVM mengacu pada masalah keamanan yang muncul saat mesin virtual mengeksekusi instruksi, yang dapat mempengaruhi seluruh jaringan Ethereum. Sementara kerentanan compiler Solidity adalah masalah yang terjadi saat mengonversi kode Solidity menjadi kode EVM, yang tidak secara langsung mempengaruhi jaringan Ethereum, tetapi dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang.

Analisis Kerentanan Compiler Solidity dan Langkah Penanganan

Salah satu bahaya dari kerentanan compiler Solidity adalah dapat menyebabkan kode EVM yang dihasilkan tidak sesuai dengan harapan pengembang kontrak pintar. Karena kontrak pintar di Ethereum biasanya melibatkan aset cryptocurrency pengguna, setiap bug yang disebabkan oleh compiler dapat mengakibatkan kehilangan aset pengguna, dengan konsekuensi yang serius.

Pengembang dan auditor kontrak seringkali lebih fokus pada implementasi logika kode kontrak dan masalah keamanan di tingkat Solidity, sementara mengabaikan kerentanan compiler. Hanya dengan mengaudit kode sumber kontrak sangat sulit untuk menemukan kerentanan compiler, diperlukan analisis yang menggabungkan versi compiler tertentu dan pola kode tertentu.

Berikut adalah beberapa contoh kerentanan compiler Solidity yang nyata:

  1. SOL-2016-9 HighOrderByteCleanStorage

Kerentanan ini ada di versi awal kompiler Solidity (>=0.1.6 <0.4.4). Dalam beberapa kasus, kompiler tidak membersihkan byte tinggi dengan benar, mengakibatkan bit 1 tinggi ditulis ke storage setelah overflow integer, menimpa nilai variabel yang berdekatan. Perilaku yang tidak konsisten dengan yang diharapkan ini dapat menyebabkan konsekuensi serius dalam hal validasi izin atau akuntansi aset.

  1. SOL-2022-4 Efek Samping Memori InlineAssembly

Vuln ini ada di compiler versi 0.8.13 hingga 0.8.15. Karena masalah strategi optimisasi compiler, dalam beberapa kasus, instruksi penulisan memori dapat dihapus secara keliru, menyebabkan nilai kembalian fungsi tidak sesuai harapan. Bug terkait optimisasi ini sulit ditemukan hanya dengan pemeriksaan kode sederhana.

  1. SOL-2022-6 AbiReencodingHeadOverflowDenganPembersihanArrayStatik

Kerentanan ini mempengaruhi versi compiler dari 0.5.8 hingga 0.8.16. Saat melakukan operasi abi.encode pada array tipe calldata, compiler secara keliru membersihkan beberapa data, yang mengakibatkan modifikasi data yang berdekatan, sehingga menyebabkan ketidaksesuaian data setelah pengkodean dan pengkodean ulang. Masalah ini juga bisa muncul saat melakukan panggilan eksternal dan mengeluarkan peristiwa, karena operasi ini secara implisit melakukan abi.encode.

Analisis dan Tindakan Terhadap Kerentanan Compiler Solidity

Berdasarkan analisis kerentanan compiler Solidity, berikut adalah saran keamanan yang diberikan:

Untuk Pengembang:

  • Gunakan versi yang lebih baru dari kompiler Solidity, masalah keamanan yang diketahui biasanya lebih sedikit
  • Memperbaiki kasus pengujian unit, meningkatkan cakupan kode, bermanfaat untuk menemukan masalah yang disebabkan oleh compiler.
  • Hindari menggunakan assembly inline, operasi decoding dan encoding ABI yang kompleks, serta gunakan fitur baru dan fitur eksperimental dengan hati-hati.

Untuk petugas keamanan:

  • Pertimbangkan risiko keamanan yang mungkin diperkenalkan oleh kompiler saat audit
  • Mendorong peningkatan versi compiler dalam proses SDL, mempertimbangkan untuk memperkenalkan pemeriksaan versi otomatis dalam CI/CD
  • Menilai dampak nyata dari kerentanan compiler berdasarkan situasi spesifik proyek, untuk menghindari kekhawatiran yang berlebihan

Beberapa sumber daya praktis:

  • Peringatan keamanan resmi yang dirilis oleh Solidity
  • Daftar bug yang diperbarui secara berkala di repositori Solidity
  • Daftar bug compiler untuk berbagai versi, dapat digunakan untuk pemeriksaan otomatis
  • Peringatan kerentanan compiler di halaman kode kontrak Etherscan

Singkatnya, meskipun kerentanan pada compiler Solidity tidak umum, namun dapat membawa konsekuensi serius. Pengembang dan petugas keamanan harus tetap waspada dan mengambil langkah-langkah yang sesuai untuk mengurangi risiko.

Analisis Kerentanan Compiler Solidity dan Tindakan Penanggulangan

ETH-0.32%
SOL4.35%
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • 7
  • Bagikan
Komentar
0/400
FrogInTheWellvip
· 9jam yang lalu
Compiler🔨 adalah hal yang mematikan
Lihat AsliBalas0
TokenGuruvip
· 11jam yang lalu
Tinggalkan +1 ya. Kawan-kawan, kali ini harus hati-hati dengan celah ini. Disarankan untuk memeriksa versi kontrak sebelum memasukkan posisi.
Lihat AsliBalas0
AltcoinAnalystvip
· 07-21 10:23
Hati-hati ya, ini adalah masalah lama dari versi 0.8.x
Lihat AsliBalas0
MemecoinResearchervip
· 07-21 10:12
rekt menunggu untuk terjadi fr berdasarkan analisis saya (p<0.01)
Lihat AsliBalas0
just_another_walletvip
· 07-21 10:12
Pengembang muda segera lihat!
Lihat AsliBalas0
FarmHoppervip
· 07-21 10:11
Wah, celah ini terlihat menakutkan!
Lihat AsliBalas0
YieldWhisperervip
· 07-21 10:10
sudah melihat pola eksploitasi compiler yang sama sejak 2021... para pengembang tidak pernah belajar smh
Lihat AsliBalas0
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)