IBM/simrun
GitHub: IBM/simrun
SimRun 是一款用于攻击模拟和检测测试的轻量级平台。
Stars: 6 | Forks: 0
# SimRun
SimRun 是一个用于检测测试的 **攻击模拟平台 (ASP)**。它 **引爆** 攻击模拟并验证您期望在 SIEM 中触发的安全警报(目前仅支持 Elastic Security)。
它作为一个单一的 Go 二进制文件提供 REST API + WebSocket 接口,由 PostgreSQL 支持,并带有嵌入的 SvelteKit 前端。
## 入门
### 前置条件
- [mise](https://mise.jdx.dev/) — 管理Go 1.25 和 Node 22 工具链(或自行安装)
- PostgreSQL
### 构建
```
mise build # builds the SvelteKit frontend and the simrun binary into dist/simrun
```
### 运行
simrun 需要一个 PostgreSQL 数据库;模式迁移在启动时自动运行。
```
export SR_DATABASE_URL="postgres://user:pass@localhost:5432/simrun?sslmode=disable"
./dist/simrun
```
然后 UI 和 API 在 http://localhost:8080 上提供服务。
## 配置
部署时配置从环境变量中读取 — 仅 `SR_*` 环境变量。所有其他内容(连接器、机密信息、包、计划、场景、应用程序默认值)都存储在数据库中,并通过 Web UI 进行管理。
| 变量 | 必需 | 默认 | 描述 |
|---|---|---|---|
| `SR_DATABASE_URL` | 是 | — | PostgreSQL 连接字符串 |
| `SR_WEB_PORT` | 否 | `8080` | HTTP 监听端口 |
| `SR_DATA_DIR` | 否 | `~/.simrun` | 本地数据目录(加密密钥、SSH 日志) |
| `SR_ENCRYPTION_KEY_FILE` | 否 | `$SR_DATA_DIR/encryption.key` | 加密存储机密信息的密钥文件 |
| `SR_DEBUG` | 否 | 关闭 | 当设置为非零值时进行详细日志记录 |
| `SR_WEB_URL` | 否 | — | 外部基本 URL(用于 OAuth 重定向) |
| `SR_GOOGLE_CLIENT_ID` / `SR_GOOGLE_CLIENT_SECRET` | 否 | — | Google OAuth 凭据(启用登录) |
| `SR_GOOGLE_ALLOWED_DOMAIN` | 否 | — | 限制 OAuth 登录到 Google Workspace 域 |
| `SR_AUTH_SESSION_TTL_HOURS` | 否 | `168` | 会话有效期(小时) |
### 使用 Docker 运行
```
docker build -t simrun .
docker run -p 8080:8080 \
-e SR_DATABASE_URL="postgres://..." \
-v simrun-data:/home/nonroot/.simrun \
simrun
```
该镜像捆绑了 detonators 使用的 `aws`、`gcloud` 和 `az` CLI。持久化 `SR_DATA_DIR`(上面的卷)以确保加密密钥在重启后仍然存在。
## 架构
单个 Go 二进制文件处理:
- 模拟引爆和编排
- 警报匹配和验证
- 从安全平台收集日志
- 场景解析和执行
### 模拟包
模拟作为外部包分发,通过 Web UI 进行安装和管理:
- simrun-base-pack — 自定义模拟(AWS、Azure、GCP)
- simrun-stratus-pack — [Stratus 红队]() 模拟
## 概念
### 引爆器
**引爆器** 描述了攻击技术如何以及在哪里执行。
* Simrun 引爆器 — 运行模拟包(基于 Terraform;包可以本地执行或通过 SSH 执行)
* AWS CLI 引爆器 — 运行 AWS CLI 命令
### 注入器
**注入器** 是引爆器的替代方案:它不是执行端到端的攻击,而是直接将生成的日志消息注入到 SIEM 中。这涵盖了端到端模拟不可行但您仍然想确认检测是否正常工作的情况。
* Elastic 注入器
### 警报匹配器
**警报匹配器** 是特定平台的集成,用于检查是否触发了预期的警报。
* Elastic Security 警报
* Datadog 安全信号
### 收集器
**收集器** 在引爆后从安全平台检索日志进行分析和规则生成。
* Elastic 收集器 — 通过执行 ID 或用户代理关联收集来自 Elasticsearch 的相关日志
### 引爆和警报关联
每个引爆都分配一个 UUID,尽可能在引爆中反映出来,并用于确保匹配的警报与该引爆完全对应。如果引爆器无法反映 UUID,匹配器可以使用用户提供的指标(静态指标)或 terraform 输出(动态指标)进行关联。
### 模拟
**模拟** 是一个可重复使用的模块,描述了如何执行特定的攻击。
模拟作为 [包]() 分发,并通过 Web UI 安装。
## 开发
```
mise run build-frontend # build just the SvelteKit frontend
go test ./... # run the test suite
mise run lint # run golangci-lint
go generate ./... # regenerate mocks (mockery)
mise run parser # regenerate parser from JSON schemas
```
## 贡献
欢迎提交问题和拉取请求。
## 许可证
根据 Apache License 2.0 许可。请参阅 [LICENSE](LICENSE)。
标签:EVTX分析, 日志审计, 测试用例, 请求拦截