![](/img/bg-single.png)
Kontrak Cerdas Audit Mandiri dengan ChatGPT
![](https://lotusmarket.io/storage/files/self-auditing-smart-contracts-with-chat-gpt/cover.png)
Ketika mengaudit kontrak cerdas, berbagai macam masalah perlu dicakup untuk memastikan bahwa kodenya aman. Pertanyaan-pertanyaan ini mencakup berbagai aspek termasuk kontrol akses, manajemen aset, manajemen data, asumsi, ketergantungan, dan daftar periksa keamanan. Di bawah ini kami menyediakan daftar periksa terperinci dan instruksi untuk pertanyaan ChatGPT untuk memandu Anda melalui proses audit smart contract.
Jika Anda ingin menyelidiki sendiri smart contract untuk kerentanan dan teknik penipuan tersembunyi, langkah pertama yang harus Anda lakukan adalah membuat pertanyaan ChatGPT dengan benar.
Sebuah pertanyaan yang berguna untuk ChatGPT adalah perintah berikut ini:
Sediakan sebuah daftar lengkap semua masalah dan kerentanan pada smart contract berikut ini. Jelaskan masalah dan kemungkinan kerentanan secara detail. Berikan satu skenario eksploitasi untuk setiap kerentanan. Keluarkan sebagai tabel yang valid dalam format penurunan harga dengan daftar objek, masing-masing dengan kolom 'deskripsi', 'tindakan', 'tingkat keparahan', 'aktor', 'skenario', 'jenis', dan 'baris'. 'tipe' di mana dapat berupa 'kegunaan', 'kerentanan', 'pengoptimalan', atau 'saran'. 'actors' adalah daftar aktor yang terlibat. 'severity' dapat berupa 'rendah', 'sedang', atau 'tinggi'. 'row' adalah nomor baris dari masalah. Pastikan semua kolom dalam tabel telah terisi.
Kemudian gunakan pertanyaan-pertanyaan berikut untuk mengeksplorasi kontrak pintar secara lebih mendalam.
Skenario Pemanfaatan:
- Siapa saja aktor yang ada di dalam sistem?
- Apa saja tindakan yang dimiliki oleh sistem?
- Apa saja batasan dari sistem?
- Apa saja cara potensial untuk merusak sistem?
- Apa saja pertahanan yang digunakan untuk menghadapi serangan?
- Jelaskan, berdasarkan batasan yang ada, perubahan status dari setiap fungsi.
- Sediakan informasi tentang templat Solidity dan DeFi yang digunakan.
- Tuliskan aksioma positif dan negatif berdasarkan informasi tentang sistem.
- Daftar cara-cara untuk mengoptimalkan dan memodifikasi kode agar lebih andal (dengan cuplikan kode).
- Daftar metode penipuan tersembunyi yang digunakan dalam kode (dengan cuplikan kode).
Tip: Representasi visual data sering kali memberikan pemahaman yang lebih jelas tentang operasi sistem. Ketika bekerja dengan ChatGPT, Anda disarankan untuk meminta visualisasi data keluaran, seperti modifikasi status dalam bentuk diagram karakter ASCII. Meskipun tidak semua visualisasi masuk akal, beberapa dapat memberikan wawasan yang sangat berharga ke dalam pengoperasian kontrak pintar.
Faktanya, meskipun ChatGPT tidak dapat menggantikan auditor manusia, ChatGPT secara signifikan melengkapi proses pengauditan dengan memberikan pemahaman yang lebih jelas tentang transisi status protokol, batasan, invarian, dan kompatibilitas. Alat ini sangat efektif untuk memahami transisi status protokol dan kendala.
Tip: Sebelum memulai audit, memberikan dokumentasi kepada chatbot tentang protokol yang sedang diaudit dapat sangat meningkatkan keakuratan dan relevansi tanggapan. Cukup sebutkan, "Ini adalah dokumentasi yang memberikan konteks terbaik untuk 'nama_protokol' yang sedang saya audit," dan masukkan dokumen tersebut.
Dapat dikatakan bahwa ChatGPT adalah asisten yang kuat untuk auditor, memberikan pendekatan terstruktur dan mendalam untuk mengaudit kontrak pintar. Namun, perlu diingat bahwa ChatGTP (dan layanan serupa) hanyalah interpretasi kompleks dari analisis mesin yang bekerja dengan probabilitas, sehingga sering kali menghasilkan kesalahan dan ketidakakuratan. Oleh karena itu, hasil ChatGPT tidak dapat sepenuhnya diandalkan - ini hanya alat yang baik di tangan yang tepat dan "titik awal" dalam penelitian kontrak pintar.
Oleh karena itu, untuk melindungi diri Anda dari risiko yang mungkin terjadi, smart contract harus diperiksa dengan lebih cermat untuk mengetahui kemungkinan adanya kerentanan dan skema penipuan.
Bagaimana cara melakukan audit smart contract yang mendalam? 100 permintaan teratas ke ChatGPT
Di atas kami telah mempertimbangkan permintaan umum (prompt) ke ChatGPT, yang darinya Anda dapat mulai menganalisis smart contract. Namun, tentu saja, analisis terperinci tidak terbatas pada permintaan pengantar.
Penipu terus meningkatkan taktik mereka, jadi Anda perlu mendapat informasi dan berhati-hati dalam banyak aspek - ini adalah strategi penting untuk melindungi investasi token Anda.
Mari kita lihat daftar 100 permintaan teratas yang akan memberi Anda pendekatan profesional untuk audit kontrak pintar:
- Apakah kode berhasil dikompilasi?
- Apakah versi Solidity yang digunakan dalam kode tersebut? Apakah versi stabil saat ini?
- Apakah ada komentar yang jelas yang menjelaskan tujuan fungsi dan variabel yang ada?
- Apakah kontrak menggunakan skema "Dapat Dimiliki"? Jika ya, untuk fungsi yang mana?
- Apakah variabel status dialokasikan dengan benar menggunakan pengubah visibilitas?
- Apakah peristiwa digunakan untuk pencatatan yang tepat?
- Apakah pesan kesalahan yang mudah digunakan disediakan?
- Apakah nilai kembalian dari pemanggilan tingkat rendah dicentang?
- Apakah ada skenario di mana pemilik dapat memberi otorisasi kepada diri mereka sendiri yang dapat menyebabkan penarikan karpet?
- Siapa yang memiliki kontrol atas akun istimewa dan apa mekanisme kontrolnya?
- Mekanisme tata kelola apa yang ada di dalam kontrak, dan apakah tata kelola tersebut sepenuhnya terbuka atau terbatas?
- Apakah ada kontrak lain yang digunakan di dalam sistem dan peran apa yang mereka penuhi (mis. kontrak proksi)
- Apakah terdapat mekanisme penguncian waktu dan apakah dapat dilewati?
- Apakah tersedia dokumentasi yang memadai?
- Apakah terdapat potensi kerentanan terhadap serangan DoS atau serangan masuk kembali dalam kode?
- Apakah semua fungsi bersifat internal kecuali fungsi-fungsi yang secara eksplisit diharuskan untuk bersifat publik/eksternal?
- Apakah tidak terdapat overflow/kekurangan aritmatika pada operasi-operasi matematika?
- Apakah pustaka OpenZeppelin yang aman digunakan?
- Ether atau token tidak dapat secara tidak sengaja dikirim ke alamat nol (0x0)?
- Kondisi diperiksa dengan memerlukan sebelum operasi dan perubahan status?
- Apakah status ditetapkan sebelum dan selama pelaksanaan tindakan?
- Apakah perlindungan terhadap serangan masuk kembali (masuk kembali) (A memanggil B memanggil A) digunakan?
- Apakah antarmuka ERC20 diimplementasikan dengan benar?
- Apakah pengubah digunakan di beberapa tempat hanya jika benar-benar diperlukan?
- Apakah semua tipe ditetapkan secara eksplisit (misalnya uint256 digunakan sebagai pengganti uint)?
- Apakah semua metode dan siklus berada dalam batas gas maksimum yang diijinkan?
- Tidak ada inisialisasi yang tidak perlu dalam konstruktor (ingat nilai default yang ditetapkan)?
- Ada cakupan pengujian yang lengkap: setiap metode smart contract dan semua tipe data input yang mungkin diuji?
- Apakah pengujian fuzz telah dilakukan dengan menggunakan input acak?
- Apakah semua keadaan yang mungkin terjadi pada sebuah kontrak telah diuji?
- Jumlah default eter dan token ditentukan dalam satuan wei?
- Apakah blok/waktu akhir crowdsale terjadi setelah blok/waktu awal (memulai/mengaktifkan perdagangan)?
- Apakah nilai tukar/konversi token crowdsale ditetapkan dengan benar?
- Apakah ada batas soft/hard crowdsale yang ditetapkan?
- Apakah kontribusi minimum/maksimum yang diijinkan untuk crowdsale telah ditetapkan dan diuji?
- Apakah fungsionalitas daftar putih crowdsale telah diuji?
- Apakah logika pengembalian dana crowdsale telah diverifikasi?
- Apakah peserta crowdsale menerima jumlah token yang proporsional atau dapatkah mereka mengklaim kontribusinya?
- Apakah durasi setiap tahap crowdsale (mis, pra-penjualan, penjualan publik) telah dikonfigurasi dengan benar?
- Apakah itu menentukan fungsi mana yang hanya boleh dikontrol oleh pemilik (mis, menjeda crowdsale, pindah ke tahap lain dari crowdsale, mengaktifkan distribusi token, dll.)?
- Apakah logika vesting (rompi) crowdsale sudah diperiksa?
- Crowdsale memiliki mode gagal-aman yang, jika diaktifkan oleh pemiliknya, akan membatasi pemanggilan fitur dan menyertakan fitur pengembalian dana?
- Crowdsale memiliki fitur fallback jika masuk akal.
- Apakah pustaka yang diimpor sudah diperiksa sebelumnya dan tidak mengandung bagian yang tidak diinginkan yang dapat diganti di versi yang akan datang dan dapat digunakan untuk tujuan jahat.
- Metode transfer token (transfer) yang dibungkus dengan require.
- Apakah require dan assert digunakan dengan benar? Metode assert hanya digunakan untuk hal-hal yang seharusnya tidak pernah terjadi, biasanya digunakan untuk memeriksa status setelah perubahan dilakukan.
- Apakah ada pertahanan terhadap serangan pemanggilan rekursif?
- Apakah panjang string sembarang pada masukan dibatasi?
- Jika memungkinkan, hindari penggunaan array dan gunakan pemetaan sebagai gantinya?
- Apakah block hash tidak digunakan untuk menangani nilai acak (penambang dapat memengaruhi hal ini)?
- Jangan gunakan tx.origin di mana pun?
- Elemen larik digeser ke bawah saat sebuah elemen dihapus agar tidak meninggalkan celah?
- Apakah mengembalikan digunakan sebagai pengganti lemparan?
- Fungsi segera diakhiri jika kondisi tidak terpenuhi?
- Apakah peringatan kompiler telah diselesaikan?
- Apakah pustaka SafeMath digunakan dalam perhitungan?
- Apakah ada slot memori (slot penyimpanan) yang dibaca lebih dari satu kali?
- Apakah ada perulangan / array tak terbatas yang digunakan yang dapat menyebabkan DoS?
- Apakah block.timestamp hanya digunakan untuk interval yang lama?
- Tidak menggunakan block. untuk menghitung waktu yang telah berlalu?
- Apakah pemanggilan delegatecall dihindari, terutama untuk kontrak eksternal (meskipun tepercaya)?
- Apakah panjang larik tidak diperbarui ketika melakukan iterasi?
- Apakah tanda tangan dilindungi dari pemutaran ulang dengan nonce dan block.chainid?
- Pastikan bahwa semua tanda tangan menggunakan EIP-712?
- Keluaran dari abi.encodePacked() tidak boleh di-hash jika lebih dari 2 tipe dinamis digunakan. Secara umum, lebih baik menggunakan abi.encode().
- Periksa dengan hati-hati penyisipan kode perakitan.
- Hindari konsumsi gas yang tidak mencukupi (duka cita gas).
- Apakah semua data privat benar-benar privat?
- Memperbaharui struktur/larik di memori (memori) tidak akan mengubahnya di penyimpanan (stage)?
- Apakah variabel stage dibayangi?
- Apakah menghitung nilai variabel dengan cepat lebih murah daripada menyimpannya?
- Apakah semua variabel state dibaca dari kontrak yang benar (master vs klon)?
- Apakah operator pembanding (>, <, >=, <=) digunakan dengan benar, terutama untuk mencegah kesalahan satu per satu?
- Apakah operator logika (==, ! =, &&, ||, !) digunakan dengan benar, terutama untuk mencegah kesalahan di luar satu per satu?
- Apakah perkalian selalu dilakukan sebelum pembagian (kecuali jika perkalian dapat melimpah)?
- Apakah angka ajaib diganti dengan konstanta dengan nama yang intuitif?
- Jika penerima ETH memiliki fungsi fallback (pengembalian) yang dapat dikembalikan, dapatkah hal ini menyebabkan DoS?
- Apakah standar SafeERC20 digunakan dan apakah nilai yang dikembalikan diperiksa dengan cara yang aman?
- Apakah diasumsikan bahwa pengirim msg. pengirim selalu merupakan pengguna yang relevan?
- Apakah tx.origin tidak digunakan untuk otorisasi?
- Apakah address.transfer() atau address.send() tidak digunakan sebagai pengganti .call.value()?
- Ketika menggunakan panggilan tingkat rendah, pastikan bahwa kontrak sudah ada sebelum panggilan.
- Apakah kode rakitan digunakan untuk mengakses chainid atau kode kontrak/ukuran/hash alih-alih sintaks Solidity?
- Apakah kata kunci hapus digunakan saat menetapkan variabel ke nilai nol (0, false, "", dll.)?
- Ekspresi yang diteruskan ke operator logika/perbandingan (&&/||/>=/==/dll) tidak boleh memiliki efek samping.
- Ketika berurusan dengan beberapa alamat, tanyakan pada diri sendiri apa yang terjadi jika alamat tersebut sama?
- Seberapa baik kodenya didokumentasikan? Apakah komentar dan contoh disediakan di mana pun kode non-standar digunakan?
- Jika Panggilan Eksternal digunakan, pastikan bahwa pemanggilan kontrak eksternal benar-benar diperlukan?
- Apakah hasil Panggilan Eksternal diperiksa dan apakah kesalahan ditangani?
- Apa yang terjadi jika Panggilan Eksternal menggunakan semua gas yang disediakan?
- Jika Panggilan Eksternal memanggil fungsi tertentu, pastikan bahwa fungsi tersebut benar-benar ada (fungsi bayangan).
- Pastikan tidak ada panggilan eksternal yang digunakan dalam pengubah (modifier)
- Apakah event dikeluarkan untuk setiap fungsi yang memodifikasi penyimpanan?
- Periksa asumsi Anda tentang apa yang dilakukan dan dikembalikan oleh kontrak eksternal yang digunakan di utama.
- Perhatikan token yang menggunakan terlalu banyak atau terlalu sedikit desimal. Pastikan bahwa nilai maksimum dan minimum yang didukung didokumentasikan.
- Apakah otoritas yang terkait dengan peran didokumentasikan.
- Apa risiko jika hak akses dilanggar dan bagaimana hal ini dapat memengaruhi berbagai komponen sistem.
- Bisakah pemilik memanipulasi token dan ETH di dalam kontrak.
- Bagaimana cara mengatur alamat Oracle (Oracle) dan bagaimana proses di baliknya? Apakah ada oracle cadangan untuk cadangan?
- Bagaimana fungsi serupa diimplementasikan dalam proyek lain, apakah praktik terbaik sudah diperhitungkan?
Daftar periksa ini akan membantu Anda untuk memastikan bahwa Anda melakukan audit keamanan yang menyeluruh pada smart contract Solidity. Daftar ini mencakup berbagai aspek penting untuk mengidentifikasi dan memitigasi potensi kerentanan dan risiko dalam kode dan sistem terkait.
Kami harap contoh-contoh ini dapat membantu Anda untuk lebih memahami metodologi audit smart contract.
Karena semua informasi dalam blockchain bersifat terbuka (asalkan, tentu saja, kode sumber kontrak diverifikasi), berbekal pengetahuan ini, Anda dapat secara mandiri mempelajari smart contract dan mengidentifikasi berbagai skema scam.
Namun, kami telah melakukan semuanya untuk Anda! Daftar untuk berlangganan premium dan dapatkan akses ke filter eksklusif pada fitur-fitur kontrak pintar dan analisis terbaru. Tingkatkan peluang Anda untuk berhasil berinvestasi dalam token yang menguntungkan.
Salam, tim Lotus Market./b>