SEc-123/open-investigator
GitHub: SEc-123/open-investigator
一款开源的本地只读 AI 服务器事件调查工具,通过受限的智能体循环在 Linux/Windows 主机上自动完成安全取证与证据收集。
Stars: 3 | Forks: 2
# 开放调查器 (`oi`)
[](https://github.com/SEc-123/open-investigator/actions/workflows/ci.yml)
Open Investigator 是一款适用于 Linux 和 Windows 主机的**本地、只读 AI 服务器调查工具**。
它专为以下任务而设计:
它不是 EDR、SOAR、防火墙控制器、修复工具或跨主机平台。它不会隔离主机、阻止 IP、终止进程、删除文件、禁用账户、修改服务或更改防火墙/注册表/系统状态。
## 开源项目
Open Investigator 由 **Arvanta Cyber Inc** 维护。
- 项目反馈:[oi@arvantacyber.com](mailto:oi@arvantacyber.com)
- 网站:[arvantacyber.com/open-investigator](https://www.arvantacyber.com/open-investigator)
- 源码:[github.com/SEc-123/open-investigator](https://github.com/SEc-123/open-investigator)
- 许可证:[Apache-2.0](LICENSE)
本仓库为开源版本。欢迎针对只读收集覆盖范围、AI 工具循环行为、报告质量、平台兼容性以及文档提交 Issue 和 Pull Request。
## 产品边界
本仓库仅包含 Open Investigator 的产品功能面:
```
open-investigator/
crates/open-investigator-cli # `oi` CLI
crates/open-investigator-runtime # local read-only AI investigation runtime
docs/ # user, architecture, runtime derivation, production docs
examples/config.toml
scripts/check.sh
```
## 运行时模型
运行时采用受限的调查循环:**Agent 轮次 -> 工具调用 -> 工具观察 -> 更多工具调用 -> 最终回答**。
模型仅能看到 Open Investigator 的工具:
```
oi_ioc_find
oi_auth_check
oi_acct_snap
oi_proc_snap
oi_net_snap
oi_per_snap
oi_svc_snap
oi_web_check
oi_java_check
oi_mem_check
oi_java_deep # only in investigator mode and explicit --java-deep
oi_java_dump # only when --java-deep plus --heap-dump/--jfr-dump is enabled
oi_file_recent
oi_container_check
oi_hist_check
oi_linux_deep
oi_windows_deep
oi_pkg_check
oi_ro_run # only in investigator mode
```
`oi_net_snap` 会记录网络上下文,并针对高风险监听(如暴露的 JDWP `5005`、常见后门端口、Docker TCP `2375`、kubelet `10250` 以及 JMX/RMI 端口)发出单独的发现报告。`oi_pkg_check` 会使用带有回退和诊断机制的轻量级包查询,而不是依赖完整的包列表转储。
在安全模式下,AI 无法调用原始操作系统命令。在调查模式下,`oi_ro_run` 仍会受到只读命令策略的过滤,并被完整审计。
## 构建
```
cd open-investigator
cargo build --release
```
二进制文件为:
```
./target/release/oi
```
## 配置 AI
Open Investigator 使用兼容 OpenAI 的 Chat Completions 端点,并支持 function/tool 调用。
```
export OPEN_INVESTIGATOR_API_KEY="sk-..."
export OPENAI_BASE_URL="https://api.openai.com/v1"
export OPEN_INVESTIGATOR_MODEL="gpt-4.1-mini"
```
`OPENAI_API_KEY` 也可作为备选方案被接受。
创建默认配置:
```
oi init
```
默认配置路径:
```
~/.open-investigator/config.toml
```
显示配置信息:
```
oi doc
oi ai show
```
如果未配置 API key,确定性护栏收集器仍会运行,但会跳过 AI 自主工具调用和 AI 合成。
## 开发
运行与 CI 相同的检查:
```
./scripts/check.sh
cargo clippy --workspace -- -D warnings
```
在提交 Pull Request 之前,请确保您的更改保持在只读调查的边界内,且未添加任何修复、破坏性的 shell、浏览器自动化或无关的产品功能面。
## 快速使用
完整的本地主机调查:
```
oi scan -s 7d
```
自然语言调查:
```
oi ask "怀疑这台服务器被入侵了,重点查最近 7 天的登录、Web、Java 进程和持久化" -s 7d
```
可疑 IP:
```
oi ip 1.2.3.4 -s 7d
```
登录异常:
```
oi login -s 7d
oi login --ip 1.2.3.4 -s 7d
oi login --user root -s 7d
```
WebShell / Web 异常:
```
oi web -s 14d
oi web --root /var/www/html -s 14d
```
Java 异常 / 内存马调查:
```
# 默认:仅收集低影响的外围证据。
oi java -s 14d
oi mem -s 14d
# JVM 内部检查:thread stacks、class histogram、classloader stats、
# VM flags/properties 和 JFR 状态。这可能会附加到目标 JVM,因此是显式的。
oi mem -s 14d -m inv --java-deep
oi java -s 14d -m inv --java-deep
# 重型 artifacts:将 heap/JFR artifacts 写入 .oi/cases//artifacts/jvm// 下。
# 默认禁用;仅在获得运维批准时使用。
oi mem -s 14d -m inv --java-deep --heap-dump
oi mem -s 14d -m inv --java-deep --jfr-dump
```
持久化:
```
oi per
```
进程与网络:
```
oi ps
oi net
oi net --ip 1.2.3.4
```
容器、包、命令历史记录及更深度的平台检查:
```
oi cont
oi pkg
oi hist
oi deep -s 7d
```
具有受控只读命令回退的调查模式:
```
oi ask "深入排查这台主机是否存在持久化和 Java 内存马线索" -s 14d -m inv
oi sh "journalctl --since '7 days ago' | grep 1.2.3.4" -m inv
```
策略测试:
```
oi pol test "find /tmp -type f -mtime -7"
oi pol test "rm -rf /tmp/a"
oi pol test "systemctl restart nginx"
```
## 输出
每次运行都会创建一个 case 目录:
```
.oi/cases//
case.json # input, mode, time window
evidence.jsonl # append-only evidence records with evidence_id
commands.log # allowed/denied command audit records
report.json # structured report
report.md # human-readable report
```
## 安全模型
默认模式为 `safe`:
```
- sealed investigator tools only
- no raw shell
- no target-system modification
- writes only to .oi/cases and optional report output
```
`inv` 模式增加了 `oi_ro_run`,但它仍会阻止那些执行删除、修改、终止、重启、安装、下载、上传、编辑注册表、更改防火墙、更改账户或执行交互式 shell 的命令。
## 生产环境说明
请为主机授予适当的读取权限后运行。某些日志需要管理员/root 权限才能读取,但运行时在逻辑上仍保持只读:它仅写入 case 产物和命令审计记录。
对于 Java 内存马调查,`oi` 默认有意执行低影响的外围检查。它不会自动进行堆转储(heap dump)或附加(attach)到生产环境的 JVM。
当需要更深度的证据时,该功能确实存在,但必须显式启用:
- `--java-deep` 启用 JVM 内部检查,例如 `Thread.print`、类直方图、类加载器统计信息、VM 标志/属性以及 JFR 状态。这可能会附加到目标 JVM,且通常需要使用 `-m inv`。
- `--heap-dump` 将堆转储写入 case 产物目录。它需要配合 `--java-deep` 使用。
- `--jfr-dump` 尝试将现有的 JFR 记录导出到 case 产物目录。它需要配合 `--java-deep` 使用。
普通的 `oi sh` / `oi_ro_run` 无法绕过这些限制来创建堆或 JFR 转储;JVM 转储命令受策略阻止,必须使用显式的收集器。
## 负责任的漏洞披露
请将疑似漏洞私下报告至 [oi@arvantacyber.com](mailto:oi@arvantacyber.com)。请包含受影响的版本或 commit、操作系统、使用的确切命令、观察到的行为,并在相关时附上已脱敏的 case 或命令摘录。
标签:Petitpotam, 可视化界面, 文档结构分析, 通知系统