
DevSecOps, güvenliği planlama ve kodlamadan test, dağıtım ve operasyonlara kadar yazılım geliştirme yaşam döngüsünün her aşamasına entegre etme uygulamasıdır. DevSecOps, güvenliği son bir kapı (veya daha kötüsü sonradan akla gelen bir düşünce) olarak ele almak yerine, güvenliği geliştirme, operasyonlar ve güvenlik ekipleri arasında sürekli, paylaşılan bir sorumluluk haline getirir.
DevSecOps, güvenliği planlama ve kodlamadan test, dağıtım ve operasyonlara kadar yazılım geliştirme yaşam döngüsünün her aşamasına entegre etme uygulamasıdır. DevSecOps, güvenliği son bir kapı (veya daha kötüsü sonradan akla gelen bir düşünce) olarak ele almak yerine, güvenliği geliştirme, operasyonlar ve güvenlik ekipleri arasında sürekli, paylaşılan bir sorumluluk haline getirir.
Temel felsefe **"sola kaydırma"**dır; güvenlikle ilgili endişeleri geliştirme sürecinde mümkün olduğu kadar erken, en ucuz ve düzeltilmesi en kolay zamanda ele alın. Üretimde bulunan bir güvenlik açığının düzeltilmesi, tasarım sırasında yakalanan güvenlik açığından 100 kat daha fazla maliyetlidir.
Stage Cost to Fix Detection
──────────────────────────────────────────────
Design $1 Threat modeling, architecture review
Development $6 SAST, peer review
Testing $15 DAST, penetration testing
Staging $40 Integration tests
Production $100+ Incident response, breach
Kaynak: IBM Sistem Bilimi Enstitüsü
DevOps'un "kod olarak altyapı"yı getirmesi gibi, DevSecOps da "kod olarak güvenlik" getiriyor:
# .sast.yml — Security policies defined in code
version: 1.0
policies:
sql_injection:
severity: critical
action: block_build
hardcoded_secret:
severity: high
action: alert_and_review
deprecated_api:
severity: medium
action: warn
Plan → Code → Build → Test → Deploy → Operate
│ │ │ │ │ │
├─ Threat Model
│ ├─ SAST
│ ├─ Dependency Scan
│ ├─ Container Scan
│ ├─ DAST
│ ├─ IaC Scan
│ ├─ Sign
│ ├─ Policy Check
│ ├─ Monitoring
│ ├─ SIEM
│ ├─ Incident Response
Kod yazmadan önce STRIDE gibi çerçeveleri kullanarak potansiyel tehditleri belirleyin:
| Kategori | Örnek | Azaltma |
|---|---|---|
| Spoofing | Saldırgan bir kullanıcının kimliğine bürünür | Kimlik doğrulama (MFA, JWT) |
| Tamperleme | Saldırgan aktarım halindeki verileri değiştirir | TLS, imzalama |
| Rreddedilme | Kullanıcı bir eylemi reddeder | Denetim günlüğü |
| Ibilgi Açıklama | Hata mesajları yoluyla veri sızıntısı | Doğru hata yönetimi |
| **Hizmet Reddi | API'yi isteklerle boğun | Hız sınırlaması |
| E Ayrıcalığın kaldırılması | Normal kullanıcı yönetici erişimi kazanır | RBAC, yetkilendirme kontrolleri |
Araç: OWASP Threat Dragon — STRIDE desteğine sahip açık kaynaklı tehdit modelleme aracı.
SAST, kaynak kodunu çalıştırmadan güvenlik açıklarına karşı analiz eder.
// SAST will flag this as SQL injection
app.get('/user', (req, res) => {
const sql = `SELECT * FROM users WHERE id = '${req.query.id}'`;
db.query(sql);
});
// Corrected version
app.get('/user', (req, res) => {
const sql = 'SELECT * FROM users WHERE id = ?';
db.query(sql, [req.query.id]);
});
SAST Araçları:
| Alet | Diller | Entegrasyon |
|---|---|---|
| SonarQube | 30'dan fazla dil | GitHub/GitLab CI, Jenkins |
| Segrep | Python, Go, JS, TS, Java vb. | CLI, CI, ön taahhüt |
| CodeQL | C/C++, C#, Java, JS/TS, Python | GitHub Gelişmiş Güvenlik |
| Checkmarx | 20'den fazla dil | Kurumsal SDLC |
CI Entegrasyonu:
# GitHub Actions — SAST on every PR
name: SAST
on: [pull_request]
jobs:
sast:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Semgrep
uses: semgrep/semgrep-action@v1
with:
config: p/default
- name: Check results
run: |
if [ -f semgrep-results.json ]; then
CRITICAL=$(jq '.results | map(select(.severity=="CRITICAL")) | length' semgrep-results.json)
if [ "$CRITICAL" -gt 0 ]; then
echo "❌ $CRITICAL critical vulnerabilities found"
exit 1
fi
fi
Açık kaynaklı kütüphaneler modern uygulamaların %60-80'ini oluşturur. Her bağımlılık potansiyel bir saldırı vektörüdür.
Önemli tedarik zinciri saldırıları:
# Dependency scanning with Trivy
$ trivy fs --scanners vuln --severity CRITICAL,HIGH .
Total: 14 (CRITICAL: 3, HIGH: 11)
┌──────────────────────┬──────────────────┬──────────┬───────────────────┐
│ Package │ Vulnerability ID │ Severity │ Installed Version │
├──────────────────────┼──────────────────┼──────────┼───────────────────┤
│ lodash │ CVE-2024-1234 │ CRITICAL │ 4.17.20 │
│ express │ CVE-2024-5678 │ HIGH │ 4.18.1 │
└──────────────────────┴──────────────────┴──────────┴───────────────────┘
Bağımlılık sürümlerini kilitleyin ve bütünlük karmalarını kullanın:
// package-lock.json ensures reproducible builds with hashes
"lodash": {
"version": "4.17.21",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
}
# Bad practice: large base image, runs as root
FROM node:20
COPY . .
RUN npm install
USER root
CMD ["node", "app.js"]
# Good practice: minimal base image, non-root user
FROM node:20-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
COPY --chown=appuser:appgroup . .
RUN npm ci --production
USER appuser
CMD ["node", "app.js"]
# Scan container image
$ trivy image myapp:latest
┌──────────────────┬──────────────────┬──────────┐
│ Library │ Vulnerability │ Severity │
├──────────────────┼──────────────────┼──────────┤
│ libcrypto │ CVE-2024-9999 │ CRITICAL │
│ bash │ CVE-2024-8888 │ HIGH │
└──────────────────┴──────────────────┴──────────┘
Recommendation: Use distroless or scratch base images
DAST, çalışan uygulamayı güvenlik açıklarına karşı test eder:
# OWASP ZAP automated scan
docker run -v $(pwd):/zap/wrk:rw zaproxy/zap-stable \
zap-cli quick-scan \
--self-contained \
--start-options '-config api.addrs.addr.name=.*' \
http://staging.example.com
# Generate HTML report
zap-cli report -o zap-report.html -f html
DAST kapsamı (OWASP İlk 10):
# Cosign — sign container images
cosign sign --key cosign.key registry.example.com/myapp:latest
# Verify before deployment
cosign verify --key cosign.pub registry.example.com/myapp:latest
# OPA/Gatekeeper — Deny privileged containers
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sBlockPrivilegedContainers
metadata:
name: no-privileged-containers
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
enforcementAction: deny
validation:
message: "Privileged containers are not allowed"
deny:
conditions:
- key: "spec.containers[].securityContext.privileged"
operator: In
values: ["true"]
# Filebeat configuration for shipping logs to ELK
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*.log
output.elasticsearch:
hosts: ["https://elasticsearch:9200"]
username: "filebeat"
password: "${ELASTIC_PASSWORD}"
SIEM algılama kuralları:
# Elastic Security rule: Multiple failed logins
sequence by source.ip
with maxspan=5m
[authentication where event.action == "login_failed"] |
[authentication where event.action == "login_failed"] |
[authentication where event.action == "login_success"]
# Falco rule: Shell in container
- rule: Terminal shell in container
desc: A shell was spawned in a container
condition: container.id != host
and proc.name in (bash, zsh, sh, ash)
and spawned_process
output: "Shell spawned in container (user=%user.name container=%container.id)"
priority: WARNING
DevSecOps, araçlarla olduğu kadar kültür ve süreçlerle de ilgilidir:
| Prensip | Geleneksel | DevSecOps |
|---|---|---|
| Güvenlik sahipliği | Güvenlik ekibi buranın sahibi | Herkes ona sahip |
| Güvenlik gerçekleştiğinde | Geliştirmenin sonu | Boyunca sürekli |
| Geri bildirim nasıl iletilir? | "Hayır" (engelleyici) | "Evet, eğer..." (etkinleştirici) |
| Takım yapısı | Ayrı silolar | Çapraz fonksiyonel |
| Otomasyon | Manuel güvenlik kapıları | Otomatik güvenlik kontrolleri |
| Hız ve Güvenlik | Takas (yavaş ve güvenli ile hızlı ve güvensiz) | Her ikisi de — otomatik güvenlik hız sağlar |
Geliştirme ekipleri içindeki güvenlik şampiyonlarını belirleyin:
| Faz | Araç Seçenekleri | Amaç |
|---|---|---|
| Tehdit Modellemesi | OWASP Tehdit Ejderhası, Microsoft Tehdit Modelleme Aracı | Tehditleri erken tespit edin |
| SAST | SonarQube, Semgrep, CodeQL, Checkmarx | Statik kod analizi |
| Bağımlılık | Snyk, Dependabot, Trivy, OWASP DC | Açık kaynaklı güvenlik açığı yönetimi |
| Konteyner | Trivy, Clair, Docker Scout, Grype | Görüntü güvenlik açığı taraması |
| DAST | OWASP ZAP, Burp Paketi, Acunetix | Çalışma zamanı güvenlik açığı testi |
| IaC | Checkov, tfsec, Terrascan, KICS | Altyapı yanlış yapılandırma tespiti |
| Sırlar | GitGuardian, TruffleHog, Gitleaks | Koddaki sırları tespit edin |
| İmzalama | Cosign, Sigstore, Noter | Yapıt imzalama ve doğrulama |
| Politika | OPA/Gatekeeper, Kyverno, Sentinel | Politika yaptırımı |
| Çalışma zamanı | Falco, AppArmor, Secomp | Çalışma zamanı tehdit tespiti |
| SIEM | ELK, Splunk, Datadog Güvenliği, Sentinel | Günlük toplama ve tehdit algılama |
DevSecOps, güvenliği bir darboğazdan kolaylaştırıcıya dönüştürür. Güvenlik kontrollerini geliştirme yaşam döngüsünün her aşamasına entegre ederek ve bunları CI/CD işlem hatlarında otomatikleştirerek kuruluşlar şunları yapabilir:
En yüksek etkili, en düşük sürtünmeli araçlarla başlayın: SAST ve bağımlılık taraması. Kapsayıcı taramayı, DAST ve IaC taramasını aşamalı olarak ekleyin. İlerlemeyi ölçün, galibiyetleri kutlayın ve tekrarlayın.
Henüz onaylı yorum yok. Yeni yanıtlar moderasyon bekleyebilir.