Yazılım Güvenliği İleri Seviye

Modern yazılım güvenliğinde OWASP Top 10 2025 perspektifi, güvenli kodlama pratikleri, JWT ve OAuth2 ile güvenli kimlik yönetimi, gelişmiş şifreleme stratejileri, API güvenliği, container ve Kubernetes güvenliği ile DevSecOps pipeline entegrasyonu gibi ileri seviye konular ele alınır.

Yazılım Güvenliği İleri Seviye

Yazılım Güvenliği İleri Seviye: OWASP'ten DevSecOps'a Modern Tehditlere Karşı Savunma

Günümüz yazılım dünyasında güvenlik artık bir "ek" değil, geliştirme sürecinin ayrılmaz bir parçasıdır. Saldırı yüzeyi genişledikçe, tehdit aktörlerinin yöntemleri de karmaşıklaşmaktadır. Bu yazıda, OWASP Top 10 2025 perspektifinden en kritik güvenlik risklerini, .NET ekosisteminde güvenli kodlama pratiklerini, JWT ve OAuth2 ile sağlam kimlik yönetimini, gelişmiş şifreleme stratejilerini, API güvenliğini, container ve Kubernetes güvenliğini ve DevSecOps pipeline entegrasyonunu derinlemesine ele alacağız.


1. OWASP Top 10 2025: Güncel Tehdit Manzarası

OWASP Top 10, web uygulamaları için en kritik güvenlik risklerini belirleyen referans standarttır. 2025 sürümü, yazılım güvenliğinin evrilen doğasını yansıtan önemli değişiklikler içermektedir.

A01:2025 - Broken Access Control (Bozuk Erişim Kontrolü)
En ciddi uygulama güvenlik riski olarak birinci sıradaki yerini korumaktadır. Test edilen uygulamaların ortalama %3,73'ü bu kategorideki zafiyetleri barındırmaktadır. Server-Side Request Forgery (SSRF) bu kategori altında toplanmıştır. Yetkilendirme kontrollerinin her fonksiyonda titizlikle uygulanması gerekmektedir.

A02:2025 - Security Misconfiguration (Güvenlik Yanlış Yapılandırması)
2021'deki 5. sıradan 2025'te 2. sıraya yükselmiştir. Uygulamaların davranışlarının giderek daha fazla konfigürasyona dayalı olması bu riski artırmaktadır. Varsayılan ayarlar, gereksiz servisler ve açık portlar en yaygın zafiyet kaynaklarıdır.

A03:2025 - Software Supply Chain Failures (Yazılım Tedarik Zinciri Başarısızlıkları)
2021'deki "Vulnerable and Outdated Components" kategorisinin genişletilmiş halidir. Yazılım bağımlılıkları, derleme sistemleri ve dağıtım altyapısı boyunca oluşan güvenlik ihlallerini kapsar. Topluluk anketinde en çok endişe edilen kategori olarak oylanmıştır. Verilerde sınırlı görünse de, test zorlukları nedeniyle olduğu düşünülmektedir.

A04:2025 - Cryptographic Failures (Kriptografik Başarısızlıklar)
2021'deki 2. sıradan 4. sıraya gerilemiştir. Test edilen uygulamaların ortalama %3,80'i bu kategorideki zafiyetleri barındırmaktadır. Hassas veri ifşası veya sistem ele geçirilmesine yol açabilir.

A05:2025 - Injection (Enjeksiyon)
2021'deki 3. sıradan 5. sıraya gerilemiştir. En çok test edilen kategorilerden biridir. Cross-site Scripting'den (yüksek frekans/düşük etki) SQL Injection'a (düşük frekans/yüksek etki) kadar geniş bir yelpazeyi kapsar.

A06:2025 - Insecure Design (Güvensiz Tasarım)

  1. sıradan 6. sıraya gerilemiştir. Tehdit modelleme ve güvenli tasarım konularında sektörde gözle görülür iyileşmeler yaşanmaktadır.

