Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

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.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Bağımsız factor kabul edilir

  1. İ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ı
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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

  1. İ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ı
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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

  1. İ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ı
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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ü

  1. 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ı
  2. İ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ı
  3. İ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ı
  4. 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ı
  5. 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
  6. 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

  1. 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ı
  2. İ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ı
  3. İ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ı
  4. 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ı
  5. 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
  6. 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ı

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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ı?

  1. Hayır. distinctFactors=false.
  2. 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
  1. Evet. Response eşleşiyorsa lifetime policy önemsizdir.
  2. 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