dylanpatriarchi/argus
GitHub: dylanpatriarchi/argus
一个用 Nim 编写的极简教育型 EDR 工具,通过采集和标准化主机遥测数据,运行基于规则的检测引擎并映射 MITRE ATT&CK 来帮助理解终端威胁检测原理。
Stars: 0 | Forks: 0
# Argus
**一个使用 Nim 编写的、极简的、具有教育意义的 EDR / endpoint 监控工具。**
Argus 负责观察主机上发生的事件 —— 包括进程、文件和网络事件 ——
将它们标准化为单一的类型化事件模型,并运行一个声明式的、
基于规则的检测引擎,该引擎会引发映射到 MITRE ATT&CK 的警报。
## 原则
- **仅用于防御和观察。** Argus 仅读取遥测数据。它绝不会
注入、篡改、隐藏或修改其他进程。此代码库中
没有任何攻击性功能,以后也绝不会添加。
- **最小权限原则。** 每个 collector 都明确记录了它所需的
确切权限及其原因。没有任何组件会要求超出其遥测需求的权限,并且
Argus 永远不会要求您削弱主机安全性来运行它。
- **尽早标准化。** 原始平台结构仅停留在 collector 边界处。
下游的所有内容 —— engine、rules、sinks —— 仅能看到标准化的
`Event` 类型。
- **负责任地处理数据。** 命令行和文件路径通常包含
个人数据。Argus 仅收集规则所需的最少数据,并允许您
通过配置进一步缩小范围。
## Pipeline
```
collectors ──▶ normalizer ──▶ event bus ──▶ rule engine ──▶ alert sinks
(platform) (to Event) (in-proc) (YAML rules) (json/console)
```
## 快速开始
需要 Nim 2.0 或更高版本。
```
nimble build # produces ./argus
nimble test # runs the unit suite
nimble lint # type-checks every module
./argus version # version + scope disclaimer
./argus demo # a synthetic alert through both sinks
./argus check-trace tests/data/sample_trace.jsonl
```
`argus demo` 会发出一个 **合成的** 警报 —— 产生该警报的过程
不会观察您机器上的任何内容。它的存在是为了在任何
collector 存在之前,就能看到警报 sinks 正常工作:
```
[CRITICAL] ARG-DEMO-001 Interactive shell spawned by a web server, then outbound connection
when 2026-08-01T10:15:35.512Z host argus-demo
attack T1059.004 · execution https://attack.mitre.org/techniques/T1059/004/
evidence
· process_start /usr/bin/bash (pid 4711)
exe /usr/bin/bash
cmdline bash -i
parent /usr/sbin/nginx (pid 1240)
user www-data (uid 33)
· net_connect tcp 203.0.113.10:4444
```
相同的警报也会以单行 JSON 的形式输出,这正是 SIEM 将会
接收的格式。
## 作为库使用
```
import argus
let ev = initEvent(
action = aProcessStart,
actor = initActor(pid = 4711, ppid = 1240, exe = "/usr/bin/bash",
cmdline = @["bash", "-i"], parentExe = "/usr/sbin/nginx"))
let alert = initAlert("MY-RULE-001", "Shell from web server", sevHigh, @[ev],
attack = AttackRef(tactic: "execution", technique: "T1059.004"))
let sinks = newSinkGroup(newConsoleSink(), newJsonFileSink("alerts.jsonl"))
sinks.submit(alert)
sinks.close()
```
## 状态
正在按里程碑逐步构建中。有关事件 schema、collector 接口、规则格式和完整的路线图,请参阅 [`docs/design.md`](docs/design.md)。
| # | 里程碑 | 状态 |
|---|-----------|--------|
| 1 | 脚手架、`Event` 模型、警报 sinks、测试 | ✅ 完成 |
| 2 | 规则引擎 v1:YAML 规则、字段匹配、ATT&CK | 计划中 |
| 3 | 进程 collector (Linux) | 计划中 |
| 4 | 文件 collector (inotify) | 计划中 |
| 5 | 网络 collector | 计划中 |
| 6 | 有状态关联窗口 | 计划中 |
| 7 | CLI、配置、入门规则包、演示 | 计划中 |
里程碑 1 **没有 collectors**:Argus 尚未观察任何内容。它
提供了标准化的事件模型、JSON 传输格式和警报 sinks,
所有这些都已通过单元测试覆盖。
### 权限
目前暂无 —— 尚未收集任何数据。每个 collector 都将记录其
所需的权限以及在无权限时可用的降级后备方案,正如
[`docs/design.md`](docs/design.md#3-collector-interface) 中所述。Argus 永远不会
要求您禁用主机安全性,也不会授予超出其
遥测需求的权限。
## 许可证
MIT —— 详见 [LICENSE](LICENSE)。
标签:EDR, Homebrew安装, Nim, 云计算, 安全教学, 终端安全, 脆弱性评估, 规则引擎