A07:2025 - Authentication Failures (Kimlik Doğrulama Başarısızlıkları)

  1. sıradaki konumunu korumaktadır. Zayıf parola politikaları, oturum yönetimi zafiyetleri ve eksik çok faktörlü kimlik doğrulama en yaygın sorunlardır.


2. .NET'te Güvenli Kodlama Pratikleri

.NET Core, güvenli uygulama geliştirme için güçlü altyapı, esnek middleware, kimlik doğrulama ve yetkilendirme mekanizmaları sunar. İleri seviye güvenlik için dikkat edilmesi gereken kritik noktalar:

A. Input Validation ve Output Encoding
Tüm kullanıcı girdileri mutlaka doğrulanmalıdır. .NET'te DataAnnotations, FluentValidation veya özel validasyon mekanizmaları kullanılabilir. Çıktı kodlaması için HtmlEncoder, UrlEncoder ve JavaScriptEncoder sınıfları kullanılmalıdır.

B. Parameterized Queries (Parametreli Sorgular)
SQL Injection saldırılarını önlemek için EF Core veya Dapper kullanırken her zaman parametreli sorgular tercih edilmelidir.

csharp

// ❌ Güvensiz
var query = $"SELECT * FROM Users WHERE Username = '{username}'";

// ✅ Güvenli (EF Core)
var user = await context.Users.FirstOrDefaultAsync(u => u.Username == username);

// ✅ Güvenli (Dapper)
var user = await connection.QueryFirstOrDefaultAsync<User>(
    "SELECT * FROM Users WHERE Username = @Username",
    new { Username = username }
);

C. CSRF (Cross-Site Request Forgery) Koruması
ASP.NET Core'da anti-forgery token'ları otomatik olarak devreye girer. [ValidateAntiForgeryToken] attribute'ü ile koruma sağlanabilir.

D. XSS (Cross-Site Scripting) Önleme
Tüm kullanıcı kaynaklı veriler, view'larda render edilmeden önce otomatik olarak encode edilmelidir. Razor syntax (@) varsayılan olarak HTML encode yapar.

E. Güvenli Session ve Cookie Yönetimi

csharp

// Program.cs
builder.Services.Configure<CookiePolicyOptions>(options =>
{
    options.Secure = CookieSecurePolicy.Always;
    options.HttpOnly = HttpOnlyPolicy.Always;
    options.MinimumSameSitePolicy = SameSiteMode.Lax;
});

3. JWT ve OAuth2 ile Güvenli Kimlik Yönetimi

JWT (JSON Web Token), modern API'lerde kimlik doğrulama için standart yöntem haline gelmiştir. Ancak sıkça yanlış yapılandırılmaktadır.

A. JWT İmzalama ve Doğrulama

csharp

// JWT token oluşturma
public string GenerateJwtToken(string userId, string email)
{
    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.UTF8.GetBytes(_configuration["Jwt:Secret"]);
    
    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(new[]
        {
            new Claim(ClaimTypes.NameIdentifier, userId),
            new Claim(ClaimTypes.Email, email),
            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
        }),
        Expires = DateTime.UtcNow.AddMinutes(15), // Kısa ömürlü access token
        Issuer = _configuration["Jwt:Issuer"],
        Audience = _configuration["Jwt:Audience"],
        SigningCredentials = new SigningCredentials(
            new SymmetricSecurityKey(key), 
            SecurityAlgorithms.HmacSha256Signature
        )
    };
    
    var token = tokenHandler.CreateToken(tokenDescriptor);
    return tokenHandler.WriteToken(token);
}

B. Refresh Token Mekanizması
Access token'ları kısa ömürlü tutulmalı, refresh token ile yenilenmelidir.

