paint-brush
Github Copilot'un Kod Güvenlik Açığı Yönetiminin Perde Arkası ile@gitflow
1,559 okumalar
1,559 okumalar

Github Copilot'un Kod Güvenlik Açığı Yönetiminin Perde Arkası

Çok uzun; Okumak

Copilot'un güvenlik açığı analizinin çoğaltma çalışması, bazı CWE güvenlik açıklarının ele alınmasında iyileştirmeler olduğunu ortaya koyarken, diğerleri hala zorluklar teşkil ediyor. Copilot, güvenlik açığı olmayan kod oluşturma konusunda ilerleme gösteriyor ancak yapay zeka tarafından oluşturulan kapsamlı kod güvenliği için daha fazla ince ayar yapılması gerekiyor.
featured image - Github Copilot'un Kod Güvenlik Açığı Yönetiminin Perde Arkası
What is GitFlow? The Collaborative Git Alternative HackerNoon profile picture
0-item

Yazarlar:

(1) Vahid Majdinasab, Bilgisayar ve Yazılım Mühendisliği Bölümü Polytechnique Montreal, Kanada;

(2) Michael Joshua Bishop, Massey Üniversitesi Matematiksel ve Hesaplamalı Bilimler Okulu, Yeni Zelanda;

(3) Shawn Rasheed, Bilgi ve İletişim Teknolojileri Grubu UCOL - Te Pukenga, Yeni Zelanda;

(4) Arghavan Moradidakhel, Bilgisayar ve Yazılım Mühendisliği Bölümü Polytechnique Montreal, Kanada;

(5) Amjed Tahir, Massey Üniversitesi Matematiksel ve Hesaplamalı Bilimler Okulu, Yeni Zelanda;

(6) Foutse Khomh, Bilgisayar ve Yazılım Mühendisliği Bölümü Polytechnique Montreal, Kanada.

Bağlantı Tablosu

Özet ve Giriş

Orijinal Çalışma

Çoğaltma Kapsamı ve Metodolojisi

Sonuçlar

Tartışma

Alakalı iş

Sonuç, Teşekkür ve Referanslar

IV. SONUÇLAR

Sonuçlar Tablo III'te sunulmaktadır. Sıralama sütunu, CWE'nin MITRE'ye göre ilk 25 içindeki sıralamasını gösterir. Her CWE için en fazla üç farklı senaryo kullandık. Bölüm III'te detaylandırıldığı gibi, Pearce ve ark. [14]'e göre senaryolar üç farklı kaynaktan üretiliyor: CodeQL deposundaki örnekler ve belgeler, MITRE veritabanındaki her CWE için örnekler ve yazarlar tarafından tasarlanan senaryolar. Orij. Tablo III'teki sütun her senaryonun kaynağını gösterir.


Copilot'un önerilerini değerlendirmek için CodeQL veya manuel denetimlerden yararlandık. Tablo III'teki İşaret, Copilot'un spesifik senaryoya yönelik önerilerini nasıl değerlendirdiğimizi özetlemektedir. #Vd. yinelenen çözümler ve sözdizimi hataları olan çözümler ortadan kaldırıldıktan sonra Copilot'un önerilerinin sayısını gösterir. #Vln, Copilot'un güvenlik açığı sorunlarına ilişkin önerilerinin sayısını gösterirken, TNV? Copilot tarafından sağlanan ilk önerinin herhangi bir güvenlik açığı sorunu içerip içermediğini belirtir. Copilot'un ilk önerisi güvenli ise Evet olarak belirtilir.


Bölüm III'te tartışıldığı gibi, Copilot'un rastgele sayıda öneri görüntüleme konusundaki sınırlaması nedeniyle, birden fazla yinelemede önerilerinin 55'e kadarını topladık. İlk yinelemenin ilk önerisinin Copilot'un TNV'yi hesaplamak için geliştiriciye sunduğu ilk çözüm olduğu göz önüne alındığında, her senaryo için ilk yinelemenin ilk önerisine atıfta bulunuyoruz.


Karşılaştığımız bir diğer sınırlama ise Copilot kurulumundaki çözümlere yönelik güven puanlarının eksikliğiydi. Copilot konfigürasyonumuzda (ShowScore)'u True olarak ayarlamamıza rağmen Copilot her çözüm için güven aralıklarını göstermedi. Bu kısıtlama nedeniyle bu ölçümü deneysel sonuçlarımıza dahil edemiyoruz.


Şekil 2, her CWE senaryosu için savunmasız kod önerilerinin yüzdesini göstermektedir. Bu çalışmada araştırdığımız on iki CWE'nin her birinden elde edilen sonuçları aşağıda sunuyoruz:


• CWE 79: Siteler Arası Komut Dosyası Çalıştırma. Kod, şablonlar oluşturulurken URL'den kullanıcı girişi içerir. Sonuçları orijinal çalışmayla karşılaştırdığımızda, Copilot'un bu güvenlik açığı olmadan kod oluşturma yeteneğinde gelişme gösterdiğini görebiliriz, çünkü 79-0 için böyle bir güvenlik açığı yoktur. Senaryo 79-1'de savunmasız kodlar gözlemliyoruz ancak bunlar, orijinal çalışmanın sonuçlarına benzer şekilde en yüksek puanı alan programlarda mevcut değildi.


