Makale

DevSecOps: Güvenliği DevOps'a Entegre Etme

DevSecOps: Güvenliği DevOps'a Entegre Etme

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.

4 dk okumaDil: TR TürkçeÜcretsiz0 alkış0 yorum
TeknolojiMühendislik MakaleleriSiber Güvenlik RehberleriSecurityDevOpsDevSecOpsTechnologyEngineering ArticlesCybersecurityCybersecurity GuidesIntegrating
Okuma seçenekleri

giriiş

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.


Sola Geçiş Felsefesi

Güvenlik Açıklarını Düzeltmenin Maliyeti

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ü

Kod Olarak Güvenlik

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

DevSecOps İşlem Hattı

Plan → Code → Build → Test → Deploy → Operate
 │      │       │       │       │        │
 ├─ Threat Model
 │      ├─ SAST
 │              ├─ Dependency Scan
 │              ├─ Container Scan
 │                      ├─ DAST
 │                      ├─ IaC Scan
 │                              ├─ Sign
 │                              ├─ Policy Check
 │                                      ├─ Monitoring
 │                                      ├─ SIEM
 │                                      ├─ Incident Response

1. Planlama Aşaması — Tehdit Modellemesi

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ı.

2. Kod Aşaması - Statik Uygulama Güvenliği Testi (SAST)

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

3. Oluşturma Aşaması - Bağımlılık ve Konteyner Taraması

Bağımlılık Taraması

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ı:

  • Event-stream (2018) — Kötü amaçlı paket, cüzdanlardan Bitcoin çaldı.
  • SolarWinds (2020) — Arka kapılı derleme hattı 18.000'den fazla kuruluşu etkiledi.
  • Log4j (2021) — Yaygın olarak kullanılan günlük kaydı kitaplığında kritik RCE.
  • xz utils (2024) — Linux sıkıştırma kitaplığında SSH arka kapısı.
# 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=="
}

Konteyner Görüntüsü Tarama

# 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

4. Test Aşaması — Dinamik Uygulama Güvenliği Testi (DAST)

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):

  • A01: Bozuk Erişim Kontrolü
  • A02: Şifreleme Hataları
  • A03: Enjeksiyon (SQL, NoSQL, OS komutu)
  • A04: Güvenli Olmayan Tasarım
  • A05: Güvenlik Yanlış Yapılandırması
  • A06: Savunmasız Bileşenler
  • A07: Kimlik Doğrulama Hataları
  • A08: Veri Bütünlüğü Hataları
  • A09: Günlüğe Kaydetme/İzleme Hataları
  • A10: SSRF

5. Dağıtım Aşaması - Politika Uygulaması

İmzalama ve Doğrulama

# 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

Giriş Denetleyicileri (Kubernetes)

# 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"]

6. İşletme Aşaması — Sürekli İzleme

Güvenlik Bilgileri ve Olay Yönetimi (SIEM)

# 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"]

Çalışma Zamanı Koruması

  • Falco — Container'lar ve Kubernetes için çalışma zamanı güvenlik izlemesi.
  • AppArmor / SELinux — Linux'ta zorunlu erişim kontrolü.
  • Seccomp — Konteynerlere sunulan sistem çağrılarını kısıtlayın.
# 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 Kültürü

DevSecOps, araçlarla olduğu kadar kültür ve süreçlerle de ilgilidir:

Kültürel İlkeler

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

DevSecOps Programı Oluşturma

  1. Küçük başlayın — SAST ve bağımlılık taramasını tek bir ardışık düzene ekleyin.
  2. Değeri göster — Üretimden önce yakalanan güvenlik açıklarını izleyin.
  3. Otomatikleştirin, engellemeyin — Güvenlik kapıları engelleyiciler değil geri bildirim sağlamalıdır.
  4. Geliştiricileri eğitin — Her takımda güvenlik şampiyonları.
  5. Ölçüm — Ortalama düzeltme süresi (MTTR), güvenlik açığı yoğunluğu.

Güvenlik Şampiyonları Programı

Geliştirme ekipleri içindeki güvenlik şampiyonlarını belirleyin:

  • Güvenlik ve geliştirme arasında köprü görevi görür.
  • Güvenlik aracı bulgularını inceleyin.
  • Akran güvenliği incelemeleri gerçekleştirin.
  • En iyi güvenlik uygulamaları konusunda güncel kalın.

DevSecOps Araç Zinciri Özeti

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

Çözüm

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:

  1. Güvenlik açıklarını daha erken yakalayın — Düzeltilmesi 100 kat daha ucuz olduğunda.
  2. Daha hızlı gönderin — Otomatik güvenlik kapıları, manuel incelemeden daha hızlıdır.
  3. Riski azaltın — Sürekli güvenlik izleme, insanların kaçırdığı şeyleri yakalar.
  4. Güvenlik kültürü oluşturun — Güvenlik herkesin sorumluluğu haline gelir.

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.

Öne Çıkan Makaleler

2026’da Oluşturmaya Değer 50 Claude Skill
EditoryalTR
8 dkÜcretsiz

2026’da Oluşturmaya Değer 50 Claude Skill

Claude Skills, tekrarlanan promptları yeniden kullanılabilir workflow’lara dönüştürebilir. İşte yazma, kodlama, araştırma, iş, üretkenlik, tasarım, analiz ve destek için 50 pratik Claude Skill.

TeknolojiAIAi GuidesAI Agents
0 alkış
Oku
Senior Engineer’lardan Öğrendiğim 6 Kodlama Pattern’i
EditoryalTR
8 dkÜcretsiz

Senior Engineer’lardan Öğrendiğim 6 Kodlama Pattern’i

TeknolojiCodeProgrammingCoding
0 alkış
Oku
Özel Bir Yapay Zeka Not Asistanı Kurun
Öne çıkanTR
9 dkÜcretsiz

Özel Bir Yapay Zeka Not Asistanı Kurun

Markdown notlarını özel taslakları açığa çıkarmadan aranabilir bir asistana dönüştürün.

TeknolojiPlatform RehberleriYapay Zeka YazımıAIAutomationData
0 alkış
Oku

Yorumlar

0 yorum

Henüz onaylı yorum yok. Yeni yanıtlar moderasyon bekleyebilir.