Cyber Security 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, Security 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 Security kalkanı oluşturur. Bu bağlamda, iki önemli Security testi yöntemi olan Statik Uygulama Security Testi (SAST) ve Dinamik Uygulama Security Testi (DAST), bu eksikliği gidermede büyük bir rol oynar.
SAST ve DAST: Kapsamlı Security 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 Security 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 Security açıklarını gözden kaçırabilir. Bu noktada SAST ve DAST gibi Security test yöntemleri devreye girerek, olası açıkların henüz istismar edilmeden önce tespit edilmesine ve giderilmesine olanak tanır.
SAST (Statik Uygulama Security Testi) What Is It?
SAST, yazılım geliştirme sürecinin erken aşamalarında uygulama kaynak kodunun Security açıkları açısından taranmasını sağlar. Bu yöntemle, kod yürütülmeden önce olası Security açıkları tespit edilir. SQL enjeksiyonu, arabellek taşmaları, XML Dış Varlık (XXE) saldırıları gibi Security 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 Security 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 Security 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 Security açıklarının daha sonradan ortaya çıkmasını önler.
DAST (Dinamik Uygulama Security Testi) What Is It?
DAST, canlı bir uygulamaya saldırılar simüle ederek, çalışma zamanında ortaya çıkan Security 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 Security açıkları belirlenir. Özellikle IDENTITY 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 Security 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 Security 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 Security en iyi uygulamalarını takip etmelerine yardımcı olurken, DAST uygulamanın çalışırken nasıl davrandığını kontrol eder. Bu kombinasyon, Security 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 Security kontrolleri sağlanır.
Diğer Security Test Yöntemleri: IAST, RASP, HAST
SAST ve DAST yöntemlerinin dışında, yazılım Securityni sağlamak için kullanılan farklı test yöntemleri de bulunmaktadır:
- IAST (Etkileşimli Uygulama Security Testi): Hem SAST hem de DAST metodolojilerini birleştirir.
- RASP (Çalışma Zamanı Uygulama Kendini Koruma): Uygulama çalışma zamanında ortaya çıkan Security açıklarını test eder ve saldırılara karşı koruma sağlar.
SonarQube ile SAST Entegrasyonu
SonarQube, kod kalitesi ve Security 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 Security ve kod kalitesi açısından taranmasını sağlar.
SONARQUBE_TOKENile SonarQube sunucusuna güvenli bir bağlantı kurulur.- Bu işlem sadece
masterdalında çalıştırılır.
OWASP ZAP ile DAST Entegrasyonu
OWASP ZAP, dinamik Security 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 Resultsı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 Security (Container Security) Entegrasyonu
Trivy, konteyner imajlarını Security 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:latestSecurity açıklarına karşı taranır. - Taramada elde edilen Results terminalde gösterilir.
Bandit ile Python Projeleri için Security Taraması (SAST)
Bandit, Python projelerindeki Security açıklarını analiz etmek için kullanılan bir araçtır. Python projelerinde statik Security 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 Resultsı bandit_report.txt dosyasına kaydedilir.
Sonuç olarak, SAST ve DAST yöntemleri, modern yazılım geliştirme süreçlerinin Security 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 Security açıklarını erkenden tespit edip gidermesine yardımcı olurken, aynı zamanda Cyber saldırılara karşı daha dirençli uygulamalar oluşturulmasını sağlar.











