New here? See Genox Cybersecurity AI in three minutes → Report an incident (24/7)
Verdict trace

How to read
a verdict trace

For every verdict, the Threat Correlator keeps a record of what it looked at, which tools it called, and what evidence led to its conclusion.
We don't have real run records to publish yet, so this page explains how the record is structured and reads one example from start to finish.

Structure

What goes into one trace

Reading top to bottom follows the order in which the verdict was built.
A verdict has several steps, and each step bundles an observation, tool calls, evidence and reasoning.

FieldContentsWhat to check when reading
input_hashSHA-256 of the entire input bundle that went into the verdictUse it to confirm a replay used the same input
sourcesWhere the input came from (EDR, mail gateway, proxy and so on) and the time rangeIf a source is missing, the verdict's coverage is that much narrower
steps[].observationThe facts that stood out at that stepIt summarizes raw logs, so check it against the evidence below
steps[].tool_callTool called, arguments, and a summary of the resultCheck that arguments such as time range and hostname are right
steps[].evidenceEvidence ID, location in the raw data, hashIncludes the result of the automatic check that the cited log really exists in the raw data
steps[].reasoningWhy the evidence led to the conclusion, and the ATT&CK technique IDEvery reasoning statement must point to an evidence ID
verdict · confidenceVerdict label, severity, confidence, and the reasons confidence was loweredCheck that a low confidence comes with its reasons
recommended_actionsRecommended actions and whether each needs approvalHost isolation and account lockout always need approval
approvalApprover role ID, approved/modified/rejected, timestamp, commentTime to approval also comes from here
versionsModel version, prompt template version, policy versionA change to prompt wording alone is a change in verdict criteria
replayResult of a later rerun under the same conditions, and how it differs from the original verdictWording may differ. Check that label and severity match
Example trace

Reading one example trace from the top

Example record · not real customer data or a real run. We built this record by chaining together early-stage ransomware techniques documented in MITRE ATT&CK (phishing attachment, PowerShell execution, shadow copy deletion). Hostnames, accounts, times and confidence values are all for illustration, and domains and IPs use values reserved for documentation (.example, 203.0.113.0/24).

Example record · not real customer data or a real runfin-ws-0412
1 ObserveEmail with macro-enabled attachment received · T1566.00109:12
2 ObserveWINWORD.EXE launches powershell.exe · T1059.00109:14
3 ObserveShadow copies deleted with vssadmin · T149009:14
VerdictTrue positive · ransomware staging · CRITICAL · confidence 0.9109:15
ApprovalHost isolation approved (analyst-07)09:17
ReplayLabel · severity match, some wording differs10/22

Where to look first

Start with why confidence on the verdict line stopped at 0.91. In this example the trace notes that no file encryption had been observed yet and that the hash of the downloaded executable had no match in threat intel. If a trace shows high confidence with no reasons for any reduction, that's the one to be more suspicious of.

Next is the approval line. By policy, host isolation never runs automatically. The trace also shows that the analyst took a little over two minutes after the verdict to read the evidence and approve.

Step by step

  1. Email received (step 1). The mail gateway log shows a message from billing@invoice-notice.example with the attachment 견적서_1021.docm ("quote_1021" in Korean). The AI pulled the original message metadata with mail.search(message_id=…) and the domain details with intel.domain_whois("invoice-notice.example"). The result: the domain was three days old. The reasoning statement reads "Macro-enabled Office attachment plus newly registered domain, possible T1566.001" and points to evidence E1 and E2. No verdict was issued on this step alone.
  2. PowerShell execution (step 2). Sysmon Event ID 1 (process creation) shows a line with parent WINWORD.EXE and child powershell.exe -NoP -W Hidden -enc JABjAD0A…. The AI got the process tree with edr.process_tree(host="fin-ws-0412", from="09:12", to="09:20"), decoded the encoded command, and confirmed it downloads https://203.0.113.45/u.ps1. A baseline.parent_child(host, 30d) lookup showed that no Office app on this host had launched PowerShell in the previous 30 days. The reasoning cites T1059.001, with evidence E3 and E4.
  3. Shadow copy deletion (step 3). Sysmon Event ID 11 (file creation) shows C:\Users\user01\AppData\Local\Temp\upd.exe being created, and a little over 20 seconds later Event ID 1 records vssadmin.exe delete shadows /all /quiet with upd.exe as the parent. intel.hash_lookup came back with no match. The reasoning cites T1490 (Inhibit System Recovery), and the ATT&CK entry for T1490 lists several ransomware families that delete shadow copies before encrypting.
  4. Verdict. True positive, ransomware staging, severity CRITICAL, confidence 0.91. Two reasons for lowering confidence are recorded: "no mass file changes observed" and "no threat intel match for upd.exe hash."
  5. Recommended actions and approval. Isolate the host from the network (approval required), recall emails carrying the same attachment hash, and block the sending domain and 203.0.113.45. analyst-07 approved the isolation at 09:17 with the comment "Please check SMB sessions to the file server." The two blocks fell within the automated response policy agreed with the customer, so they ran without approval.
  6. Replay. The next day, a rerun with the same input_hash, model version and policy version gave the same label and severity, a confidence of 0.89, and some differences in the wording of the reasoning. Wording isn't compared, so the result is recorded as a "match."
