已通过评审 · v0.2 · 规范介绍

Dayu-SDM 告警模型

瘦主表 + 分层子表。事实、检出、证据、实体、研判、案件、流转各归其位; AI 结论可解释、可追溯,且不可直接生效

7告警域核心表
8核心对象模型
2Alert 生成路径
14架构决策记录 ADR
Design Principles

设计原则

评审已确认的设计边界:对象分层、权威单写、AI 不直接生效。以下三条是全部表结构与链路设计的出发点。

PRINCIPLE 01

对象边界各司其职

Event 是事实、Alert 是检出、Analysis 是一次研判、Case 是工作对象;分层模型不回退大宽表。

PRINCIPLE 02

分层权威写模型

每张表回答一个问题,权威只写一次;详情与 AI 证据包走预聚合读模型,不把宽行当写模型。MVP 部署检出三表,案件域延后。

PRINCIPLE 03

AI 可解释、不直接生效

每次研判只追加分析行并展开证据引用;正式 verdict 仅由人工或带 policy_id 的策略回写。

Object Map

模型全景

Event、Alert、Evidence、Entity、Case、Analysis、Cite、Workflow 各司其职、以引用关联; 区分当前快照只追加记录。本页不表达运行时先后顺序。

Dayu-SDM 告警模型对象分层与职责关系
Dayu-SDM 告警模型对象分层与职责关系
事实

sdm_event

发生了什么。完整事实按 event_id 回查,不被告警复制。

检出

sdm_alert

哪条检测认为值得看。当前快照,支撑列表与归属。

证据

sdm_evidence

依据哪些事实。主体为 ALERT 或 CASE,二选一。

实体

sdm_alert_entity

涉及谁、研判角色是什么(victim / attacker / affected…)。

调查

sdm_analysis

这一次查下来结论是什么。只追加,每次研判一行。

案件

sdm_case

谁来处理这组告警(待办)。不是「已确认的攻击」。

引用

sdm_analysis_citation

每次分析实际引用的证据及当时的主体快照。

流转

sdm_workflow_action

分派、确认、关单、抑制、重开等动作,逐条追加。

Lifecycle

告警生命周期

事件进入 → 去重 → 证据与实体生成 → 代码 GATE → Case 编组 → AI / 人工研判 → 流转。 每个环节要么写当前快照,要么只追加记录

Dayu-SDM 告警生命周期:先编组 Case,再进入 AI 或人工研判
Dayu-SDM 告警生命周期:先编组 Case,再进入 AI 或人工研判
STAGE 1事件进入事实落在 Event,不复制日志正文
事实表
STAGE 2去重dedup_key 幂等,派生 alert_id
写快照
STAGE 3证据 / 实体引用事件、标注研判角色
引用 + 角色
STAGE 4代码 GATE排除、指纹、复用、缺字段判定
只追加
STAGE 5Case 编组alert.case_id 当前归属
写快照
STAGE 6AI / 人工研判新增 Analysis + Cite 行
只追加
STAGE 7流转分派、关单、抑制、重开逐条记录
只追加
Semantics

语义边界

Event 是事实、Alert 是检出、Analysis 是一次研判、Case 是工作对象。 Case 不等于 Incident:case_kind 表示案件类型,与处理进度 workflow_status 相互独立。

EVENT

事实

发生了什么。来源侧声称是告警(event_category='alert')不等于平台检出。

ALERT

检出

哪条检测认为值得看。来源投影或本地检测,两种路径统一写入。

ANALYSIS

一次研判

GATE / AI / 人工 / Playbook 的每次分析各占一行,只追加。

CASE

工作对象

谁来处理这组告警。默认调查案件,升级才是正式事件。

case_kind含义进入方式约束
INVESTIGATION 调查案件,Case 的默认类型 新建 Case;或通过 DEMOTE_INCIDENT 从正式事件退回 误报、无害、演练和复核可以直接在此类型下关单
INCIDENT 已确认的正式安全事件 人工或带 policy_id 的策略执行 PROMOTE_INCIDENT 写入 promoted_time / promoted_by;AI、GATE 和自动编组不得直接设置
Two Paths

Alert 的两种生成路径

