Sadece kodu kullanmayın! Çinli araştırmacının 14 sayfalık makalesi şu uyarıda bulunuyor: Copilot tarafından oluşturulan kodların %35,8'inde güvenlik açıkları var ve C++ "en çok etkilenen alan" haline geldi

Orijinal kaynak: CSDN

Resim kaynağı: Sınırsız Yapay Zeka tarafından oluşturulmuştur

GitHub Copilot, büyük model dilleri temel alan otomatik bir kod oluşturma aracıdır. Lansmanından bu yana sayısız programcı tarafından memnuniyetle karşılandı. Hepsi sonunda fazla mesai gerektirmeyen bir kod yapısına sahip olduklarını söyledi!

CSDN'nin yakın zamanda başlattığı "2023 Yapay Zeka Geliştirici Ekosistemi Anketi Anketi"nin ara döneminde toplanan verilere göre, katılımcıların %90'ı kod oluşturma araçlarını üretim, test, eğlence vb. farklı senaryolarda kullandıklarını belirtti. ., bunların %35'i her gün kullandığını söylüyor.

Ancak şunu da belirtmek gerekir ki, bu kodlama araçları iş verimliliğini artırırken, bunun nimet mi yoksa felaket mi getirdiğini hiç düşündünüz mü? Oluşturulan kod "kullanıma hazır" olması açısından gerçekten güvenli mi?

Son zamanlarda, Copilot tarafından oluşturulan kodun güvenliğini incelemek amacıyla Wuhan Üniversitesi, Orta Çin Normal Üniversitesi, Yeni Zelanda'daki Massey Üniversitesi ve Royal Melbourne Teknoloji Enstitüsü'nden altı üniversite araştırmacısı, Copilot tarafından oluşturulan kodun güvenlik açıkları üzerine ampirik bir çalışma yürüttü. Yakın zamanda "sadece ağzınızı hareket ettirerek kodlamayı tamamlayabilen" gelecekteki AI programlama eserlerinin güvenliğini ortaya koyan "GitHub'da Yardımcı Pilot Oluşturulan Kodun Güvenlik Zayıflıkları" başlıklı bir akademik makale yayınlandı.

Kağıt adresi:

Örnek: Üretim ortamındaki 435 kod bölümü, 6 ana programlama dilini kapsayan

Deney sırasında araştırmacılar, GitHub Copilot tarafından GitHub'un halka açık projelerinden oluşturulan ve Python, Java, Java, C++, Go ve C# gibi birden fazla ana programlama dilini kapsayan 435 kod parçacığını seçti.

