Makine öğrenmesi ile statik kaynak kod analizi
Static source code analysis via machine learning
Yazar: EYÜP SERCAN AKGÜL
Danışman: DOÇ. DR. ALİ GÖKHAN YAVUZ
Yıldız Teknik Üniversitesi / Fen Bilimleri Enstitüsü / Bilgisayar Mühendisliği Ana Bilim Dalı / Bilgisayar Mühendisliği Bilim Dalı
Derece: Yüksek Lisans, 2019
Konu: Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control

Özet:
Bu tez çalışması, geliştirilmekte olan bir uygulamanın üretim ortamına alınmasından önce statik kaynak kod analizine alınarak muhtemel bilgi güvenliği tehditlerinin kod seviyesinde tespitini amaçlamaktadır. Çalışmanın ilk aşamasında çeşitli yazılım geliştirme dillerini içeren kural bazlı işlemler ile kod satıları üzerinde öğrenme vektörleri elde edilmektedir. Öğrenme vektörleri elde edilirken ham kaynak kod verisi üzerinden belirli karakter temizleme ve kural bazlı tespit edilen bilgi güvenliği zafiyetlerinin vektör bilgilerine dahil edilmesi işlemleri gerçekleştirilmiştir. Çalışmanın bir sonraki aşamasında bu öğrenme vektörleri kullanılarak bazı makine öğrenmesi algoritmaları kullanılmıştır. Kullanılan öğrenme vektörleri sınıf, sınıf seviyesi, kaynak kod satırı, bilgi güvenliği bulgusuna sebep olan ortak en uzun metin parçası, bulgu türü ve durum özellikleri olmak üzere 6 farklı sütun bileşeninden oluşmaktadır. Kullanılan makine öğrenmesiyle sınıflama algoritmaları BayesNet, KStar, J48, Random Forest ve Hoeffding Tree sınıflayıcıları olup, sonuçlar üzerinden yapılan karşılaştırmalar ile bazı algoritmaların kural bazlı değerlendirmeden daha hızlı sınıflandırma yaparak zafiyet tespitinde bulunduğu gözlemlenmiştir. Çalışma kapsamında 2 farklı kaynak kod veri seti kullanılmış ve seçilen makine öğrenmesi algoritmalarından KStar ve J48 için doğruluk oranları olanlar olarak görülmüştür. Bununla birlikte birinci kaynak kod kümesi için makine öğrenme sınıflama algoritmalarından KStar ve J48 toplamda 336 adet bulgu bileşeninin 134 tanesini test verisi olarak işleme almış ve 122 bulgu doğru sınıflandırılarak %91,04'lük bir başarım elde edilmiştir. Her iki algoritmaya sadece sınıf değeri "1" olan yani sadece bulguları içeren kayıtlar aynı şekilde %60 bileşen eğitim için ve %40'ı test için verildiğinde sonuçlar biraz daha başarımlı olmuştur. Toplamda 41 adet bulgu bileşeninin 16 tanesi test verisi olarak kullanılmış ve 15 adet bulgu doğru sınıflandırılarak %93,75'lik bir başarım elde edilmiştir.

Abstract:
This thesis study aims to perform static source code analysis on application raw source codes in order to detect information security flaws / vulnerabilities before the developed application going to the production environment. Classical rule based detection mechanismsare being used at the first stage of the study to build learning vectors related to the source code lines separately on various application development languages. While building up the learning vectors, some word cleaning purification and adding the part of possible vulnerability information processes were being applied. At the following stage of the study, some sort of machine learning algorithms were chosen to detect security issues by using the learning vectors composed of 6 attributes. These attributes are class, severity, source code line, heat part of code, vulnerability class and status of code line. By using BayesNet, KStar, J48, Random Forest and Hoeffding Tree machine learning algorithms, it was observed that some of the classifying algoritms had been faster than the rule based classification on vulnerability detection at results stage. Throughout the study, mainly 2 different data sets were used and KStar and J48 algorithms are the best efficient algorithms among the others. However, for the first set of source code, KStar and J48, which are machine learning classification algorithms, processed 134 of the 336 finding components as test data, and 122 findings were correctly classified and achieved 91.04% performance. The results were slightly more successful when both the algorithms had only class values of "1" (vulnerable ones) , only records containing the findings were given for 60% component training and 40% for testing. In total, 16 of 41 finding components were used as test data and 15 findings were classified correctly and achieved a performance of 93.75%.