İç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.

Ayrıcalıklı Erişim Yönetimi (PAM) ve Modern Doğrulama (MFA/SSO)

Ayrıcalıklı Erişim Yönetimi (PAM) ve Modern Doğrulama (MFA/SSO)

Sıradan kullanıcı kimliklerinin korunması temel bir gereklilik olsa da, sistem yöneticilerine ait ayrıcalıklı kimlikler saldırganların bir numaralı hedefidir. Bir yöneticinin hesabı ele geçirildiğinde saldırgan tüm ağı kontrol edebilir; veritabanlarını silebilir, şifreleme anahtarlarını çalabilir veya federasyon altyapısı üzerinden tüm bulut ekosistemine erişim sağlayabilir. Bu bölüm, ayrıcalıklı erişimin yaşam döngüsünü (PAM), modern çok faktörlü doğrulama mekanizmalarını (MFA) ve kurumsal tekil oturum açma (SSO) federasyon protokollerini derinlemesine ele alır. §4.1 bölümündeki AAA ve AD Tier modeli bu bölümün ön koşuludur; parolasız kimlik §4.4 bölümünde genişletilir.

Kontrol Eşlemesi (Bölüm Geneli): NIST SP 800-53 AC-2, AC-6, IA-2, AU-2; CIS Controls v8 5.4, 6.3–6.5; ISO/IEC 27001:2022 A.8.2, A.8.5, A.8.18; MITRE ATT&CK T1078, T1548, T1606, T1550.


§4.2.1.Ayrıcalıklı Erişim Yönetimi (PAM)

Ayrıcalıklı Erişim Yönetimi (Privileged Access Management — PAM), kurumun “krallığın anahtarlarını” — domain admin, bulut kök hesabı, veritabanı süper kullanıcısı, ağ cihazı enable parolası — merkezi olarak keşfeden, kasalayan, döndüren, izleyen ve gerektiğinde anında geri alan mimaridir. Verizon DBIR verilerine göre ihlallerin önemli bir kısmında insan unsuru ve çalınmış kimlik bilgileri rol oynar; ele geçirilmiş ayrıcalıklı kimlik bilgisi saldırganın elde edebileceği en değerli varlıktır.

Ayrıcalıklı Hesap Yaşam Döngüsü

PAM olgunluğu, hesapların dört aşamalı yaşam döngüsü üzerinden ölçülür:

AşamaAçıklamaTipik Araçlar
Discovery (Keşif)Ağ, bulut ve uygulamalardaki yerel/yerleşik admin hesaplarının envanteriCyberArk PTA, Delinea Discovery, Microsoft Defender for Identity
Onboarding (Kasaya Alma)Keşfedilen hesapların parolasının kasaya taşınması; düz metin erişimin kaldırılmasıVault CPM, Secret Server RPC
Rotation (Döndürme)Periyodik veya oturum sonrası otomatik parola yenilemeCPM politikaları, gMSA, HashiCorp dynamic secrets
Decommission (Devre Dışı)Ayrılan personel, kapatılan sistem veya artık gerekmeyen hesapların kalıcı silinmesiIAM offboarding + PAM reconciliation

JIT, JEA ve Zero Standing Privileges (ZSP)

Modern PAM’in üç taşı şunlardır:

  1. Just-in-Time (JIT — İhtiyaç Anında): Ayrıcalık yalnızca talep anında, belirli bir süre için verilir; süre dolunca otomatik geri alınır. Kalıcı Domain Admins üyeliği yerine “4 saatlik etkinleştirme” modeli uygulanır.
  2. Just-Enough-Access (JEA — Yeterli Kadar Erişim): Yöneticiye tam root/admin yerine görevin gerektirdiği minimum komut kümesi verilir. PowerShell JEA endpoint’leri, RBAC scope’ları ve komut filtreleri bu prensibi uygular.
  3. Zero Standing Privileges (ZSP — Sıfır Kalıcı Ayrıcalık): Hiçbir kullanıcının sürekli ayrıcalıklı rolü yoktur; tüm atamalar “eligible” (uygun) statüsündedir ve her kullanımda yeniden etkinleştirme gerekir.
