hunterinvariants/open-agentic-threat-defense

GitHub: hunterinvariants/open-agentic-threat-defense

一个面向 AI Agent 与 MCP 工具调用的安全防御控制平面,通过内联策略网关、身份验证、遥测关联和审批门控来检测并遏制威胁行为。

Stars: 0 | Forks: 0

# 开放 Agentic 威胁防御 [![ci](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](https://github.com/hunterinvariants/open-agentic-threat-defense/actions/workflows/ci.yml) [![quality](https://static.pigsec.cn/wp-content/uploads/repos/cas/db/dbd871ff9cf9ec16b2fe205b76ec59df441e0ad152f02ace51acf77e44fa8ced.svg)](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, 大模型安全, 威胁检测, 插件系统, 日志审计, 程序破解, 策略引擎, 网络安全挑战, 请求拦截, 零信任网关