来源告警接入与本地行为检测。两条路径统一写入 Alert、Evidence、Entity; 完整事实保留在 Event 中,不复制日志正文

Dayu-SDM Alert 的两种生成路径:来源告警投影与本地行为检测
Dayu-SDM Alert 的两种生成路径:来源告警投影与本地行为检测
SOURCE_ALERT来源告警接入

来源告警投影

第三方产品的断言(observation.assertion,物理列 source_finding_obj,M4 cutover 前为现行结构)投影为平台告警:标题成快照、事件主体客体(物理列 roles_obj)投影为 Entity、event_id 成为 Evidence 事实指针。

只消费检出类记录(逻辑 meta.source_record.record_kind=finding);纯行为日志不出穿透告警。告警 severity 只来源端断言的严重度(assertion.severity,物理 source_finding_obj)换算 INFO–CRITICAL,不再读事件的日志等级。

alert_type 固定 SOURCE_ALERT(禁止透传来源裸数字);category_code 禁止空串,对不上分类字典写 UNKNOWN。进告警的 N 条事件 = N 条 TRIGGER 证据 = event_count

即使源产品内部是关联规则,也不写成平台 DETECTION

接入由声明式映射契约驱动:每个源产品一份 standards/<source>-source-alert-mapping.json,生成器只抄契约,禁止代码内置源产品字典(ngsoc / tianqing 已定)。

查看 NGSOC / 天擎导入实例 →

DETECTION本地行为检测

本地行为检测

行为日志由本地告警引擎完成规则匹配、时间窗口与聚合去重后生成检出:dedup → 聚合 → 生成 Alert。

检出触发日志作为 TRIGGER 证据挂在 Alert 下。

查看反弹 Shell 检测实例 →

Identity & Correlation

去重与关联

五个字段分别解决告警幂等、业务身份、跨窗口归并、故事线关联、当前案件归属,不能混用。

字段生成 / 写入阶段使用阶段语义与约束
dedup_key 规则命中汇聚为 Alert 前,由规则或接入层生成 Alert 幂等写入,并派生 alert_id 同一规则、同一窗口、同一聚合维度。推荐构成 tenant | 规则身份 | victim 实体 | 时间窗(默认5min)禁止事件级标识(event_id / log_id / 来源告警号 / 事件哈希)——尾接事件 ID 会让每条事件自成一键(POC 实测 15,632 事件 → 15,632 告警)。无 victim 时降级为 tenant | 规则 | 时间窗(弱聚合),不要用 attacker 顶替
alert_id Alert 首次写入前,由 tenant_id + dedup_key 派生 主键;关联 Evidence、Entity、Analysis、Workflow dedup_key 1:1;不使用随机 UUID 或源产品 ID
merge_id 生成 Alert 时按规则可选生成,从去掉窗口 / 事件 ID / 批次的归并维度派生 GATE 后查找候选 Case;跨窗口查询同一现象 可由多个 alert_id 共享;不合并告警行,也不直接触发 Case 合并
correlation_id 关联引擎识别故事线或关联批次时写入 GATE 后按最高优先级查找候选 Case 可先于 Case 存在;表示强关联,不等于已确认的 Incident
case_id GATE 判定继续处理后,Case Service 创建或加入 Case 时写入 查询 Case 当前成员;承载 Case 级研判与流转 可空且一条 Alert 当前至多一个;当前只保留归属快照
自动编组优先级
  1. 非空 correlation_id 精确命中 — 强关联优先
  2. 非空 merge_id 精确命中 — 跨窗口归并次之
  3. 受限弱关联 — 主实体、同规则且 15 分钟内
编组约束

仅在同一 tenant_id 内执行;NULL 与空字符串不参与匹配。

弱关联只接受 victim / affected 角色以及白名单中的 host / user / account,不能仅凭攻击者 IP、NAT 地址、公共域名或共享账号自动入案。

多候选时按固定排序选择一个主 Case,不自动合并 Case

Explainable AI

AI 研判

AI 在 Case 编组后读取成员告警证据和本案自有证据。每次研判新增一行 sdm_analysis,每条证据引用展开为一行 sdm_analysis_citation

