splunk-spl-processing
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSplunk SPL — detection engineering
Splunk SPL — 检测工程
Author and review SPL for Splunk Enterprise / Enterprise Security. The discipline here mirrors the rigour applied to KQL in — filter early, structure deliberately, and document every assumption.
kusto-query-languagePair with:(EventCode mapping),windows-event-logs(hunt→rule lifecycle),detection-engineering(opentide-detection-rule),configurations.splunk(conceptual KQL translation).kusto-query-language
Distilled from: Analysis of 2009 production detections, 234 macros, and 104 lookups in splunk/security_content (ESCU v5.26+).
为 Splunk Enterprise / Enterprise Security 编写和审查 SPL。这里的严谨程度与 中对 KQL 的要求一致——尽早筛选、刻意组织结构,并记录每一项假设。
kusto-query-language配合使用:(EventCode 映射)、windows-event-logs(hunt→rule 生命周期)、detection-engineering(opentide-detection-rule)、configurations.splunk(概念层面的 KQL 转换)。kusto-query-language
提炼自:对 splunk/security_content 中 2009 条生产检测、234 个宏和 104 个 lookup 的分析(ESCU v5.26+)。
1. Search-time discipline
1. 搜索时规范
1.1 Always lead with index, sourcetype, time
1.1 始终以 index、sourcetype、time 开头
Splunk searches without an constraint scan default indexes — in production, there is often no default, so nothing is searched.
index=spl
index=wineventlog sourcetype="WinEventLog:Security" earliest=-7d@d latest=now| Construct | Use |
|---|---|
| Primary partition — always include |
| Schema-level filter |
| Index-time fields — fast |
| Event-time bound — prefer snapped ( |
| Index-time bound — late-arriving WEL from remote hosts |
Full rejection checklist: (AP-S1, AP-S2).
references/Anti-Patterns.md未使用 约束的 Splunk 搜索会扫描默认索引——在生产环境中通常不存在默认索引,因此不会搜索到任何内容。
index=spl
index=wineventlog sourcetype="WinEventLog:Security" earliest=-7d@d latest=now| 结构 | 用途 |
|---|---|
| 主要分区——始终包含 |
| 模式级筛选 |
| 索引时字段——速度快 |
| 事件时间边界——优先使用对齐时间( |
| 索引时边界——用于来自远程主机的迟到 WEL |
完整拒绝检查清单:(AP-S1、AP-S2)。
references/Anti-Patterns.md1.2 Indexed vs search-time fields
1.2 索引时字段与搜索时字段
Index-time (TSIDX — usable with ): metadata fields plus anything in .
tstatsfields.confSearch-time: everything else — extracted per event from / .
props.conftransforms.confFilter on index-time fields first; defer search-time parsing to the last possible moment.
spl
// GOOD
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4688 TERM(encodedcommand) CommandLine="*-encodedcommand*"
// BAD
index=wineventlog EventCode=4688
| eval command=CommandLine
| where match(command, "-encodedcommand")Leading wildcards () cannot use tsidx alone — pair with or on known tokens (AP-S12). Example: .
*valueTERM()PREFIX()TERM(mshta) TERM(exe) CommandLine="*\\mshta.exe"索引时(TSIDX——可与 配合使用):元数据字段以及 中的所有内容。
tstatsfields.conf搜索时:其他所有内容——根据 / 从每个事件中提取。
props.conftransforms.conf先筛选索引时字段;将搜索时解析推迟到尽可能晚的阶段。
spl
// GOOD
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4688 TERM(encodedcommand) CommandLine="*-encodedcommand*"
// BAD
index=wineventlog EventCode=4688
| eval command=CommandLine
| where match(command, "-encodedcommand")前导通配符()无法单独利用 tsidx——应将已知 token 与 或 结合使用(AP-S12)。示例:。
*valueTERM()PREFIX()TERM(mshta) TERM(exe) CommandLine="*\\mshta.exe"1.3 Streaming vs transforming commands
1.3 Streaming 与 Transforming 命令
Streaming (, , , ) parallelises across indexers. Transforming (, , , ) collects to the search head.
evalwhererexfieldsstatscharttimechartdedupspl
// GOOD: filter and project before stats
index=wineventlog EventCode=4688 TERM(encodedcommand) CommandLine="*-encodedcommand*"
| eval ParentName=lower(ParentImage)
| fields _time, host, User, CommandLine, ParentName
| stats count by host, ParentNameStreaming 命令(、、、)可跨多个 indexer 并行执行。Transforming 命令(、、、)会将数据汇集到 search head。
evalwhererexfieldsstatscharttimechartdedupspl
// GOOD: filter and project before stats
index=wineventlog EventCode=4688 TERM(encodedcommand) CommandLine="*-encodedcommand*"
| eval ParentName=lower(ParentImage)
| fields _time, host, User, CommandLine, ParentName
| stats count by host, ParentName2. Schema authority — non-negotiable
2. Schema 权威性——不可妥协
Index names, sourcetypes, and CIM field availability are tenant-specific. Never assumeor that CIM fields exist without verification.index=wineventlog
Procedure before authoring :
tstats from datamodel=...- Confirm sourcetype→CIM mapping via Technology Add-ons (TAs) in the target deployment.
- Verify data model acceleration in ES → Settings → Data Models.
- Smoke-test with .
| tstats summariesonly=true count from datamodel=<Model> earliest=-1h - Zero results with known activity → broken mapping, not "no threats" (AP-S11).
For Windows filters, cross-reference — map Event IDs to tenant index/sourcetype via Layer 1 macros, not hardcoded indexes.
EventCode=windows-event-logsLoad full CIM catalogue and TA prerequisites: .
references/CIM-Data-Models.md索引名称、sourcetype 和 CIM 字段的可用性均取决于租户。在未经核实的情况下,切勿假定存在或 CIM 字段可用。index=wineventlog
编写 前的流程:
tstats from datamodel=...- 通过目标部署中的 Technology Add-ons (TAs) 确认 sourcetype→CIM 映射。
- 在 ES → Settings → Data Models 中验证数据模型加速状态。
- 使用 进行冒烟测试。
| tstats summariesonly=true count from datamodel=<Model> earliest=-1h - 已知活动却得到零结果 → 映射已损坏,而不是“没有威胁”(AP-S11)。
对于 Windows 筛选器,请交叉参考 ——通过 Layer 1 宏将 Event ID 映射到租户的 index/sourcetype,而不是硬编码索引。
EventCode=windows-event-logs加载完整的 CIM 目录和 TA 前置条件:。
references/CIM-Data-Models.md3. stats
vs tstats
vs streamstats
vs mstats
statststatsstreamstatsmstats3. stats
vs tstats
vs streamstats
vs mstats
statststatsstreamstatsmstats| Command | Source | Speed | Use when |
|---|---|---|---|
| Raw events | Slowest | Fields not in tsidx / DM |
| TSIDX or accelerated CIM DM | 10–100× faster | Index-time fields, |
| Streaming state | Fast | Stateful per-event windows (beaconing, sequences) |
| Metrics indexes (MCatalog) | Fast for metrics | Pre-aggregated numeric time series — not event indexes |
spl
| tstats summariesonly=true count from datamodel=Endpoint.Processes
where Processes.process_name=powershell.exe
by Processes.dest, Processes.userAlways pair on accelerated data models with — without it, Splunk falls back to raw events for unaccelerated ranges.
tstatssummariesonly=truemstatsreferences/Best-Practices.md| 命令 | 数据源 | 速度 | 使用场景 |
|---|---|---|---|
| 原始事件 | 最慢 | 字段不在 tsidx / DM 中 |
| TSIDX 或已加速的 CIM DM | 快 10–100 倍 | 索引时字段、 |
| Streaming 状态 | 快 | 有状态的逐事件窗口(beaconing、sequence) |
| 指标索引(MCatalog) | 对指标处理速度快 | 预聚合的数值时间序列——不适用于事件索引 |
spl
| tstats summariesonly=true count from datamodel=Endpoint.Processes
where Processes.process_name=powershell.exe
by Processes.dest, Processes.user对于已加速数据模型上的 ,务必搭配 ——否则,对于未加速的时间范围,Splunk 会回退到原始事件。
tstatssummariesonly=truemstatsreferences/Best-Practices.md4. Lookups, eventtypes, macros
4. Lookup、eventtype 与宏
Lookups
Lookup
spl
... | lookup threat_intel_feed indicator AS src_ip OUTPUT category, severityPrefer / over subsearches for IOC correlation (AP-S4).
lookupinputlookupspl
... | lookup threat_intel_feed indicator AS src_ip OUTPUT category, severity对于 IOC 关联,优先使用 / ,而不是 subsearch(AP-S4)。
lookupinputlookupThree-layer macro architecture
三层宏架构
Production frameworks (ESCU, OpenTide) use three layers for portability:
| Layer | Suffix | Purpose |
|---|---|---|
| 1 — Source | | Index/sourcetype abstraction ( |
| 2 — Process | | Binary matching with anti-evasion ( |
| 3 — Filter | | FP exclusions — empty by default ( |
Principle: detections are write-once, deploy-anywhere. Customers tune macros, not core SPL.
Tenant content repos may ship — treat as authoritative override for Layer 1/2/3 definitions when present.
references/macros.conf生产框架(ESCU、OpenTide)使用三层结构实现可移植性:
| 层级 | 后缀 | 用途 |
|---|---|---|
| 1 — Source | | index/sourcetype 抽象( |
| 2 — Process | | 二进制匹配与反规避( |
| 3 — Filter | | FP 排除项——默认留空( |
原则:检测规则只需编写一次,即可随处部署。客户只调整宏,而不修改核心 SPL。
租户内容仓库可能附带 ——如果存在,应将其视为 Layer 1/2/3 定义的权威覆盖版本。
references/macros.conf5. Canonical tstats
+ CIM pattern
tstats5. 标准的 tstats
+ CIM 模式
tstatsSingle canonical block — detection variants in .
references/Detection-Type-Patterns.mdspl
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime
FROM datamodel=Endpoint.Processes
WHERE <filter_conditions>
BY Processes.dest, Processes.user, Processes.process_name, Processes.process, Processes.parent_process_name
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| <post_processing>
| `<detection_name>_filter`ESCU vs OpenTide macro mapping: .
references/CIM-Data-Models.md单一标准块——检测变体见 。
references/Detection-Type-Patterns.mdspl
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime
FROM datamodel=Endpoint.Processes
WHERE <filter_conditions>
BY Processes.dest, Processes.user, Processes.process_name, Processes.process, Processes.parent_process_name
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| <post_processing>
| `<detection_name>_filter`ESCU 与 OpenTide 宏映射:。
references/CIM-Data-Models.md6. Enterprise Security: correlation searches
6. Enterprise Security:关联搜索
Lifecycle
生命周期
- Hunting search validated ad-hoc.
- Saved as scheduled correlation search (typically 5–15 min, lookback aligned).
- Adaptive Response: notable (), risk boost (
alert_action.notable), TTP annotation.alert_action.risk - Tuning via thresholds, suppression, Layer 3 filter macros.
- RBA: low-fidelity signals aggregate per-entity risk; notables for high-fidelity or cumulative threshold breach.
- 经验证并临时执行的 Hunting search。
- 保存为定时关联搜索(通常为 5–15 分钟,并使回看期保持对齐)。
- Adaptive Response:notable()、risk boost(
alert_action.notable)、TTP 标注。alert_action.risk - 通过阈值、suppression 和 Layer 3 filter 宏进行调优。
- RBA:低保真信号按实体聚合风险;高保真信号或累计阈值突破生成 notable。
Scheduled vs real-time constraints
定时与实时约束
| Mode | Guidance |
|---|---|
| Scheduled | Default. Supports heavy |
| Real-time | Continuous window (1–5 min). Avoid |
| Throttling | Mandatory on production rules — set entity fields ( |
| 模式 | 指南 |
|---|---|
| Scheduled | 默认方案。支持开销较大的 |
| Real-time | 连续窗口(1–5 分钟)。避免使用 |
| Throttling | 生产规则中必须启用——设置实体字段( |
Notable and RBA field shaping
Notable 与 RBA 字段塑形
spl
... | eval rule_name="Suspicious PowerShell Execution", severity=high, src=host, user=User, signature="T1059.001"spl
... | eval risk_message="Unusual login from impossible-travel pair",
risk_object=user, risk_object_type="user", risk_score=40,
threat_object=src_ip, threat_object_type="ip_address"Detection type shapes (TTP, Anomaly, Hunting, Correlation, Baseline): .
references/Detection-Type-Patterns.mdCommon idioms (beaconing, impossible travel): .
references/SPL-Idioms.mdspl
... | eval rule_name="Suspicious PowerShell Execution", severity=high, src=host, user=User, signature="T1059.001"spl
... | eval risk_message="Unusual login from impossible-travel pair",
risk_object=user, risk_object_type="user", risk_score=40,
threat_object=src_ip, threat_object_type="ip_address"检测类型形态(TTP、Anomaly、Hunting、Correlation、Baseline):。
references/Detection-Type-Patterns.md常用惯用法(beaconing、impossible travel):。
references/SPL-Idioms.md7. False-positive engineering
7. 误报工程
Surface tuning knobs explicitly — align with Layer 3 filter macros for production, inline blocks for hunt iteration:
spl
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4688 earliest=-7d@d
| where match(CommandLine, "(?i)-(enc|encodedcommand)")
``` --- BEGIN ENVIRONMENT FILTERS (move to Layer 3 filter macro for production) --- ```
| where NOT match(user, "(?i)^svc_")
| where NOT match(host, "(?i)^SCAN-")
``` --- END ENVIRONMENT FILTERS --- ```
| stats count by host, User, CommandLineProduction: migrate exclusions to macro. Hunting: inline filters acceptable with documented rationale.
`<detection_name>_filter`显式呈现调优旋钮——生产环境应与 Layer 3 filter 宏保持一致,hunt 迭代时则可使用内联块:
spl
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4688 earliest=-7d@d
| where match(CommandLine, "(?i)-(enc|encodedcommand)")
``` --- BEGIN ENVIRONMENT FILTERS (move to Layer 3 filter macro for production) ```
| where NOT match(user, "(?i)^svc_")
| where NOT match(host, "(?i)^SCAN-")
``` --- END ENVIRONMENT FILTERS ---
| stats count by host, User, CommandLine生产环境:将排除项迁移到 宏。Hunting:在记录依据的前提下,可以使用内联筛选器。
`<detection_name>_filter`8. IOC query templates
8. IOC 查询模板
Replace index/sourcetype with tenant Layer 1 macros.
spl
// IP address — lookup enrichment
`proxy_logs` earliest=-30d
| lookup threat_intel_feed indicator AS dest_ip OUTPUT category, severity
| where isnotnull(category)
| table _time, src_ip, dest_ip, category, url
// Domain — base search + match
`dns_logs` earliest=-30d
| where match(query, "(?i)(malicious-domain\.example|bad-domain\.example)")
// Hash — process or file events
`endpoint_logs` earliest=-30d
| where sha256 IN ("<sha256_1>", "<sha256_2>")
| table _time, dest, user, file_name, sha256, process
// Base64-encoded PowerShell pipeline
`win_security_logs` EventCode=4688 earliest=-14d
| where match(CommandLine, "(?i)(-enc|-encodedcommand|-e )")
| rex field=CommandLine "(?i)-e(?:nc|ncodedcommand)?\s+(?<EncodedBlock>[^\s]+)"
| eval DecodedCommand=`base64decode(EncodedBlock)`
| where isnotnull(DecodedCommand)
| where match(DecodedCommand, "(?i)(IWR|DownloadString|IEX)")将 index/sourcetype 替换为租户 Layer 1 宏。
spl
// IP address — lookup enrichment
`proxy_logs` earliest=-30d
| lookup threat_intel_feed indicator AS dest_ip OUTPUT category, severity
| where isnotnull(category)
| table _time, src_ip, dest_ip, category, url
// Domain — base search + match
`dns_logs` earliest=-30d
| where match(query, "(?i)(malicious-domain\\.example|bad-domain\\.example)")
// Hash — process or file events
`endpoint_logs` earliest=-30d
| where sha256 IN ("<sha256_1>", "<sha256_2>")
| table _time, dest, user, file_name, sha256, process
// Base64-encoded PowerShell pipeline
`win_security_logs` EventCode=4688 earliest=-14d
| where match(CommandLine, "(?i)(-enc|-encodedcommand|-e )")
| rex field=CommandLine "(?i)-e(?:nc|ncodedcommand)?\\s+(?<EncodedBlock>[^\\s]+)"
| eval DecodedCommand=`base64decode(EncodedBlock)`
| where isnotnull(DecodedCommand)
| where match(DecodedCommand, "(?i)(IWR|DownloadString|IEX)")9. Rationale and precision/recall scoring
9. 依据说明与精确率/召回率评分
When SPL feeds hunt records or MDR /, the rationale must answer:
descriptionresponse.procedure- Why these indexes/sourcetypes? What captures the observable.
- Why these filters? Map each filter to intelligence or behavioural reasoning.
- What the query does NOT cover. Variants, evasion, scope exclusions.
- How results connect to the hypothesis. What a true positive proves.
| Score | Precision (FP volume in clean env) | Recall risk |
|---|---|---|
| HIGH | < 10 results; filters trace to specific intel | Narrow filters; variants may evade |
| MEDIUM | 10–100; mix of specific + behavioural | Known patterns covered; novel variants may evade |
| LOW | > 100; broad behavioural pattern | Broad detection; harder to evade |
当 SPL 为 hunt 记录或 MDR / 提供输入时,依据说明必须回答:
descriptionresponse.procedure- 为什么使用这些 index/sourcetype? 是什么捕获了可观测行为。
- 为什么使用这些筛选器? 将每个筛选器与情报或行为推理对应起来。
- 查询未覆盖什么。 变体、规避方式、范围排除项。
- 结果如何与假设关联。 真正命中能够证明什么。
| 评分 | 精确率(干净环境中的误报量) | 召回风险 |
|---|---|---|
| HIGH | 少于 10 条结果;筛选器可追溯到具体情报 | 筛选范围较窄;变体可能绕过 |
| MEDIUM | 10–100 条;具体条件与行为条件混合 | 覆盖已知模式;新型变体可能绕过 |
| LOW | 超过 100 条;宽泛的行为模式 | 检测范围广;更难规避 |
10. SPL vs KQL — conceptual translation
10. SPL 与 KQL——概念转换
| KQL | SPL |
|---|---|
| |
| |
| |
| |
| |
| |
| Avoid — use |
| Summary indexing or |
| |
| |
| Early |
Comments | Triple-backtick block comments (see §11 below) |
Mindset shift: in SPL is expensive at scale. Prefer , union + , or accelerated CIM data models.
joinlookupstats| KQL | SPL |
|---|---|
| |
| |
| |
| |
| |
| |
| 避免使用——改用 |
| Summary indexing 或 |
| |
| |
| 前置 |
| 三反引号块注释(参见下文 §11) |
思维转变:SPL 中的 在大规模场景下开销很高。优先使用 、 + ,或已加速的 CIM 数据模型。
joinlookupunionstats11. Comment discipline
11. 注释规范
Splunk inline comments use triple backticks:
spl
``` Detection: Suspicious encoded PowerShell ```
``` Source: <reference> ```
``` MITRE: T1059.001 ```
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4688 earliest=-7d@d
| where match(CommandLine, "(?i)-(enc|encodedcommand)")
| stats count by host, User, CommandLineApply the same header structure used in KQL (Hunt, Source, MITRE, Platform). Within OpenTide MDR objects, inline SPL headers may be reduced — metadata lives in MDR and alert templates.
descriptionSplunk 内联注释使用三反引号:
spl
``` Detection: Suspicious encoded PowerShell ```
``` Source: <reference> ```
``` MITRE: T1059.001 ```
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4688 earliest=-7d@d
| where match(CommandLine, "(?i)-(enc|encodedcommand)")
| stats count by host, User, CommandLine采用与 KQL 相同的头部结构(Hunt、Source、MITRE、Platform)。在 OpenTide MDR 对象中,可以精简 SPL 内联头部——元数据存放在 MDR 和告警模板中。
description12. Quality checklist
12. 质量检查清单
Universal
通用检查项
- and
index=(or CIM tag / eventtype / Layer 1sourcetype=macro) present.*_logs - Time bound via /
earliest=(orlatest=/_index_earliestfor late-arriving data)._index_latest - Streaming commands precede transforming commands.
- used when fields are in accelerated CIM DM or TSIDX;
tstatson DM queries.summariesonly=true - applied after
drop_dm_object_name()BY clause.tstats - No — replaced with lookup, union +
join, or accelerated DM.stats - Layer 1 /
*_logsmacros for index/sourcetype portability.*_index - Process matching uses and
process_namewhere applicable.original_file_name - Anomaly detections use + documented threshold.
eventstats avg/stdev - Suppression / throttling configured on correlation searches.
- Notable / RBA fidelity choice deliberate and documented.
- Detection type matches pattern in .
references/Detection-Type-Patterns.md
- 存在 和
index=(或 CIM tag / eventtype / Layer 1sourcetype=宏)。*_logs - 通过 /
earliest=限定时间范围(迟到数据使用latest=/_index_earliest)。_index_latest - Streaming 命令位于 Transforming 命令之前。
- 当字段位于已加速的 CIM DM 或 TSIDX 中时使用 ;DM 查询中设置
tstats。summariesonly=true - 在 的 BY 子句之后应用
tstats。drop_dm_object_name() - 不使用 ——改用 lookup、union + stats 或已加速 DM。
join - 使用 Layer 1 /
*_logs宏实现 index/sourcetype 可移植性。*_index - 适用时,进程匹配同时使用 和
process_name。original_file_name - 异常检测使用 并记录阈值。
eventstats avg/stdev - 关联搜索已配置 suppression / throttling。
- 有意识地选择并记录 notable / RBA 保真度。
- 检测类型与 中的模式一致。
references/Detection-Type-Patterns.md
ESCU / OpenTide macro conventions
ESCU / OpenTide 宏约定
- (ESCU) or
`security_content_ctime()`(OpenTide) applied to first/last time fields.`soc_macro_ctime_utc()` - Layer 3 filter macro () appended as last pipe.
`<detection_name>_filter` - Header comment block populated (or deferred to MDR metadata with rationale).
- 已对 first/last time 字段应用 (ESCU)或
`security_content_ctime()`(OpenTide)。`soc_macro_ctime_utc()` - 最后一个管道已追加 Layer 3 filter 宏()。
`<detection_name>_filter` - 已填充头部注释块(或推迟到 MDR 元数据并说明理由)。
13. Mapping into OpenTide MDR
13. 映射到 OpenTide MDR
When SPL is wired into in an OpenTide MDR object, coordinate with for schema fields:
configurations.splunkopentide-detection-rule| MDR field | SPL / ES alignment |
|---|---|
| SPL block scalar — follow this skill |
| Integer match count before alert |
| Entity dedup — mirror ES throttling |
| Align to ingestion lag and |
| |
| Secondary investigation search |
| |
| |
Description, tuning narrative, severity, and response procedure → MDR and . Hunt-to-rule conversion: .
descriptionresponse.*detection-engineering将 SPL 接入 OpenTide MDR 对象的 时,应与 协调以下 schema 字段:
configurations.splunkopentide-detection-rule| MDR 字段 | SPL / ES 对齐方式 |
|---|---|
| SPL 块标量——遵循本 skill |
| 触发告警前的整数匹配计数 |
| 实体去重——与 ES throttling 保持一致 |
| 与摄取延迟及需要时的 |
| |
| 次要调查搜索 |
| |
| |
描述、调优说明、严重性和响应处置流程 → MDR 和 。Hunt 到规则的转换:。
descriptionresponse.*detection-engineering14. Reference catalogues — load when…
14. 参考目录——需要时加载…
| Need | File |
|---|---|
| CIM model fields, TA prerequisites, macro mapping | |
| TTP / Anomaly / Hunting / RBA / Baseline shapes | |
| Beaconing, impossible travel, rare-process | |
| |
| TERM/PREFIX, subsearch limits, summary indexing, mstats, scheduling | |
| Rejection checklist AP-S1–S12 | |
| 需求 | 文件 |
|---|---|
| CIM 模型字段、TA 前置条件、宏映射 | |
| TTP / Anomaly / Hunting / RBA / Baseline 形态 | |
| Beaconing、impossible travel、rare-process | |
| |
| TERM/PREFIX、subsearch 限制、summary indexing、mstats、scheduling | |
| 拒绝检查清单 AP-S1–S12 | |