SecurityRonin/issen
GitHub: SecurityRonin/issen
Issen 是一个 Rust 编写的 DFIR 编排工具,通过单条命令将磁盘和内存证据自动摄取、解析并关联为映射 ATT&CK 的攻击时间线,帮助事件响应人员快速完成取证分析。
Stars: 0 | Forks: 0
**一条命令即可将磁盘和内存证据转化为相互关联且映射到 ATT&CK 的攻击叙事。**
Issen 是 SecurityRonin 取证矩阵的编排层——这是一个包含多个 crate 的 Rust workspace 以及 `issen` CLI。只需将采集到的证据交给它,它就会自动检测容器,对文件系统进行取证以寻找关键工件,解析每一个工件,并构建一个可供您扫描和报告的单一可查询时间线。
```
# 单条命令:ingest disk artifacts,parse memory dumps,correlate,并 scan ——
# 在一次单一的、可恢复的运行中完成。自动检测 E01/EWF/VMDK/raw + memory dumps。
issen evidence.E01 memory.raw -o case.duckdb
# 读取结果:作为文本的 correlated attack narrative(或可分享的 HTML report)
issen report case.duckdb --format text
```
一条命令即可将原始采集数据转化为相互关联的攻击叙事。无需 Python 环境,也没有依赖地狱——只需一个静态二进制文件。
## 工作原理
Issen 从五种独立的来源类型摄取证据,然后跨所有来源进行关联:
*点击图表以打开[完整的交互式版本](https://securityronin.github.io/issen/architecture-diagram.html)。*
- **摄取** UAC 实时响应采集结果、Velociraptor 查询结果、EVTX 日志、内存转储、git 仓库和 OCI 注册表——同时进行。
- **关联** 使用 Pivot 引擎跨所有五种来源类型的证据:单个网络连接本身并不是一个发现;但如果将其与隐藏的 PID、加载的 rootkit 库以及供应链哈希匹配结合起来,它就是一个发现。
- **输出** 包含严重性、规则名称和完整证据链的结构化 Finding——随时可用于您的报告。
无需 Python 环境。没有依赖地狱。一个静态二进制文件。
### 五种来源类型
| ID | 来源 | 导航原语 | 捕获内容 |
|---|---|---|---|
| **[P]** | 持久化存储 | `name → inode → block` | 磁盘镜像(E01/raw)、文件系统、文件工件 |
| **[M]** | 内存 | `PID → EPROCESS → VA → PA` | RAM 转储、hiberfil.sys、特定时间的实时进程状态 |
| **[L]** | 日志 | `timestamp → record → field` | EVTX、journal、tracev3、CloudTrail、Zeek/Suricata |
| **[Q]** | 实时查询 | `(endpoint, query, cursor) → rows` | 攻击者无法事后销毁的临时状态 |
| **[C]** | 内容寻址 | `hash → blob → content graph` | 供应链溯源、Merkle DAG 遍历 |
**[Q] 实时查询** 与其他来源有着根本的不同:其数据是由查询*产生*的,而不是从存储中*检索*的。一旦捕获,结果集就具有了抗攻击者篡改的持久性——任何后续的磁盘擦除操作都无法改变 `velociraptor collect` 在查询时看到的内容。查询本身也成为了证据链的一部分。
**[C] 内容寻址** 为每个工件赋予了一个全局唯一且防篡改的身份:它的哈希值。Issen 可以通过恶意二进制文件的哈希值,跨 git 提交、OCI 镜像层和 Sigstore 透明日志条目进行 Pivot 分析,从而回答“哪些系统运行过这个确切的 blob,是什么时候,以及它来自哪里?”
## 安装
```
# 预编译二进制文件 —— Windows .exe/.msi 和 Apple-silicon .dmg —— 位于 Releases 页面:
# https://github.com/SecurityRonin/issen/releases
# ……或从源码构建(使用 rust-toolchain.toml 中锁定的 toolchain)
cargo install --git https://github.com/SecurityRonin/issen issen-cli
# 验证
issen --version
```
## 核心工作流
```
# 默认 pipeline —— ingest disk artifacts,parse memory dumps,correlate
# cross-artifact rules,并 scan 缓存的 threat-intel feeds。传入 disk images
# 与 memory dumps 的任意组合;重新运行同一命令以从上次中断处恢复。
issen DC01.E01 DESKTOP.E01 DC01-memory.raw -o case.duckdb
# 读取结果:作为文本的 correlated findings,或独立的 HTML report
issen report case.duckdb --format text
issen report case.duckdb -o report.html
```
Issen 通过其 `CollectionProvider` 注册表自动检测每个容器,对 NTFS 卷进行取证以寻找关键工件,对每个工件进行解析,遍历内存转储以获取进程 / 网络 / 注入状态,并将所有内容关联到一个超级时间线中。`issen timeline`、`issen report` 和 `issen info` 都读取同一个 DuckDB 数据库。
### 它从磁盘镜像中提取哪些内容
当证据是 Windows 磁盘镜像时,Issen 会遍历 NTFS 文件系统并提取:
- **`$MFT`** — 主文件表(文件元数据 + 时间戳)
- **`$Extend\$UsnJrnl:$J`** — USN 更改日志(文件创建/删除/重命名历史记录)
- 位于 `Windows\System32\winevt\Logs` 下的 **所有 `.evtx`** 事件日志(Security、System、Application、Sysmon 以及其他所有通道)
- **注册表配置单元** — `SYSTEM`、`SOFTWARE`、`SAM`、`SECURITY`、`DEFAULT`,以及各用户的 `NTUSER.DAT`
- **`SRUDB.dat`** — 系统资源使用监视器(System Resource Usage Monitor)数据库
## 子命令
| 命令 | 功能 |
|---|---|
| `issen
` | **默认流水线** — 在一次可断点续传的运行中摄取磁盘和内存证据,进行关联、扫描并分析内存(`-o` 指定案件 DB) |
| `issen timeline` | 查询并导出时间线(text、JSON、CSV、bodyfile;使用 `--flagged` 查看待定发现) |
| `issen report` | 将关联后的发现渲染为纯文本(`--format text`)或自包含的 HTML 报告 |
| `issen info` | 显示有关时间线数据库的信息 |
| `issen memory` | 分析物理内存转储(LiME、AVML、Windows crash dump、raw)— 进程、netstat、注入、凭证 |
| `issen scan` | 使用威胁情报特征(YARA / Sigma / hash / network)扫描文件或指标 |
| `issen remote-access` | 扫描证据以检测远程访问基础设施(LOLRMM 规则集) |
| `issen rules` | 列出内置的检测规则(“你们有哪些检测?”) |
| `issen feed` | 管理威胁情报源(列出、更新、检查) |
| `issen srum` | 解析并查询 SRUM(系统资源使用监视器)数据 |
| `issen biome` | 解析 Apple Biome 的 `App.MenuItem` SEGB 文件 — macOS 菜单栏选择记录 |
| `issen frequency` | 跨 EVTX 进行罕见事件的频率 / 堆叠分析 |
| `issen processes` | 从一个或多个 EVTX 文件中提取进程创建事件 |
| `issen session` | 从 EVTX 关联 Windows 登录会话 |
```
# 查询 timeline;仅显示 high+ severity 的 flagged findings
issen timeline timeline.duckdb --flagged --min-severity high
# 将 timeline 导出为 CSV 或 bodyfile,用于跨工具 timelining
issen timeline timeline.duckdb --format csv
issen timeline timeline.duckdb --format bodyfile
# 分析物理 memory dump(LiME,AVML,crash dump)
issen memory dump.lime --command all
# 针对 YARA / Sigma / hash / STIX signatures 扫描文件
issen scan evidence/ --auto-feeds
# 更新 threat-intel feeds(YARA,Sigma,STIX,Zeek,Suricata)
issen feed update
```
## 信任但验证
Issen 已经针对真实的 **29 GB DEF CON E01** 采集数据进行了端到端运行:它自动检测了容器,对 NTFS 卷进行了取证,并将 **843 个工件** 解析为包含 **431,863 个事件** 的 DuckDB 时间线。合成的测试夹具会遗漏现实世界中的各种异常情况;因此,针对真实采集证据进行验证是开发规范的一部分。
## 覆盖范围
| 类别 | 格式 / 来源 |
|---|---|
| **采集格式** | UAC `.tar.gz`、Velociraptor、KAPE 取证 zip |
| **磁盘镜像** | E01/EWF、raw DD(分卷镜像)、VMDK、VHD、VHDX、QCOW2、ISO9660 — 通过 `CollectionProvider` 注册表自动检测 |
| **文件系统** | NTFS(Windows 磁盘取证端 — MFT/USN/hives/$I$R)、ext4、APFS [规划中] |
| **内存格式** | LiME、AVML、WinPMEM、crash dump (DMP)、Hibernation (hiberfil.sys) |
| **日志流** | EVTX、Zeek `conn.log`、Suricata EVE、systemd journal [规划中]、Apple Unified Log [规划中]、CloudTrail [规划中] |
| **实时查询** | Velociraptor VQL、WMI/WQL [规划中]、OSQuery SQL [规划中] |
| **内容寻址** | git 仓库、OCI 镜像注册表、IPFS [规划中]、Sigstore 透明日志 [规划中] |
| **检测类型** | YARA 规则、Sigma 规则、STIX 2.1 指标、hash IOC、Suricata 规则 |
| **工件来源** | MFT、USN Journal、EVTX、注册表配置单元(包括 Shimcache / UserAssist / 网络配置)、Amcache、Prefetch、LNK / Jump Lists、Recycle Bin($I/$R 内容)、浏览器历史记录、SRUM、Apple Biome |
| **网络分析** | Volatility sockstat、Zeek 日志、Suricata EVE、pcap |
| **输出格式** | 终端(彩色)、JSON、HTML 报告、PDF、STIX 2.1 Attack Flow、AFB (Attack Flow Builder)、DOT/PNG (Graphviz)、Mermaid、CSV、bodyfile、DuckDB 时间线 |
| **RAT 检测** | LOLRMM 规则集(400+ 种工具) |
| **Attack Flow 摄取** | CTID Attack Flow v3.0.0 语料库 — 解析 STIX bundles → 通过 BFS DAG 遍历生成关联规则 |
| **Attack Flow 输出** | STIX 2.1 bundle、`.afb` (Attack Flow Builder)、Mermaid `flowchart LR`、PNG(通过 Graphviz 或 mmdc) |
| **VSS 感知** | 枚举证据树中的卷影副本;`is_vss_path` 防护机制防止重复计算 |
| **时间偏移检测** | 标记同一工件在不同来源之间超过 5 分钟的时间戳差异 — 反取证信号 |
| **事件聚类** | 按 PID、用户或路径对证据进行分组,以便进行重点关联查询 |
## 生态系统
Issen 是构建在一个深层取证库家族之上的轻量级关联层。每个库都可以在您自己的工具中独立使用。
| Crate | 来源 | 层级 | 描述 |
|---|---|---|---|
| [forensicnomicon](https://github.com/SecurityRonin/forensicnomicon) | 全部 | 知识库 | 零依赖的编译时工件规范、magic bytes、格式常量 |
| [state-history-forensic](https://github.com/SecurityRonin/state-history-forensic) | `[H]` | 知识库 | 零依赖的 `[H]` 函子特征:`HistoricalSource`、`TemporalCohort`、`ClockProvenance`、多维度 `ArtifactRef` |
| [ewf](https://github.com/SecurityRonin/ewf) | [P] | 容器 | E01/EWF → 带哈希校验的 raw 扇区流 |
| [ext4fs-forensic](https://github.com/SecurityRonin/ext4fs-forensic) | [P] | 文件系统 | ext4 扇区流 → 按路径获取文件(name → inode → block) |
| [4n6mount](https://github.com/SecurityRonin/4n6mount) | [P] | 文件系统 | FUSE 桥接 — 使任何容器+文件系统组合看起来像普通路径 |
| [memory-forensic](https://github.com/SecurityRonin/memory-forensic) | [M] | 容器 + 分页 + OS 结构 | WinPMEM/LiME/hiberfil → page stream → VA→PA → EPROCESS/VAD/DPAPI |
| [winevt-forensic](https://github.com/SecurityRonin/winevt-forensic) | [L] | 日志格式 + 解析器 | EVTX 二进制查找 + BinXML 解码 → 强类型的 Windows EventRecord |
| [browser-forensic](https://github.com/SecurityRonin/browser-forensic) | [P][M] | 解析器 | Chrome/Firefox/Safari 历史记录、cookies、下载、书签、会话数据 |
| [srum-forensic](https://github.com/SecurityRonin/srum-forensic) | [P][L] | 解析器 | ESE/JET Blue 页面遍历 → SRUM 网络/进程/能耗使用记录 |
| issen-remote-access | [Q] | 查询引擎 | 实时查询调度器 — Velociraptor VQL、LOLRMM 400+ 工具定义 |
| cas-forensic [规划中] | [C] | CAS + 图 | git/OCI/IPFS 哈希寻址对象存储 → Merkle DAG 导航 |
| git-forensic [规划中] | [C] | 图 + 解析器 | git commit/blob/tree 取证 → 供应链溯源 |
| sigstore-forensic [规划中] | [C] | 图 + 解析器 | Sigstore 透明日志条目 → 工件签名链 |
完整的层级结构
```
KNOWLEDGE
forensicnomicon zero-dep, compile-time artifact specs, format constants
state-history-forensic zero-dep, [H] functor traits: HistoricalSource,
TemporalCohort, ClockProvenance, ArtifactRef, …
CONTAINER decode a raw source format → addressable data stream
ewf E01/EWF → raw sector stream
memf-format memory dumps (WinPMEM, LiME, hiberfil.sys) → raw page stream
(log containers are integrated within each log-format crate)
Five parallel paths from CONTAINER — each with its own address space
and navigation primitive:
[P] Persistent Storage [M] Memory [L] Log
navigate by: path navigate by: PID navigate by: timestamp
name → inode → block PID → EPROCESS timestamp → record → field
→ VA → PA
FILESYSTEM PAGING LOG FORMAT
ext4fs-forensic memf-hw winevt-forensic (EVTX)
ntfs-forensic [planned] PML4/PAE/AArch64 journal-forensic [planned]
apfs-forensic [planned] OS STRUCTURE tracev3-forensic [planned]
4n6mount (FUSE bridge) memf-windows zeek-forensic [planned]
EPROCESS, VAD cloudtrail-src [planned]
DPAPI, DKOM
memf-linux [planned]
[Q] Live Query [C] Content-Addressed
navigate by: query navigate by: hash
(endpoint, query, cursor) hash → blob → content graph
→ result rows
QUERY ENGINE GRAPH NAVIGATION
issen-remote-access cas-forensic
velociraptor-parser git-forensic [planned]
WQL / OSQuery [planned] sigstore-forensic [planned]
[H] State-History (cross-cutting functor — shared traits in state-history-forensic)
[P^H] vss-history [planned] VSS shadow copies, Time Machine, btrfs
[P^H] apfs-snapshot-history [planned] APFS snapshots
[M^H] mem-history [planned] hiberfil chain, VMware memory snapshots
[L^H] log-history [planned] journald sealed epochs, rotated logs
[Q^H] query-history [planned] point-in-time osquery exports
[C^H] ≅ [C] git already encodes its own history (identity functor)
PARSER interpret artifact records → forensic meaning
browser-forensic browser artifact files / SQLite pages → BrowserEvent
winevt-forensic EVTX records → EventRecord
srum-forensic ESE page bytes → SrumRecord
ORCHESTRATION
Issen wires all five paths, cross-artifact correlation, CLI
```
## 架构
Crate 布局
```
issen-cli # The issen binary — commands and arg parsing
issen-core # Shared types, plugin traits, error types
issen-timeline # DuckDB (primary) + SQLite export timeline store
issen-fswalker # Parallel filesystem walk via rayon; SHA-256 integrity; VSS awareness
issen-unpack # Collection format detection (UAC tar.gz, Velociraptor, KAPE)
issen-remote-io # Remote storage I/O — 48 URI schemes via OpenDAL (S3, GCS, Azure, SFTP, …)
issen-signatures # YARA-X, Sigma/Tau-Engine, Hash/Network/STIX/Suricata IOCs, feed sync
issen-correlation # Pivot engine: YAML rules, Attack Flow STIX ingestion, zeek-intel, time-skew, clustering
issen-remote-access # LOLRMM 400+ tool definitions, RMM/RAT detection; Velociraptor VQL dispatcher
issen-mem # Memory forensics bridge (memf-* sibling workspace)
issen-report # HTML/PDF/STIX/AFB/Mermaid/DOT+PNG report generation
issen-mft-tree # MFT heuristic analysis
issen-navigator # Interactive TUI navigation
issen-ewf # EWF/E01 forensic image support
issen-evtx # Windows Event Log bridge
parsers/issen-parser-mft # NTFS MFT + USN Journal parser
parsers/issen-parser-evtx # Windows Event Log parser
parsers/issen-parser-uac # UAC collection format parser
parsers/issen-parser-velociraptor # Velociraptor collection parser
forensic-pivot # Sigma/Suricata/STIX rule pivoting
```
每个 crate 都可以独立测试和进行版本控制。CLI 将它们组装在一起;您也可以在您自己的工具中将这些 crate 作为库来使用。
## 关联规则
大多数工具只能找到指标。Issen 通过自动跨来源连接证据来发现**攻击模式**。
一个关联规则如下所示:
```
id: correlation.miner.rootkit-concealment
severity: critical
description: Rootkit concealing cryptominer activity via LD_PRELOAD
within_seconds: 300
references:
- https://redcanary.com/threat-detection-report/trends/linux-coinminers/
clauses:
- source: artifact
required_tag: rootkit_indicator
- source: memory
required_tag: miner_thread
- source: memory
required_tag: mining_pool
```
规则是位于 `~/.config/issen/rules/` 中的 YAML 文件。您可以自带规则。也可以与您的团队分享。
内置的规则集包含了涵盖挖矿程序、rootkit、SSH 隧道、LD_PRELOAD 持久化、隐藏进程以及 LOLRMM RAT 的规则。自定义规则可与内置规则组合使用——一次单一的 `issenevidence>` 运行即可评估所有规则。
### Attack Flow STIX 摄取
关联引擎还能摄取 CTID Attack Flow v3.0.0 语料库 bundles(STIX 2.1 JSON)。每个 bundle 都会被解析为 `AttackFlowBundle`,并通过对 `effect_refs` DAG 进行 BFS 遍历转换为 `CorrelationRule`。每个带有 `technique_id` 的 `attack-action` 都会变成一个带有 `required_tag: "technique:"` 的规则子句。内置的语料库可通过 `issen feed update` 进行下载。
```
# 获取并索引 Attack Flow corpus
issen feed update
# 引擎会在默认运行中评估 Attack Flow rules 以及您的 YAML rules
issen collection.tar.gz
```
为什么使用 YAML 规则而不是硬编码的检测逻辑?
硬编码的检测逻辑很容易过时。威胁执行者会更改端口号、重命名二进制文件并替换库。而 YAML 规则可以进行版本控制、共享,并能在 pull request 中进行审查。关联引擎是稳定的;规则仅仅是数据。
## 演示
```
$ issen collection-WIN10-CORP-20260401.zip
+===========================================================+
| Issen — Collection Analysis |
+===========================================================+
Collection : collection-WIN10-CORP-20260401.zip
Host : WIN10-CORP
OS : Windows 10 Enterprise 22H2 (19045.4291)
Collected : 2026-04-01T14:32:07Z
Artifacts : MFT, EVTX, Registry, Prefetch, Amcache
Parsed 1,247,831 MFT entries in 3.2s
Parsed 48 EVTX logs (312,406 events) in 1.8s
Parsed 4 registry hives in 0.4s
+- PERSISTENCE ───────────────────────────────────────────
|
| [SERVICE] AnyDeskMaint
| Binary : C:\ProgramData\Temp\Support\anydesk.exe --service
| Start : Auto (SERVICE_AUTO_START)
| Account : LocalSystem
| Created : 2026-03-28T09:14:22Z
|
| [REG RUN KEY] HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
| Name : AnyDeskUpdate
| Value : "C:\ProgramData\Temp\Support\anydesk.exe" --start-with-win
| Modified: 2026-03-28T09:14:38Z
+- REMOTE ACCESS ─────────────────────────────────────────
|
| [LOLRMM] AnyDesk (relocated binary)
| Path : C:\ProgramData\Temp\Support\anydesk.exe
| SHA256 : a1b2c3d4e5f60718293a4b5c6d7e8f90aabbccdd11223344556677889900eeff
| Size : 5,389,312 bytes
| Signed : philandro Software GmbH (valid, not revoked)
| Config : ad.router.custom_id = "corp-maint-04"
|
| [C2 CONNECTION]
| Dest IP : 194.36.28.117:7070
| First : 2026-03-28T09:17:03Z
| Last : 2026-04-01T13:58:41Z
| Note : IP not in AnyDesk relay network (AS 208323 / BL Networks, RU)
+- TIMELINE ──────────────────────────────────────────────
|
| 2026-03-28T09:12:55Z [EVTX Security 4624] Logon Type 3 — CORP\svc_backup
| from 10.20.5.44 (WIN-RUNBOOK)
| 2026-03-28T09:14:18Z [MFT] File created: C:\ProgramData\Temp\Support\anydesk.exe
| Parent created at same time — directory is new
| 2026-03-28T09:14:22Z [EVTX System 7045] Service installed: AnyDeskMaint
| ImagePath: C:\ProgramData\Temp\Support\anydesk.exe --service
| Account: LocalSystem | Type: user mode (0x10)
| 2026-03-28T09:17:03Z [EVTX Security 5156] Outbound TCP — anydesk.exe (PID 6284)
| -> 194.36.28.117:7070
+- CORRELATION FINDINGS ──────────────────────────────────
|
| [CRITICAL] LOLRMM with non-vendor C2 infrastructure
| Rule : remote-access.lolrmm.custom-c2
| Evidence: AnyDesk outside vendor path (C:\ProgramData\Temp\Support\)
| Outbound -> 194.36.28.117 (AS 208323, not AnyDesk relay ASN)
| MFT entry + EVTX 7045 + EVTX 5156 + Registry Run key
| MITRE : T1219, T1543.003
|
| [HIGH] Lateral movement via service account
| Rule : lateral-movement.service-account.file-drop
| Evidence: Type 3 logon CORP\svc_backup from 10.20.5.44 (WIN-RUNBOOK)
| File drop + service install within 120s of logon
| MITRE : T1021.002
2 findings | 1 critical, 1 high | 4 artifact sources correlated
```
关联引擎标记了安装在 `C:\ProgramData\Temp\Support\` 下的 AnyDesk——这并非其标准的 `Program Files` 路径——并且发现它与俄罗斯 ASN 建立了出站连接,且该地址处于 AnyDesk 的中继基础设施之外。时间线显示了一个来自内部主机的服务账户登录,随后在四分钟的时间窗口内发生了文件投放、服务安装和首次 C2 回调:攻击者使用 `svc_backup` 凭证从 `WIN-RUNBOOK` 进行 Pivot,进而在 `WIN10-CORP` 上部署了 RAT。标签:DuckDB, Rust, 可视化界面, 库, 应急响应, 提权工具, 数字取证, 文档结构分析, 网络流量审计, 自动化脚本, 通知系统