C. JWT Güvenlik İpuçları

  • Token'ları asla URL'de veya log'larda saklamayın

  • Token'ları HTTP Header (Authorization: Bearer <token>) ile gönderin

  • İmzalama anahtarını (secret) güvenli bir şekilde saklayın (Azure Key Vault, environment variables)

  • Token boyutunu kontrol altında tutun (gereksiz claim'ler eklemeyin)

  • aud (audience) ve iss (issuer) claim'lerini mutlaka doğrulayın

D. OAuth2 ve OpenID Connect
Harici kimlik sağlayıcıları (Google, Microsoft, Azure AD) ile entegrasyon için OAuth2 ve OpenID Connect protokolleri kullanılır.


4. Gelişmiş Şifreleme Stratejileri

A. Veri Şifreleme (Data at Rest)
Hassas verilerin depolanması sırasında şifrelenmesi gerekir.

csharp

// AES ile simetrik şifreleme (veritabanında saklanacak hassas alanlar için)
using var aes = Aes.Create();
aes.Key = key; // Güvenli bir kaynaktan alınan anahtar
aes.IV = iv;

using var encryptor = aes.CreateEncryptor();
// ... şifreleme işlemleri

B. Aktarım Katmanı Güvenliği (TLS)
Tüm API trafiği TLS üzerinden şifrelenmelidir. .NET Core'da HTTPS zorlaması ve HSTS (HTTP Strict Transport Security) yapılandırılmalıdır.

csharp

builder.Services.AddHsts(options =>
{
    options.Preload = true;
    options.IncludeSubDomains = true;
    options.MaxAge = TimeSpan.FromDays(365);
});

app.UseHsts();
app.UseHttpsRedirection();

C. Kuantum Sonrası Kriptografi
Modern şifreleme sistemleri, kuantum bilgisayarların tehdidi altındadır. Yeni Nesil (CNG) şifreleme API'leri kullanılmalı ve kuantum sonrası için planlama yapılmalıdır.

D. Donanım Güvenlik Modülü (HSM)
Kritik şifreleme anahtarları, yazılım tabanlı depolama yerine HSM'lerde saklanmalıdır.


5. API Güvenliği

API'ler, uygulama mantığını ve hassas verileri (PII) açığa çıkardıkları için saldırganların birincil hedeflerindendir. OWASP API Security Top 10, API'ye özgü riskleri özetlemektedir.

Kritik API Güvenlik Riskleri:

  • Broken Object Level Authorization (BOLA): API'ler, nesne tanımlayıcıları kullanan endpoint'ler sunar. Her fonksiyonda nesne düzeyinde yetkilendirme kontrolü yapılmalıdır.

  • Broken Authentication: Kimlik doğrulama mekanizmaları sıklıkla hatalı implemente edilir.

  • Excessive Data Exposure: API'ler gereğinden fazla veri döndürebilir.

  • Mass Assignment: İstemci tarafından gönderilen veriler doğrudan nesnelere atanmamalıdır.

  • Unrestricted Resource Consumption: API kaynak tüketimi sınırlandırılmalıdır.

  • Server-Side Request Forgery (SSRF): API harici kaynak getirirken kullanıcı tarafından sağlanan URI doğrulanmalıdır.

API Güvenlik İpuçları:

  • Rate limiting (hız sınırlama) uygulayın

  • API key veya OAuth2 ile yetkilendirme yapın

  • Request/response validation yapın

  • API sürümlemesi yaparak eski güvenlik açıklarını yönetin

  • API dokümantasyonunda hassas bilgileri gizleyin


6. Container ve Kubernetes Güvenliği

Container ve Kubernetes ortamları, kendi güvenlik zorluklarını beraberinde getirir.

A. Container Image Güvenliği

  • Minimal base image kullanın (Alpine)

  • Image'ları düzenli olarak tarayın (vulnerability scanning)

  • Root olmayan kullanıcı ile çalıştırın

  • Gereksiz paketleri kaldırın

B. Kubernetes Güvenlik İpuçları

  • RBAC (Role-Based Access Control) ile yetkilendirme yapın

  • Network Policies ile pod'lar arası trafiği kısıtlayın

  • Secret'ları (parolalar, token'lar) Kubernetes Secret veya external secret management ile yönetin

  • Pod Security Standards (PSS) uygulayın

  • Container runtime güvenliğini sağlayın (Seccomp, AppArmor)


