Siber güvenlik tehditleri her geçen gün daha karmaşık ve yaygın hale geldikçe, yalnızca tek bir test türüne güvenen yazılım geliştirme ekipleri, uygulamalarını ciddi risklere maruz bırakıyor. Modern yazılım geliştirme süreçlerinde, güvenliği sağlamak için farklı yöntemleri bir arada kullanmak, uygulamaların hem dağıtım öncesinde hem de sonrasında korunmasını sağlayarak tehditlere karşı daha kapsamlı bir güvenlik kalkanı oluşturur. Bu bağlamda, iki önemli güvenlik testi yöntemi olan Statik Uygulama Güvenliği Testi (SAST) ve Dinamik Uygulama Güvenliği Testi (DAST), bu eksikliği gidermede büyük bir rol oynar.
SAST ve DAST: Kapsamlı Güvenlik Testleri
SAST, uygulamanın dağıtımından önce, hareketsiz durumda olan kaynak kodu analiz eder ve yazılımın derinlemesine incelenmesini sağlar. Öte yandan, DAST, canlı uygulamalara saldırı simülasyonları gerçekleştirir ve yalnızca çalışma anında tespit edilebilecek güvenlik açıklarını ortaya çıkarır. Bu iki yöntem birlikte kullanıldığında, hem kodun statik olarak incelenmesi hem de uygulamanın gerçek dünyadaki performansının test edilmesi sağlanır.
Bir yazılım geliştirme sürecinde sadece E2E (uçtan uca) testler veya birim testleri ile sınırlı kalmak, uygulamanın işlevselliğini sağlarken güvenlik açıklarını gözden kaçırabilir. Bu noktada SAST ve DAST gibi güvenlik test yöntemleri devreye girerek, olası açıkların henüz istismar edilmeden önce tespit edilmesine ve giderilmesine olanak tanır.
SAST (Statik Uygulama Güvenliği Testi) Nedir?
SAST, yazılım geliştirme sürecinin erken aşamalarında uygulama kaynak kodunun güvenlik açıkları açısından taranmasını sağlar. Bu yöntemle, kod yürütülmeden önce olası güvenlik açıkları tespit edilir. SQL enjeksiyonu, arabellek taşmaları, XML Dış Varlık (XXE) saldırıları gibi güvenlik tehditleri, SAST araçlarıyla erken safhada belirlenebilir.
SAST Test Araçları
- Klocwork: C, C++, C#, Java, JavaScript ve Python gibi birçok dili destekleyen bir statik analiz aracıdır.
- Checkmarx: Birden fazla programlama dili için destek sunar ve uygulama kodundaki güvenlik açıklarını tespit etmek için yaygın olarak kullanılır.
SAST araçlarının en önemli avantajlarından biri, sürekli entegrasyon ve dağıtım (CI/CD) süreçlerine entegre edilebilmesidir. Geliştiriciler, kodu her depoya göndermeden önce bu araçları kullanarak güvenlik açıklarını erken aşamada yakalayabilir. Bu da yazılım geliştirme döngüsünü hızlandırır ve olası maliyetli güvenlik açıklarının daha sonradan ortaya çıkmasını önler.
DAST (Dinamik Uygulama Güvenliği Testi) Nedir?
DAST, canlı bir uygulamaya saldırılar simüle ederek, çalışma zamanında ortaya çıkan güvenlik açıklarını tespit eder. SAST’ın aksine, uygulamanın kaynak koduna erişimi olmayan bu yöntem, dışarıdan bir saldırganın bakış açısıyla hareket eder. Bu sayede, uygulama çalışırken sadece o anda görülebilen güvenlik açıkları belirlenir. Özellikle kimlik doğrulama, yetkisiz erişim ve yapılandırma hataları gibi tehditlerin tespitinde etkilidir.
DAST Test Araçları
- Arachni: Web uygulamalarında XSS, SQL enjeksiyonu ve dosya ekleme gibi yaygın güvenlik açıklarını tarayan açık kaynaklı bir araçtır. Ticari DAST araçları kullanmadan önce Arachni gibi bir çözümü denemek faydalı olabilir.
DAST testleri, genellikle uygulamanın geliştirme sürecinin sonraki aşamalarında, özellikle ön üretim ve üretim aşamalarında kullanılır. Bu sayede, uygulama gerçek dünya koşullarında test edilerek daha geniş bir güvenlik kapsamı sağlanır.
SAST ve DAST Birlikte Nasıl Kullanılır?
SAST ve DAST arasında seçim yapmak zorunda değilsiniz; bu iki yöntem birbirini tamamlayan özelliklere sahiptir. SAST, geliştiricilerin erken aşamalarda kod yazarken güvenlik en iyi uygulamalarını takip etmelerine yardımcı olurken, DAST uygulamanın çalışırken nasıl davrandığını kontrol eder. Bu kombinasyon, güvenlik açıklarının hem geliştirme hem de üretim aşamalarında tespit edilmesini sağlar.
Örnek Uygulama
Bir CI/CD sürecinde her iki yöntemin nasıl uygulanabileceğine dair basit bir örnek:
# SAST için bir Checkmarx taraması başlatma komutu
checkmarx –source-path /my_project/source_code –scan-id “build-001”# DAST için bir OWASP ZAP taraması başlatma komutu
zap-cli quick-scan –self-contained –start-options “-daemon” –target “http://myapp.com”
Bu kod örneğinde, Checkmarx aracıyla kaynak kodu üzerinde statik bir analiz yapılırken, OWASP ZAP ile dinamik bir tarama gerçekleştirilir. Bu iki tarama süreci, CI/CD pipeline’ında otomatikleştirilebilir ve böylece sürekli güvenlik kontrolleri sağlanır.
Diğer Güvenlik Test Yöntemleri: IAST, RASP, HAST
SAST ve DAST yöntemlerinin dışında, yazılım güvenliğini sağlamak için kullanılan farklı test yöntemleri de bulunmaktadır:
- IAST (Etkileşimli Uygulama Güvenliği Testi): Hem SAST hem de DAST metodolojilerini birleştirir.
- RASP (Çalışma Zamanı Uygulama Kendini Koruma): Uygulama çalışma zamanında ortaya çıkan güvenlik açıklarını test eder ve saldırılara karşı koruma sağlar.
SonarQube ile SAST Entegrasyonu
SonarQube, kod kalitesi ve güvenliği için sıkça kullanılan bir araçtır. CI/CD süreçlerine entegre ederek SAST testlerini otomatik hale getirebilirsiniz.
SonarQube Tarama Örneği (GitLab CI/CD):
# .gitlab-ci.yml dosyasında
stages:
– scansonarqube_scan:
stage: scan
image: sonarsource/sonar-scanner-cli:latest
script:
– sonar-scanner
-Dsonar.projectKey=my_project
-Dsonar.sources=.
-Dsonar.host.url=http://sonarqube-server:9000
-Dsonar.login=$SONARQUBE_TOKEN
only:
– master
Bu örnekte:
- SonarQube tarayıcısı, kaynak kodun güvenlik ve kod kalitesi açısından taranmasını sağlar.
SONARQUBE_TOKEN
ile SonarQube sunucusuna güvenli bir bağlantı kurulur.- Bu işlem sadece
master
dalında çalıştırılır.
OWASP ZAP ile DAST Entegrasyonu
OWASP ZAP, dinamik güvenlik testi (DAST) yapmak için kullanılır. Aşağıda bir Jenkins pipeline’ına ZAP entegrasyonu örneği bulabilirsiniz.
pipeline {
agent anystages {
stage(‘DAST Scan’) {
steps {
script {
// ZAP’ı arka planda başlatma
sh “zap.sh -daemon -config api.key=12345”// Hedef uygulamayı tarama
sh “zap-cli quick-scan –self-contained –start-options \”-daemon\” –api-key 12345 –target http://myapp.com”// Tarama sonuçlarını raporlama
sh “zap-cli report -o zap_report.html -f html”
}
}
}
}post {
always {
archiveArtifacts artifacts: ‘zap_report.html’, allowEmptyArchive: true
}
}
}
Bu örnek:
- ZAP CLI kullanarak uygulama URL’sini tarar.
- Taramadan sonra oluşturulan HTML raporu, Jenkins tarafından arşivlenir.
Trivy ile Konteyner Güvenliği (Container Security) Entegrasyonu
Trivy, konteyner imajlarını güvenlik açıklarına karşı taramak için kullanılan hafif bir araçtır. Docker imajlarını CI/CD süreçlerinde taramak yaygındır.
Docker imajı tarama (GitHub Actions):
name: Docker Security Scan
on:
push:
branches:
– mainjobs:
trivy-scan:
runs-on: ubuntu-latest
steps:
– name: Checkout code
uses: actions/checkout@v2– name: Install Trivy
run: |
sudo apt-get install -y wget
wget https://github.com/aquasecurity/trivy/releases/download/v0.22.0/trivy_0.22.0_Linux-64bit.deb
sudo dpkg -i trivy_0.22.0_Linux-64bit.deb– name: Scan Docker image
run: |
trivy image myapp:latest
Bu örnekte:
- Trivy kurulumu yapılır.
- Docker imajı
myapp:latest
güvenlik açıklarına karşı taranır. - Taramada elde edilen sonuçlar terminalde gösterilir.
Bandit ile Python Projeleri için Güvenlik Taraması (SAST)
Bandit, Python projelerindeki güvenlik açıklarını analiz etmek için kullanılan bir araçtır. Python projelerinde statik güvenlik testi yapmak için kullanılabilir.
Bandit Taraması (CircleCI):
Jenkinsfile’da OWASP ZAP DAST Örneği:
version: 2.1
jobs:
security_scan:
docker:
– image: circleci/python:3.8
steps:
– checkout
– run:
name: Install Bandit
command: pip install bandit
– run:
name: Run Bandit Security Scan
command: bandit -r my_python_project/
– store_artifacts:
path: bandit_report.txt
destination: security_reports/
workflows:
version: 2
scan:
jobs:
– security_scan
Bu örnekte:
- Python ortamında Bandit yüklenir.
my_python_project/
dizinindeki tüm Python dosyaları taranır.- Tarama sonuçları bandit_report.txt dosyasına kaydedilir.
Sonuç olarak, SAST ve DAST yöntemleri, modern yazılım geliştirme süreçlerinin güvenlik açısından daha sağlam ve kapsamlı olmasını sağlar. Her iki yöntemin de CI/CD süreçlerine entegre edilmesi, geliştiricilerin yazılımın güvenlik açıklarını erkenden tespit edip gidermesine yardımcı olurken, aynı zamanda siber saldırılara karşı daha dirençli uygulamalar oluşturulmasını sağlar.