Terminal window
# PowerShell JEA — kısıtlı endpoint örneği (DEFANSİF)
New-PSSessionConfigurationFile -Path .\JEA-DNSAdmin.pssc -SessionType RestrictedRemoteServer `
-RoleDefinitions @{
'CORP\DNS-Admins-Eligible' = @{
RoleCapabilities = 'DnsServer-JEA-Role'
}
}
Register-PSSessionConfiguration -Name 'JEA-DNSAdmin' -Path .\JEA-DNSAdmin.pssc

PEDM ile PIM Ayrımı: PEDM (Privilege Elevation and Delegation Management) uç noktada yerel admin haklarını kaldırıp uygulama bazlı yükseltme yapar (ör. BeyondTrust, Admin By Request). PIM (Privileged Identity Management) ise kimlik sağlayıcı seviyesinde rol etkinleştirmesini yönetir (ör. Entra ID PIM, AWS IAM Identity Center). İkisi birbirini tamamlar: PEDM uç nokta, PIM bulut/kimlik katmanıdır.

Parola Kasaları: CyberArk, Delinea ve HashiCorp Vault Karşılaştırması

KriterCyberArk PASDelinea Secret ServerHashiCorp Vault
Temel odakKurumsal PAM (tam yaşam döngüsü)Hızlı kasalama + kullanım kolaylığıDinamik gizli + makine kimlikleri
Oturum kaydıPSM (Privileged Session Manager) — video + keystrokeSession monitoring modülüYok (tam PAM değil)
Onay iş akışıPVWA üzerinden çok aşamalıSecret Server workflowPolicy-based (sınırlı)
Dinamik parolaCPM ile hedef sistemde döndürmeRPC/heartbeat ile döndürmeTTL tabanlı dinamik secret
Kurulum süresi3–6 ay (karmaşık hibrit)1–2 hafta (temel kasa)Günler (altyapı ekibi)
Tipik konumlandırmaTier 0 + uyumluluk ağır ortamlarOrta-büyük ölçek kurumsalCI/CD, Kubernetes, bulut native

CyberArk PAS bileşenleri:

BileşenİşlevKonumPort/Protokol
EPV (Enterprise Password Vault)Şifreli kasa, politika yönetimiYalıtılmış LANTCP 1858
PVWAWeb arayüzü, onay iş akışıDMZ / erişim segmentiHTTPS 443
CPMParola rotasyonu, reconciliationYönetim segmentiLDAP 389/636, SSH 22, RDP 3389
PSMOturum izolasyonu, credential injectionYönetim segmentiHTTPS 443, RDP 3389, SSH 22
PTAAyrıcalıklı hesap anomali tespitiAnalitik segmentSyslog UDP 514 / TCP 6514
  • PVWA (Password Vault Web Access): Web arayüzü ve API katmanı.
  • CPM (Central Policy Manager): Hedef sistemlerde parola döndürme motoru.
  • PSM (Privileged Session Manager): RDP/SSH/DB oturumlarını proxy’ler; video ve komut kaydı tutar.

HashiCorp Vault tam bir PAM çözümü değildir; oturum kaydı ve insan onay iş akışı sunmaz. Ancak Kubernetes, Terraform ve CI/CD pipeline’larında TTL tabanlı dinamik kimlik bilgileri üretmek için idealdir. Tipik Fortune 500 mimarisinde CyberArk/Delinea (insan ayrıcalığı) + Vault (makine ayrıcalığı) birlikte konuşlandırılır.

# HashiCorp Vault — dinamik PostgreSQL kimlik bilgisi (DEFANSİF)
resource "vault_database_secret_backend_role" "app_role" {
backend = "database"
name = "app-dynamic"
db_name = "postgres"
creation_statements = ["CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}';"]
default_ttl = 3600
max_ttl = 86400
}

Oturum İzolasyonu, Kayıt ve Proxy Mimarisi

PAM’in en kritik savunma katmanı, yöneticinin hedef sisteme doğrudan bağlanmasını engellemektir:

Kullanıcı → PAM Jump Server / PSM Proxy → Hedef Sunucu
Kasadan parola enjeksiyonu (kullanıcı parolayı görmez)
Video + keystroke + komut logu → SIEM (5651 uyumlu arşiv)
sequenceDiagram
  participant Admin as Yonetici
  participant PVWA as PVWA
  participant PSM as PSM Proxy
  participant Vault as EPV Kasa
  participant Target as Hedef Sunucu
  Admin->>PVWA: MFA ile giris
  Admin->>PVWA: Oturum talebi
  PVWA->>PSM: Baglanti baslat
  PSM->>Vault: Parola cek
  Vault-->>PSM: Credential
  PSM->>Target: RDP/SSH (enjeksiyon)
  PSM-->>Admin: Oturum aktarimi
  PSM->>PSM: Video + keystroke kaydi

Oturum izolasyonu şu kontrolleri sağlar:

  • Yönetici gerçek parolayı asla görmez; PAM arka planda enjekte eder.
  • Clipboard, dosya transferi ve USB yönlendirme politikalarla kısıtlanır.
  • Şüpheli oturum canlı izlenebilir ve anında sonlandırılabilir (session shadowing).
  • Tüm oturumlar zaman damgalı olarak arşivlenir; BDDK ve 5651 sayılı Kanun kapsamında denetim izi oluşturur.

Microsoft Entra ID PIM

Entra ID PIM, Azure AD / Microsoft 365 / Azure kaynak rolleri için JIT ayrıcalık yönetimi sağlar. Entra ID Premium P2 lisansı gerektirir.

Atama TürüDavranış
Eligible (Uygun)Rol atanmış ancak etkin değil; kullanıcı talep ile aktive eder
Active (Aktif)Rol sürekli etkindir (ZSP hedefinde minimize edilmeli)
Expired (Süresi Dolmuş)Aktivasyon süresi doldu; otomatik geri alındı

Yapılandırılabilir kontroller:

  • Onay iş akışı (approval workflow): Aktivasyon için ikinci onaylayıcı zorunluluğu.
  • MFA zorunluluğu: Conditional Access authentication context + Authentication Strengths ile FIDO2 şartı.
  • İş gerekçesi (justification): Ticket numarası veya bakım penceresi referansı.
  • Maksimum aktivasyon süresi: 1–24 saat arası (Tier 0 için 4 saat önerilir).
# Entra PIM — rol aktivasyon onayı (Microsoft Graph API)
PATCH https://graph.microsoft.com/beta/roleManagement/directory/roleAssignmentApprovals/<approval-id>/steps/<step-id>
Content-Type: application/json
{
"reviewResult": "Approve",
"justification": "Onaylı bakım penceresi — CHG0012345"
}
// Conditional Access — PIM aktivasyonunda FIDO2 zorunluluğu (kavramsal)
{
"displayName": "PIM-Activation-Require-FIDO2",
"state": "enabled",
"conditions": {
"applications": { "includeApplications": ["MicrosoftAdminPortals"] },
"authenticationContext": { "includeAuthenticationContextClassReferences": ["c1"] }
},
"grantControls": {
"operator": "AND",
"builtInControls": [],
"authenticationStrength": { "allowedStrengths": ["fido2-strength-id"] }
}
}

MITRE ATT&CK: T1078.003 ve T1548

PAM savunması, aşağıdaki saldırı tekniklerine doğrudan karşılık verir:

TeknikAçıklamaPAM Savunması
T1078.003 (Valid Accounts: Local Accounts)Yerel admin ve servis hesaplarıyla kalıcı erişimKeşif + kasalama + JIT; yerel admin kaldırma (PEDM)
T1548 (Abuse Elevation Control Mechanism)UAC bypass, sudo abuse, token manipulationJEA endpoint’leri; PSM komut filtreleme
T1550 (Use Alternate Authentication Material)Pass-the-Hash, Pass-the-Ticket, API tokenOturum proxy; kısa ömürlü credential; sürekli rotation
# Sigma — yerel admin ile anormal oturum (DEFANSİF kavramsal)
title: Local Admin Interactive Logon Outside PAM
logsource:
product: windows
service: security
detection:
selection:
EventID: 4624
LogonType: 10
TargetUserName|endswith: '-adm'
filter_pam:
IpAddress|startswith: '10.0.50.' # PAM jump subnet
condition: selection and not filter_pam
level: high

Türkiye Uyumluluk: KVKK, BDDK ve 5651

ÇerçevePAM ile İlişki
KVKK Madde 12Teknik ve idari tedbirler; ayrıcalıklı erişim logları kişisel veri işleme kaydına dahil edilmeli
BDDK BSEBYBilgi sistemleri yönetimi; yönetici erişimlerinde çok bileşenli kimlik doğrulama ve işlem güvenliği
5651 sayılı KanunOturum kayıtlarının zaman damgalı, bütünlüğü korunmuş şekilde 2 yıl saklanması

KVKK kapsamında biyometrik veri ve erişim loglarındaki kullanıcı kimlikleri veri minimizasyonu ilkesiyle işlenmeli; PAM oturum kayıtlarına erişim ayrı bir yetki matrisiyle sınırlandırılmalıdır.

Kontrol Eşlemesi: NIST SP 800-53 AC-6(1..5), AC-2(7), AU-2, AU-12; CIS Controls v8 5.4, 6.8; ISO 27001:2022 A.8.2, A.8.18.


§4.2.2.Modern Çok Faktörlü Doğrulama (MFA)

Sadece kullanıcı adı ve parola (Single Factor) ile doğrulama dönemi sona ermiştir. NIST SP 800-63B, kimlik kanıtı gücünü Authenticator Assurance Level (AAL) olarak sınıflandırır: AAL1 (parola), AAL2 (MFA), AAL3 (donanım kriptografik kanıt). Kurumsal ve ayrıcalıklı erişimde minimum hedef AAL2; Tier 0 ve finansal sistemlerde AAL3 olmalıdır.

AALKimlik KanıtıÖrnek AuthenticatorPhishing Dirençli?
AAL1Tek faktörParola, OTP (SMS)Hayır
AAL2İki faktörTOTP + parola, push MFAKısmen (TOTP: hayır)
AAL3Donanım kriptografikFIDO2/WebAuthn, PIV, smart cardEvet (origin binding)

CISA ve NIST, workforce erişiminde minimum phishing-resistant MFA (AAL3 eşdeğeri FIDO2) önerir. CIS Controls v8 6.4, ayrıcalıklı erişimde phishing-resistant MFA’yı zorunlu kılar.

MFA doğrulama iş akışı

TOTP: RFC 6238 Mekanizması

TOTP (Time-Based One-Time Password), HOTP’nin (RFC 4226) zaman tabanlı türevidir. Formül:

TOTP = Truncate(HMAC-SHA1(K, T)) mod 10^d
T = floor((Unixtime - T0) / X)
ParametreVarsayılan Değer
HMAC algoritmasıSHA-1 (SHA-256/512 opsiyonel)
Zaman adımı (X)30 saniye
Basamak sayısı (d)6
Gizli anahtar uzunluğu160 bit (Base32 kodlanmış)
Tolerans penceresi±1 adım (sunucu tarafı)
import hmac, hashlib, struct, time
def totp(secret: bytes, step: int = 30, digits: int = 6) -> str:
counter = struct.pack(">Q", int(time.time() // step))
digest = hmac.new(secret, counter, hashlib.sha1).digest()
offset = digest[-1] & 0x0F
code = (struct.unpack(">I", digest[offset:offset + 4])[0] & 0x7FFFFFFF) % (10 ** digits)
return str(code).zfill(digits)

FIDO2/WebAuthn: Oltalamaya Yapısal Direnç

FIDO2 = WebAuthn (W3C tarayıcı API’si) + CTAP2 (Client to Authenticator Protocol). Kimlik bilgisi origin’e bağlıdır (origin binding); sahte alan adına kriptografik imza üretilemez.

FIDO2 origin binding: kriptografik menşe doğrulama (derinlemesine)

Origin binding, clientDataJSON içindeki origin alanının authenticator tarafından imzalanmasıyla çalışır:

rpIdHash = SHA-256("company.com")
signature = Sign(privateKey, challenge || rpIdHash || clientData)

Saldırgan evil-company.com üzerinde AiTM proxy kursa bile authenticator yalnızca kayıtlı RP ID için imza üretir; sahte origin’e kriptografik kanıt oluşturulamaz. Bu, TOTP/SMS OTP’nin AiTM saldırılarına karşı yapısal üstünlüğüdür.

FIDO2/WebAuthn kimlik doğrulama mimarisi

Kayıt akışı:

  1. navigator.credentials.create() → tarayıcı challenge gönderir.
  2. Authenticator açık/gizli anahtar çifti üretir; gizli anahtar cihazda kalır.
  3. Sunucuya attestation object (AAGUID + attestation statement) döner.

Kimlik doğrulama akışı:

  1. navigator.credentials.get() → challenge authenticator’a iletilir.
  2. Gizli anahtarla imzalanmış assertion döner.
  3. Sunucu kayıtlı genel anahtarla imzayı doğrular.
// WebAuthn — kimlik doğrulama talebi (DEFANSİF)
const credential = await navigator.credentials.get({
publicKey: {
challenge: new Uint8Array(serverChallenge),
rpId: "corp.example.com",
allowCredentials: [{
type: "public-key",
id: credentialId,
transports: ["usb", "nfc", "internal"]
}],
userVerification: "required",
timeout: 60000
}
});
ÖzellikPlatform AuthenticatorRoaming Authenticator
ÖrnekWindows Hello, Touch ID, Face IDYubiKey, Titan Key
TaşınabilirlikCihaza bağlıUSB/NFC/BLE
Kurumsal AAL3Senkronize passkey (dikkatli)Donanım anahtarı (tercih)
AAGUID allowlistEvetEvet (enterprise attestation)

UV/UP bayrakları: User Presence (UP) fiziksel dokunmayı, User Verification (UV) PIN veya biyometri ile kimlik kanıtını gösterir. Kurumsal politikada userVerification: "required" zorunlu tutulmalıdır.

Biyometrik Doğrulama ve KVKK Uyumu

Biyometrik veriler KVKK Madde 6 kapsamında özel nitelikli kişisel veridir. İşleme için açık rıza veya kanunda öngörülme şartı aranır.

PrensipUygulama
On-device processingFIDO2 ile biyometrik şablon cihazda kalır; sunucuya gitmez
Liveness detectionSunum saldırılarına (fotoğraf, deepfake) karşı canlılık tespiti
Template protectionCancelable biometrics; şablon çalınsa bile yeniden türetilebilir
Veri minimizasyonuSunucuda yalnızca “doğrulama başarılı” bayrağı saklanır

SMS OTP Zafiyetleri

SMS tabanlı OTP, NIST SP 800-63B revizyonlarında AAL2’yi karşılamaz olarak sınıflandırılmıştır. CISA SMS’i “phishable” kategorisinde listeler.

Saldırı VektörüMekanizma
SIM swappingOperatör sosyal mühendisliği ile numara başka SIM’e taşınır
SS7 protokol açıklarıTelekom omurga ağında SMS yönlendirme
Malware (Android)Cihazda SMS okuma izni ile OTP çalma
AiTM relayProxy üzerinden SMS kodunun gerçek zamanlı aktarımı

SMS OTP yalnızca düşük riskli tüketici hesapları veya kurtarma kanalı olarak kabul edilebilir; workforce ve ayrıcalıklı erişimde birincil faktör olarak kullanılmamalıdır.

EvilGinx, AiTM ve OTP Fatigue Savunması

EvilGinx2 / Modlishka gibi araçlar, ters proxy (reverse-proxy AiTM) ile kullanıcıyı gerçek giriş sayfasına yönlendirirken oturum çerezi ve OTP’yi yakalar:

Kullanıcı → Sahte Alan (evilginx) → Gerçek IdP (Microsoft/Google)
Cookie + OTP yakalanır → Saldırgan oturumu devralır

OTP Fatigue (MFA Bombing): Saldırgan, kurbanın telefonuna dakikalarca push bildirimi göndererek kazara “Onayla” tıklamasını sağlar. Uber ve Cisco ihlallerinde bu teknik kullanılmıştır.

SaldırıSavunma
EvilGinx / AiTMFIDO2 (origin binding); Conditional Access — compliant device
OTP FatigueNumber matching; coğrafi/kayıtlı cihaz kısıtı; push rate limiting
TOTP relayFIDO2 birincil; risk tabanlı step-up
MFA bypass genelPhishing-resistant MFA politikası (CISA); authentication strength
// Entra ID — number matching ve coğrafi kısıt (kavramsal)
{
"displayName": "Block-MFA-Fatigue",
"state": "enabled",
"conditions": {
"signInRiskLevels": ["high"],
"locations": { "excludeLocations": ["AllTrusted"] }
},
"grantControls": {
"operator": "AND",
"builtInControls": ["mfa"],
"authenticationStrength": { "allowedStrengths": ["fido2-strength-id"] }
}
}

Kontrol Eşlemesi: NIST SP 800-63B (AAL1/2/3); NIST SP 800-53 IA-2(1)(2); CIS Controls v8 6.3, 6.4, 6.5; ISO 27001:2022 A.8.5.


§4.2.3.Tekil Oturum Açma (SSO) ve Federasyon Protokolleri

Kullanıcıların her uygulama için ayrı parola ezberlemesi zayıf parola kullanımına yol açar. SSO (Single Sign-On), kullanıcının bir kez doğrulandıktan sonra yetkili tüm uygulamalara otomatik erişmesini sağlar. Federasyon, iki farklı kurumun kimlik sistemlerine karşılıklı güvenmesini mümkün kılar.

SAML 2.0 ve XML Signature Wrapping (XSW)

SAML 2.0 (Security Assertion Markup Language), kurumsal B2B web uygulamalarında yaygın XML tabanlı federasyon protokolüdür. Assertion üç tip ifade taşır: Authentication, Attribute, Authorization Decision.

SAML 2.0 SP-initiated SSO akışı

Akış türleri:

  • SP-initiated: Servis sağlayıcı (SP) kullanıcıyı kimlik sağlayıcıya (IdP) yönlendirir.
  • IdP-initiated: IdP doğrudan SP’ye assertion gönderir (daha yüksek risk; CSRF ve hedef doğrulama zorunlu).

XML Signature Wrapping (XSW): En yaygın SAML zafiyeti sınıfıdır. Saldırgan, imzalı XML öğesinin yapısını manipüle ederek imzasız bir bölümün kimlik olarak yorumlanmasını sağlar. GitHub Enterprise SAML bypass ve ruby-saml “sign in as anyone” zafiyetleri bu sınıftandır.

Savunma kontrolleri:

  • Katı XML şema doğrulama (strict schema validation).
  • İmza kapsamı kontrolü: yalnızca beklenen öğe imzalanmış mı?
  • Canonicalization (C14N) tutarlılığı.
  • SAML kütüphane sürümlerinin güncel tutulması.
  • IdP-initiated akışta RelayState ve hedef URL allowlist doğrulaması.
<!-- SAML Response — imza doğrulama kontrol noktaları (DEFANSİF) -->
<!-- 1. Signature Reference URI yalnızca Assertion ID'ye işaret etmeli -->
<!-- 2. Duplicate Assertion veya wrapped Assertion reddedilmeli -->
<!-- 3. NotBefore / NotOnOrAfter zaman penceresi ±5 dk tolerans -->
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
Destination="https://app.corp.example.com/acs"
IssueInstant="2026-06-18T10:00:00Z">
<saml:Issuer>https://idp.corp.example.com</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
<samlp:Status><samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/></samlp:Status>
<saml:Assertion ID="_assertion-id" IssueInstant="2026-06-18T10:00:00Z" Version="2.0">...</saml:Assertion>
</samlp:Response>

OAuth 2.0 ve Authorization Code + PKCE

OAuth 2.0 (RFC 6749) bir yetkilendirme protokolüdür; kimlik doğrulama değildir. Modern istemciler için Authorization Code + PKCE (RFC 7636) zorunlu standarttır. OAuth 2.1, Implicit grant’ı tamamen kaldırır.

OAuth 2.0 Authorization Code + PKCE akışı

PKCE mekanizması:

  1. İstemci code_verifier (43–128 karakter rastgele) üretir.
  2. code_challenge = BASE64URL(SHA256(code_verifier)) hesaplanır.
  3. Yetkilendirme isteğinde code_challenge gönderilir.
  4. Token değişiminde code_verifier sunulur; sunucu eşleşmeyi doğrular.
# PKCE — yetkilendirme isteği (DEFANSİF)
GET /authorize?
response_type=code
&client_id=mobile-app-client
&redirect_uri=https://app.example.com/callback
&scope=openid%20profile
&state=random-csrf-token
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
&code_challenge_method=S256
&nonce=random-nonce-value
OAuth TehdidiSavunma
Authorization code injectionredirect_uri tam string eşleşmesi (wildcard yasak)
Implicit grant token sızıntısıOAuth 2.1 ile kaldırıldı; Code+PKCE kullan
SSRF ile token çalmaToken endpoint ağ segmentasyonu
Refresh token theftRotation + reuse detection

OpenID Connect ve Algorithm Confusion

OIDC, OAuth 2.0 üzerine kimlik katmanı ekler. ID Token JWT formatındadır; varsayılan imza algoritması RS256 (asimetrik) olmalıdır.

Algorithm confusion saldırısı: Sunucu RS256 beklerken saldırgan alg: HS256 gönderir ve sunucunun RSA public key’ini HMAC secret olarak kullanarak sahte token imzalar.

Savunma:

  • alg allowlist: yalnızca RS256/ES256 kabul et.
  • JWKS endpoint’inden anahtar doğrulama; kid header injection’a karşı dikkat.
  • iss (issuer), aud (audience), nonce, exp claim’lerini her zaman doğrula.
  • state parametresi ile CSRF koruması.
# OIDC ID Token doğrulama — alg allowlist (DEFANSİF)
import jwt
from jwt import PyJWKClient
ALLOWED_ALGORITHMS = ["RS256", "ES256"]
jwks_client = PyJWKClient("https://idp.corp.example.com/.well-known/jwks.json")
def verify_id_token(token: str, audience: str, issuer: str, nonce: str) -> dict:
signing_key = jwks_client.get_signing_key_from_jwt(token)
payload = jwt.decode(
token,
signing_key.key,
algorithms=ALLOWED_ALGORITHMS,
audience=audience,
issuer=issuer,
options={"require": ["exp", "iat", "nonce", "sub"]}
)
if payload.get("nonce") != nonce:
raise ValueError("Nonce mismatch — olası replay saldırısı")
return payload

Golden SAML Tespiti ve Wazuh Kuralları

Golden SAML (MITRE ATT&CK T1606.002), saldırganın AD FS token imzalama sertifikasını ve DKM (Distributed Key Manager) anahtarını çalarak sahte SAML assertion üretmesidir. SolarWinds saldırı zincirinde bu teknik kullanılmıştır.

Tespit göstergeleri:

  • AD FS token signing sertifikasının dışa aktarılması (Event ID 501 + PowerShell).
  • Normal dışı SAML token üretim hacmi.
  • AD FS sunucusundan beklenmeyen ağ bağlantıları.
  • IdP olarak bilinmeyen kaynaktan gelen SAML assertion’lar.
<!-- Wazuh local_rules.xml — Golden SAML göstergeleri (DEFANSİF) -->
<group name="saml,golden_saml,">
<!-- AD FS token signing sertifika dışa aktarımı -->
<rule id="100501" level="12">
<if_sid>18100</if_sid>
<field name="win.system.eventID">^501$</field>
<field name="win.system.providerName">AD FS</field>
<description>AD FS: Token signing certificate export detected — Golden SAML riski</description>
<group>golden_saml,adfs,certificate_export,</group>
</rule>
<!-- PowerShell ile AD FS yapılandırma erişimi -->
<rule id="100502" level="12">
<if_sid>18100</if_sid>
<field name="win.system.eventID">^4104$</field>
<field name="win.eventdata.scriptBlockText">Get-AdfsCertificate|Export-AdfsCertificate|ADFS</field>
<description>PowerShell: AD FS sertifika komutu — Golden SAML hazırlığı</description>
<group>golden_saml,powershell,adfs,</group>
</rule>
<!-- DKM master key erişim anomalisi -->
<rule id="100503" level="14">
<if_sid>18100</if_sid>
<field name="win.system.eventID">^4662$</field>
<field name="win.eventdata.objectName">ADFS|PrivateKey|Certificate</field>
<description>AD: ADFS nesnesine anormal erişim — T1606 Golden SAML</description>
<group>golden_saml,ldap_enumeration,</group>
</rule>
</group>
<!-- Wazuh decoders.xml — AD FS Event Channel (DEFANSİF) -->
<decoder name="adfs-event">
<prematch>AD FS</prematch>
<plugin_decoder>windows_eventchannel</plugin_decoder>
</decoder>

Wazuh agent konfigürasyonu (ossec.conf):

<localfile>
<location>Microsoft-Windows-ADFS/Admin</location>
<log_format>eventchannel</log_format>
</localfile>
<localfile>
<location>Microsoft-Windows-ADFS/Operational</location>
<log_format>eventchannel</log_format>
</localfile>

Korelasyon senaryoları:

  • Kural 100501 + 100502 aynı host’ta 15 dakika içinde → Seviye 15 (kritik) eskalasyon.
  • Golden SAML şüphesi + SIEM’de o host’tan dışa SAML trafiği → IR playbook tetikle.
  • 5651 uyumu: AD FS ve IdP logları zaman damgalı arşivlenmeli.
MITRE TekniğiSSO BağlamıTespit Kaynağı
T1606.002Golden SAML — sahte federation tokenAD FS Admin log, Wazuh 100501–100503
T1550.001Application Access Token — OAuth token replayIdP sign-in logs, token introspection
T1556Modify Authentication Process — SAML parser manipülasyonuSP assertion log, WAF

Federasyon Mimarileri ve Türkiye Senaryoları

MimariKullanım Alanı
Azure AD B2Bİş ortağı ve tedarikçi federasyonu
Azure AD B2CMüşteri kimliği (e-ticaret, mobil uygulama)
ShibbolethAkademik SAML federasyonu (ULAKBİM)
AD FS + Entra IDHibrit kurumsal SSO

BDDK lisanslı kurumlarda uzaktan erişim SSO’su, çok bileşenli kimlik doğrulama ve oturum kaydı ile birlikte değerlendirilir. 5651 sayılı Kanun kapsamında IdP ve SP logları bütünlük kontrolü ile arşivlenmelidir.

Kontrol Eşlemesi: NIST SP 800-53 IA-8, SC-23; CIS Controls v8 6.3, 6.5; ISO 27001:2022 A.8.5, A.8.26 (Uygulama güvenlik gereksinimleri).


Temel Çıkarımlar ve Uygulama Kontrol Listesi — §4.2

PAM

  • Tüm ayrıcalıklı hesaplar keşfedildi ve PAM kasasına alındı; yönetici düz metin parola erişimi kaldırıldı.
  • ZSP/JIT hedefi tanımlandı; kalıcı Active atamalar Eligible’a dönüştürüldü.
  • Oturum proxy (PSM) üzerinden RDP/SSH/DB erişimi zorunlu; video + komut kaydı SIEM’e akıyor.
  • Entra PIM: eligible atama + onay iş akışı + aktivasyonda FIDO2 MFA.
  • PowerShell JEA veya eşdeğeri ile Just-Enough-Access uygulandı.
  • MITRE T1078.003 ve T1548 için Sigma/Wazuh korelasyon kuralları devrede.

MFA

  • Yönetici ve yüksek değerli hesaplar için phishing-resistant FIDO2 birincil MFA.
  • TOTP yalnızca tüketici düzeyi yedek faktör; ayrıcalıklı erişimde birincil değil.
  • SMS OTP birincil kimlik doğrulamadan kaldırıldı (yalnızca kurtarma kanalı).
  • AiTM/OTP fatigue savunması: number matching + push rate limiting + FIDO2.
  • Biyometrik veri KVKK Madde 6 uyumlu; on-device processing tercih edildi.
  • Authentication Strength politikaları Conditional Access ile enforce edildi.

SSO ve Federasyon

  • OAuth 2.1 / Authorization Code + PKCE; Implicit grant kaldırıldı.
  • redirect_uri tam string eşleşmesi; wildcard yasak.
  • OIDC: iss, aud, nonce, state doğrulaması; alg allowlist (RS256/ES256).
  • SAML kütüphaneleri güncel; XSW’ye karşı katı şema + imza kapsamı doğrulaması.
  • Golden SAML tespiti: Wazuh kuralları 100501–100503 + AD FS log toplama aktif.
  • AD FS token signing sertifikası planlı döndürme takvimi; DKM erişimi Tier 0 kısıtlı.
  • IdP/SP logları 5651 uyumlu arşiv; BDDK denetim izi gereksinimleri karşılandı.

Olgunluk Hedefi

AlanGelenekselHedef (İleri)
Ayrıcalıklı erişimKalıcı admin hesaplarıZSP + JIT + oturum kaydı
MFASMS/TOTPFIDO2 AAL3 (ayrıcalıklı), passkey (genel)
SSOSAML Implicit, OAuth ImplicitCode+PKCE, OIDC strict validation
İzlemeManuel log incelemeWazuh + Golden SAML korelasyon