Dayu-SDM 可解释 AI 研判:Analysis、Cite 与 Verdict 权限边界
Dayu-SDM 可解释 AI 研判:Analysis、Cite 与 Verdict 权限边界
RULE 01

只追加,不覆盖

重跑使用新的 analysis_id,新增一行,旧结论不覆盖、不修改。

RULE 02

证据引用必展开

Agent 输出的每条引用按 evidence_id 展开为 cite 行,带当时的主体快照,保证可回放。

RULE 03

AI 不写正式结论

AI 输出只是候选 conclusion;必须由人工或带 policy_id 的策略接受后,才能回写正式 verdict

Scope

告警域表清单

告警域设计共七张表sdm_event 是上游事实表,不计入本清单。 MVP 部署前三张(检出快照 / 证据 / 实体);案件与分析域五张延后,按现场决策分期建设。

TABLE 1 · 快照 · 已部署

sdm_alert

保存告警当前快照,支撑列表、去重、关联和 Case 归属。

TABLE 2 · 引用 · 已部署

sdm_evidence

保存 Alert 或 Case 到 Event、原始日志或外部证据的引用;主体二选一。

TABLE 3 · 角色 · 已部署

sdm_alert_entity

保存告警涉及的实体及其研判角色。

TABLE 4 · 只追加 · 延后

sdm_analysis

保存 GATE、AI、人工和 Playbook 的每次分析结果。

TABLE 5 · 只追加 · 延后

sdm_analysis_citation

保存每次分析实际引用的证据及当时主体快照。

TABLE 6 · 快照 · 延后

sdm_case

保存调查案件或正式 Incident 的当前快照。

TABLE 7 · 只追加 · 延后

sdm_workflow_action

记录分派、确认、关单、抑制、重开等流转动作。

延后项 · 按需启用

延后项

先补齐分析接受与正式 verdict 的不可变审计账;需要案件迁移、合并、拆分回放时再启用 sdm_case_membership,同时落地 CAS、Outbox 和对账;ATT&CK 多标签 sdm_alert_attack_tag 与 AI 反馈 sdm_alert_feedback 按产品需求后置。

State & Workflow

状态与工作流

检测评分、每次研判的 conclusion、当前正式 verdict、处理进度 workflow_status四个独立维度,只有一个状态机。

Dayu-SDM 状态与工作流:四个独立维度
Dayu-SDM 状态与工作流:四个独立维度
D1

检测评分

detection_confidence / detection_risk_score 由规则写入。

D2

研判结论

conclusion 属于每一次 Analysis,重跑新增记录。

D3

正式结论

verdict 仅由人工或策略更新,AI 不可直写。

D4

处理进度

workflow_status 是唯一状态机(NEW → IN_PROGRESS → CLOSED …)。

sdm_workflow_action

对 Alert / Case 的分派、确认、关单、抑制、工单和重开动作逐条追加CLOSE / SUPPRESSclosed_timeREOPENCLOSED 返回 IN_PROGRESS 并清空 closed_time

关键字段与枚举