Aynı zamanda, güvenlik taramasını ve kod parçalarının analizini gerçekleştirmek için birden fazla dili (Java, Java, C++, C# ve Python dahil) destekleyen açık kaynaklı bir statik analiz aracı olan CodeQL'i kullanır ve Ortak Güvenlik Açığı Numaralandırmasını kullanır ( CWE) segmentteki kod güvenlik açıklarını sınıflandırmak için.

Ayrıca araştırmacılar, aşağıdaki araştırma sürecine dayanarak üç boyutlu olarak incelenmesi ve doğrulanması gereken soruları gündeme getirdiler.

RQ1: GitHub projelerinde Copilot tarafından oluşturulan kod güvenli midir?

Sorma nedeni: Copilot, güvenlik açıkları içeren kod önerileri oluşturabilir ve geliştiriciler bu önerileri kabul ederek programı potansiyel olarak savunmasız bırakabilir. RQ1'e verilen yanıtlar, geliştiricilerin Copilot'u üretimde kullanırken ne sıklıkta güvenlik açıklarıyla karşılaştıklarını anlamanıza yardımcı olur.

RQ2: Copilot tarafından oluşturulan kod parçacıklarında hangi güvenlik açıkları mevcut?

Bu soruyu gündeme getirmenin nedeni: Copilot tarafından oluşturulan kod, güvenlik açıkları içerebilir ve geliştiriciler, Copilot tarafından oluşturulan kodu kabul etmeden önce sıkı bir güvenlik incelemesi yapmalıdır. GitHub Copilot belgelerinde açıkça belirtildiği gibi "Copilot kullanıcıları, kodlarının güvenliğinden ve kalitesinden sorumludur." RQ2'ye verilen yanıtlar, geliştiricilerin Copilot tarafından oluşturulan koddaki olası güvenlik açıklarını daha iyi anlamalarına yardımcı olabilir, böylece bu güvenlik açıklarını daha etkili bir şekilde önleyebilir ve düzeltebilirler.

RQ3: MITRE CWE Top-25 listesine kaç güvenlik açığı giriyor?

Sorma nedeni: Bu liste en tehlikeli 25 güvenlik açığını içermektedir. RQ3'e verilen yanıtlar, geliştiricilerin Copilot tarafından oluşturulan kodun yaygın olarak tanınan güvenlik açıkları türlerini içerip içermediğini ve Copilot'un bu en yaygın güvenlik açıklarını ele alma becerisini anlamasına yardımcı olabilir.

1. Adım: GitHub'da yapay zeka tarafından oluşturulan "gerçek" kodu belirleyin

Araştırma sorularını yanıtlamak için ana veri kaynağı olarak GitHub'u kullanmak istemenin nedeni, araştırmacıların görüşüne göre GitHub'un milyonlarca genel kod deposu içermesi ve çok sayıda kod kaynağına erişime sahip olması ve bu sayede çeşitli kodları kapsamasına olanak sağlamasıdır. programlama dilleri ve araştırma türündeki projeler.

Ancak Copilot'un ürettiği kodu GitHub'da doğrudan elde etmek kolay değil çünkü birçok aracın yardımıyla bile kodun yapay zeka tarafından mı yoksa insan mühendisler tarafından mı yazıldığını ayırt etmek zor.

Bu ikilemle karşı karşıya kalan altı araştırmacı, "by GitHub Copilot", "use GitHub Copilot" ve "with GitHub Copilot" gibi depo açıklamalarını ve kodda sağlanan yorumları arayarak birçok kod parçacığını tanımlamayı seçti. aşağıdaki sonuçları elde etti:

Kod etiketlerinden elde edilen farklı dillerdeki arama sonuçlarının sayısı:

Daha sonra filtreleme aşamasına girin. Burada araştırmacılar makalede esas olarak üç kurala uyduklarına dikkat çekti:

  1. Repository etiketi altındaki arama sonuçları için araştırmacılar, proje açıklamasındaki veya ilgili benioku dosyalarındaki ifadelere dayanarak hangi projelerin tamamen Copilot tarafından oluşturulduğunu belirlediler. Ayrıca, Copilot tarafından desteklenen Python, Java, Java, C++, C# ve Go gibi başlıca dillerin kod dosyalarını da tutar.

2 Arama sonuçları için kod etiketi altında, Copilot tarafından oluşturulan kodu gösteren dosya yorumlarını tutar.

  1. Bu çalışmanın nesneleri esas olarak gerçek projelerde kullanılan kod parçacıklarıdır.Bu nedenle LeetCode platformunda basit algoritma problemlerini çözmek için kullanılan kod dosyaları hariç tutulacaktır.

Pilot veri açıklamasını tamamladıktan sonra makalenin ilk yazarı kalan arama sonuçlarını inceledi ve toplam 465 kod parçacığını elde etti. Yinelenen sonuçları kaldırdıktan sonra 435 farklı kod parçacığı elde ettik. Bunların 249'u depo etiketlerinden ve 186'sı aşağıda ayrıntılı olarak açıklandığı gibi kod etiketlerindendir:

2. Adım: Veri Analizi

Test sürecinde, sonuçların kapsamını ve doğruluğunu artırmak amacıyla araştırmacılar, her kod bölümünde güvenlik kontrolleri gerçekleştirmek için iki statik analiz aracı (örneğin, CodeQL artı belirli diller için özel araçlar) kullandılar.

Bu çalışmada araştırmacılar ilk olarak veri setindeki kodu analiz etmek için CodeQL'i kullandılar. CodeQL standart sorgu paketindeki varsayılan sorgu paketi codeql-suites/-code-scanning.qls'dir. Her paket codeql-suite dizininde birkaç yararlı sorgu paketi içerir.

Aynı zamanda güvenlik açıklarıyla ilgili kod parçacıklarını taramak için -security-and-quality.qls test paketini kullanır. Bu test paketleri birçok CWE'yi kapsayan birden fazla güvenlik özelliğini kontrol edebilir. Örneğin: Python test paketi 168 güvenlik kontrolü sağlar; Java test paketi 203 güvenlik kontrolü sağlar; C++ test paketi 163 güvenlik kontrolü sağlar.

Ayrıca araştırmacılar, dosyaları taramak için her programlama dili için diğer popüler statik güvenlik analiz araçlarını seçtiler. Örneğin Python Bandit'i, Java ESLint'i, C++ Cppcheck'i, Java Findbugs'u, C# Roslyn'i ve Go Gosec'i kullanıyor. Güvenlik sorunuyla ilgili CWE ID'nin doğrudan tarama sonuçlarından elde edilememesi durumunda araştırmacılar, tarama sonuçlarının sağladığı güvenlik özelliklerini ilgili CWE ile manuel olarak eşleştireceklerdir.

Kod segmentlerinin %35,8'i güvenlik açıklarına sahiptir, 42 CWE türünü kapsayan C++ kodu en fazla güvenlik açığına sahiptir

Analizin ardından araştırmacılar yukarıda belirtilen üç soruya dayanarak nihai sonuca ulaştı.

RQ1: GitHub projelerinde Copilot tarafından oluşturulan kod güvenli midir?

Copilot tarafından oluşturulan 435 kod parçacığının %35,8'i, kullanılan programlama dilinden bağımsız olarak güvenlik sorunları yaratan güvenlik açıkları içeriyordu.

Geliştiricilerin Copilot'u en sık kullandıkları diller olan Python ve Java kodunda biraz daha yüksek oranda güvenlik açıkları bulunuyor. Toplanan 251 Python kod parçacığının %39,4'ü güvenlik riski taşıyor. 79 Java kod parçacığından %27,8'i güvenlik riski taşıyor. Tüm programlama dilleri arasında **C++, kod segmentlerinde %46,1'e ulaşan en yüksek güvenlik açığı oranına sahiptir. **Go ayrıca %45,0 gibi nispeten yüksek bir güvenlik riski oranına sahiptir. Karşılaştırıldığında, C# ve Java kodundaki güvenlik sorunu dosyalarının oranı sırasıyla %25 ve %23,2 ile daha düşüktür.

RQ2: Copilot tarafından oluşturulan kod parçacıklarında hangi güvenlik açıkları mevcut?

RQ2'yi yanıtlamak için araştırmacılar, RQ1 tarafından gerçekleştirilen taramaların sonuçlarını işlediler ve aynı kod segmenti konumunda tespit edilen mükerrer güvenlik sorunlarını ortadan kaldırdılar. Toplamda 435 kod parçacığında 600 güvenlik açığı tespit edildi.

Tespit edilen güvenlik açıklarının türleri çok çeşitliydi ve CWE-78 (işletim sistemi komut enjeksiyonu), CWE-330 (güvenli olmayan rastgele değerlerin kullanılması güvenlik açığı) ve CWE-703 (anormal koşulların veya Uygunsuz durumların kontrol edilmesi) dahil olmak üzere 42 farklı CWE ile ilgiliydi. işleme) en sık meydana gelir.

RQ3: MITRE CWE Top-25 listesine kaç güvenlik açığı giriyor?

Tanımlanan 42 CWE'den 11'i şu anda 2022 CWE İlk 25 güvenlik açığı olarak tanınmaktadır.

Sonunda yazılır

Bu bağlamda bazı netizenler, hata yazma yeteneklerinin GitHub Copilot'unkinden daha yüksek olabileceği konusunda da şaka yaptı.

Elbette bu çalışmanın amacı, geliştiricileri günlük işlerinde yapay zeka destekli kodlama araçlarını kullanmamaya ikna etmek değil; gerçek geliştirmede kod üretmek için Copilot kullanmanın geliştirme verimliliğini artırabileceğini göstermek ve herkese kendi güvenlik değerlendirmelerini yapmalarını hatırlatmak. .

Aynı zamanda, bazı potansiyel risklerden etkili bir şekilde kaçınmak ve kayıpları azaltmak için Copilot'un kod önerilerini kabul ederken uygun güvenlik kontrollerini gerçekleştirin.

Daha fazla ayrıntı için makaleye bakın:

View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Reward
  • Comment
  • Share
Comment
0/400
No comments
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)