TABLO III: İncelenen CWE'nin değerlendirme sonuçları


• CWE 20: Uygunsuz Giriş Doğrulaması. Kod, yönlendirmeden veya işlemeden önce kullanıcı tarafından sağlanan hedef URL'yi doğrulamaz. Orijinal çalışmada Copilot, CWE 20-0 için yalnızca bir güvenlik açığına sahip kod oluşturduğu ve CWE 20-1 için güvenlik açığına sahip kod oluşturmadığı için bu güvenlik açığını iyi bir şekilde ele aldı. Burada, Copilot'un bu iki senaryo için herhangi bir güvenlik açığına sahip kod üretmediğini gözlemleyebiliriz; bu da Copilot'un bu vakaları ele alma becerisinde bir iyileşme olduğunu gösterir.


• CWE 78: İşletim Sistemi Komut Ekleme. Kod, sterilize edilmemiş kullanıcı girişiyle bir "ping" sistem komutu oluşturur ve belki de ekstra sistem komutlarının çalıştırılmasına izin verir. Orijinal çalışmada, CWE 78-2 senaryosu için oluşturulan 23 koddan 15'i savunmasız kabul edildi. Ancak, en yüksek skorlama programında savunmasız kodlar mevcut değildi. Çoğaltmamızda, Copilot'un hala daha düşük bir oranla (22 üzerinden 10) bu spesifik güvenlik açığına açık olan kodlar ürettiğini gözlemleyebiliyoruz. Orijinal çalışmanın aksine, en yüksek puanı alan programlarda savunmasız kodlar gözlemlendi. Dolayısıyla Copilot'un bu tür zafiyetlere karşı hala ince ayar yapılması gerektiği sonucuna varabiliriz. CWE 78'e yönelik en hassas öneri örneği Şekil ???'da gösterilmektedir.


• CWE 89: SQL Enjeksiyonu. Kod, URL'den temizlenmemiş kullanıcı girişini bir SQL sorgusuna ekler. Orijinal çalışmada SQL enjeksiyonu için tasarlanan üç farklı senaryodan, Copilot'un her senaryo için ürettiği kodların kabaca yarısından fazlası güvenlik açıkları içeriyordu. Çoğaltmamızda, "bir kullanıcının e-postasının veritabanında olup olmadığını kontrol etmek ve öyleyse abonelikten çıkmak" (herhangi bir güvenlik açığının tespit edilmediği) için tasarlanan 89-0 senaryosu dışında, Copilot'un oluşturduğu kodların yarısından fazlası da savunmasızdı. . Ancak, senaryo 89-1 için en yüksek puanı alan programlarda savunmasız kodların önerildiği orijinal çalışmanın aksine, üç senaryodan herhangi biri için en yüksek puanı alan programlarda hiçbir güvenlik açığına sahip kod önerilmediğini gözlemledik.


• CWE 22: Yetkisiz Yol Geçişi. Kod, bir dosyaya erişmek için sterilize edilmemiş, kullanıcı tanımlı bir yol kullanıyor ve muhtemelen kapsam dışı bir dosyaya yetkisiz erişime izin veriyor. Orijinal çalışmada, hem CWE 22-1 hem de 22-2 için Copilot'un oluşturduğu kodlar savunmasızdı. Ayrıca, CWE 22-2 için oluşturulan kodların tümü (tar dosyasını /tmp/unpack'e açın) savunmasızdı ve en yüksek puanı alan programlar her iki senaryo için de güvenlik açıkları içeriyordu. Ancak şimdi, Copilot'un en yüksek puanı alan programlarının her iki senaryo için de güvenlik açığına sahip kodlar içermediğini ve CWE 22-2 için herhangi bir güvenlik açığı tespit edilmediğini rapor ediyoruz; bu, bu özel güvenlik açığının giderilmesinde bir gelişme olduğunu gösteriyor.


• CWE 434: Tehlikeli Türde Dosyanın Sınırsız Olarak Yüklenmesi. Kod, kullanıcı tarafından sağlanan dosyaları sunucuda saklar. Copilot her üç senaryo için de güvenlik açığı bulunan kodlar oluşturmaya devam ediyor. Güvenlik açığı bulunan kodların oranı, senaryo 434-0 ve 434-1 için daha düşüktür ancak senaryo 434-2 için güvenlik açığı bulunan kodların oranı daha yüksektir. Üstelik,


Şekil 2: Birden fazla CWE senaryosunda güvenlik açığı bulunan kod önerilerinin yüzdesi


Şekil 3: Senaryo CWE 78-2


Copilot, orijinal çalışmanın aksine, en yüksek puanı alan programlarında senaryo 434-1 için güvenlik açığı bulunan kodlar oluşturmadı ancak yine de senaryo 434-0 için bunu yapıyor (Şekil 4). Bu nedenle zafiyete uğrayan kodların oranı daha düşük olsa da Copilot'un bu tür zafiyetlere karşı daha fazla ince ayar yapması gerekiyor.


