Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Uçtan Uca: Bookstore Pipeline'ında Güvenlik Gate'leri, İstisna Yönetimi ve Ölçüm
Gürültüsüz bir güvenlik pipeline'ı PR'da yalnız geliştiricinin dakikalar içinde düzeltebileceği kontrolleri, main'de derin kontrolleri çalıştırır; fix'i olan critical ve high bulgu kırar, gerisi sahibi ve bitiş tarihi olan istisnalarla izlenir. Bookstore'un tek workflow'unu, süresi dolan istisnayı yakalayan bir gate'i, zafiyet yaşı ve MTTR ölçümünü, OpenSSF Scorecard'ı ve kontrollerin OWASP Top 10:2025 eşlemesini gerçek çıktılarla gösteriyoruz.
İmzalama ve Provenance: Sigstore, Artifact Attestation'ları ve SLSA v1.2
Bir image imzası içeriğin değişmediğini ve kimin imzaladığını, provenance ise hangi repo, workflow ve commit'ten üretildiğini kanıtlar; ikisi de ancak deploy anında doğrulanırsa işe yarar. Keyless Sigstore imzasını ve GitHub attestation'larını gerçek release'ler üzerinde doğruluyor, Bookstore image'ına SBOM attestation'ı bağlıyor, Kyverno ile imzasız ve tag'li image'ı reddediyor ve pipeline'ı SLSA v1.2'ye göre değerlendiriyoruz.
SBOM ve VEX: CycloneDX 1.7 ve SPDX 3 ile Ne Kullandığını Bilmek
SBOM, bir sürümün içindeki bileşenlerin makine okunur listesidir ve asıl değeri yeni bir CVE geldiğinde hangi ürünün hangi sürümünün etkilendiğini build almadan sorgulayabilmektir; VEX ise etkilenip etkilenmediğini gerekçesiyle beyan eder. Bookstore için .NET, Angular ve image SBOM'larını üretip doğruluyor, Dependency-Track'te sorguluyor ve OpenVEX ile CycloneDX VEX'i gerçek çıktılarla uyguluyoruz.
DAST: ZAP ile Çalışan Uygulamayı Taramak — Baseline, API Scan ve Authenticated Tarama
DAST çalışan uygulamaya dışarıdan istek gönderip header, cookie, hata sızıntısı ve yansıyan girdi gibi davranış açıklarını bulur; ama yalnız ulaşabildiği endpoint'leri tarar ve authorization hatasını göremez. Bookstore.Api'yi ZAP 2.17 ile baseline, API scan ve Automation Framework planıyla tarıyor, token'lı taramada oturumun düştüğünü yakalamayı, bulguları integration teste çevirmeyi ve main'de çalışan DAST job'ını gerçek çıktılarla gösteriyoruz.
Container ve IaC Scanning: Image Zafiyetleri, Base Image Seçimi ve Manifest Taraması
Image taraması, deploy edilen artifact'taki işletim sistemi paketlerini ve uygulama bağımlılıklarını birlikte denetler; bulguların çoğu kullanılmayan paketlerden gelir ve chiseled, non-root bir base image bunları büyük ölçüde ortadan kaldırır. Bookstore image'ında 42 bulgunun 6'ya inişini, Trivy ile Grype'ın farkını, Mart 2026 Trivy olayından sonra tarayıcıyı SHA ve cosign imzasıyla doğrulamayı, Dockerfile, Kubernetes ve Terraform taramasını gerçek çıktılarla gösteriyoruz.
SAST: CodeQL, Semgrep ve .NET Security Analyzer'ları ile Kaynak Kodda Güvenlik Açığı Aramak
SAST, kullanıcı girdisinin (source) tehlikeli bir çağrıya (sink) sanitizer'sız ulaştığı yolları arar; yalnız modellediği sink'leri görür ve iş kuralı ya da authorization eksikliği bulamaz. Bookstore'da CodeQL, Semgrep ve .NET security analyzer'larını aynı beş soruna karşı çalıştırıyor, kimin neyi bulduğunu, Bookstore'a özel test edilmiş bir Semgrep kuralını, false positive triage'ını ve yalnız yeni bulguyu kıran bir pipeline'ı gerçek çıktılarla gösteriyoruz.
Dependency Scanning Derinlemesine: NuGetAudit, npm audit, Dependabot ve Bulguları Önceliklendirmek
Dependency bulgularını CVSS skoruna göre sıralamak yetmez: aciliyeti KEV'deki sömürü kanıtı, EPSS'in 30 günlük sömürülme olasılığı ve kodun zafiyetli fonksiyona gerçekten ulaşıp ulaşmadığı belirler. Bookstore'da NuGetAudit'i repo seviyesinde ayarlıyor, .NET 10 package pruning'in false positive'i nasıl kaldırdığını, süreli NuGetAuditSuppress'i, EPSS/KEV sorgulayan bir triage aracını ve Dependabot'ta security ile version update'leri ayırmayı gerçek çıktılarla gösteriyoruz.
Secret Scanning: Pre-commit, Push Protection ve Sızan Secret'a İlk 30 Dakika
Secret scanning tek bir araç değil, katmanlardır: geliştirici makinesinde pre-commit, pipeline'da PR commit aralığı, GitHub'da push protection ve tüm geçmişin periyodik taranması; sızıntı olursa sıra her zaman önce rotate, sonra etki analizi, en son geçmişi temizlemektir. gitleaks 8.30'un varsayılan kurallarının dev önekli iki secret'ı neden kaçırdığını, Bookstore'a özel kuralları, base64 tespitini ve git-filter-repo ile temizliği gerçek çıktılarla gösteriyoruz.
DevSecOps Nedir? Güvenlik Kontrollerini Pipeline'ın Doğru Yerine Koymak
DevSecOps, güvenlik kontrollerini pipeline'da ihtiyaç duydukları bilginin ilk ortaya çıktığı yere koymak ve bulguyu kodu yazan ekibe o anda döndürmektir: secret pre-commit'te, SAST ve SCA PR'da, image taraması main'de, DAST deploy'dan sonra. Bookstore pipeline'ının önce/sonra haritasını çıkarıyor, Semgrep baseline ile yalnız yeni bulguyu kırmayı gerçek çıktılarla gösteriyor ve kontrolleri NIST SSDF ile OWASP DSOMM'a eşliyoruz.
OWASP API Security Top 10: 2019'dan 2023'e Ne Değişti ve Eski Raporları Bugünün Diliyle Okumak
2023 sürümünde Excessive Data Exposure ile Mass Assignment BOPLA'da birleşti, API2, API4 ve API9'un adı değişti, Injection ve Logging listeden çıktı, hassas iş akışları, SSRF ve güvensiz tüketim eklendi; bu yüzden eski bulgular numaraya göre değil anlama göre eşlenir. Eşleme tablosu, eski raporları çeviren ve değerlendirilmemiş kategorileri gösteren küçük bir araç ve yeni sürüm geldiğinde ne yapacağımız.
API Güvenliğini Sürekli Test Etmek ve İzlemek: Authorization Regresyonu, OpenAPI Tabanlı Tarama ve Abuse Telemetry
API güvenliğini sürekli korumak için kontrolleri bir test piramidine yerleştirir, OpenAPI tabanlı bir tarayıcıyı yalnız kendi ortamına karşı çalıştırıp bulgularını regresyon testine çevirir ve reddedilen istekleri tenant bazında ölçersin. Schemathesis'in bulduğu sözleşme farkları ve iki 500, RespectNullableAnnotations ile sistematik düzeltme, OpenTelemetry metric'leri ve tek sayfalık kontrol listesi.
API8 ve API9: Yanlış Yapılandırma ve Envanter — OpenAPI'yi Envanter Olarak Kullanmak, Deprecation/Sunset Header'ları ve Shadow API'ler
API8'e karşı API'ye özgü bir kontrol listesini Production ortamında koşan testlere bağlarsın; API9'a karşı build sırasında üretilen OpenAPI dokümanını commit edilen bir envanter olarak kullanır ve eski sürümleri RFC 9745 Deprecation ve RFC 8594 Sunset header'larıyla emekliye ayırırsın. CORS ve middleware sırası, git diff ile habersiz endpoint ve saat dilimi tuzağı.