WEB / WEB-21.S04
Audit evidence, detection ve incident scope
HTTP status, business audit, correlation ve incident kapsamını Tea note event zincirinde ayır.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Beklenen deny
- Audit source seçildi
Application, Atlas/op-demo/tea için sabit event nesnelerini bilir. Audit writer henüz allowlist JSON lines üretmedi, correlation hesaplanmadı; tüm adımlar yerel kayıt işlemleridir.
- Application
- Sabit event source
- Audit writer
- Henüz output yok
- Correlation
- Henüz ilişki yok
- Reviewer
- Scope bilinmiyor
- Allowlist output oluşur
Structured serializer yalnız schema alanlarını kopyalar; fake session ve note body dışarıda kalır.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- Henüz ilişki yok
- Reviewer
- Scope bilinmiyor
- Tuple ilişkisi hesapla
Tenant, operation ve object birlikte karşılaştırılır; Nova reused request alias Atlas’a bağlanmaz.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- expected-denial
- Reviewer
- Scope bilinmiyor
- Evidence kapsamı yazılır
Eksik kayıt unknown kalır; bilinen tea operation dışındaki object/tenant sonuçları uydurulmaz.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- expected-denial
- Reviewer
- tea / Atlas; diğerleri unknown
- Review checkpoint ayrımı
Yeni state validation geçmiş audit’i değiştirmez; bu fixture production recovery başlatmaz.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- expected-denial
- Reviewer
- Sınırlı checkpoint doğrulandı
Event çelişkisi
- Audit source seçildi
Application, Atlas/op-demo/tea için sabit event nesnelerini bilir. Audit writer henüz allowlist JSON lines üretmedi, correlation hesaplanmadı; tüm adımlar yerel kayıt işlemleridir.
- Application
- Sabit event source
- Audit writer
- Henüz output yok
- Correlation
- Henüz ilişki yok
- Reviewer
- Scope bilinmiyor
- Allowlist output oluşur
Structured serializer yalnız schema alanlarını kopyalar; fake session ve note body dışarıda kalır.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- Henüz ilişki yok
- Reviewer
- Scope bilinmiyor
- Tuple ilişkisi hesapla
Tenant, operation ve object birlikte karşılaştırılır; Nova reused request alias Atlas’a bağlanmaz.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- review-required
- Reviewer
- Scope bilinmiyor
- Evidence kapsamı yazılır
Eksik kayıt unknown kalır; bilinen tea operation dışındaki object/tenant sonuçları uydurulmaz.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- review-required
- Reviewer
- tea / Atlas; diğerleri unknown
- Review checkpoint ayrımı
Yeni state validation geçmiş audit’i değiştirmez; bu fixture production recovery başlatmaz.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- review-required
- Reviewer
- Review-required
Kayıt eksik
- Audit source seçildi
Application, Atlas/op-demo/tea için sabit event nesnelerini bilir. Audit writer henüz allowlist JSON lines üretmedi, correlation hesaplanmadı; tüm adımlar yerel kayıt işlemleridir.
- Application
- Sabit event source
- Audit writer
- Henüz output yok
- Correlation
- Henüz ilişki yok
- Reviewer
- Scope bilinmiyor
- Allowlist output oluşur
Structured serializer yalnız schema alanlarını kopyalar; fake session ve note body dışarıda kalır.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- Henüz ilişki yok
- Reviewer
- Scope bilinmiyor
- Tuple ilişkisi hesapla
Tenant, operation ve object birlikte karşılaştırılır; Nova reused request alias Atlas’a bağlanmaz.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- unknown
- Reviewer
- Scope bilinmiyor
- Evidence kapsamı yazılır
Eksik kayıt unknown kalır; bilinen tea operation dışındaki object/tenant sonuçları uydurulmaz.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- unknown
- Reviewer
- tea / Atlas; diğerleri unknown
Clock belirsiz
- Audit source seçildi
Application, Atlas/op-demo/tea için sabit event nesnelerini bilir. Audit writer henüz allowlist JSON lines üretmedi, correlation hesaplanmadı; tüm adımlar yerel kayıt işlemleridir.
- Application
- Sabit event source
- Audit writer
- Henüz output yok
- Correlation
- Henüz ilişki yok
- Reviewer
- Scope bilinmiyor
- Allowlist output oluşur
Structured serializer yalnız schema alanlarını kopyalar; fake session ve note body dışarıda kalır.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- Henüz ilişki yok
- Reviewer
- Scope bilinmiyor
- Tuple ilişkisi hesapla
Tenant, operation ve object birlikte karşılaştırılır; Nova reused request alias Atlas’a bağlanmaz.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- Clock order unknown
- Reviewer
- Scope bilinmiyor
- Evidence kapsamı yazılır
Eksik kayıt unknown kalır; bilinen tea operation dışındaki object/tenant sonuçları uydurulmaz.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- Clock order unknown
- Reviewer
- tea / Atlas; diğerleri unknown
- Review checkpoint ayrımı
Yeni state validation geçmiş audit’i değiştirmez; bu fixture production recovery başlatmaz.
- Application
- Sabit event source
- Audit writer
- Seçilmiş JSON lines
- Correlation
- Clock order unknown
- Reviewer
- Sınırlı checkpoint doğrulandı
ROLLER · STATE · VERİ AKIŞI
HTTP kaydı ile iş kararı
Tea note için HTTP access kaydı bir request’in server tarafından görüldüğünü ve response status’unu anlatır. Business audit ise actor Duru, action rename-note, object tea, tenant Atlas, decision deny ve reason owner-policy bilgisini taşır. Bu iki olayın amacı farklıdır. Public açıklama yanıtı 200 olabilirken rename-note kararı deny kalabilir; status tek başına işin commit edildiğini söylemez. Uygulamanın policy kararına yakın ürettiği event, dış request header’ından türetilmiş actor etiketiyle aynı güven düzeyinde değildir.
operationAlias op-demo ve requestAlias req-demo korelasyon etiketidir; credential, principal veya izin değildir. Session correlation için gerçek session identifier yerine inert grup alias’ı kullanılır. User ve tenant bağı application context’inden gelir; jobAlias sonraki worker işlemini aynı operation ile ilişkilendirir. Bir request birden çok business action, bir async action da birden çok job attempt üretebilir. eventId, parentEventId, action/object ve producer ilişkisini açık yazmak bütün kayıtları tek request string’iyle join etmekten daha açıklayıcıdır.
Baseline, eksiklik ve incident sınırı
Sınırlı comparator tenant, operationAlias ve object tuple’ı içinde deny ile committed=true çelişkisini arar. Normal deny/committed=false kaydı 0, hazırlanmış sentetik çelişki 1 sonuç verir. Bu gerçek policy ihlali observation’ı değil, incelenecek kayıt tutarsızlığıdır. Nova aynı req-demo alias’ını kullansa da Atlas satırına join edilmez. Eksik commit alanı false diye doldurulmaz; unknown kalır. Aynı tuple’daki bütün kayıtlar değerlendirilir. Kayıt sırası sonucu değiştirmemeli, tamamen aynı event’in tekrarı yeni outcome sayılmamalıdır. Çelişen complete kayıtlar ambiguous, incomplete evidence unknown olarak tutulur. Bu sınıflar otomatik incident verdict değildir.
Wall-clock sıralaması farklı producer’lar arasında causal order vermez. Artifact’te app clock 10:00:02, worker clock 09:59:59 olabilir; explicit parentEventId ilişkisi ve aynı producer sequence daha dar bir sıralama kanıtıdır. Incident kapsamı da buna göre yazılır: bu ledger’da tea ve seçilmiş operation bilinir, diğer object/tenant’lar ölçülmemiştir. Recovery bir alert’in kapanması değildir; seçilmiş owner state’in doğrulanması ve yeni checkpoint gerekir. Eski kayıtları silmek veya değiştirmek geçmişin doğruluğunu artırmaz; provenance, erişim sınırı ve retention korunur.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
Alias scope
- HTTP200 başka fact
http-demo status 200 taşırken decision-demo deny ve committed false. Transport status business action’ın kabul edildiği veya Duru’nun object yetkisi olduğu sonucunu vermiyor.
- Audit event ledger
- HTTP200 / business deny/false
- Tuple/producer comparison
- Henüz değerlendirilmedi
- Scope sonucu
- Henüz değerlendirilmedi
- Composite tuple
Nova req-demo ve op-demo alias’larını yeniden kullanır, fakat tenant başka. Tenant/operationAlias/object birlikte seçilmezse ilgisiz allow/true Atlas action’ına yanlış bağlanabilir.
- Audit event ledger
- HTTP200 / business deny/false
- Tuple/producer comparison
- Atlas tuple ≠ Nova tuple
- Scope sonucu
- Henüz değerlendirilmedi
- Normal expected denial
Atlas/op-demo/tea normal business row deny/false olduğu için expected-denial. Bu normal policy sonucu successful attack veya Duru malicious diye etiketlenmez.
- Audit event ledger
- HTTP200 / business deny/false
- Tuple/producer comparison
- Atlas tuple ≠ Nova tuple
- Scope sonucu
- Expected denial / no incident verdict
- Producer clock farkı
Job saati 09:59:59, decision 10:00:02 görünebilir; parentEventId decision-demo ilişkisi ayrı verilmiş. CrossProducerWallClockOrder unknown; timestamps tek global causality dizisi oluşturmaz.
- Audit event ledger
- Declared parent relation / clock order unknown
- Tuple/producer comparison
- Atlas tuple ≠ Nova tuple
- Scope sonucu
- Expected denial / no incident verdict
- Parent relation trust’i
ParentEventId producer’ın bildirdiği ilişki; cryptographic authenticity değildir. Source context ve record completeness ayrıca gerekir; event ID equality user authorization sağlamaz.
- Audit event ledger
- Declared parent relation / clock order unknown
- Tuple/producer comparison
- Declared relation ≠ authentic authorization
- Scope sonucu
- Expected denial / no incident verdict
- Impact scope’u dar tut
Known scope yalnız Atlas tenant ve tea object’i. Other tenants/objects unknown; alias’ların benzemesi bütün tenant’ları incident scope’una katmak için evidence değildir.
- Audit event ledger
- Declared parent relation / clock order unknown
- Tuple/producer comparison
- Declared relation ≠ authentic authorization
- Scope sonucu
- Known Atlas/tea / other scope unknown
Bütün satırlar
- İlk matching row
Comparator ilk business row’da durmuyor. LateContradiction iki unique row içerir ve sonraki deny/true açık contradiction’dır; row order kontrolün sonucunu değiştirmemeli.
- Audit event ledger
- Inspect all matching business rows
- Tuple/producer comparison
- Henüz değerlendirilmedi
- Scope sonucu
- Henüz değerlendirilmedi
- Explicit contradiction
Any unique deny/true için review-required; ambiguity true bilgisi ayrıca kalır. Bu synthetic fixture contradiction’ı gerçek policy violation veya actor intent kanıtı diye sunmuyoruz.
- Audit event ledger
- Inspect all matching business rows
- Tuple/producer comparison
- Deny/true → review-required / ambiguity retained
- Scope sonucu
- Henüz değerlendirilmedi
- Duplicate semantics
IdenticalDuplicate iki matching row ama uniqueRows1 verir. Complete identical record tekrarına iki ayrı business effect atfetmek yanlış incident magnitude üretir.
- Audit event ledger
- Inspect all matching business rows
- Tuple/producer comparison
- Deny/true → review-required / ambiguity retained
- Scope sonucu
- Matching2 / unique1 / expected-denial
- Conflicting complete kayıt
DifferentCompleteOutcomes ve sameIdDifferentFields ambiguous olur. Aynı event ID altında değişen field’lar normal identical repeat değildir; detector bu farkı silmez.
- Audit event ledger
- Complete conflict / changed ID fields ambiguous
- Tuple/producer comparison
- Deny/true → review-required / ambiguity retained
- Scope sonucu
- Matching2 / unique1 / expected-denial
- Incomplete priority
LaterIncomplete için incompleteRows1 ve result unknown. Explicit contradiction yokken missing commit’ı false varsaymak evidence completeness şartını gevşetir.
- Audit event ledger
- Complete conflict / changed ID fields ambiguous
- Tuple/producer comparison
- Incomplete evidence → unknown
- Scope sonucu
- Matching2 / unique1 / expected-denial
- Review verdict sınırı
Comparator finite supplied ledger’da attention ve uncertainty seçer. SIEM, identity verification veya production recovery çalıştırmaz; review-required otomatik user blocking veya saldırı ilanı değildir.
- Audit event ledger
- Complete conflict / changed ID fields ambiguous
- Tuple/producer comparison
- Incomplete evidence → unknown
- Scope sonucu
- Finite review classification / no incident verdict
VARSAYIM · SINIR · KONTROL
Korelasyonun yetkiye dönüşmesi
Logging application kararını sonradan anlaşılır kılar. Gereken güven bağı event’in doğru source, identity context ve operation’a ait olmasıdır. Request etiketi yeniden kullanılır veya tenant kaybolursa ilgisiz işler tek zincir gibi görünebilir. Bu yanlış attribution ya da gereğinden geniş incident kapsamı yaratır; etiket eşleşmesi object yetkisi değildir. Kontrol composite correlation, source context ve eksik field’ın unknown tutulmasıdır. Sabit Atlas/Nova satırları aynı alias’ın farklı tenant’larda farklı bağ taşıdığını gösterir.
Aynı operation’ın güvenilen decision ve commit kayıtları uyuşmuyorsa review gerekir. Kaynağı doğrulanmamış client bildirimi, eski projection veya farklı retry attempt aynı kanıt gücünde değildir. ParentEventId üreticinin bildirdiği ilişkiyi taşır; tek başına cryptographic authenticity veya non-repudiation sağlamaz. Buradaki source context verilidir. Product context ve provenance incelenmeden bir çelişkiyi başarılı attack diye yorumlamak gözlenen etkiden daha geniş bir varsayım ekler.
Log da korunacak bir veri kümesidir
Log yazarı bütün request’i kopyalarsa correlation için gereken birkaç alan yanında session değerleri, token, kişisel bilgi veya note body de taşınabilir. Normal amaç action sonucunu açıklamaktır; bu geniş veri kopyası o amaç için gerekli değildir. Kontrol allowlist ve veri minimizasyonudur. Örnekte fake Authorization, fake sessionIdentifier ve sıradan noteText source nesnesinde bulunur ama audit çıktısında yoktur. Sonraki reviewer’ın erişimi yalnız ihtiyacı olan event alanlarıyla sınırlandırılır; hash veya alias kullanımı da ilişkilendirme riskini otomatik ortadan kaldırmaz.
Log viewer ve export formatı da interpreter context’i kullanır. Serbest metin string birleştirmeyle kayıt sınırlarına konmak yerine schema’ya uygun structured serialization ile yazılır; delimiter ve newline data olarak encode edilir. Örnek yalnız JSON line kaydını işler. Zorunlu business audit ile optional diagnostic logging failure için farklı policy isteyebilir. Hiç kayıt yazılmaması temiz sistem kanıtı değildir. Log read/write yetkileri, collector kaybının görünürlüğü ve retention sonrası kontrollü disposal ayrı korunmalıdır.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Audit controls
- Allowlist field set’i
Schema event/tenant/operation/object ve decision/committed gibi gerekli alanları seçer. Fake Authorization, sessionIdentifier ve noteText output’a taşınmaz; whole request logging gerekli değil.
- Allowlisted audit kayıtları
- Allowed metadata / excluded fake sensitive fields
- Correlation/completeness review
- Henüz değerlendirilmedi
- Scope ve checkpoint
- Henüz değerlendirilmedi
- Tuple correlation kontrolü
Atlas/op-demo/tea business satırları Nova’dan ayrılır. Job alias ancak job record bulununca ilişkiyi uzatır; yokken execution varsayılmaz.
- Allowlisted audit kayıtları
- Allowed metadata / excluded fake sensitive fields
- Correlation/completeness review
- Composite tuple / observed job relationship
- Scope ve checkpoint
- Henüz değerlendirilmedi
- All-row outcome kontrolü
Normal expected-denial, deny/true review-required, identical repeat single evidence ve missing commit unknown olarak karşılaştırılır. Input reordering first-row bias üretmemeli.
- Allowlisted audit kayıtları
- Allowed metadata / excluded fake sensitive fields
- Correlation/completeness review
- Composite tuple / observed job relationship
- Scope ve checkpoint
- All-row priority / repeat/order controls
- Source ve time coverage
Same producer sequence sırası bilinebilir; cross-producer clock order unknown kalır. Parent relation producer declaration’ıdır ve root cause certainty’ye otomatik dönüşmez.
- Allowlisted audit kayıtları
- Producer sequence / clock trust separate
- Correlation/completeness review
- Composite tuple / observed job relationship
- Scope ve checkpoint
- All-row priority / repeat/order controls
- Recovery yeni checkpoint
RestoredOwner Duru ve validated true yeni supplied state’i anlatır, historicalEventsRetained true. Recovery geçmiş deny/commit kaydını silmez; productionRestore false.
- Allowlisted audit kayıtları
- Producer sequence / clock trust separate
- Correlation/completeness review
- New validated state / historical ledger retained
- Scope ve checkpoint
- All-row priority / repeat/order controls
- Bounded review receipt
Review scope Atlas/tea ile confidence ve unknown’ları birlikte taşır. Minimized structured records sayesinde private body gerekmiyor; finite comparison gerçek incident tespiti diye genişletilmez.
- Allowlisted audit kayıtları
- Producer sequence / clock trust separate
- Correlation/completeness review
- New validated state / historical ledger retained
- Scope ve checkpoint
- Known scope + uncertainty / no production claim
Audit evidence gap
- Eksik business event
Review’da matching business row yok; missing result unknown ve committed null. HTTP200 veya boş detector sonucu policy enforcement sağlıklı diye yorumlanamaz.
- Allowlisted audit kayıtları
- Business observation absent / committed unknown
- Correlation/completeness review
- Henüz değerlendirilmedi
- Scope ve checkpoint
- Henüz değerlendirilmedi
- Collector coverage boşluğu
Record yokluğunun event yokluğu, field loss veya collector failure nedeni bilinmiyor. Normal deny/false row eksik olayın authoritative kararı diye kopyalanmıyor.
- Allowlisted audit kayıtları
- Business observation absent / committed unknown
- Correlation/completeness review
- Absent evidence ≠ verified negative event
- Scope ve checkpoint
- Henüz değerlendirilmedi
- Impact belirsizliği
Actor intent, commit ve other tenant/object impact UNKNOWN. Known scope gözlemini genişletmek için separate context gerekir; aliased user adı attribution kanıtını tek başına tamamlamaz.
- Allowlisted audit kayıtları
- Business observation absent / committed unknown
- Correlation/completeness review
- Absent evidence ≠ verified negative event
- Scope ve checkpoint
- Commit/intent/other-scope impact UNKNOWN
- Gerekli source bağları
Required schema fields, producer context, composite tuple ve collector coverage gerekli. Her matching row completeness kontrolünden geçmeli; first-match shortcut bu soruyu yanıtlamaz.
- Allowlisted audit kayıtları
- Needed: source/schema/tuple/coverage/all rows
- Correlation/completeness review
- Absent evidence ≠ verified negative event
- Scope ve checkpoint
- Commit/intent/other-scope impact UNKNOWN
- Selector’ın dar bilgisi
XPath tek XML’de deny/true seçer; missing document zero olabilir. Bu zero real SIEM event absence, all-copy retention veya reliable pipeline evidence’ı değildir.
- Allowlisted audit kayıtları
- Needed: source/schema/tuple/coverage/all rows
- Correlation/completeness review
- Zero matches ≠ adequate evidence coverage
- Scope ve checkpoint
- Commit/intent/other-scope impact UNKNOWN
- Yeni review sınırı
Yeni evidence bilinen tuple’ı ve collector context’ini ayrı tamamlamalı. Bu eksik kayıt unknown kalır; otomatik incident verdict, user disable veya recovery işlemi başlatmaz.
- Allowlisted audit kayıtları
- Needed: source/schema/tuple/coverage/all rows
- Correlation/completeness review
- Zero matches ≠ adequate evidence coverage
- Scope ve checkpoint
- Retain unknown / scoped human review evidence
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Seçimin sonucu ile evidence yeterliliği
Comparator şeması eventId, tenant, operationAlias, object, decision ve committed alanlarını ister. Aynı tuple’daki bütün business satırları okunur; ilk eşleşmede durulmaz. Event ID ve bütün alanları aynı complete tekrar tek evidence sayılır. Herhangi bir unique satır deny/true ise review-required sonucu çıkar. Farklı complete kararlar veya aynı event ID altında farklı alanlar varsa ambiguity görünür kalır; açık deny/true yoksa conflicting complete kayıtlar ambiguous olur. Eksik commit evidence unknown’dır. Bu yerel Python karşılaştırması policy ihlali veya SIEM deployment kanıtı değildir. XPath tek XML’de deny/true satırlarını seçer: normal 0, positive 1, eksik document 0 verir; sonuncusu healthy baseline değildir.
False-positive azaltma için aynı object’teki eski revision, farklı tenant, açıklanan retry ve sıradan policy deny birlikte değerlendirilir. Job correlation yalnız worker event’i bulunduğunda zinciri uzatır; bulunmadığında job yürütüldü diye tamamlanmaz. Clock güveni ve source producer ayrıca raporlanır. Aynı producer sequence için sıra bilinebilirken iki clock arasındaki sıralama unknown kalabilir. Esas soru kaç satır seçildiği kadar, hangi zorunlu veri kümesinin gerçekten mevcut olduğudur; missing-field ve collector-health evidence bu nedenle ayrı tutulur.
Incident ve recovery kararını sınırlamak
Review önce gözlemi yazar: Atlas/op-demo/tea tuple’ında decision ile commit kaydı çelişiyor. Sonra kaynak ve uncertainty belirtilir: sabit fixture, verilen producer context ve clock belirsizliği. Impact kanıtın izin verdiği kapsamla sınırlanır. Bütün tenant’ların etkilendiği veya Duru’nun kötü niyetli olduğu çıkarılmaz. NIST incident yaklaşımında analysis, magnitude ve evidence provenance önemlidir. Bu örnek otomatik user blocking veya recovery başlatmaz; karar sahibine bilinen ve bilinmeyen alanları verir.
Recovery evidence yeni checkpoint’te owner state ve business invariant’ı doğrular; eski çelişki kaydı korunur. Örnekte restoredOwner Duru ve validated=true seçilen yerel state sonucudur. Dış application, backup veya production service restore edilmemiştir. Kalıcı kontrol source schema’sını korumak, field kaybında unknown davranmak, audit pipeline failure’ını görünür tutmak ve reviewer erişimini amaçla sınırlamaktır. Sonraki regression review aynı tuple’ı karşılaştırabilir; kapsam dışındaki sistemler ölçülmeden geçmiş sayılmaz.
ŞİMDİ VAKAYA UYGULA
200, parent relation veya aynı alias incident kanıtı mı?
Atlas/op-demo/tea için HTTP 200 kaydı, business deny/committed false kararı ve worker job kaydı var. Nova aynı request alias’ını kullansa da başka tenant. Job saati parent’tan erken görünür; producer clock’ları global sıra vermiyor. Comparator aynı tuple’daki bütün business satırlarını inceliyor.
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
Tea note audit ve kapsam defteri
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"schemaFields": [
"eventId",
"parentEventId",
"kind",
"tenant",
"requestAlias",
"operationAlias",
"sessionCorrelationAlias",
"userAlias",
"jobAlias",
"actor",
"action",
"object",
"decision",
"reason",
"committed",
"producer",
"sequence",
"time",
"status"
],
"ledger": [
{
"eventId": "http-demo",
"kind": "http",
"tenant": "Atlas",
"requestAlias": "req-demo",
"operationAlias": "op-demo",
"object": "tea",
"status": 200,
"producer": "app",
"sequence": 1
},
{
"eventId": "decision-demo",
"parentEventId": "http-demo",
"kind": "business",
"tenant": "Atlas",
"requestAlias": "req-demo",
"operationAlias": "op-demo",
"sessionCorrelationAlias": "session-group-demo",
"userAlias": "Duru",
"actor": "Duru",
"action": "rename-note",
"object": "tea",
"decision": "deny",
"reason": "owner-policy",
"committed": false,
"producer": "app",
"sequence": 2,
"time": "10:00:02"
},
{
"eventId": "job-demo",
"parentEventId": "decision-demo",
"kind": "job",
"tenant": "Atlas",
"operationAlias": "op-demo",
"jobAlias": "job-demo",
"object": "tea",
"producer": "worker",
"sequence": 1,
"time": "09:59:59"
},
{
"eventId": "nova-demo",
"kind": "business",
"tenant": "Nova",
"requestAlias": "req-demo",
"operationAlias": "op-demo",
"object": "tea",
"decision": "allow",
"committed": true,
"producer": "app",
"sequence": 3
}
],
"excludedSeed": {
"Authorization": "FAKE-AUTH-ALIAS",
"sessionIdentifier": "FAKE-SESSION-ALIAS",
"noteText": "Tea note\nSecond line"
},
"correlationKeys": [
"tenant",
"operationAlias",
"object"
],
"normal": {
"result": "expected-denial",
"contradictions": 0
},
"contradiction": {
"decision": "deny",
"committed": true,
"result": "review-required",
"contradictions": 1,
"syntheticNotActualPolicyViolation": true
},
"missing": {
"result": "unknown",
"committed": null
},
"clock": {
"parentRelation": "decision-demo → job-demo",
"crossProducerWallClockOrder": "unknown"
},
"scope": {
"knownObjects": [
"tea"
],
"knownTenants": [
"Atlas"
],
"otherObjects": "unknown",
"otherTenants": "unknown"
},
"recovery": {
"restoredOwner": "Duru",
"validated": true,
"historicalEventsRetained": true,
"productionRestore": false
},
"selector": {
"xml": "<audit><business decision=\"deny\" committed=\"false\"/></audit>",
"xpath": "count(/audit/business[@decision=\"deny\" and @committed=\"true\"])",
"expected": 0,
"positiveFixtureXml": "<audit><business decision=\"deny\" committed=\"true\"/></audit>",
"positiveExpected": 1
},
"comparatorPolicy": {
"scopeKeys": [
"tenant",
"operationAlias",
"object"
],
"inspect": "all matching business rows",
"identicalRepeat": "deduplicate complete identical event record",
"changedEventIdentityFields": "ambiguous",
"resultPriority": [
"explicit deny/true → review-required",
"missing/incomplete evidence → unknown",
"conflicting complete records → ambiguous",
"only deny/false → expected-denial",
"other complete observations → other-observed"
],
"notActualIncidentVerdict": true
},
"multipleRows": {
"lateContradiction": {
"result": "review-required",
"matchingRows": 2,
"uniqueRows": 2,
"duplicateRows": 0,
"contradictions": 1,
"incompleteRows": 0,
"ambiguous": true
},
"identicalDuplicate": {
"result": "expected-denial",
"matchingRows": 2,
"uniqueRows": 1,
"duplicateRows": 1,
"contradictions": 0,
"incompleteRows": 0,
"ambiguous": false
},
"differentCompleteOutcomes": {
"result": "ambiguous",
"matchingRows": 2,
"uniqueRows": 2,
"duplicateRows": 0,
"contradictions": 0,
"incompleteRows": 0,
"ambiguous": true
},
"sameIdDifferentFields": {
"result": "ambiguous",
"matchingRows": 2,
"uniqueRows": 2,
"duplicateRows": 0,
"contradictions": 0,
"incompleteRows": 0,
"ambiguous": true
},
"laterIncomplete": {
"result": "unknown",
"matchingRows": 2,
"uniqueRows": 2,
"duplicateRows": 0,
"contradictions": 0,
"incompleteRows": 1,
"ambiguous": false
}
}
}- ledger
- Verilen source context’e ait event alanları; canlı log değildir.
- correlationKeys
- Tenant/operation/object ilişkisi; credential değildir.
- excludedSeed
- Sahte hassas alanlar output’a kopyalanmaz.
- scope/recovery
- Bilinen kapsam ve yeni checkpoint; production restore yoktur.
- selector
- Tek XML’de deny/commit çelişkisi; eksik evidence unknown kalır.
Sentetik event defteri ve sınırlı yerel comparator kullanılır. Gerçek log collector, identity verifier, SIEM, global clock veya production recovery çalıştırılmaz.
İki yanlış kanı
HTTP 200 işin commit edildiğini kanıtlar.
Status response semantics’ini anlatır; action kararı ve persistence evidence ayrıca gerekir.
Detector 0 satır döndürdüyse incident yoktur.
Eksik field, collector veya kapsam aynı sonucu verebilir; evidence yeterliliği bilinmeden assurance çıkarılmaz.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
Aynı tenant/operation/object için ilk business row deny/false, daha sonraki row deny/true. Comparator hangi sonucu seçer?
- expected-denial; ilk row bütün sonraki kayıtları geçersiz kılar.
- review-required; açık contradiction önceliklidir.
Gerekçeli cevabı oku
review-required; açık contradiction önceliklidir. — lateContradiction bir deny/true içerir. Expected ilk row sonraki çelişkiyi silmez; bu sonuç inceleme ister, gerçek incident verdict’i değildir.
HTTP 200 ile Atlas business deny/false aynı izde. Nova allow/true row’u da aynı alias’ları taşıyor. Atlas commit edildi diyebilir miyiz?
Dersten seçilen artifact alanları; öğretim örneği
- ledger[0]
- {"eventId":"http-demo","kind":"http","tenant":"Atlas","requestAlias":"req-demo","operationAlias":"op-demo","object":"tea","status":200,"producer":"app","sequence":1}
- ledger[1]
- {"eventId":"decision-demo","parentEventId":"http-demo","kind":"business","tenant":"Atlas","requestAlias":"req-demo","operationAlias":"op-demo","sessionCorrelationAlias":"session-group-demo","userAlias":"Duru","actor":"Duru","action":"rename-note","object":"tea","decision":"deny","reason":"owner-policy","committed":false,"producer":"app","sequence":2,"time":"10:00:02"}
- ledger[3]
- {"eventId":"nova-demo","kind":"business","tenant":"Nova","requestAlias":"req-demo","operationAlias":"op-demo","object":"tea","decision":"allow","committed":true,"producer":"app","sequence":3}
- correlationKeys
- ["tenant","operationAlias","object"]
- Hayır. Atlas business row committed=false; Nova ayrı scope.
- Evet. Aynı alias veya 200 bütün tenant’ların commit sonucunu birleştirir.
Gerekçeli cevabı oku
Hayır. Atlas business row committed=false; Nova ayrı scope. — HTTP 200 business commit değildir. Correlation key tenant, operationAlias ve object içerdiği için Nova row’u Atlas kararıyla birleştirilmez.
Identical duplicate, aynı ID’de değişen fields ve eksik sonraki row neden farklı sonuçlar? Job wall-clock zamanı parent’tan erken görünürken causal order ne söyler?
Gerekçeli cevabı oku
Tam aynı event record’u duplicate olarak tekilleştirilir. Aynı event ID’de farklı fields ambiguous olabilir; eksik gerekli row unknown sonucunu korur. ParentEventId causal ilişkiyi verir, fakat farklı producer’ların wall-clock sırasını güvenle kurmaz. İnceleme kapsamı burada Atlas/tea ile sınırlıdır; diğer tenant/object’ler bilinmez. Recovery validation geçmiş event’leri silmez ve production restore kanıtı değildir.
□ Duplicate, conflict ve incomplete evidence sonuçlarını ayırdım.
□ Causal parent ilişkisini cross-producer clock sırası veya geniş incident scope saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- OWASP — Logging Cheat SheetEvent data sources · Event attributes · Data to exclude · Event collection · Verification · Operation · Protection · Which events to log
- NIST SP 800-61 Rev. 3, April 2025RS.AN-03, printed p.28 / PDF p.36 · RS.AN-06 and RS.AN-07, printed p.29 / PDF p.37 · RS.AN-08, printed p.29 / PDF p.37 · RC.RP-02 through RC.RP-05, printed p.34 / PDF p.42