Uygulama güvenliği süreçlerinde güvenli bir pipeline oluşturmanın yolu, pipeline adımlarında gerekli güvenlik testlerinin düzgün bir şekilde yapılmasıdır. Bu sebeple, statik kod tarama araçlarının pipeline üzerinde build makinelerinde konumlanabiliyor olması gerekiyor. OpenText’de (Fortify) buradaki beklentiye Scancentral bileşeni ile cevap veriyor.
Static Code Analyzer (Sourceanalyzer) İle Tarama Yapmak
OpenText’in Static Code Analyzer (SCA) bileşeni ürünün motoru olarak çalışıyor. Projeyi 2 aşamada tarıyor;
- Translation: Kaynak kodlarının derleyip kendisinin anlayacağı özel bir formata dönüştürüyor.
- Analysis: Translation sonucu oluşan özel yapıyı (build) kullanarak güvenlik açıklarını analiz ediyor.
Sağlıklı bir tarama için Translation adımında build alınabilmesi, yani projenin ilgili build teknolojisi kullanılarak derlenebilmesi gerekiyor. Örneğin gradle ile build alınan bir Android Kotlin projesi için aşağıdaki formatta tarama yapmak gerekiyor.
- Translation:
sourceanalyzer -b MyProject gradle clean build
- Analysis:
sourceanalyzer -b MyProject -scan -f MyProject.fpr
Bu formatta taramayı sourceanalyzer’ın çalıştığı, gradle ve kotlin gereksinimlerinin sağlandığı tüm sistemlerde yapabiliriz.
Scancentral Mimarisinin Avantajları
Yukarıdaki örnekte MacOS üzerinde gradle ile build alabildiğimiz bir Android Kotlin projesini sourceanalyzer kullanarak taradık. Peki her build makinesinde sourceanalyzer kurup taramak zorunda mıyız? Ya da her sourceanalyzer makinesinde bu gereksinimler gerekli mi?
Evet, eğer sadece sourceanalyzer ile ilereyeceksek bu gereksinimlerin SCA’nın kurulu olduğu makinede sağlanıyor olması gerekiyor. Ancak burada scancentral yapısını uygularsak tarama makinesinde sourceanalyzer’ın çalışması gereken Java ve .net projeleri için gerekli .NET gereksinimlerini sağlamamız yeterli. Onun dışında herhangi bir gereksinime ihtiyacımız yok, sourceanalyzer kurulu olduğu makinede kotlin, gradle, maven, python, javascript vs. olmaksızın scancentral’dan gelen projeyi tarayabiliyor.
Peki bunu nasıl yapıyor?
Scancentral teknolojisi, projeyi paketlerken içerisine sensörün ihtiyacı olan gereksinimleri de ekleyerek gönderiyor. Bu şekilde oluşan paket, sensöre ulaştığında sensor başarılı bir şekilde tarama yapabiliyor.
Yukarıdaki görselde de gözüktüğü üzere, scancentral mimarisi ile sensör üzerinde projeye dair herhangi bir gereksinim bulunmamasına rağmen başarılı bir şekilde tarama yapabiliyoruz.
Uygulamalı bir şekilde scancentral yapısını incleyecek olursak, client tarafında taramanın aşağıdaki şekilde gönderildiğini görürüz.
/Applications/Fortify/Fortify_Apps_and_Tools_24.2.0/bin/scancentral -sscurl https://xxx/ssc -ssctoken 581xxx4af start -bt gradle -upload -application SimpleKotlin_Gradle -version 1 -uptoken 581xxx4af
(Standalone Scancentral Client ile tarama gönderildi.)
Ardından Windows’da kurulu olan sensöre düşen tarama başarılı bir şekilde tamamlanır.
Ancak burada dikkat etmemiz gereken en önemli nokta, taramak istediğimiz projenin build aracının scancentral tarafından destekleniyor olmasıdır. Scancentral şuan gradle, maven, dotnet ve msbuild’i desteklemektedir. Bunun dışındaki tüm build araçlarında local translation & remote scan yapılması gerekir.
Örneğin MacOS ortamında build almamızı sağlayan xcodebuild desteklenmediği için ilk olarak static code analyzer ile translate edip, ardından scancentral ile taramaya göndermemiz gerecektir.
- Translation:
sourceanalyzer -b MySwiftApp xcodebuild clean build -sdk iphonesimulator -allowProvisioningUpdate
- Analysis: **
/Applications/Fortify/Fortify_SCA_24.4.1/bin/scancentral** -sscurl https://xxx/ssc -ssctoken 58xxxaf start -upload -application SampleSwiftApp -version 1 -b MySwiftApp -scan
Bu şekilde MacOS üzerinde oluşturduğumuz Mobile Build Sessions (MBS) dosyasını scancentral ile sensöre göndermiş ve Windows üzerinde taramış olduk.