Ar-Ge şirketi Draper ve Boston Üniversitesi‘nden bir araştırma ekibi; yazılım açıklarını daha hızlı ve daha etkin bir şekilde keşfetmeye yardımcı olabilecek, makine öğrenimi algoritmalarını kullanarak, yeni bir büyük ölçekli güvenlik açığı tespit sistemi geliştirdi.
Bilgisayar korsanları ve kötü niyetli kullanıcılar; genellikle yazılım güvenlik açıklarını kullanarak, BT sistemlerini ve uygulamalarını riske sokmanın yeni yollarını arıyor. Yazılım açıkları; özellikle açık kaynaklı yazılımlar aracılığıyla veya kod yeniden kullanımı ve uyarlama yoluyla hızla yayılabilecek bir sistem geliştiren programcılar tarafından yapılan küçük hatalardır.
Her yıl, bu güvenlik açıklarının çoğu genel olarak “Ortak Güvenlik Açıkları ve Etkilenen Veritabanları”na (CVE) bildirilirken; diğer birçok kişi de geliştiriciler tarafından dahili olarak işaretlenir ve yamalanır. Yeterli şekilde ele alınmadıklarında, bu açıklar saldırganlar tarafından; genellikle Heartbleed bug ve WannaCry ramsomware cryptoworm gibi birçok saldırılarda yıkıcı etkilere yol açabilir.
Genel olarak, programları analiz etmek için mevcut araçlar önceden tanımlanmış kurallara dayanan, sınırlı sayıda potansiyel hataları tespit edebilir. Bununla birlikte, açık kaynak kodlu depoların yaygın kullanımı; kod açığı kalıplarını ortaya çıkarabilecek tekniklerin geliştirilmesi için yeni olasılıklar açtı.
Draper ve Boston’daki araştırmacılar, C / C ++ kaynak kodundaki güvenlik açıklarının otomatik olarak algılanması için; makine öğrenimini kullanan yeni bir güvenlik açığı tespit aracı geliştirdi.
Ekip; milyonlarca açık kaynaklı işleve sahip büyük bir veri kümesi oluşturdu. Daha sonra potansiyel saldırıları tanımlamak için tasarlanan üç statik (çalışma öncesi) analiz aracı; yani Clang, Cppcheck ve Flawfinder kullanarak, onları etiketledi. Veri kümeleri; SATEIV Juliet Test Suite, Debian Linux dağıtımı ve GitHub üzerindeki ortak Git depolarından alınan C ve C ++ kodlarının milyonlarca işlev düzeyindeki örneklerini içeriyordu.
Araştırmacılar makalelerinde, “Bu veri setlerini kullanarak, lexer* kaynak kodunu doğrudan yorumlayan derin özellik sunumuna dayanan hızlı ve ölçeklenebilir bir güvenlik açığı tespit aracı geliştirdik” diyor.
* Sözcüksel analizi yapan bir program, bir tarayıcı olarak adlandırılabilir. Bir lexer genellikle programlama dilleri, web sayfaları ve benzerlerinin sözdizimini analiz eden bir ayrıştırıcı ile birleştirilir.
Programlama dilleri, bazı yönlerden insan dillerine benzediği için; araştırmacılar, bilgisayarların insan dilini anlamasına ve yorumlamasına olanak tanıyan, bir doğal strateji (NLP) kullanan, bir güvenlik açığı algılama tekniği tasarladı.
Araştırmacılar çalışmalarında; fonksiyonel sinir ağları (CNNs) ve tekrarlayan sinir ağları (RNNs) ile cümle duyarlılığı sınıflandırmalarında kullanılan özellik-çıkarma yaklaşımlarından yararlandıklarını belirtiyor.
NLP’yi random forest-rasgele ormanla (RM) birleştirdiler. Öğrenim; veri kümesinin rastgele seçilmiş alt kümelerinden karar ağaçları topluluğu oluşturan ve bunları birleştirerek, daha doğru tahminler elde eden güçlü bir algoritmaya dönüştü.
Araştırmacılar araçlarını hem gerçek yazılım paketlerinde hem de NIST STATE IV referans veri setinde test ettiler ve sonucu şu şekilde açıkladılar:
“Sonuçlarımız, kaynak kodunda derin özellik temsilinin öğrenilmesinin, otomatik yazılım savunmasızlığının tespiti için umut verici bir yaklaşım olduğunu gösteriyor. Doğal dil alanında sınıflama problemlerinden esinlenmiş çeşitli ML (makine öğrenme) tekniklerini uyguladık. Uygulamamız için ince ayar yaptık ve en iyi genel sonuçları elde ettik. Bu, evrimsel sinir ağı üzerinden öğrenilen özellikleri kullanarak, bir grup ağaç algoritmasıyla sınıflandırıldı.”
Şimdiye kadar, çalışmaları C / C ++ koduna odaklandı. Ancak yöntemleri başka bir programlama diline de uygulanabilir. Özellikle, özel bir C / C ++ lexer oluşturmayı tercih ettiler. Çünkü bu, makine öğrenimi eğitimi için ideal olan, basit ve genel bir fonksiyon kaynağı kod temsili üretecektir.