Jangan asal pakai kodenya! Makalah setebal 14 halaman dari peneliti Tiongkok memperingatkan: 35,8% kode yang dihasilkan oleh Copilot memiliki kerentanan, dan C++ telah menjadi “area yang paling terkena dampak”

Sumber asli: CSDN

Sumber gambar: Dihasilkan oleh AI Tanpa Batas

GitHub Copilot adalah alat pembuatan kode otomatis berdasarkan bahasa model besar. Sejak diluncurkan, alat ini telah disambut baik oleh banyak pemrogram. Mereka semua mengatakan bahwa mereka akhirnya memiliki artefak kode yang tidak memerlukan kerja lembur!

Berdasarkan data yang dikumpulkan dalam jangka menengah "Kuesioner Survei Ekosistem Pengembang AI 2023" yang baru-baru ini diluncurkan oleh CSDN, 90% responden menyatakan bahwa mereka telah menggunakan alat pembuat kode dalam berbagai skenario seperti produksi, pengujian, hiburan, dll. ., dimana 35% orang mengatakan mereka menggunakannya setiap hari.

Namun, perlu dicatat bahwa meskipun alat pengkodean ini meningkatkan efisiensi kerja, pernahkah Anda memikirkan apakah hal itu membawa berkah atau bencana? Apakah kode yang dihasilkan benar-benar aman berdasarkan "siap digunakan"?

Baru-baru ini, untuk mempelajari keamanan kode yang dihasilkan oleh Copilot, enam peneliti universitas dari Universitas Wuhan, Central China Normal University, Universitas Massey di Selandia Baru, dan Institut Teknologi Royal Melbourne melakukan studi empiris tentang kerentanan keamanan yang dihasilkan oleh Copilot. kode di GitHub, dan Sebuah makalah akademis berjudul "Kelemahan Keamanan Kode yang Dihasilkan Copilot di GitHub" diterbitkan, yang baru-baru ini mengungkapkan keamanan artefak pemrograman AI di masa depan yang dapat "menyelesaikan pengkodean hanya dengan menggerakkan mulut Anda".

Alamat kertas:

Contoh: 435 segmen kode di lingkungan produksi, mencakup 6 bahasa pemrograman umum

Selama percobaan, para peneliti memilih 435 cuplikan kode yang dihasilkan oleh GitHub Copilot dari proyek publik GitHub, yang mencakup beberapa bahasa pemrograman utama seperti Python, Java, Java, C++, Go, dan C#.

