Bu yazımızda, SAST (Static Application Security Testing) ve SCA (Software Composition Analysis) süreçlerinin her ikisinin de uygulama güvenliği süreçlerine entegre edilmesinin öneminden ve bu iki sürecin temel farklılıklarından bahsedeceğiz.
Sitemizde pek çok yazıda da tanımladığımız üzere SAST, yazılım projelerinde kaynak kodların analiz edilmesi ve analiz sonucunda kaynak kod zafiyetlerinin tespit edilmesini kapsamaktadır. Farklı programlama dillerinde geliştirilen projeler, SAST sürecinde kullanılan ürüne bağlı olarak farklı metotlarla taranabilmekte ve tespit edilen zafiyet sayıları değişebilmektedir.
SCA sürecinde ise yazılım projelerinde yer alan yazılım bileşenleri analiz edilmektedir. Bu süreç aynı zamanda yazılımda Open Source Security alanını da adreslemektedir. Temel olarak yazılımlarda kullanılan 3rd Party komponentlerde yer alan zafiyetler ve komponentlerin lisans durumları tespit edilmektedir. Komponentler büyük çoğunlukla yazılımcılar tarafından internetten indirilmekte ve projelere dahil edilmektedir.
SAST ve SCA ile ilgili detay bilgiler için sitemizde daha önce yayınlanmış olan aşağıdaki yazılara göz atabilirsiniz.
https://appsec.com.tr/blog/devsecops-gu-venlik-teknolojileri
https://appsec.com.tr/blog/cicd-guvenligi
https://appsec.com.tr/blog/software-composition-analysis
SAST ürünü 3rd party komponentlerdeki zafiyetleri de tespit etmez mi sorusu, SCA konusunu anlattığımız oturumlarda zaman zaman bize sorulmaktadır. SAST ve SCA birbirinden bağımsız süreçlerdir ve SAST ürünleri komponent analizi yapmamaktadır. Aynı şekilde SCA ürünleri de statik kod analizi yapmamaktadır. Üreticiler SCA ve SAST için farklı ürünlere sahiptir ve her iki üründen derlenen analiz sonuçlarını aynı arayüz üzerinde gösterebilmektedir. Özetlemek gerekirse SAST ve SCA farklı süreçlerdir, ancak çıktıları aynı ekranda bir araya getirilerek ilişkilendirilebilir.
Örneğin, Fortify Static Code Analyzer bir SAST aracıdır. Sonatype Lifecycle ise bir SCA aracıdır. Kullanılan bir plugin ile Fortify Software Security Center üzerinden hem SAST sonuçlarını hem de SCA sonuçlarını bir araya getirmek mümkündür. Detaylı bilgi için: https://help.sonatype.com/en/sonatype-fortify-ssc.html
SCA ve SAST analiz sonuçlarındaki farklılığı göstermek için örnek proje olarak sıklıkla kullanılan Webgoat’ı seçtim. Projeye aşağıdaki linkten erişebilirsiniz:
https://github.com/WebGoat/WebGoat/releases/tag/v2023.8
Proje üzerinde Fortify Static Code Analyzer ile yapılan SAST taramasında toplam 674 dosya ve 112073 satır kod taranmıştır.
Tarama sonucunda tespit edilen zafiyetlere Fortify Audit Workbench uygulaması üzerinden kategori bazında baktığımızda aşağıdaki zafiyetleri görüyoruz:
Burada tespit edilen zafiyetler görüldüğü üzere statik kod zafiyetleridir. Zafiyetleri bu sefer OWASP Top 10 2021’e göre gruplayalım:
OWASP’a göre grupladığımızda ise A01, A02, A03, A04 ve A07 kategorilerinde zafiyetler görüyoruz.
Aynı projede Sonatype Lifecycle ürünü ile SCA taraması yaptığımızda projede 39 komponent tespit edildi ve 17 komponentte toplam 71 bulgu tespiti yapıldı. SCA tarama sonuçları ise şu şekilde:
Ekran görüntüsünden görüleceği gibi SCA taramasında tamamen komponent bazlı bir tarama gerçekleştirilmiştir. Taramalar sonucunda zafiyetler seviye bazlı kategorilendirilerek gösterilmektedir.
Zafiyetlerin giderilmesi ile ilgili önerilere baktığımızda çoğunlukla komponent sürüm yükseltilmesi tavsiye edilmektedir. Örneğin:
SAST ürünlerinde ise tavsiyeler genellikle kodda değişiklik yapılması şeklinde olmaktadır. Komponentlerde kod değişikliği efektif ve makul olmayacağı için sürüm yükseltimi doğru çözüm yoludur.
Aynı şekilde komponentlerin hangi CVE’lerden etkilendiği listelenmektedir:
SCA taramalarında ayrıca komponent lisans tipleri de gösterilmekte ve sorunlu bir durum varsa bulgu olarak gösterilmektedir:
Örneklerden de görüldüğü gibi SAST ve SCA birbirinden farklı iki teknolojidir ve uygulama güvenliği süreçlerine her iki teknolojinin de dahil edilmesi gerekmektedir.