SEc-123/open-investigator

GitHub: SEc-123/open-investigator

一款开源的本地只读 AI 服务器事件调查工具,通过受限的智能体循环在 Linux/Windows 主机上自动完成安全取证与证据收集。

Stars: 3 | Forks: 2

# 开放调查器 (`oi`) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](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, 可视化界面, 文档结构分析, 通知系统