WEB / WEB-14.04
MFA’nın güven varsayımları
İki ekran veya iki secret, iki bağımsız factor anlamına gelmez. MFA’nın kararını challenge, account binding ve assurance state üzerinden izle.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Bağımsız factor kabul edilir
- İlk factor tamam; MFA bekliyor
Application bu attempt için ilk factor sonucunu doğrulanmış olarak alır. Browser’a henüz tamamlanmış MFA context veya sensitive action sonucu verilmez; ikinci factor’ın kabul koşulları beklenir.
- Browser / Duru
- Tamamlanmış MFA context yok
- Application verifier
- İlk factor doğrulandı; MFA bekliyor
- Factor ve challenge records
- Enrolled factor subject-duru ile bağlı
- Pending challenge oluşturulur
Application, challenge-ledger-a kaydını attempt-duru-a, subject-duru, factorRef ve purpose=mfa-login ile aynı process içinde ilişkilendirir. Pending kaydı oluşturmak MFA’yı tamamlamaz; Browser henüz prompt’u da almamıştır.
- Browser / Duru
- Tamamlanmış MFA context yok
- Application verifier
- Challenge oluşturuldu
- Factor ve challenge records
- challenge-ledger-a: pending
- Challenge prompt Browser’a ulaştı
Response yalnız challenge alias/prompt taşır; OTP output içermez.
- Browser / Duru
- challenge-ledger-a prompt’u
- Application verifier
- Completion bekleniyor
- Factor ve challenge records
- challenge-ledger-a: pending
- Factor input hazırlanır
Enrolled device sonucu alias ile temsil edilir; Browser içinde bu adım local, gerçek device wire yok.
- Browser / Duru
- Output alias hazır
- Application verifier
- Completion bekleniyor
- Factor ve challenge records
- challenge-ledger-a: pending
- Completion request ulaştı
Completion request, output alias ve attempt reference ile Application’a ulaştı. Browser sonucu beklerken verifier bu attempt’in pending kaydını ve account binding’ini değerlendirecektir; request arrival tek başına MFA kabulü değildir.
- Browser / Duru
- Son karar bekleniyor
- Application verifier
- Completion ulaştı; henüz kabul edilmedi
- Factor ve challenge records
- challenge-ledger-a: pending
- Verify ve lifecycle kapısı
Bu attempt’te firstFactorVerified, distinctFactors, factorBoundToSubject, purposeMatches, outputMatches, unused, withinLifetime ve attemptAllowed birlikte true’dur. Application pending challenge’ı tek kullanımlık tüketir: afterState=consumed ve mfaEstablished=true. Browser sonucu henüz almadı.
- Browser / Duru
- Son karar bekleniyor
- Application verifier
- Kabul: challenge consumed
- Factor ve challenge records
- challenge-ledger-a: consumed
- Terminal karar Browser’da
Browser tamamlanmış MFA context sonucunu aldı. Bu sonuç yalnız attempt-duru-a ve mfa-login kapsamındadır; session cookie issuance ve sensitive action’ın object/action izni ayrıca değerlendirilir.
- Browser / Duru
- MFA context tamamlandı
- Application verifier
- Kabul: challenge consumed
- Factor ve challenge records
- challenge-ledger-a: consumed
Lifetime expired
- İlk factor tamam; MFA bekliyor
Application bu attempt için ilk factor sonucunu doğrulanmış olarak alır. Browser’a henüz tamamlanmış MFA context veya sensitive action sonucu verilmez; ikinci factor’ın kabul koşulları beklenir.
- Browser / Duru
- Tamamlanmış MFA context yok
- Application verifier
- İlk factor doğrulandı; MFA bekliyor
- Factor ve challenge records
- Enrolled factor subject-duru ile bağlı
- Pending challenge oluşturulur
Application, challenge-ledger-a kaydını attempt-duru-a, subject-duru, factorRef ve purpose=mfa-login ile aynı process içinde ilişkilendirir. Pending kaydı oluşturmak MFA’yı tamamlamaz; Browser henüz prompt’u da almamıştır.
- Browser / Duru
- Tamamlanmış MFA context yok
- Application verifier
- Challenge oluşturuldu
- Factor ve challenge records
- challenge-ledger-a: pending
- Challenge prompt Browser’a ulaştı
Response yalnız challenge alias/prompt taşır; OTP output içermez.
- Browser / Duru
- challenge-ledger-a prompt’u
- Application verifier
- Completion bekleniyor
- Factor ve challenge records
- challenge-ledger-a: pending
- Factor input hazırlanır
Enrolled device sonucu alias ile temsil edilir; Browser içinde bu adım local, gerçek device wire yok.
- Browser / Duru
- Output alias hazır
- Application verifier
- Completion bekleniyor
- Factor ve challenge records
- challenge-ledger-a: pending
- Completion request ulaştı
Completion request, output alias ve attempt reference ile Application’a ulaştı. Browser sonucu beklerken verifier bu attempt’in pending kaydını ve account binding’ini değerlendirecektir; request arrival tek başına MFA kabulü değildir.
- Browser / Duru
- Son karar bekleniyor
- Application verifier
- Completion ulaştı; henüz kabul edilmedi
- Factor ve challenge records
- challenge-ledger-a: pending
- Verify ve lifecycle kapısı
Output koşulu olumlu olsa da withinLifetime=false’tur. Application challenge’ın süresini uzatmaz: afterState=expired ve mfaEstablished=false kalır. Diğer olumlu koşullar bu süre sınırını telafi etmez; tamamlanmış assurance verilmez.
- Browser / Duru
- Son karar bekleniyor
- Application verifier
- Red: lifetime bitti
- Factor ve challenge records
- challenge-ledger-a: expired
- Terminal karar Browser’da
Browser süre nedeniyle ret sonucunu aldı. Tamamlanmış MFA context veya sensitive action sonucu verilmedi; doğru output bu expired challenge’ı yeniden açmaz. Yeni challenge kendi policy’siyle oluşturulmalıdır.
- Browser / Duru
- Tamamlanmış MFA context yok
- Application verifier
- Red: lifetime bitti
- Factor ve challenge records
- challenge-ledger-a: expired
Same factor · deny
- İlk factor tamam; MFA bekliyor
Application bu attempt için ilk factor sonucunu doğrulanmış olarak alır. Browser’a henüz tamamlanmış MFA context veya sensitive action sonucu verilmez; ikinci factor’ın kabul koşulları beklenir.
- Browser / Duru
- Tamamlanmış MFA context yok
- Application verifier
- İlk factor doğrulandı; MFA bekliyor
- Factor ve challenge records
- Enrolled factor subject-duru ile bağlı
- Pending challenge oluşturulur
Application, challenge-ledger-a kaydını attempt-duru-a, subject-duru, factorRef ve purpose=mfa-login ile aynı process içinde ilişkilendirir. Pending kaydı oluşturmak MFA’yı tamamlamaz; Browser henüz prompt’u da almamıştır.
- Browser / Duru
- Tamamlanmış MFA context yok
- Application verifier
- Challenge oluşturuldu
- Factor ve challenge records
- challenge-ledger-a: pending
- Challenge prompt Browser’a ulaştı
Response yalnız challenge alias/prompt taşır; OTP output içermez.
- Browser / Duru
- challenge-ledger-a prompt’u
- Application verifier
- Completion bekleniyor
- Factor ve challenge records
- challenge-ledger-a: pending
- Factor input hazırlanır
İkinci knowledge input yalnız alias olarak hazırdır; farklı possession factor sonucu oluşturmaz.
- Browser / Duru
- Knowledge response alias hazır
- Application verifier
- Completion bekleniyor
- Factor ve challenge records
- challenge-ledger-a: pending
- Completion request ulaştı
Completion request, output alias ve attempt reference ile Application’a ulaştı. Browser sonucu beklerken verifier bu attempt’in pending kaydını ve account binding’ini değerlendirecektir; request arrival tek başına MFA kabulü değildir.
- Browser / Duru
- Son karar bekleniyor
- Application verifier
- Completion ulaştı; henüz kabul edilmedi
- Factor ve challenge records
- challenge-ledger-a: pending
- Verify ve lifecycle kapısı
İlk ve ikinci factor knowledge türündedir; distinctFactors=false’tur. outputMatches=true olsa da Application iki knowledge sonucunu MFA olarak kabul etmez: afterState=rejected ve mfaEstablished=false kalır.
- Browser / Duru
- Son karar bekleniyor
- Application verifier
- Red: aynı factor türü
- Factor ve challenge records
- challenge-ledger-a: rejected
- Terminal karar Browser’da
Browser aynı factor türü nedeniyle ret sonucunu aldı. Tamamlanmış MFA context veya sensitive action sonucu verilmedi; iki başarılı knowledge prompt’u gerekli knowledge + possession birleşimini sağlamaz.
- Browser / Duru
- Tamamlanmış MFA context yok
- Application verifier
- Red: aynı factor türü
- Factor ve challenge records
- challenge-ledger-a: rejected
ROLLER · STATE · VERİ AKIŞI
Duru password’ü geçti; işlem henüz bitmedi
Atlas ikinci factor isteyen bir action için Duru’nun password sonucunu alır. WEB-14.01’deki verified subject burada ilk aşamanın girdisidir. Application bunu mfaComplete=true yapmaz: başka bir authenticator’ın ilgili account’a bağlandığını ve bu attempt için gereken sonucu verdiğini kontrol edecektir.
Normal fixture authAttempt=attempt-duru-a, subject=subject-duru ve factorRef=otp-device-a ile ilerler. Bunlar correlation alias’larıdır. Challenge state pending iken sensitive action bekler; önce password geçti diye ikinci aşamanın protected capability’si Browser’a verilmez.
Factor sayısı prompt sayısı değildir
Knowledge, possession ve inherence farklı factor türleridir. Password ardından ikinci password veya merkezi PIN sorulması aynı knowledge türünü iki kez kullanır. Password ile authenticator possession kanıtı ise farklı türler olabilir. İki authenticator’ın aynı account’a doğru bağlanması ve tek zayıf recovery yoluyla birlikte değiştirilememesi ayrıca gerekir.
Tek authenticator da multi-factor olabilir: private key kullanımını device üzerindeki PIN veya biometric activation açabilir. Activation secret server’a ikinci password olarak gönderilmek zorunda değildir. Biometric tek başına NIST modelinde authenticator sayılmaz; physical authenticator ile ilişkisi değerlendirilir. Device location veya IP reputation ise risk signal’dır, factor yerine geçmez.
Challenge lifecycle: issue, verify, consume
Örnekte Application challenge-ledger-a kaydını attempt, subject, factor ve purpose=mfa-login ile ilişkilendirir. Browser’a dönen challenge alias gerçek OTP değildir; enrolled authenticator’ın output’u yalnız OTP_RESPONSE_ALIAS ile temsil edilir. OutputMatches=true, trusted verify sonucunu açıklamak için verilen bir girdidir.
Kabul kapısı bir conjunction’dır: firstFactorVerified, distinctFactors, factorBoundToSubject, purposeMatches, outputMatches, unused, withinLifetime ve attemptAllowed birlikte true olmalıdır. Kabul edildiğinde challenge consumed olur ve aynı attempt’in assurance context’i tamamlanır. Atomik tüketim iki eşzamanlı completion’ın aynı pending kaydı ayrı ayrı kullanmasını önler; store tek process veya shared service olabilir.
Expired branch’te doğru görünen output, withinLifetime=false sonucunu değiştirmez. Same-factor branch’te outputMatches=true olsa da distinctFactors=false olduğu için MFA tamamlanmaz. Bu sonuçlar secret tahmin başarısı değil, kabul için bağımsız koşulların nasıl birleştiğini gösterir.
OTP, push ve WebAuthn aynı phishing boundary’yi sağlamaz
MFA password disclosure etkisini azaltabilir; bu, her MFA protocol’ünün phishing-resistant olduğu anlamına gelmez. NIST’in terimi, impostor verifier’a geçerli authenticator output’u vermeyi kullanıcı dikkatine dayanmadan önleyen protocol özelliğidir. Manual OTP entry bu verifier binding’i sağlamaz; WebAuthn verifier name binding kullanabilir.
Push approval’da kullanıcı intent’i ve hangi request’in onaylandığı önemlidir. Rate limits, açık context ve number matching yanlış onayı azaltabilir; tek başına bir push ekranı WebAuthn seviyesinde cryptographic origin binding oluşturmaz. Bu ders OTP lifecycle’ını çizer; push delivery, WebAuthn signature veya gerçek AAL compliance ölçmez.
Phishing-resistant authentication da authenticated session’ın sonraki kullanımını veya yanlış resource permission’ını otomatik korumaz. WEB-13.03 session lifecycle, WEB-14.S02 ise recovery ve credential association sınırını tamamlar.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Aynı factor türü
- Attempt context’i ayrıldı
subject-duru, attempt-duru-a ve challenge-ledger-a bu kararın kapsamını belirler. Response alias gerçek OTP code değildir; output doğruluğu global bir MFA flag’i oluşturmaz.
- Attempt context
- case=same-factor
- Factor gate
- Factor değerlendirilmedi
- Assurance decision
- MFA kurulmadı
- İlk factor sonucu korundu
firstFactorVerified=true olarak verilmiştir. Primary factor knowledge’tır; bu tek sonuç bütün authentication assurance koşullarını tamamlamaz.
- Attempt context
- case=same-factor
- Factor gate
- Primary knowledge verified
- Assurance decision
- MFA kurulmadı
- İkinci factor gate’i okundu
Secondary factor knowledge olduğundan distinctFactors=false’tur. İki knowledge challenge’ı bu policy’de knowledge + possession gibi bağımsız factor çiftine dönüşmez.
- Attempt context
- case=same-factor
- Factor gate
- distinctFactors=false
- Assurance decision
- MFA kurulmadı
- Binding koşulları ayrı tutuldu
Subject, purpose, output, unused ve attemptAllowed alanları true olsa da failed distinctFactors koşulu telafi edilmez. Koşullar aynı attempt’e bağlanır.
- Attempt context
- case=same-factor
- Factor gate
- Failed gate korunuyor
- Assurance decision
- MFA kurulmadı
- Assurance yükseltilmedi
mfaEstablished=false ve afterState=rejected sonucu korunur. Browser’daki completed etiketi server’ın bu kararını değiştiremez.
- Attempt context
- case=same-factor
- Factor gate
- afterState=rejected
- Assurance decision
- mfaEstablished=false
- Ret gerekçesi başka yetkiye genişlemedi
Aynı factor türünün reddi knowledge’ın her kullanımda geçersiz olduğunu söylemez; bu MFA composition koşulu karşılanmamıştır.
- Attempt context
- case=same-factor
- Factor gate
- Composition denial
- Assurance decision
- Elevated assurance yok
Expired challenge
- Attempt context’i ayrıldı
subject-duru, attempt-duru-a ve challenge-ledger-a bu kararın kapsamını belirler. Response alias gerçek OTP code değildir; output doğruluğu global bir MFA flag’i oluşturmaz.
- Attempt context
- case=expired
- Factor gate
- Factor değerlendirilmedi
- Assurance decision
- MFA kurulmadı
- İlk factor sonucu korundu
firstFactorVerified=true olarak verilmiştir. Primary factor knowledge’tır; bu tek sonuç bütün authentication assurance koşullarını tamamlamaz.
- Attempt context
- case=expired
- Factor gate
- Primary knowledge verified
- Assurance decision
- MFA kurulmadı
- İkinci factor gate’i okundu
Secondary factor possession ve distinctFactors=true’tur, fakat withinLifetime=false kalır. Doğru output, expired challenge’ın süresini uzatmaz.
- Attempt context
- case=expired
- Factor gate
- withinLifetime=false
- Assurance decision
- MFA kurulmadı
- Binding koşulları ayrı tutuldu
Subject, purpose, output, unused ve attemptAllowed alanları true olsa da failed withinLifetime koşulu telafi edilmez. Koşullar aynı attempt’e bağlanır.
- Attempt context
- case=expired
- Factor gate
- Failed gate korunuyor
- Assurance decision
- MFA kurulmadı
- Assurance yükseltilmedi
mfaEstablished=false ve afterState=expired sonucu korunur. Browser’daki completed etiketi server’ın bu kararını değiştiremez.
- Attempt context
- case=expired
- Factor gate
- afterState=expired
- Assurance decision
- mfaEstablished=false
- Ret gerekçesi başka yetkiye genişlemedi
Expired response benign bir gecikmeyle oluşabilir. Bu reason kötü niyetli actor kanıtı değildir; yeni challenge ve recovery kendi policy’siyle değerlendirilir.
- Attempt context
- case=expired
- Factor gate
- Lifetime denial
- Assurance decision
- Elevated assurance yok
VARSAYIM · SINIR · KONTROL
Verified output yanlış attempt’e yetki veremez
Normal işlev, enrolled authenticator’ın sonucunu Duru’nun bekleyen attempt’ine bağlamaktır. Sadece “output doğru” boolean’ını global bir MFA flag’ine çevirmek subject, purpose ve challenge lifecycle ilişkisini kaybettirir. Etki, yanlış veya stale context’e elevated assurance verilmesi olabilir.
Blocking control ilgili attempt’in pending kaydını trusted account binding ve lifetime ile birlikte değerlendirmektir. Output değeri loga yazılmadan challengeRef ve decision reason ile karar açıklanabilir. Browser’daki completed etiketi server kararının yerine geçmez.
Bağımsızlık recovery ve fallback boyunca korunur
Birden fazla factor’dan beklenen yarar, yalnız normal login’deki prompt’lara bağlı değildir. Factor replacement veya alternative API aynı assurance kapısını atlıyorsa authenticated state o zayıf yolun koşullarıyla kurulabilir. Kapsam affected account ve verilen session/action yetkisidir; MFA hatası her resource’a otomatik erişim vermez.
Fallback’i görünür policy olarak tanımla: allowed method, required proof ve limited recovery capability ayrı olsun. Factor kaybı yaşayan kullanıcıya güvenli erişim sağlarken sırf active session’a dayanarak eski factor’ı kaldırma. Normal kullanım, device migration ve incident recovery birbirine karıştırılmamalıdır.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Assurance kaydı
- Assurance audit kapsamı seçildi
Application’ın normal kararından üretilen audit örneği seçildi. Bu inceleme, selector’ın kullandığı distinctFactors, lifetimeValid, purposeMatched ve challengeState alanlarını kapsar; gerçek authenticator output’u içermez.
- Assurance audit
- normal assurance: tam kayıt
- Challenge review
- Audit incelenmedi
- Integrity hükmü
- Integrity hükmü yok
- Attempt ve purpose ilişkilendirildi
mfaEstablished=true sonucu attempt-duru-a ve mfa-login purpose kapsamındadır. Bu assurance, farklı bir action veya account için otomatik izin olarak taşınmaz.
- Assurance audit
- normal assurance: tam kayıt
- Challenge review
- Purpose matched; attempt scope
- Integrity hükmü
- Integrity hükmü yok
- Factor bağımsızlığı okundu
Normal branch knowledge + possession kullanır ve distinctFactors=true’dur. İki başarılı prompt’un görünmesi yerine factor türü ve account binding karşılaştırılır.
- Assurance audit
- normal assurance: tam kayıt
- Challenge review
- Distinct factors=true
- Integrity hükmü
- Integrity hükmü yok
- Terminal challenge sonucu ayrıldı
challengeState=consumed kaydı one-time kararın bu attempt için uygulandığını gösterir. Audit’te output değeri tutulmadan terminal state ilişkilendirilebilir.
- Assurance audit
- normal assurance: tam kayıt
- Challenge review
- Challenge consumed
- Integrity hükmü
- Integrity hükmü yok
- Lifetime kanıtı arandı
lifetimeValid=true tam kayıtta vardır; distinctFactors ve purpose ile birlikte integrity predicate’i değerlendirilir.
- Assurance audit
- normal assurance: tam kayıt
- Challenge review
- Lifetime valid=true
- Integrity hükmü
- Tam predicate okunabilir
- Audit sonucu kapsamıyla kapandı
Ana örnekte dört kayıt koşulunun integrity count’u 0’dır; ayrı same-factor pozitif fixture count=1 verir. Bu dar sonuç, kayıtta olmayan output verification ve account binding kontrollerini veya recovery yeterliliğini kanıtlamaz.
- Assurance audit
- normal assurance: tam kayıt
- Challenge review
- Fixture integrity uyumlu
- Integrity hükmü
- Seçilen dört koşul uyumlu
Lifetime eksik
- Assurance audit kapsamı seçildi
Bu branch normal assurance kaydının lifetimeValid dışındaki alanlarını inceler. Observation, gerçek authenticator output’u yerine karar alanlarını kullanır.
- Assurance audit
- normal assurance: lifetime dışarıda
- Challenge review
- Audit incelenmedi
- Integrity hükmü
- Integrity hükmü yok
- Attempt ve purpose ilişkilendirildi
mfaEstablished=true sonucu attempt-duru-a ve mfa-login purpose kapsamındadır. Bu assurance, farklı bir action veya account için otomatik izin olarak taşınmaz.
- Assurance audit
- normal assurance: lifetime dışarıda
- Challenge review
- Purpose matched; attempt scope
- Integrity hükmü
- Integrity hükmü yok
- Factor bağımsızlığı okundu
Normal branch knowledge + possession kullanır ve distinctFactors=true’dur. İki başarılı prompt’un görünmesi yerine factor türü ve account binding karşılaştırılır.
- Assurance audit
- normal assurance: lifetime dışarıda
- Challenge review
- Distinct factors=true
- Integrity hükmü
- Integrity hükmü yok
- Terminal challenge sonucu ayrıldı
challengeState=consumed kaydı one-time kararın bu attempt için uygulandığını gösterir. Audit’te output değeri tutulmadan terminal state ilişkilendirilebilir.
- Assurance audit
- normal assurance: lifetime dışarıda
- Challenge review
- Challenge consumed
- Integrity hükmü
- Integrity hükmü yok
- Lifetime kanıtı arandı
lifetimeValid bu incelemede sunulmamıştır. Missing field ile false aynı değildir; selector’ın boş sonucu lifetime kontrolünün geçtiğini kanıtlamaz.
- Assurance audit
- normal assurance: lifetime dışarıda
- Challenge review
- Lifetime evidence missing
- Integrity hükmü
- UNKNOWN: assurance integrity
- Audit sonucu kapsamıyla kapandı
Bu kısmi record ile temiz assurance hükmü verilmez. Lifetime kaydı kendi trusted kaynağından istenir; event yokluğu actor attribution veya MFA failure kanıtına çevrilmez.
- Assurance audit
- normal assurance: lifetime dışarıda
- Challenge review
- Coverage eksik
- Integrity hükmü
- UNKNOWN: lifetime gate
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Attempt, factor ve terminal sonucu birlikte gözle
Application’ın challenge issue/verify/consume kararından gelen sanitized audit, Browser prompt gözleminden daha farklı kanıttır. attemptRef, subjectRef, factorType, purposeMatched, challengeState, lifetimeValid ve mfaEstablished alanları bizim öğretim şemamızdır; ürünün hazır SIEM field adları değildir.
Artifact XPath’i mfaEstablished=true olan satırlarda dört kayıt koşulunu denetler: distinctFactors, lifetimeValid, purposeMatched ve challengeState=consumed. Ana örnek bu alanlar arasında tutarsızlık göstermediği için sıfır satır; distinctFactors=false olan ayrı pozitif fixture tek satır verir. Bu count, output verification veya account binding gibi kayda alınmayan kontrollerin doğrulandığını göstermez. Eksik alan ya da event kaybı temiz assurance kanıtı değildir; seçim bir account saldırısı teşhisi de yapmaz.
Erişilebilir rollout ve recovery envanteri
Policy değişikliğini account/factor inventory ile başlat: enrolled methods, factor migration, erişilebilirlik ihtiyacı ve fallback owner’ı bilinmeli. Device kaybı, geç output ve iptal edilen prompt gibi normal hata durumlarını ölçmeden her rejection’ı kötü niyet sayma.
Kontrollü fixture’da sırayla accepted, expired ve same-factor branch’lerinin protected sonucu withholding/allow sınırını karşılaştır. Üretimde established provider/library davranışı, bağımsız notification ve recovery süreci ayrıca değerlendirilir; çıkış yolu kullanıcıyı kalıcı kilitlememelidir.
Assurance yükseltmesini server kararı yap
Provider veya library’nin authenticator verification sonucunu, ilgili account’ın kayıtlı factor’ına ve bu authentication attempt’ine bağla. İki ayrı parola iki bağımsız factor değildir; seçilen assurance policy’si hangi factor kombinasyonunu kabul ettiğini belirlemelidir. Bu örnekte subject, purpose, lifetime ve unused challenge state kontrolü tamamlanmadan mfaEstablished verilmez. Challenge consumption ile assurance yükseltmesini tutarlı bir state geçişinde yap; doğrulama servisi yanıt vermediğinde Browser prompt’unu başarı yerine kullanma.
OTP kullanılan akışta kısa lifetime, deneme sınırı ve başarılı output’un tek kullanımını provider sözleşmesiyle uygula; accepted tekrar kullanılabilir bir state bırakmamalıdır. Normal accepted dalı assurance üretmeli, expired ve same-factor dalları korumalı sonucu vermemelidir. Eksik account binding veya verifier outcome kaydı ise clean assurance kanıtı değildir. Factor değiştirme ve recovery için mevcut session varlığından bağımsız güvenli onay ve bildirim akışı tasarla; timeout veya reset, gereken authentication seviyesini sessizce düşürmesin.
ŞİMDİ VAKAYA UYGULA
MFA sonucu hangi attempt, factor ve lifetime’a bağlıdır?
MFA assurance, doğru output’un yanı sıra subject, purpose, bağımsız factor ve challenge state koşullarına bağlıdır. Eksik audit alanı temiz sonuç sayılmaz.
Vakadaki doğrulanmış actor, tenant ilişkisi ve requested action için gereken kararları ayır. Authentication veya proof başarısını object permission yerine kullanma.
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
MFA challenge/result lifecycle
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"subject": "subject-duru",
"attemptRef": "attempt-duru-a",
"challengeRef": "challenge-ledger-a",
"responseAlias": "OTP_RESPONSE_ALIAS_NOT_A_CODE",
"primaryFactor": "knowledge",
"purpose": "mfa-login",
"rows": [
{
"case": "normal",
"firstFactorVerified": true,
"distinctFactors": true,
"factorBoundToSubject": true,
"purposeMatches": true,
"outputMatches": true,
"unused": true,
"withinLifetime": true,
"attemptAllowed": true,
"mfaEstablished": true,
"afterState": "consumed",
"secondaryFactor": "possession",
"factorRef": "otp-device-a",
"responseAlias": "OTP_RESPONSE_ALIAS_NOT_A_CODE"
},
{
"case": "expired",
"firstFactorVerified": true,
"distinctFactors": true,
"factorBoundToSubject": true,
"purposeMatches": true,
"outputMatches": true,
"unused": true,
"withinLifetime": false,
"attemptAllowed": true,
"mfaEstablished": false,
"afterState": "expired",
"secondaryFactor": "possession",
"factorRef": "otp-device-a",
"responseAlias": "OTP_RESPONSE_ALIAS_NOT_A_CODE"
},
{
"case": "same-factor",
"firstFactorVerified": true,
"distinctFactors": false,
"factorBoundToSubject": true,
"purposeMatches": true,
"outputMatches": true,
"unused": true,
"withinLifetime": true,
"attemptAllowed": true,
"mfaEstablished": false,
"afterState": "rejected",
"secondaryFactor": "knowledge",
"factorRef": "second-knowledge-factor-a",
"responseAlias": "KNOWLEDGE_RESPONSE_ALIAS_ONLY"
}
],
"selector": {
"language": "XPath",
"xml": "<audit><attempt mfaEstablished=\"true\" distinctFactors=\"true\" lifetimeValid=\"true\" purposeMatched=\"true\" challengeState=\"consumed\"/></audit>",
"xpath": "count(/audit/attempt[@mfaEstablished=\"true\" and (@distinctFactors=\"false\" or @lifetimeValid=\"false\" or @purposeMatched=\"false\" or @challengeState!=\"consumed\")])",
"expected": 0,
"positiveFixtureXml": "<audit><attempt mfaEstablished=\"true\" distinctFactors=\"false\" lifetimeValid=\"true\" purposeMatched=\"true\" challengeState=\"consumed\"/></audit>",
"positiveExpected": 1,
"scope": "Local assurance-integrity evidence only; no OTP/device verification or multi-host ordering.",
"missingFieldBehavior": "Selection requires declared fields. Missing fields mean insufficient evidence; a zero count does not prove control efficacy."
},
"normalSecondaryFactor": "possession"
}- attemptRef / subject / challengeRef
- Kararı tek attempt/account/pending record’a bağlayan correlation alias.
- outputMatches / unused / withinLifetime
- Supplied verification ve lifecycle predicate’leri; output bytes veya clock ölçümü değil.
- distinctFactors / mfaEstablished
- Aynı factor türü tekrarı ayrı factor sayılmaz; completion tüm acceptance kapılarını gerektirir.
- selector
- Authored XML integrity seçimi; missing field yeterli kanıt sağlamaz.
Fixed aliases gerçek secret değildir. Crypto, device output, email/push delivery, session issuance ve AAL compliance uygulanmaz; trusted first-factor sonucu ve ikinci verify predicate’i girdidir.
İki yanlış kanı
İki password prompt’u otomatik MFA’dır.
Aynı knowledge factor’ının tekrarı iki bağımsız factor oluşturmaz; gereken tür ve account binding ayrı kontrol edilir.
Her OTP veya push onayı phishing-resistant authentication demektir.
MFA ile phishing resistance farklı özelliklerdir; verifier binding protocol tarafından sağlanmalıdır.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
Knowledge factor ardından ikinci bir knowledge factor doğrulandı. MFA kurulmuş sayılır mı?
- Hayır. distinctFactors=false.
- Evet. Başarılı her iki prompt otomatik MFA’dır.
Gerekçeli cevabı oku
Hayır. distinctFactors=false. — same-factor satırında outputMatches=true olsa da gerekli factor çeşitliliği sağlanmaz.
Doğru output, süresi dolmuş challenge’ı tamamlar mı?
Dersten seçilen artifact alanları; öğretim örneği
- rows[1].outputMatches
- true
- rows[1].withinLifetime
- false
- rows[1].mfaEstablished
- false
- rows[1].afterState
- expired
- Evet. Response eşleşiyorsa lifetime policy önemsizdir.
- Hayır. Expired challenge MFA context üretmez.
Gerekçeli cevabı oku
Hayır. Expired challenge MFA context üretmez. — withinLifetime=false diğer koşullar true olsa da kabulü durdurur. afterState=expired kalır.
Normal possession challenge consumed oldu. Neden bu sonuç phishing resistance veya bütün sensitive action’lar için izin değildir?
Gerekçeli cevabı oku
Bu örnek knowledge+possession ile lifetime/purpose koşullarından MFA context kurar; gerçek OTP veya device verification çalıştırmaz. OTP-style factor tek başına verifier-name binding ya da phishing-resistant protocol kanıtı değildir. Tamamlanan MFA, user/object/action iznini veya action-specific reauthentication policy’sini otomatik olarak sağlamaz.
□ MFA context ile phishing resistance’ı ayırdım.
□ Tamamlanan MFA’yı bütün action’lar için izin saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- NIST SP 800-63B-4 — Authentication and Authenticator Management2.2 Authentication Assurance Level 2 · 3.1.1.2 Password Verifiers · 3.2.2 Rate Limiting (Throttling) · 3.2.5 Phishing Resistance · 4.1 Authenticator Binding · 4.2 Account Recovery · 4.5 Invalidation · 4.6 Account Notifications
- OWASP — Multifactor Authentication Cheat SheetIntroduction · One-Time Password (OTP) Handling and Storage · Resetting MFA · Changing MFA Factors · MFA Fatigue (Push Notification Bombing): Mitigations
- OWASP — Logging Cheat SheetWhich events to log · Event attributes · Data to exclude · Verification