Pada saat yang sama, ia menggunakan CodeQL, alat analisis statis sumber terbuka yang mendukung berbagai bahasa (termasuk Java, Java, C++, C#, dan Python), untuk melakukan pemindaian keamanan dan analisis fragmen kode, dan menggunakan Common Vulnerability Enumeration ( CWE) untuk mengklasifikasikan kode celah keamanan pada segmen tersebut.

Selanjutnya berdasarkan proses penelitian berikut ini, peneliti mengajukan pertanyaan-pertanyaan yang perlu dikaji dan diverifikasi dari tiga dimensi.

RQ1: Apakah kode yang dihasilkan Copilot di proyek GitHub aman?

Alasan bertanya: Copilot mungkin menghasilkan saran kode yang mengandung kerentanan keamanan, dan pengembang mungkin menerima saran ini, sehingga berpotensi membuat program menjadi rentan. Jawaban RQ1 membantu memahami seberapa sering pengembang menghadapi kerentanan keamanan saat menggunakan Copilot dalam produksi.

RQ2: Kerentanan keamanan apa yang ada dalam cuplikan kode yang dihasilkan oleh Copilot?

Alasan mengajukan pertanyaan ini: Kode yang dihasilkan oleh Copilot mungkin mengandung kerentanan keamanan, dan pengembang harus melakukan tinjauan keamanan yang ketat sebelum menerima kode yang dihasilkan oleh Copilot. Seperti yang dijelaskan dalam dokumentasi GitHub Copilot, "Pengguna Copilot bertanggung jawab untuk memastikan keamanan dan kualitas kode mereka." Jawaban terhadap RQ2 dapat membantu pengembang lebih memahami kemungkinan kerentanan keamanan dalam kode yang dihasilkan Copilot sehingga mereka dapat mencegah dan memperbaiki kerentanan ini dengan lebih efektif.

RQ3: Berapa banyak kerentanan keamanan yang dimiliki MITRE CWE Top-25?

Alasan bertanya: Daftar ini berisi 25 kerentanan keamanan paling berbahaya. Jawaban terhadap RQ3 dapat membantu pengembang memahami apakah kode yang dihasilkan oleh Copilot mengandung jenis kerentanan keamanan yang dikenal luas dan kemampuan Copilot untuk menangani kerentanan paling umum ini.

Langkah 1: Identifikasi kode “asli” yang dihasilkan AI di GitHub

Alasan ingin menggunakan GitHub sebagai sumber data utama untuk menjawab pertanyaan penelitian adalah, menurut pendapat peneliti, GitHub berisi jutaan repositori kode publik dan memiliki akses ke sejumlah besar sumber daya kode, sehingga memungkinkannya mencakup berbagai macam hal. bahasa pemrograman dan proyek dalam jenis penelitian.

Namun, tidak mudah untuk mendapatkan langsung kode yang dihasilkan oleh Copilot di GitHub, karena meskipun dengan bantuan banyak alat, sulit untuk membedakan apakah kode tersebut ditulis oleh AI atau insinyur manusia.

Menghadapi dilema ini, enam peneliti memilih untuk mengidentifikasi banyak cuplikan kode dengan mencari deskripsi repositori dan komentar yang diberikan dalam kode, seperti "oleh GitHub Copilot", "gunakan GitHub Copilot" dan "dengan GitHub Copilot". Untuk mencari, saya akhirnya mendapat hasil sebagai berikut:

Banyaknya hasil pencarian berbagai bahasa yang diperoleh dari tag kode:

Selanjutnya masuk ke tahap penyaringan. Di sini, para peneliti menunjukkan dalam makalahnya bahwa mereka pada dasarnya mengikuti tiga aturan:

  1. Untuk hasil pencarian pada tag Repository, peneliti menentukan proyek mana yang seluruhnya dihasilkan oleh Copilot berdasarkan pernyataan dalam deskripsi proyek atau file readme terkait. Selain itu, ia menyimpan file kode untuk bahasa utama yang didukung oleh Copilot seperti Python, Java, Java, C++, C#, dan Go.

2 Untuk hasil pencarian di bawah tag kode, ia menyimpan komentar file yang menunjukkan kode yang dihasilkan oleh Copilot.

  1. Objek penelitian ini sebagian besar adalah cuplikan kode yang digunakan dalam proyek sebenarnya, oleh karena itu, file kode yang digunakan untuk menyelesaikan masalah algoritma sederhana pada platform LeetCode akan dikecualikan.

Setelah menyelesaikan anotasi data percontohan, penulis pertama makalah ini memeriksa sisa hasil pencarian dan memperoleh total 465 cuplikan kode. Setelah menghapus hasil duplikat, kami mendapatkan 435 cuplikan kode berbeda. 249 di antaranya berasal dari tag repositori dan 186 berasal dari tag kode, sebagaimana dirinci di bawah:

Langkah 2: Analisis Data

Dalam proses pengujian, untuk meningkatkan cakupan dan keakuratan hasil, para peneliti menggunakan dua alat analisis statis untuk melakukan pemeriksaan keamanan pada setiap segmen kode (yaitu CodeQL ditambah alat khusus untuk bahasa tertentu).

Pada penelitian ini, peneliti pertama kali menggunakan CodeQL untuk menganalisis kode yang ada pada dataset. Rangkaian kueri default dalam paket kueri standar CodeQL adalah codeql-suites/-code-scanning.qls. Setiap paket berisi beberapa rangkaian kueri yang berguna di direktori codeql-suite.

Pada saat yang sama, ia menggunakan rangkaian pengujian -security-and-quality.qls untuk memindai cuplikan kode yang terkait dengan kerentanan keamanan. Rangkaian pengujian ini dapat memeriksa beberapa properti keamanan, yang mencakup banyak CWE. Misalnya: Rangkaian pengujian Python menyediakan 168 pemeriksaan keamanan; Rangkaian pengujian Java menyediakan 203 pemeriksaan keamanan; Rangkaian pengujian C++ menyediakan 163 pemeriksaan keamanan.

Selain itu, para peneliti memilih alat analisis keamanan statis populer lainnya untuk setiap bahasa pemrograman untuk memindai file. Misalnya Python menggunakan Bandit, Java menggunakan ESLint, C++ menggunakan Cppcheck, Java menggunakan Findbugs, C# menggunakan Roslyn, dan Go menggunakan Gosec. Jika ID CWE terkait masalah keamanan tidak dapat diperoleh langsung dari hasil pemindaian, maka peneliti juga akan memetakan secara manual atribut keamanan yang diberikan hasil pemindaian ke CWE terkait.

35,8% segmen kode memiliki kerentanan keamanan, kode C++ memiliki kerentanan terbanyak, mencakup 42 jenis CWE

Setelah dilakukan analisis, peneliti mencapai kesimpulan akhir berdasarkan ketiga pertanyaan yang diajukan di atas.

RQ1: Apakah kode yang dihasilkan Copilot di proyek GitHub aman?

Dari 435 cuplikan kode yang dihasilkan oleh Copilot, 35,8% mengandung kerentanan keamanan, sehingga menimbulkan masalah keamanan apa pun bahasa pemrograman yang digunakan.

Terdapat proporsi kerentanan keamanan yang sedikit lebih tinggi pada kode Python dan Java, yang merupakan bahasa yang paling sering digunakan oleh pengembang Copilot. Di antara 251 cuplikan kode Python yang dikumpulkan, 39,4% menimbulkan risiko keamanan. Dari 79 cuplikan kode Java, 27,8% menimbulkan risiko keamanan. Di antara semua bahasa pemrograman, **C++ memiliki proporsi kerentanan keamanan tertinggi di segmen kode, mencapai 46,1%. **Go juga memiliki rasio risiko keamanan yang relatif tinggi yaitu 45,0%. Sebagai perbandingan, proporsi file masalah keamanan dalam kode C# dan Java lebih rendah, masing-masing sebesar 25% dan 23,2%.

RQ2: Kerentanan keamanan apa yang ada dalam cuplikan kode yang dihasilkan oleh Copilot?

Untuk menjawab RQ2, peneliti memproses hasil pemindaian yang dilakukan oleh RQ1 dan menghilangkan masalah keamanan duplikat yang terdeteksi di lokasi segmen kode yang sama. Secara total, 600 kerentanan keamanan diidentifikasi dalam 435 cuplikan kode.

Jenis kerentanan keamanan yang terdeteksi beragam dan terkait dengan 42 CWE berbeda, termasuk CWE-78 (injeksi perintah sistem operasi), CWE-330 (penggunaan kerentanan nilai acak yang tidak aman) dan CWE-703 (memeriksa kondisi abnormal atau tidak tepat penanganan) paling sering terjadi.

RQ3: Berapa banyak kerentanan keamanan yang dimiliki MITRE CWE Top-25?

Dari 42 CWE yang teridentifikasi, 11 saat ini diakui sebagai kerentanan CWE Top-25 2022.

Ditulis di akhir

Terkait hal ini, beberapa netizen juga bercanda bahwa kemampuan mereka dalam menulis bug mungkin lebih tinggi dibandingkan GitHub Copilot.

Tentu saja, penelitian ini tidak dimaksudkan untuk membujuk pengembang agar tidak menggunakan alat pengkodean berbantuan AI dalam pekerjaan sehari-hari, namun untuk menunjukkan bahwa menggunakan Copilot untuk menghasilkan kode dalam pengembangan sebenarnya dapat meningkatkan efisiensi pengembangan, dan untuk mengingatkan semua orang agar melakukan penilaian keamanan mereka sendiri. .

Pada saat yang sama, jalankan pemeriksaan keamanan yang sesuai saat menerima saran kode Copilot untuk secara efektif menghindari beberapa potensi risiko dan mengurangi kerugian.

Untuk lebih jelasnya, lihat makalah:

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
  • Komentar
  • Bagikan
Komentar
0/400
Tidak ada komentar
  • 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)