SSDLC Süreçlerinde Bileşen Analizi: SCA - OWASP Dependency Track ve Fortify SSC Entegrasyonu

SSDLC Süreçlerinde Bileşen Analizi: SCA - OWASP Dependency Track ve Fortify SSC Entegrasyonu

Selamlar, bu yazımızda Docker ile Dependency Track kurulumunu gerçekleştirip ardından Secure Development Life Cycle (SDLC) süreçlerimize OWASP Dependency Track’ı dahil edeceğiz.

İlk olarak Dependency Track’ın yorumlayabilmesi için OWASP CycloneDX ile bir BOM (Bill of Materials) dosyası oluşturup ardından bu dosyayı Dependency Track’a verip analiz ettireceğiz. Analiz sonuçlarını da Fortify SSC’ye gönderip SAST & SCA süreçlerini birleştirmiş olacağız.

Bilmeyenler için Dependency Track açık kaynak kodlu bir Component Analysis (Bileşen Analizi) çözümüdür. Component Analysis kavramı, geliştirilen yazılım projelerinde kullanılan 3. parti kütüphanelerin güvenliğinin analiz edilmesini amaçlayan bir güvenlik tekniğidir. Component Analysis düzgün yapılmadığı taktirde, tarihte birçok örneğiyle karşılaştığımız ve çok kritik etkileri olduğunuz gördüğümüz Supply Chain saldırıları ortaya çıkmaktadır.

Bu noktada Dependency Track, Yazılım Malzeme Listesi (SBOM)’dan yararlanarak projelerde kullanılan 3. parti kütüphanelerin takibini gerçekleştirmektedir.

Dependency Track Kurulumu

Dependency Track, Docker üzerinde ayağa kaldırılabildiği için çok hızlı bir şekilde kurulabiliyor. Kurulum işlemi için tek yapmanız gereken şey docker-compose.yml dosyasını indirip ardından docker compose ile kurulumu gerçekleştirmek.

  • Eğer Dependency Track’ı farklı bir sunucu üzerinde kurup tarayıcınız ile ulaşmak isterseniz docker-compose.yml dosyası içerisinde yer alan API_BASE_URL=http://localhost:8081 değerini API_BASE_URL=http://<Server-IP>:8081 şeklinde güncellemeniz gerekmektedir.
  • Eğer Fortify SSC yerel bir sertifika ile SSL/TLS üzerinden hizmet veriyorsa, ilgili internal sertifika Dependency Track’ın trust store’una eklenmelidir. Bunun için “Fortify SSC Sunucusunun SSL Sertifikasının Eklenmesi” başlığını takip edebilirsiniz.

Fortify SSC Sunucusunun SSL Sertifikasının Eklenmesi (Opsiyonel)

Eğer Fortify SSC tarafında HTTPS üzerinden hizmet veriliyorsa, Dependency Track’ın ilgili SSL sertifikasına güvenmesi için container’ın Trust Store’una eklenmesi gerekmektedir.

  • API container’ından varsayılan cacert export edilir:
    • container_id=$(docker run -d --rm dependencytrack/apiserver:latest)
    • docker cp "$container_id:/opt/java/openjdk/lib/security/cacerts" .
    • docker stop $container_id

      image.png

  • Fortify SSC tarafında kullanılan fortify-certificate.der sertifikas export edilip çalışma dizinine getirilir ve eclipse-temurin:11-jre imajı kullanılarak dtrack-apiserver’ın trust store’una eklenir:

      docker run --rm -it -v "$(pwd):/work" eclipse-temurin:11-jre \
         keytool -keystore /work/cacerts -storepass changeit \
         -noprompt -trustcacerts -importcert -alias fortify \
         -file /work/fortify-certificate.der
    
    • Sertifikayı başarılı bir şekilde Dependency Track cacerts’ine eklediğinizi aşağıdaki komut ile kontrol edebilirsiniz:

      image.png

        docker run --rm -it -v "$(pwd):/work" eclipse-temurin:11-jre \
           keytool -keystore /work/cacerts -storepass changeit \
           -list -alias fortify
      
  • docker-compose.yml içerisine dtrack-apiserver container’ı için cacert volume’ı eklenir ve mount edilir:

      services:
        dtrack-apiserver:
          # ...
          volumes:
          - "./cacerts:/opt/java/openjdk/lib/security/cacerts:ro"
    
curl -LO https://dependencytrack.org/docker-compose.yml
docker-compose up -d

Kurulum işlemi tamamlandıktan sonra http://SERVER-IP:8080 adresinden Dependency Track’ın arayüzüne erişim sağlayabilirsiniz. Giriş yapmak için varsayılan kullanıcı adı ve parola kullanılmalıdır. (admin:admin)

image.png

İlk Konfigürasyonlar