字段所属维度枚举值与含义说明
workflow_status D4 处理进度(唯一状态机) NEW 新建 · IN_PROGRESS 处理中 · CONFIRMED 已确认 · SUPPRESSED 已抑制 · CLOSED 已关闭 流转:NEW → IN_PROGRESS → CONFIRMED → CLOSED,可经 SUPPRESSED 关单;REOPENCLOSED 返回 IN_PROGRESS。误报/无害不写进此字段
verdict / conclusion D2 研判结论 / D3 正式结论(同枚举) UNKNOWN 尚无结论 · MALICIOUS 确认恶意 · SUSPICIOUS 可疑、证据不足 · BENIGN 行为无害 · FALSE_POSITIVE 检测误报 conclusion 属于每次 Analysis(只追加);verdict 是当前正式结论,仅人工或带 policy_id 的策略回写
detection_confidence / detection_risk_score D1 检测评分 INT 0–100(非枚举) 由规则写入,AI 不可修改;与正式结论拆开
severity 展示属性 INFO / LOW / MEDIUM / HIGH / CRITICAL 平台处置紧急程度;案件可取成员告警最高值;不沿用事件 syslog 小写
case_kind 案件类型(仅 sdm_case INVESTIGATION 调查案件(默认) · INCIDENT 已确认正式安全事件 PROMOTE_INCIDENT / DEMOTE_INCIDENT 变更;改的是本字段,不改 workflow_status
resolution_reason 关单原因 TRUE_POSITIVE 属实 · FALSE_POSITIVE 误报 · SECURITY_TESTING 安全测试 · KNOWN_ISSUE 已知问题 · DUPLICATE 重复 · RISK_ACCEPTED 风险接受 CLOSE / SUPPRESS 时推荐填写
action_type 流转动作(sdm_workflow_action ASSIGN 分派 · COMMENT 备注 · CONFIRM 确认 · CLOSE 关单 · SUPPRESS 抑制 · ESCALATE 升级 · CREATE_TICKET 建工单 · REOPEN 重开 · PROMOTE_INCIDENT 升事件 · DEMOTE_INCIDENT 降事件 逐条追加;升/降事件只作用于案件,改 case_kind;与后续 sdm_case_membership.action_type(ATTACH/DETACH…)不是同一枚举
next_hop GATE 闸门去向 CLOSE_CANDIDATE 候选关单 · REUSE 复用历史研判 · FULL_AGENT 完整 AI 研判 · HUMAN 转人工 GATE 分析行必填;GATE 也走分析表,不另开状态机
noise_reason GATE 噪声原因 EXCLUSION 排除名单 · KNOWN_FP 已知误报 · DUPLICATE 重复 · INSUFFICIENT_DATA 字段不足 · NONE 无噪声 GATE 判定不继续处理时记录原因
accepted_status 研判接受状态(每行分析) PENDING 待接受 · ACCEPTED 已接受 · REJECTED 已拒绝 · SUPERSEDED 被新研判取代 ACCEPTED 且策略允许时才回写 verdict;GATE 行默认 SUPERSEDED
analysis_type / trigger_mode 研判类型 / 触发方式 类型:GATE / RULE / AI / HUMAN / PLAYBOOK;触发:ALERT / CASE / REPLAY / MANUAL 一次调查一行;告警轮与案件轮各写各的
score_source 案件分数来源 RULE 规则 · COMPUTED 计算得出 · MANUAL 人工 配套 priority_score 0–100,由案件服务计算
alert_type 告警类型 DETECTION 本地检测 · CORRELATION 关联 · ANOMALY 异常 · THREAT_INTEL 威胁情报 · SOURCE_ALERT 来源告警导入 · MANUAL 人工 外部产品告警导入用 SOURCE_ALERT;不要标成 DETECTION 却无 rule_id
rule_type 规则实现类型 SINGLE_CONDITION · THRESHOLD 阈值 · SEQUENCE 序列 · ANOMALY · THREAT_INTEL · CORRELATION 仅规则引擎填写
evidence_type / evidence_role 证据类型 / 证据角色(sdm_evidence 类型:EVENT · RAW_LOG · SOURCE_ALERT · INTEL · ASSET · USER_INPUT;角色:TRIGGER · CONTEXT · CORROBORATION 佐证 · NEGATIVE 反向 · ENRICHMENT 富化 TRIGGER 只允许挂 subject_type=ALERT 的证据上
entity_type / alert_entity_role 实体类型 / 研判角色(sdm_alert_entity 类型(小写):ip · host · user · account · process · file · domain · url · service;角色(小写):victim · attacker · affected · indicator · observer · related · primary 不确定攻击者时用 related / affected,不强行标 attacker
subject_type 证据/分析主体 ALERT · CASE 分析、流转、证据共用;二选一写入对应 ID 列
membership action_type / membership_reason 成员关系(sdm_case_membership · 延后) 动作:ATTACH · DETACH · MOVE · MERGE · SPLIT;原因:AUTO_GROUP · CORRELATION · MANUAL · MERGE · SPLIT · POLICY MVP 不使用;与流转 action_type 不是同一枚举
Source Alert · Projection

投影契约:来源告警 → 平台告警

投影的是索引,不是事实正文:facets_obj 和完整事实保留在 Event 中按 event_id 回查。未知 occur_time 保持 NULL,不用 created_time 伪造。

Dayu-SDM 来源告警字段投影:投影索引,不复制事实正文
Dayu-SDM 来源告警字段投影:投影索引,不复制事实正文
source_finding_obj逻辑:observation.assertion

→ Alert 检出快照

标题、等级、置信度、次数等投影为告警当前快照字段。severity 只从来源断言原值换算 INFO–CRITICAL;source_alert_id 仅来源有独立告警号时填(不填 event_id),rule_id 推荐填 signature_id。

roles_obj逻辑:subject / object / carriers

→ Entity

攻击者 / 受害者角色投影为实体研判角色,对应事件主体与客体。主对象优先 victim(host > ip > user);实体表按 (entity_id, role) 去重,不随事件复制;占位值(0.0.0.0 / 内网IP范围 / 空串)不进 primary 也不进 dedup_key。

event_id

→ Evidence 指针

进告警的 N 条事件 = N 条 TRIGGER 证据 = event_count;同一事件不写两行。

事实指针挂在 ALERT 证据下;正文不复制,按需回查。

映射契约 · standards/

每个源产品一份声明式映射契约,由 source-alert-mapping.schema.json 约束; 已定契约:ngsoc · tianqing。 生成器只读契约做投影,禁止在代码内置源产品字典;金标为 examples/ 下的五表 JSON。

Examples · 写入形状

实例:两条路径的写入形状

以下为精选摘录,完整数据见 alert-model/examples/。 三个样例的共同点:verdict 始终为 UNKNOWN,直到策略或人接受。

路径

本地行为检测

规则引擎 sdm-rule-engine 命中「主机进程执行交互式 Shell 并主动连接远端地址」。

要点

两类主体证据

触发日志挂 Alert;调查补充的 root 异地登录挂 Case;案件轮同时 cite 两类证据。

反弹 Shell HIGH DETECTION SUSPICIOUS · 72 verdict UNKNOWN alert_a1b2c3d4e5f6 · ALT-20260708-2D749209
tenant / ruletenant01 · rule_revshell_001 v1.2.0
dedup_keytenant01|rule_revshell_001|host_a1b2c3|execution|2026070809
merge_idmerge_1b7fd783983a2cf7
primary_entityhost:k3s-master-1(victim · is_primary)
攻击者实体ip:203.0.113.218(attacker · used_for_grouping=false)
ATT&CKTA0011 · T1059
case_idcase_9f8e7d6c5b4a
workflow_statusNEW
Evidence · 三条,两类主体
ev_3c8a1f0b… TRIGGER — k3s-master-1 执行交互式 bash 并连接 203.0.113.218:9990。 ALERTEVENT
ev_71aa0c2d… CONTEXT — 同主机随后对 203.0.113.218:9990 建立出站连接。 ALERTEVENT
ev_9b2c4d6e… CORROBORATION — 调查补充:同一主机在检出前 4 分钟出现 root 异地登录,不是检出 TRIGGER。 CASEEVENT
Analysis · 只追加,三次研判
an_gate_001 GATE — next_hop FULL_AGENT,noise_reason NONE;放行进入完整研判。 GATESUPERSEDED
an_ai_001 告警轮 AI — SUSPICIOUS(置信 72):主机执行交互式 bash 并外连 203.0.113.218:9990,未见工单或变更解释。
  • cite → ev_3c8a1f0b… ALERT · TRIGGER
AIPENDING
an_case_001 案件轮 AI — SUSPICIOUS(置信 78):反弹 Shell 检出前后出现 root 异地登录,仍缺变更单。正式 verdict 保持 UNKNOWN。
  • cite → ev_3c8a1f0b… ALERT · TRIGGER
  • cite → ev_9b2c4d6e… CASE · CORROBORATION
AI · CASEPENDING

完整样例:examples/reverse_shell/

完整数据 · DETECTION 写入形状
本地行为检测无接入日志:触发事实即 Event(进程 + 外连),证据与研判落在告警域表。
路径

来源告警投影

NGSOC 22 条检出类事件(record_kind=finding)投影为 SOURCE_ALERTalert_type 固定不写 DETECTION。

要点

correlation_id 强关联编组

弱关联因 rule_id 不同且主对象为 ip 不能并案;由关联引擎写同一 correlation_id 后编进一案。案件叙事只写一篇。

SQL注入 · 192.0.2.146 HIGH INVESTIGATION SUSPICIOUS · 80 verdict UNKNOWN case_59782e57543384097b85dcfc · priority 88
correlation_idcorr_42aaea032af935ce
primary_entityip:192.0.2.146(victim)
攻击源192.0.2.238 → 192.0.2.146:80
成员告警4 条 · 合计命中 57 次
case_kindINVESTIGATION(编组开案不是 Incident)
workflow_statusNEW
Members · 四条告警,同一受害 IP
alert_b8394e3b… SQL注入攻击_SLEEP休眠函数注入 · rule 11724 · 命中 14 次 HIGHSUSPICIOUS
alert_27d1706a… SQL注入攻击 · rule 1335 · 命中 18 次 HIGHSUSPICIOUS
alert_281a9f53… SQL注入攻击_注释字符绕过 · rule 304481 · 命中 8 次 HIGHSUSPICIOUS
alert_d7d70bb5… MSSQL Waitfor语句SQL注入攻击 · rule 310189 · 命中 17 次 HIGHSUSPICIOUS
Case 自有 Evidence · 不重复挂成员 TRIGGER
ev_dff344f8… ENRICHMENT — 调查补充:源 IP 192.0.2.238 的威胁情报命中(样例)。不是检出 TRIGGER,不重复挂到成员告警。 CASEINTEL
Case Analysis · 一篇案件叙事
an_case_daf8… 案件轮 AI — SUSPICIOUS(置信 80):同一源 192.0.2.238 在约一分钟内对 192.0.2.146 打出 4 类 SQL 注入,合计命中 57 次,来源均标企图。关联资产:衡阳农商行快贷系统。无成功落地或数据外带证据。应按同一调查处置,核验 WAF 与应用日志。正式 verdict 仍为 UNKNOWN。
  • cite → ev_52588753… ALERT · TRIGGER(SLEEP 休眠函数注入)
  • cite → ev_f346c7ce… ALERT · TRIGGER(SQL注入攻击)
  • cite → ev_a12f7d87… ALERT · TRIGGER(注释字符绕过)
  • cite → ev_1b56036f… ALERT · TRIGGER(MSSQL Waitfor)
  • cite → ev_dff344f8… CASE · INTEL(源 IP 情报)
AI · CASEPENDING

完整样例:examples/ngsoc_alert_info/ · 读模型:alert.detail.json / case.detail.json

完整数据 · sql_injection_attempt 全链路
原始日志 → 标准事件 → 告警域写入表 → 读模型。点击阶段查看完整 JSON。
路径

来源告警投影 · 天擎

天擎 edr_alert_log 6 条 finding 事件投影为 SOURCE_ALERT;映射来自声明式契约 standards/tianqing-source-alert-mapping.json,生成器只抄契约。

天擎 RDP 攻击链 HIGH INVESTIGATION verdict 全部 UNKNOWN corr_926d90ade77366dc · POC 已落库 sdm2_log
correlation_idcorr_926d90ade77366dc(family tianqing_rdp_bruteforce_chain)
primary_entityhost:DESKTOP-FIN-0457(victim · 参与编组)
攻击源 / C2203.0.113.1 · blaxaplayer.com → 203.0.113.15
时间窗2026-08-20 09:55–10:09 UTC · 14 分钟
成员告警6 条 · T1110 / T1098 / T1570 / T1041 / T1071
佐证事件5 条 · 只写 sdm_event,不生成告警
case_kindINVESTIGATION(correlation 强关联编组)
workflow_statusNEW
Members · 六条告警,同一终端同一故事线
alert_8762657b…检测到远程RDP爆破 · rule 41.0.0198 · T1110LOWSOURCE_ALERT
alert_34f71a21…远程登录失败 · rule 41.0.0030 · T1110MEDIUMSOURCE_ALERT
alert_6b2650d9…发现账户"NetUser"修改密码 · rule 1.10.0003 · T1098LOWSOURCE_ALERT
alert_d871fdf5…被远程启动"cmd.exe"进程(PsExec 横向移动)· rule 30.0.0001 · T1570HIGHSOURCE_ALERT
alert_ed5540a0…进程"nslookup.exe"访问恶意域名 blaxaplayer.com · rule 99.0.0001.tde_ioc · T1041(AridViper IOC)HIGHSOURCE_ALERT
alert_be66a3f6…普通远控木马活动事件 · 203.0.113.15 回连 · rule 99.0.0003 · T1071HIGHSOURCE_ALERT
佐证行为日志 · 只写 sdm_event,由 Case Service 检索
evt · 10:03:30process_creation — cmd.exe(6585) 创建 curl.exe(5041)。CASE 检索EVENT
evt · 10:05:00powershell_execute — PowerShell 从 203.0.113.15 拉取 a.ps1。CASE 检索EVENT
evt · 10:06:00process_injection — services.exe 注入 TrustedInstaller.exe。CASE 检索EVENT
evt · 10:06:40dns_query — nslookup 解析 blaxaplayer.com → 203.0.113.15。CASE 检索EVENT
evt · 10:07:40file_write — curl.exe 落盘 C:\Users\Public\update.exe。CASE 检索EVENT
Evidence · 每告警三条,共 18 条
TRIGGER + CONTEXT ×2 每条告警:TRIGGER(EVENT) 指向投影源事件,CONTEXT(SOURCE_ALERT)CONTEXT(RAW_LOG) 指向天擎原始日志;佐证事件不重复挂在成员告警下。 ALERT

完整样例:examples/tianqing_rdp_chain/ · 落库报告:poc-load-report.json · 映射契约:tianqing-source-alert-mapping.json

完整数据 · SOURCE_ALERT 导入写入形状
天擎原始日志 → 标准事件 → 六条 SOURCE_ALERT(verdict 全部 UNKNOWN)。点击阶段查看完整 JSON。
Changelog

契约修订时间线

按日期倒序。每条标明修订类型与影响面;权威条文以链接文档为准。

0.1.51 项修订
2026-08-31规则修订

primary_entity_* 改为写入服务统一派生

规则与接入映射不再填写 primary_entity 四列,也不逐条实现三级排序;写入服务按 02 §3 规范算法从触发事件派生(victim 声明 > entities > roles.target=affected > attacker > ioc,占位值剔除,host 仅 IP 值降级 ip,无候选四列 NULL)。规则编写责任收缩为:受攻击资产写 roles.target,设备明确声明受害方才写 source_finding.victim。

影响:规则编写反馈:primary_entity 难以逐条赋值;POC 实测 232 条穿透告警中 149 条主实体落攻击者(flow_user_define 53/53),受害资产从未进实体表,自动入案弱关联全部失效

告警字段 §3 · 参考实现

0.1.44 项修订
2026-08-26规则修订

dedup_key 构成约束

可变部分只允许时间窗与稳定聚合维度,禁止事件级标识(event_id / log_id / 来源告警号 / 事件哈希)。接入告警直通推荐 tenant | 规则身份 | victim 实体 | 时间窗(默认 5 分钟);无 victim 降级弱聚合,不得用 attacker 顶替。

影响:POC 实测教训:dedup_key 尾接事件 ID,15,632 事件 → 15,632 告警,96.9% event_count=1

主契约 §2

2026-08-26投影规范

实体与枚举投影规范

primary_entity 从 source_finding.victim 投影(host > ip > user,禁 product/一律 related);alert_type 禁透传裸数字,外部告警导入=SOURCE_ALERT;category_code 禁空串,无映射写 UNKNOWN。

影响:POC 审计 #5 修复依据

告警字段 §2

2026-08-26页面收敛

告警页移除评审过程残留

删除「大宽表与分层模型对比」整节与 CK 容量测算卡:结论已进模型,介绍页不再重开设计论证。

影响:导航 11 → 9 项

告警页模板

2026-08-26口径同步

样例 dedup_key 改为合规构成

页面展示的 ngsoc / 天擎样例 dedup_key 从事件号尾接形态改为 tenant | 规则身份 | victim | 时间窗;补 N 事件 = N TRIGGER = event_count、实体 (entity_id, role) 去重等口径。

影响:产物页旧形态 0 残留

告警页模板

Documentation

文档地图

设计文档按编号阅读;每条关键决策都有对应的 ADR。机器可读层在 standards/,DDL 在 schema/

架构决策记录 · decisions/