Raw record

The same trace in raw form

This is a shortened version of the example above in the record format. Field names are for illustration. We'll document the actual export format at launch.

// Example record · not real customer data or a real run
{
  "trace_id": "VT-EXAMPLE-0001",
  "input_hash": "sha256:9f3a…c21e",
  "sources": [
    {"type": "mail_gateway", "range": "09:00~09:20"},
    {"type": "edr_sysmon",   "host": "fin-ws-0412", "range": "09:00~09:20"}
  ],
  "steps": [
    {"n": 1,
     "observation": "Macro-enabled attachment (견적서_1021.docm), sender domain registered 3 days ago",
     "tool_calls": ["mail.search(message_id=…)", "intel.domain_whois(\"invoice-notice.example\")"],
     "evidence": [{"id": "E1", "ref": "mailgw/2026/10/21/09.log#L2207", "sha256": "1c0d…7be2", "verified": true},
                  {"id": "E2", "ref": "intel/whois/invoice-notice.example", "verified": true}],
     "reasoning": "E1+E2: possible spearphishing attachment", "attack": ["T1566.001"]},
    {"n": 2,
     "observation": "WINWORD.EXE → powershell.exe -NoP -W Hidden -enc …",
     "tool_calls": ["edr.process_tree(host=\"fin-ws-0412\", from=\"09:12\", to=\"09:20\")",
                    "baseline.parent_child(host=\"fin-ws-0412\", window=\"30d\")"],
     "evidence": [{"id": "E3", "ref": "sysmon:EventID=1 RecordID=884213", "verified": true},
                  {"id": "E4", "ref": "baseline/fin-ws-0412/parent_child", "verified": true}],
     "reasoning": "E3: Office app ran encoded PowerShell, E4: no precedent in 30 days",
     "attack": ["T1059.001"]},
    {"n": 3,
     "observation": "upd.exe created, then vssadmin.exe delete shadows /all /quiet",
     "tool_calls": ["edr.process_tree(…)", "intel.hash_lookup(\"sha256:3b7e…a19f\")"],
     "evidence": [{"id": "E5", "ref": "sysmon:EventID=11 RecordID=884240", "verified": true},
                  {"id": "E6", "ref": "sysmon:EventID=1 RecordID=884251", "verified": true}],
     "reasoning": "E6: recovery options deleted, assessed as pre-encryption stage", "attack": ["T1490"]}
  ],
  "verdict": {"label": "true_positive", "severity": "critical",
              "summary": "Ransomware staging",
              "confidence": 0.91,
              "confidence_notes": ["No mass file changes observed", "No threat intel match for upd.exe hash"]},
  "recommended_actions": [
    {"action": "isolate_host", "target": "fin-ws-0412", "requires_approval": true},
    {"action": "recall_mail", "match": "attachment_sha256", "requires_approval": false},
    {"action": "block", "targets": ["invoice-notice.example", "203.0.113.45"], "requires_approval": false}
  ],
  "approval": {"action": "isolate_host", "by": "analyst-07", "decision": "approved",
               "at": "2026-10-21T09:17:40+09:00", "comment": "Please check SMB sessions to the file server"},
  "versions": {"model": "correlator-model-x.y", "prompt_template": "triage-vNN", "policy": "auto-response-YYYY.MM"},
  "replay": {"at": "2026-10-22T10:05:12+09:00", "same_input_hash": true,
             "label_match": true, "severity_match": true, "confidence": 0.89,
             "text_diff": "Some wording in reasoning differs"}
}

verified is the result of the automatic check that a cited log really exists in the raw data store. If any one is false, the verdict is held and passed to an analyst. How we count these checks is described under fabricated output detection on the AI verdict quality page.

How to use it

What the receiving side does with a trace

Verdict traces aren't internal logs that only Genox reads.
We build them on the assumption that customer security teams and auditors will open them directly.

Audit response

When an audit or incident investigation asks "Why was this host isolated?", one trace answers it. What was seen is in evidence, who approved is in approval, and which model and policy were running is in versions. Evidence is kept as locations and hashes, so you'll need to align your raw log retention period with your verdict trace retention period.

False positive analysis

For a verdict confirmed as a false positive, find the step where it went wrong. Following the steps one by one usually shows whether a tool call argument was wrong, a baseline lookup came back empty, or the reasoning went further than the evidence. When we include false positive cases in the monthly report, we attach these traces as they are.

Rule tuning

If verdicts keep losing confidence for the same reason, you can see where collection scope or detection rules need work. In the example above, file server audit logs weren't in sources, so lateral movement couldn't be checked. After changing a policy, rerun past verdicts on the new policy version and check the differences.

What's next

We'll publish real traces
as they're ready

We're reproducing publicly documented attack techniques in the isolated Research Lab environment and collecting the verdict traces the Threat Correlator produces. Once we have run records with no customer data mixed in, we'll post them here unedited. Until then, every trace on this page is an example.

Rules we'll follow when publishing

  • Traces with wrong verdicts go up alongside the correct ones
  • Each comes with the technique IDs and the procedure used to reproduce it
  • Each records its model and policy versions, and when a version changes we add the rerun results
  • Hostnames and accounts in the isolated environment are created so they don't overlap with any real customer environment

Talk to a Genox
security expert.

Talk to us