Kurulumu işlemi tamamlanıp oturum açıldıktan sonra yapılması gereken konfigürasyonlar bulunmaktadır:

  • Parola güncellemesi: İlk oturum açma işlemi sonrası varsayılan kimlik bilgileri değiştirilmelidir.
  • Base URL ayarlanması: http://SERVER-IP:8080 olarak ayarlanmalıdır.
  • Kullanıcıların, rollerin ve takımların oluşturulması: Yapınızdaki senaryoya göre ilgili kullanıcılar tanımlanıp yetkilendirme işlemi yapılmalıdır.
  • DB Ayarlanması: Dependency Track ilk kurulumda gömülü H2 veritabanı ile gelmektedir. H2 veritabanı canlı ortamlarda tavsiye edilmemektedir. Ürün testi bittikten sonra döküman takip edilerek uygun bir veritabanı kullanılmalıdır.

Dependency Track & Fortify SSC Entegrasyonu

https://github.com/DependencyTrack/fortify-ssc-plugin/releases adresinden SSC için Dependency Track eklentisi indirilip ardından kurulum işlemi gerçekleştirilmelidir.

Github üzerinden indirilen JAR dosyası SSC arayüzünde Adminstration > Plugins > Parser Plugins sayfasından NEW butonu kullanılarak SSC’ye import edilmelidir. Import işlemi tamamlandıktan sonra plugin ENABLE edilip kullanılır hale getirilmelidir.

image.png

SSC’de Dependency Track’ın API erişimi sağlayabilmesi için bir CIToken oluşturulur. Ardından Dependency Track’da Administration > Integrations > Fortify SSC menüsünden GUID formatındaki CIToken ve Fortify SSC URL adresi girilip ayarlar kaydedilir.

image.png

Dependency Track ve Fortify SSC iletişimi için global konfigürasyon yapıldıktan sonra proje bazlı konfigürasyon yapılmalıdır. Bu noktada yapacağımız ayarlar Fortify SSC’deki Application-Version ve Dependency Track’deki Application-Version ikililerinin eşleşmesini sağlamaktadır.

Bunun için Dependency Track arayüzünde Proje’ye gidip “View Details”e tıklayıp ardından Properties butonuna tıklanarak proje özellikleri açılmalıdır.

image.png

Sonrasında aşağıdaki ayarlar girilerek property tanımlanır:

Group Name integrations
Property Name fortify.ssc.applicationId
Property Value SSC’deki application version ID bilgisi
Property Type STRING

image.png

Bill of Materials (BOM) Dosyasının Üretilmesi

Entegrasyon işlemi tamamlandıktan sonra BOM (Bill of Materials) üretebilmek için kullanabileceğimiz bir araç ol CycloneDX kurulur. İşletim sisteminize uygun kurulum yönergesini https://github.com/CycloneDX/cdxgen adresinden takip edebilirsiniz.

Örneğin MacOS için “brew install cdxgen” komutu ile kurulum yapılmaktadır.

cdxgen kurulduktan sonra BOM üretilecek proje dizinine gidilip orada cdxgen komutu kullanılarak BOM dosyası oluşturulabilir. Dependency Track projesinin kodlarını tarayıp BOM dosyası oluşturmak için https://cyclonedx.github.io/cdxgen/#/LESSON1 adresindeki komutlar takip edilebilir.

Projenin clone’lanıp compile edilmesi:

git clone https://github.com/DependencyTrack/dependency-track
cd dependency-track
mvn clean compile -P clean-exclude-wars -P enhance -P embedded-jetty -DskipTests

BOM dosyasının oluşturulması:

cd dependency-track
cdxgen -o bom.json -t java --profile research . -p

cdxgen ile BOM oluşturulduktan sonra terminal ekranında aşağıdaki gibi bir çıktı oluşmalıdır.

image.png

Üretilen BOM dosyası Dependency Track’da ilgili proje’ye upload edilir. Bunun için Dependency Track’de ilgili projeye gidip Components sekmesinden Upload BOM butonu seçilip ardından bom.json seçilmelidir.

image.png

Ardından Audit Vulnerabilities sekmesinde zafiyetler gözükecektir:

image.png

Fortify SSC Integration sayfasında ayarlanan “Synchronization cadence (in minutes)” değerine istinaden ilgili dakika geçtikten sonra sonuçlar Fortify SSC’ye iletilecektir.

image.png

image.png

Özetle,

OWASP Dependency Track, SCA süreçlerinde aktif olarak açık kaynak kodlu bir projedir. Eğer SCA çalışması için daha kapsamlı, enterprise bir çözüm arıyorsanız burada Sonatype karşımıza çıkıyor. Forrester Wave’ın “The Forrester Wave™: Software Composition Analysis Software, Q4 2024” raporuna göre sektör lideri seçilen Sonatype; Nexus Repository, Repository Firewall, Lifecycle ve SBOM Manager çözümleriyle SCA süreçlerine uçtan uca çözüm sunuyor.

Written by

Resul Bozburun