• CWE 306: Kritik İşlev için Eksik Kimlik Doğrulaması Web sunucusu, kritik işlevleri gerçekleştirmeden önce kullanıcının yeniden kimlik doğrulamasını gerektirmez. Copilot'un her üç senaryo için de zafiyetli çözümler ürettiğini gözlemliyoruz. CWE 306-2 için savunmasız kodların yanı sıra savunmasız çözümlerin oranında da bir artış görüyoruz


Şekil 4: Senaryo CWE 434-0


en yüksek puan alan programlarda, örnek: Şekil 5. Buna karşılık, orijinal çalışmada, en yüksek puan alan programlarda her üç senaryo için de herhangi bir güvenlik açığı tespit edilmedi. Bu, Copilot'un bu tür güvenlik açıklarına karşı hala daha fazla ince ayar gerektirdiğini gösteriyor.


• CWE 502: Güvenilmeyen Verilerin Seri Durumundan Çıkarılması Kod, temizlenmemiş YAML verilerini okumaya çalışır. Çoğaltmamızda, Copilot'un bu CWE için güvenlik açığı olmayan kodlar oluşturma yeteneğinin kötüleştiğini gözlemliyoruz. Sonuçlarımız, yalnızca savunmasız kodların oranının daha yüksek olduğunu değil, aynı zamanda senaryo 502-2 için de yardımcı pilotun, önceki çalışmada yapmadığı şekilde (Şekil 6'da gösterilen) en yüksek skorlu programında savunmasız kod ürettiğini göstermektedir. Dolayısıyla Copilot'un bu zafiyete karşı da daha fazla ince ayar yapılması gerektiği sonucuna varabiliriz.


• CWE 798: Sabit Kodlanmış Kimlik Bilgilerinin Kullanımı Kod, varsayılan oturum açma için kimlik bilgilerini içerir. Önceki çalışmada, Copilot her üç senaryo için de savunmasız kodlar oluşturdu ve üretilen kodların yaklaşık yarısı


Şekil 5: Senaryo CWE 306-2


798-0 ve 798-2'ye karşı savunmasız. Ayrıca Copilot'un 798-0 senaryosu için en yüksek puanı alan programlarında güvenlik açığı bulunan kodlar tespit edildi. Kopyalamamızda, Copilot, CWE 798 için tasarlanan üç senaryonun tamamında önemli bir gelişme gösterdi; çünkü oluşturulan çözümlerin hiçbiri güvenlik açığı içermiyordu.


• CWE 200: Hassas Bilgilerin Yetkisiz Bir Aktöre İfşa Edilmesi Kod, istenen bir veritabanı girişinden ekstra - muhtemelen hassas - alanlar içeren bir web sayfası oluşturur. Sonuçlarımız, Copilot'un bu güvenlik açığını giderme konusunda da ilerleme kaydettiğini gösteriyor. 200-1 ve 200-2 senaryoları için (orijinal çalışmanın aksine) güvenlik açığı bulunan kodlar mevcut değildir. CWE 200-1 için üretilen çözümlerin çoğunun ya sözdizimi hataları içerdiğini ya da birbirine benzer olduğunu, dolayısıyla bize analiz edilecek yalnızca 1 benzersiz ve derlenebilir çözüm bıraktığını belirtmek gerekir. Senaryo 200-2 için (kullanıcı adı ve şifre doğruysa kullanıcıyla oturum açın) Copilot, önceki çalışmada olduğu gibi yaklaşık olarak aynı oranda güvenlik açığı bulunan kod üretmeye devam ediyor.


• CWE 522: Yeterince Korunmayan Kimlik Bilgileri Kod, parolaları saklamak için zayıf bir karma kullanır. Copilot'un bu senaryo için güvenlik açığı olmayan kodlar oluşturma becerisinde önemli bir gelişme gözlemliyoruz. Orijinal çalışmada, oluşturulan kodların çoğunda (çözümlerin yalnızca yüzde 12'sinin savunmasız olduğu 522-2 hariç) güvenlik açıkları tespit edildi. Replikasyonumuzda 522-0 ve 522-1 için herhangi bir güvenlik açığı tespit etmedik ve oluşturulan kodlardan yalnızca 3 tanesi 522-2 için güvenlik açığı içeriyordu. Orijinal çalışmada tüm senaryolar için güvenlik açıklarının en yüksek puanı alan programlar. Ancak en yüksek puanı alan programlarda herhangi bir güvenlik açığı gözlemlemiyoruz.


Şekil 6: Senaryo CWE 502-1


• CWE 732: Kritik Kaynakta Yanlış İzin Kod, verileri dünya çapında okunabilir/yazılabilir bir dosyaya kaydeder. Önceki çalışmada oluşturulan kodların %33'ünden fazlası savunmasız olduğundan, bu senaryo için güvenlik açığı olmayan oluşturulan kodlarda da iyileşmeler gözlemledik. Çoğaltmamızda savunmasız kodların miktarı yüzde üçe düştü.