hunterinvariants/open-agentic-threat-defense
GitHub: hunterinvariants/open-agentic-threat-defense
一个面向 AI Agent 与 MCP 工具调用的安全防御控制平面,通过内联策略网关、身份验证、遥测关联和审批门控来检测并遏制威胁行为。
Stars: 0 | Forks: 0
# 开放 Agentic 威胁防御
[](https://github.com/hunterinvariants/open-agentic-threat-defense/actions/workflows/ci.yml)
[](https://github.com/hunterinvariants/open-agentic-threat-defense/actions/workflows/quality.yml)
Open Agentic Threat Defense 是一个防御控制平面,旨在检测并遏制跨 AI-agent 工具调用、主机遥测、网络出站、欺骗信号以及响应工作流的威胁行为。
当前的 MVP 特意设计得很安全:它不包含漏洞利用逻辑、恶意软件行为或自主传播。演示数据仅生成遥测信息。
## 目前已有的功能
- Go HTTP 服务,生产环境使用 Postgres 持久化,本地开发支持 JSON 快照回退。
- 策略引擎,用于处理 agent 工具滥用、感知污点的源到汇点数据流、机密信息暴露、意外出站、发现、横向移动、破坏性影响、欺骗命中、可疑模型运行时活动以及版本化的 threat-pack 内容。
- 工具来源验证:当为工具声明了已签名的工具指纹时,网关将拒绝来源不匹配(伪造/篡改的工具),并对缺失的指纹进行拦截 —— 这是针对 agent 工具的供应链控制。
- Agent 身份验证:已注册的 agent 会提供已签名的身份 token;网关将拒绝冒充行为(token 不匹配)并拦截未知或未识别的 agent,从而确保工具调用归属于已验证的 agent,而不是可伪造的参与者字符串。
- 内联工具调用 PEP,用于在工具边界实现“执行前强制执行”决策,并由独立的 PDP endpoint 提供诊断支持。
- 网关队列、审批轮询、用于工具后端的传输代理,以及一个 MCP 反向代理,该代理按攻击面分类每个方法 —— 透传生命周期/枚举/通知,根据批准的列表拦截 `tools/call`,并对资源/提示词/采样/完成面进行内容拦截。
- 组织范围的策略集:在网关中内联应用按租户覆盖的已批准工具和已批准出站允许列表,这些列表由仅限管理员使用的 API 管理,或在启动时通过文件植入。
- 欺骗/canary token 注册表及管理 API,此外还支持通过 `SIGHUP` 或管理端点进行策略和 threat-pack 的热重载。
- 关联器,用于处理多信号序列,例如发现、凭据触碰、agent 工具调用和出站流量。
- 演练模式响应规划器,用于主机隔离、出站拦截、工具禁用、工单创建和密钥轮换,并支持经审批的执行导出。
- 针对 GitHub issues、Jira 和 ServiceNow 的原生事件工单连接器,以及通用的工单 webhook,派发时遵循“首个启用的生效”原则。
- 用于经审批响应执行的 GitHub workflow dispatch。
- 具备基于角色的访问控制(RBAC)的用户/token 身份验证,此外还支持 OIDC 和 SAML 单点登录,以及逻辑或物理多租户。
- Ed25519 签名的商业许可证 token,具备版本状态 endpoint 以及 `oadtdctl license` 密钥生成/颁发/验证工作流。
- 审计日志,记录身份验证失败、RBAC 拒绝、数据摄入、响应规划和响应审批,具备防篡改哈希链和验证 endpoint。
- 按资产划分的调查时间线 endpoint。
- `oadtdctl replay`,用于将安全的 JSONL 遥测数据重放到摄入 API 中。
- `oadtdctl validate`,用于授权的、良性的检测验证 —— 这是一个映射了 MITRE ATT&CK 的工具调用模拟库,针对内联网关进行评分。
- `oadtdctl mcp-demo`(配合 `oadtdctl mcp-stub`),用于端到端证明 MCP 反向代理能实时拦截真实的 MCP 客户端的工具调用,此外还有 `oadtdctl bench` 用于获取内联网关的延迟/吞吐量数据。
- [examples/langchain](examples/langchain) 中的 LangChain 参考集成,用于通过网关拦截第三方 agent 框架的工具调用。
- `oadtdctl agent`,用于从受支持的防御遥测源进行长时间运行的基于尾部(tail-based)的数据收集,包括原生的 Windows Event Log 和 Linux journald 模式。
- 浏览器仪表板,提供资产风险图谱、警报、事件、规则、响应操作以及实时 ATT&CK 检测覆盖率面板,此外还支持基于会话的仪表板登录。
- 用于 SIEM 风格集成的警报 webhook 导出。
- systemd 和 Windows 服务启动器打包。
- AGPLv3 或更高版本的社区许可证、商业双许可路径,以及从第一天起就实施的 CLA。
## 架构与保障
```
flowchart LR
A[Agent / MCP client] --> B[Inline PEP]
B --> C[Policy + identity + provenance]
C -->|allow| D[Bounded tool proxy]
C -->|gate| E[Human approval queue]
C -->|deny| F[Audit evidence]
D --> G[Approved upstream]
E -->|approved| D
B --> H[Telemetry + correlation]
H --> I[Alerts + dry-run response plans]
I --> E
```
安全模型建立在明确、可测试的不变量之上:在操作边界处实现失败关闭(fail closed),将不受信任的内容作为数据对待,对重大操作要求人类授权,保留防篡改的决策证据,并限制所有关键资源。请参阅[生产就绪契约](docs/production-readiness.md)、[质量门禁](docs/quality-gates.md)和[威胁模型](docs/threat-model.md)。
## 快速开始
运行完整的非 root 应用程序和 Postgres 堆栈:
```
docker compose -f compose.full.yaml up --build
```
打开 `http://localhost:8080`。Compose 凭据仅供开发使用;在一次性本地环境之外,请覆盖 `OATD_API_TOKEN` 和 `OATD_SESSION_SECRET`。
使用安全的演示遥测运行服务:
```
$env:APPDATA="$PWD\.cache\appdata"
$env:GOTELEMETRY="off"
$env:GOCACHE="$PWD\.cache\go-build"
$env:GOMODCACHE="$PWD\.cache\go-mod"
go run ./cmd/oadtd --demo --addr 127.0.0.1:8080
```
服务器默认绑定到环回地址。绑定到非环回地址需要进行身份验证,或者使用 `--insecure` 以显式开放模式运行。
使用 Postgres 持久化运行:
```
docker compose up -d postgres
$env:OATD_POSTGRES_DSN="postgres://oadtd:oadtd@localhost:5432/oadtd?sslmode=disable"
$env:OATD_SESSION_SECRET="replace-with-a-strong-random-secret"
go run ./cmd/oadtd --demo --addr 127.0.0.1:8080 --policy configs\example.policy.json
```
使用本地 JSON 持久化进行开发运行:
```
go run ./cmd/oadtd --demo --addr 127.0.0.1:8080 --data .cache\oadtd-state.json
```
打开:
```
http://localhost:8080
```
运行测试:
```
$env:APPDATA="$PWD\.cache\appdata"
$env:GOTELEMETRY="off"
$env:GOCACHE="$PWD\.cache\go-build"
$env:GOMODCACHE="$PWD\.cache\go-mod"
go test ./...
```
GitHub CI 会使用真实的 Postgres 服务运行相同的测试套件,对实时启动进行冒烟测试,并为 `amd64` 和 `arm64` 构建 Linux/Windows 二进制文件。
GitHub 安全自动化包括 CodeQL 分析和针对 Go 模块及 GitHub Actions 的 Dependabot 更新,以及针对 Pull Request 的依赖项审查检查。
带有标签的发布会发布平台二进制文件、SPDX SBOM 以及 `SHA256SUMS` 清单(涵盖二进制文件和 SBOM)。发布工作流使用 Sigstore 无密钥签名对校验和清单进行签名。在信任下载的发行版之前,请根据已发布的捆绑包对其进行验证:
```
cosign verify-blob \
--bundle SHA256SUMS.bundle \
--certificate-identity "https://github.com/hunterinvariants/open-agentic-threat-defense/.github/workflows/release.yml@refs/tags/vX.Y.Z" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
SHA256SUMS
sha256sum -c SHA256SUMS # then check the binary against the verified manifest
```
Postgres 操作员可以使用 `oadtdctl backup` 和 `oadtdctl restore` 创建和恢复可移植的 JSON 备份。
运行可选的 Postgres 集成测试:
```
docker compose up -d postgres
$env:OATD_TEST_POSTGRES_DSN="postgres://oadtd:oadtd@localhost:5432/oadtd?sslmode=disable"
go test ./internal/store -run TestPostgresPersistenceIntegration -count=1
```
## API
摄入一个事件:
```
Invoke-RestMethod -Method Post -Uri http://localhost:8080/api/events -ContentType application/json -Body '{
"kind": "agent_tool_call",
"asset_id": "dev-agent-01",
"hostname": "dev-agent-01",
"actor": "local-agent",
"tool_name": "shell_exec",
"command": "read env token",
"signal": "agent referenced token material",
"labels": ["agent", "credential"]
}'
```
在执行前拦截一个工具调用:
```
Invoke-RestMethod -Method Post -Uri http://localhost:8080/api/gateway/execute -ContentType application/json -Body '{
"asset_id": "dev-agent-01",
"hostname": "dev-agent-01",
"actor": "local-agent",
"tool_name": "asset_inventory",
"command": "inventory scan",
"arguments": "token=abc123",
"labels": ["agent", "tool-call"]
}'
```
启用 write-token 保护时:
```
Invoke-RestMethod -Method Post -Uri http://localhost:8080/api/events `
-Headers @{ Authorization = "Bearer $env:OATD_API_TOKEN" } `
-ContentType application/json `
-Body '{"kind":"deception_hit","asset_id":"dev-agent-01","signal":"canary token touched"}'
```
Endpoints(RBAC 角色仅在配置了身份验证时适用):
| 方法 | 路径 | 角色 | 用途 |
| --- | --- | --- | --- |
| GET | `/healthz` | 无 | 返回版本信息的存活探针 |
| GET | `/readyz` | 无 | 对存储执行 ping 操作的就绪探针 |
| GET | `/api/status` | 任何已认证用户 | 租户范围的计数和网关/存储状态 |
| GET/POST/DELETE | `/api/session` | 无 | 会话/SSO 信息、登录、注销 |
| GET | `/api/sso/oidc/login`, `/api/sso/oidc/callback` | 无 | OIDC SSO 登录和回调 |
| GET | `/api/sso/saml/login`, `/api/sso/saml/complete` | 无 | SAML SSO 登录和完成 |
| POST | `/api/gateway/decide` | ingestor, analyst, operator | 拦截工具调用并返回裁决 (PDP) |
| POST | `/api/gateway/execute` | ingestor, analyst, operator | 拦截工具调用,然后允许/阻止/排队/执行 (PEP) |
| POST | `/api/gateway/proxy` | ingestor, analyst, operator | 拦截工具调用并将其转发到上游 URL |
| POST | `/api/mcp/proxy` | ingestor, analyst, operator | 拦截请求并将其转发到 MCP 上游 |
| GET | `/api/gateway/queue` | analyst, operator | 列出待处理的网关审批操作 |
| GET | `/api/gateway/actions/{id}` | analyst, operator | 获取单个网关操作 |
| POST | `/api/policy/reload` | admin | 热重载策略和 threat-pack 文件 |
| GET/POST/PUT/DELETE | `/api/policy/tenants` | admin | 管理租户策略覆盖 |
| GET/POST/DELETE | `/api/deception/tokens` | operator | 列出、注册和移除欺骗 token |
| GET | `/api/timeline` | 任何已认证用户 | 单个资产的时间顺序调查视图 |
| GET | `/api/license` | 任何已认证用户 | 报告许可证/版本状态 |
| GET/POST | `/api/events` | GET: 任何已认证用户; POST: ingestor, analyst, operator | 列出或摄入事件 |
| GET | `/api/alerts` | 任何已认证用户 | 列出租户警报 |
| GET | `/api/assets` | 任何已认证用户 | 列出租户资产 |
| GET | `/api/policies` | 任何已认证用户 | 列出活动的策略规则 |
| GET | `/api/audit` | analyst, operator | 列出租户审计日志条目 |
| GET | `/api/audit/chain` | analyst, operator | 返回哈希链审计日志 |
| GET/POST | `/api/responses` | GET: 任何已认证用户; POST: analyst, operator | 列出响应操作或为警报规划操作 |
| POST | `/api/responses/approve` | operator | 审批并执行待处理的响应操作 |
| GET/POST | `/api/tenants` | admin | 列出或注册租户后端 |
| GET/PUT/DELETE | `/api/tenants/{id}` | admin | 获取、更新或删除单个租户后端 |
| POST | `/api/demo` | ingestor, analyst, operator | 为租户加载演示事件 |
## 运行时选项
```
Core
--addr HTTP listen address (default :8080)
--web static dashboard directory (default web)
--demo load safe demo telemetry at startup
--insecure allow open mode on non-loopback listen addresses
--retention-window retention window for events, alerts, actions, audits (default 30d)
--gateway-max-in-flight max in-flight gateway operations before backpressure (default 64)
--trusted-proxies comma-separated trusted proxy CIDRs or IPs
Persistence and policy
--data optional JSON snapshot path for local persistence
--postgres-dsn Postgres DSN, defaults to OATD_POSTGRES_DSN
--policy optional JSON policy configuration path
--threat-pack optional threat pack JSON file
--deception-tokens optional JSON file of deception/canary tokens
--tenant-policies optional JSON file of org-scoped policy sets
Authentication and licensing
--api-token legacy admin token, defaults to OATD_API_TOKEN
--license-file path to a commercial license token file
--license-public-key base64 ed25519 public key to verify the license
Webhooks
--alert-webhook-url / --alert-webhook-token new-alert SIEM/webhook export
--ticket-webhook-url / --ticket-webhook-token incident ticket webhook
--response-webhook-url / --response-webhook-token approved response webhook
GitHub integration
--github-api-base optional GitHub API base URL
--github-owner GitHub owner for issue and workflow integrations
--github-repo GitHub repository for issue and workflow integrations
--github-token GitHub token for issue and workflow integrations
--github-workflow-file GitHub workflow file for approved response actions
--github-workflow-ref GitHub ref for workflow dispatch
Jira integration
--jira-base-url Jira base URL for incident tickets
--jira-email Jira account email
--jira-api-token Jira API token
--jira-project-key Jira project key for incidents
--jira-issue-type Jira issue type (default Task)
ServiceNow integration
--servicenow-url ServiceNow instance URL for incidents
--servicenow-user ServiceNow user
--servicenow-password ServiceNow password
MCP interception
--mcp-upstream-url upstream MCP server URL for transparent interception
--mcp-upstream-token optional bearer token for the MCP upstream
OIDC single sign-on
--oidc-issuer-url OIDC issuer URL for SSO login
--oidc-client-id OIDC client ID
--oidc-client-secret OIDC client secret
--oidc-redirect-url OIDC redirect URL
--oidc-scopes comma-separated OIDC scopes (default openid,profile,email)
--oidc-tenant-claim OIDC claim name for tenant assignment
--oidc-role-claim OIDC claim name for roles
--oidc-email-claim OIDC claim name for username/email
SAML single sign-on
--saml-root-url SAML service provider root URL
--saml-idp-metadata-url SAML identity provider metadata URL
--saml-key-path SAML signing key path
--saml-cert-path SAML signing certificate path
--saml-tenant-attribute SAML attribute name for tenant assignment
--saml-role-attribute SAML attribute name for roles
--saml-email-attribute SAML attribute name for username/email
High availability and multi-tenancy
--public-url canonical public URL for HA and SSO callbacks
--instance-name instance label for HA deployments
--tenant-isolation-mode logical or physical tenant isolation (default logical)
--tenant-registry-path path to the tenant registry JSON
--tenant-postgres-dsn-template Postgres DSN template for physical tenant stores
--tenant-data-path-template file path template for physical tenant stores
```
每个 flag 都有一个对应的 `OATD_*` 环境变量(例如 `--addr` 没有环境变量,而 `--postgres-dsn` 读取 `OATD_POSTGRES_DSN`)。有少数行为仅能通过环境变量设置:`OATD_SESSION_SECRET`(配置身份验证或 SSO 时必填)、`OATD_AUDIT_HMAC_SECRET`(锚定审计哈希链),以及 `OATD_MANIFEST_HMAC_SECRET` / `OATD_MANIFEST_REQUIRE_SIGNED`(threat-pack 清单签名)。
当在策略文件中配置了用户时,所有 API endpoint 都需要提供 `Authorization: Bearer ` 或 `X-OATD-Token: `,并根据 RBAC 角色进行检查。`--api-token` 仍作为旧版管理员 token 的兼容路径。
仪表板使用 `POST /api/session` 将配置的用户名和 token 交换为会话 cookie,或者使用 `GET /api/sso/oidc/login` / `GET /api/sso/saml/login` 进行 SSO。`GET /api/session` 报告当前的仪表板状态,包含 SSO 可用性,而 `DELETE /api/session` 用于注销。
为了实现高可用(HA),可以在负载均衡器后端运行多个副本,共享同一个 Postgres 数据库、共享 SAML 签名材料,并设置不同的 `--instance-name` 值。`--public-url` 应与 SSO 回调和健康检查使用的外部规范 URL 相匹配。
为了实现物理租户隔离,请设置 `--tenant-isolation-mode physical`,并配置 `--tenant-postgres-dsn-template` 或 `--tenant-data-path-template`。仪表板提供了一个租户管理面板,由 `GET /api/tenants` 和 `POST /api/tenants` 提供支持。
## 事件工单连接器
已确认或已批准的响应操作可以开启一个事件工单。连接器按以下顺序进行“首个启用的生效”评估:GitHub issue、Jira、ServiceNow,然后是通用的工单 webhook。只有在存在某个连接器所需的所有配置时,该连接器才会被启用,并且每个操作只会创建一个工单。
GitHub issues 使用上述的 GitHub 集成标志。Jira 通过 `POST /rest/api/2/issue` 和 HTTP Basic 认证(`email:api-token`)来创建一个 issue:
```
--jira-base-url https://your-org.atlassian.net
--jira-email bot@your-org.com
--jira-api-token
--jira-project-key SEC
--jira-issue-type Task # optional, defaults to Task
```
ServiceNow 通过 `POST /api/now/table/incident` 和 HTTP Basic 认证(`user:password`)来创建一个事件:
```
--servicenow-url https://your-instance.service-now.com
--servicenow-user integration.user
--servicenow-password
```
通用工单 webhook(`---webhook-url` / `--ticket-webhook-token`)作为备选传输方式保持可用。
## 商业许可证 Token
本产品默认作为社区版本发布。已签名的许可证 token 可以升级报告的版本。许可证采用 Ed25519 签名:供应商使用私钥颁发 token,部署端使用公钥验证它们,因此没有私钥就无法伪造许可证。这是技术层面的版本控制关口;它与下文的 AGPL / 商业法律许可是分开的。
生成密钥对(供应商端,需对私钥保密):
```
go run ./cmd/oadtdctl license keygen
```
为组织颁发许可证:
```
go run ./cmd/oadtdctl license issue `
--private-key $env:OATD_LICENSE_PRIVATE_KEY `
--org "Example Corp" --features sso,multi-tenant --valid-for 8760h
```
针对公钥验证 token:
```
go run ./cmd/oadtdctl license verify --public-key --token
```
使用许可证运行服务器;`GET /api/license` 会报告版本、功能、有效期和有效性:
```
go run ./cmd/oadtd --addr 127.0.0.1:8080 `
--license-file license.token --license-public-key
```
## 策略配置
策略文件为 JSON 格式:
```
{
"approved_tools": ["asset_inventory", "ticket_create", "policy_read", "siem_search"],
"approved_egress_hosts": ["api.openai.com", "github.com", "login.microsoftonline.com"],
"threat_pack_path": "configs\\example.threat-pack.json",
"correlation_window": "30m",
"users": [
{
"name": "admin",
"token_sha256": "replace-with-sha256-token-hash",
"roles": ["admin"]
}
]
}
```
请参阅 [configs/example.policy.json](configs/example.policy.json) 和 [configs/example.rbac.policy.json](configs/example.rbac.policy.json)。
创建一个 token 哈希:
```
go run ./cmd/oadtdctl token-hash --token "replace-with-secret-token"
```
角色:
- `viewer`:只读 API 访问权限。
- `ingestor`:只读 API 访问权限以及事件/演示数据摄入。
- `analyst`:只读 API 访问权限、数据摄入和响应规划。
- `operator`:analyst 权限以及响应审批。
- `admin`:所有 API 操作。
审计日志需要具有 `analyst`、`operator` 或 `admin` 角色。
通过发送 `SIGHUP` 或以 admin 身份调用 `POST /api/policy/reload`,可以在不重启的情况下热重载策略和威胁包。欺骗/canary token 可以通过 `--deception-tokens` 进行植入,并在运行时通过 `GET/POST/DELETE /api/deception/tokens` 进行管理。
内联网关和代理路径强制执行有限的进行中请求限制,以对关键决策路径施加背压;可以通过 `--gateway-max-in-flight` 或 `OATD_GATEWAY_MAX_IN_FLIGHT` 进行配置。
MCP 反向代理路径通过设置 `--mcp-upstream-url` 和可选的 `--mcp-upstream-token` 来启用。
### 组织作用域策略集
每个租户都可以覆盖全局批准的工具和批准的出站允许列表。对于该租户的网关和检测决策,非空列表将完全替换全局列表;如果省略该列表,则回退到全局策略,因此没有覆盖配置的租户的行为与以前完全一致。
覆盖通过仅限管理员的 `/api/policy/tenants` endpoint 进行管理(`GET` 用于列出,`POST`/`PUT` 用于设置,`DELETE?tenant_id=...` 用于移除),也可以在启动时通过带有 `--tenant-policies` 的 JSON 文件进行植入:
```
[
{
"tenant_id": "acme",
"approved_tools": ["asset_inventory", "siem_search"],
"approved_egress": ["acme-cdn.example.net"]
}
]
```
## 遥测重放与收集器
`oadtdctl replay` 读取换行符分隔的 JSON 事件,并将它们发布到 `/api/events`。
```
go run ./cmd/oadtdctl replay --file examples\demo-events.jsonl --url http://localhost:8080
```
启用 write-token 保护时:
```
go run ./cmd/oadtdctl replay --file examples\demo-events.jsonl --token $env:OATD_API_TOKEN
```
在不发送的情况下验证文件:
```
go run ./cmd/oadtdctl replay --file examples\demo-events.jsonl --dry-run
```
针对实时服务器运行楔入(wedge)演示:
```
go run ./cmd/oadtdctl wedge-demo --url http://localhost:8080 --approved-by operator --await-approval
```
验证内联网关是否能在您自己授权的部署中强制拦截真实的 agent 威胁模式。`oadtdctl validate` 会通过只读的 `/api/gateway/decide` 路径运行一个精心挑选的、良性的、映射了 MITRE ATT&CK 的工具调用模拟库,并打印通过/失败记分卡(包括用于捕获误报的良性基线)。它仅输出合成的描述性遥测 —— 不会执行任何真实的命令或漏洞利用载荷:
```
go run ./cmd/oadtdctl validate --url http://localhost:8080 --token $env:OATD_API_TOKEN
```
在升级或策略更改后将其用作检测回归检查;非零退出代码表示未达到预期的裁决。添加 `--json` 用于 CI,添加 `--coverage` 用于 ATT&CK 战术/技术覆盖图,或者使用 `--continuous --interval 1h --webhook ` 将其作为持久运行的监视器运行,以在发生回归时发出警报。使用打包的 `oadtd-validate.timer`(带有 `OnFailure=` webhook 警报)来安排执行任务,并通过 `--output` / `--history` 以及 `OATD_VALIDATION_RESULT_PATH` / `OATD_VALIDATION_HISTORY_PATH` 将最新结果和趋势迷你图作为仪表板中的 **检测覆盖率** 面板呈现(请参阅 [docs/operations.md](docs/operations.md))。
将外部防御日志标准化为 OATD JSONL:
```
go run ./cmd/oadtdctl collect --source suricata-eve --file eve.json --output events.jsonl
go run ./cmd/oadtdctl collect --source zeek-conn --file conn.log --output events.jsonl
go run ./cmd/oadtdctl collect --source sysmon-json --file sysmon.jsonl --output events.jsonl
go run ./cmd/oadtdctl collect --source auditd --file audit.log --output events.jsonl
```
运行一个持久收集器 agent,它会追踪源文件并将批次发布到摄入 API:
```
go run ./cmd/oadtdctl agent --source sysmon-json --file sysmon.jsonl --url http://localhost:8080 --state-file .cache\agent-state.json
```
原生收集器模式:
```
go run ./cmd/oadtdctl agent --source windows-eventlog --log-name Microsoft-Windows-Sysmon/Operational --url http://localhost:8080
go run ./cmd/oadtdctl agent --source journald --journal-unit ssh.service --url http://localhost:8080
```
为 threat-pack 清单签名(需要 `OATD_MANIFEST_HMAC_SECRET`):
```
go run ./cmd/oadtdctl sign-manifest --file configs\example.threat-pack.json
```
操作说明详见 [docs/operations.md](docs/operations.md)。
## 许可证
社区发行版根据 AGPL-3.0-or-later 获得许可。
商业许可证单独提供给需要闭源再分发、专有网络使用、企业条款或支持的组织。请参阅 [COMMERCIAL-LICENSE.md](COMMERCIAL-LICENSE.md)。
外部贡献在合并前需要签署 CLA。请参阅 [CLA.md](CLA.md)。
## 安全边界
本项目用于授权的防御性监控和响应模拟。请勿添加漏洞利用代码、恶意软件行为、凭据窃取工具或自主传播逻辑。
标签:AI安全, AMSI绕过, Chat Copilot, EVTX分析, Go语言, MCP, PE 加载器, StruQ, 大模型安全, 威胁检测, 插件系统, 日志审计, 程序破解, 策略引擎, 网络安全挑战, 请求拦截, 零信任网关