7. DevSecOps: Güvenliği Pipeline'a Entegre Etme

DevSecOps, güvenlik kontrollerini ve süreçlerini DevOps workflow'larına erken entegre eder. Amaç, güvenliği yazılım teslimatını yavaşlatmadan pipeline'a gömmektir.

DevSecOps Pipeline Bileşenleri:

  1. SAST (Static Application Security Testing): Kod analizi (SonarQube, Checkmarx)

  2. DAST (Dynamic Application Security Testing): Çalışan uygulamanın testi (OWASP ZAP)

  3. SCA (Software Composition Analysis): Açık kaynak bağımlılıklarının taranması

  4. Container Scanning: Container image'larının taranması

  5. Infrastructure as Code (IaC) Scanning: Terraform, CloudFormation güvenlik kontrolleri

  6. Secret Scanning: Kod içindeki gizli anahtarların tespiti

.NET DevSecOps İpuçları:

  • CI/CD pipeline'ında güvenlik taramalarını otomatikleştirin

  • Security-as-code yaklaşımı benimseyin

  • "Shift Left" (güvenliği sola kaydırma) stratejisi uygulayın

  • Düzenli güvenlik testleri ve penetrasyon testleri planlayın


8. Zero Trust Mimarisi

Zero Trust, "asla güvenme, her zaman doğrula" prensibine dayanır. Tüm ağ trafiği şifrelenir, her erişim talebi doğrulanır ve en az ayrıcalık prensibi uygulanır.

Zero Trust Uygulama İpuçları:

  • Mikro-segmentasyon ile ağ bölümlendirmesi

  • Kimlik tabanlı erişim kontrolleri (IAM)

  • Sürekli doğrulama (continuous validation)

  • En az ayrıcalık prensibi (least privilege)


9. Tehdit Modelleme

Güvenli yazılım geliştirmenin temel taşı, tehdit modellemedir. Tasarım aşamasında potansiyel tehditlerin belirlenmesi ve hafifletilmesi, sonradan yapılan müdahalelerden çok daha etkilidir.

Tehdit Modelleme Adımları:

  1. Sistemin mimarisini ve veri akışını anlama

  2. Potansiyel tehditleri belirleme (STRIDE metodolojisi)

  3. Riskleri değerlendirme ve önceliklendirme

  4. Güvenlik kontrolleri tasarlama


10. Güvenlik Farkındalığı ve Eğitim

Teknolojik önlemler kadar, ekip farkındalığı da kritiktir. Düzenli güvenlik eğitimleri, OWASP Top 10 bilinci, güvenli kodlama pratikleri ve güncel tehdit bilgisi, organizasyonun güvenlik olgunluğunu artırır.

Sonuç:

İleri seviye yazılım güvenliği, yalnızca araçlar veya kontrollerle değil, sürekli bir süreç, kültür ve yaklaşımla sağlanır. OWASP Top 10 2025 perspektifi, modern tehdit manzarasını anlamak için kritik bir çerçevedir. .NET ekosisteminde güvenli kodlama pratikleri, JWT ve OAuth2 ile güçlü kimlik yönetimi, gelişmiş şifreleme stratejileri, API güvenliği, container ve Kubernetes güvenliği ile DevSecOps pipeline entegrasyonu, kapsamlı bir güvenlik stratejisinin yapı taşlarıdır.

Unutmayın:

  • Güvenlik bir özellik değil, bir zorunluluktur.

  • Tehditler sürekli evriliyor, savunma da evrilmeli.

  • En zayıf halka teknoloji değil, insandır.

  • "Shift Left" ile güvenliği en baştan düşünün.

Tüm yazılar