bisskar/arktis-agent

GitHub: bisskar/arktis-agent

Arktis Agent 是一个基于 WebSocket 的轻量级反向连接代理,用于远程执行 Atomic Red Team 测试和交互式终端会话。

Stars: 0 | Forks: 0

# Arktis Agent 用于 [Arktis](https://github.com/bisskar/arktis) 的轻量级反向连接 Agent。通过 WebSocket 将实验室主机连接回 Arktis 后端,用于执行远程 Atomic Red Team 测试、交互式终端会话以及 AI 驱动的分析。 单个二进制文件。目标端零依赖。 ## 工作原理 ``` Traditional: Backend --SSH--> Lab Host (requires inbound firewall rules) Arktis Agent: Backend <--WS-- Agent (outbound only, NAT-friendly) ``` Agent 运行在您的实验室主机(Windows 或 Linux)上,并维护与 Arktis 后端的持久 WebSocket 连接。后端通过此连接发送命令 —— 无需入站端口、无需 SSH 密钥、目标端无需防火墙规则。 ## 快速开始 ### 1. 生成注册密钥 在 Arktis 中,前往 **Org Settings > Lab Hosts > Registration Keys** 并点击 **Generate Key**。选择要限定密钥范围的工作区(或留空以应用于整个组织)。 ### 2. 安装 Agent **Linux:** ``` curl -sSL https://github.com/bisskar/arktis-agent/releases/latest/download/arktis-agent-linux-amd64 \ -o /usr/local/bin/arktis-agent && chmod +x /usr/local/bin/arktis-agent arktis-agent --url wss://your-server.com/api/v1/agent/ws --key ``` **Windows (PowerShell):** ``` Invoke-WebRequest -Uri "https://github.com/bisskar/arktis-agent/releases/latest/download/arktis-agent-windows-amd64.exe" ` -OutFile "$env:ProgramFiles\arktis-agent.exe" & "$env:ProgramFiles\arktis-agent.exe" --url wss://your-server.com/api/v1/agent/ws --key ``` Agent 会在首次连接时自动注册。它将在几秒钟内出现在您的 Lab Hosts 列表中。 ### 3. 作为服务运行(可选) **Linux (systemd):** ``` sudo tee /etc/systemd/system/arktis-agent.service > /dev/null < Restart=always RestartSec=5 User=root [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload sudo systemctl enable --now arktis-agent ``` **Windows (作为计划任务):** ``` $action = New-ScheduledTaskAction -Execute "$env:ProgramFiles\arktis-agent.exe" ` -Argument "--url wss://your-server.com/api/v1/agent/ws --key " $trigger = New-ScheduledTaskTrigger -AtStartup $settings = New-ScheduledTaskSettingsSet -RestartCount 999 -RestartInterval (New-TimeSpan -Seconds 30) Register-ScheduledTask -TaskName "ArktisAgent" -Action $action -Trigger $trigger ` -Settings $settings -User "SYSTEM" -RunLevel Highest ``` ## 功能 | 功能 | 描述 | |---------|-------------| | **Atomic Test Execution** | 运行 Atomic Red Team 测试,包含完整的前置条件、执行和清理阶段 | | **Interactive Terminal** | 通过浏览器中的 xterm.js 提供完整的 PTY 终端会话 | | **Ad-hoc Commands** | 执行 AI 分析建议中的一次性命令 | | **Auto-reconnection** | 断开连接时采用指数退避(1秒至 60秒) | | **Self-registration** | 无需手动主机配置 —— Agent 在首次连接时自行注册 | | **Multi-shell** | 支持 PowerShell、cmd.exe、bash、sh,并进行正确的命令封装 | | **OS Detection** | 自动识别平台和操作系统家族 | ## 架构 ``` ┌──────────────┐ WebSocket (outbound) ┌──────────────────┐ │ Lab Host │ ──────────────────────────> │ Arktis Backend │ │ │ │ │ │ arktis- │ <── exec commands │ │ │ agent │ ──> exec results │ AgentConnection │ │ │ <── pty_open/input/resize │ Manager │ │ │ ──> pty_output │ │ │ │ <── heartbeat_ack │ │ │ │ ──> heartbeat (15s) │ │ └──────────────┘ └──────────────────┘ ``` ## 配置 | Flag | 环境变量 | 默认值 | 描述 | |------|---------------------|---------|-------------| | `--url` | `ARKTIS_URL` | (必填) | 后端 WebSocket URL | | `--key` | `ARKTIS_KEY` | (必填) | 来自 Arktis 的注册密钥 | | `--state-dir` | `ARKTIS_STATE_DIR` | `/etc/arktis-agent` (Linux) 或 `%ProgramData%\arktis-agent` (Windows) | 用于持久化状态的目录 | | `--version` | — | — | 打印版本并退出 | ## 安全性 - **仅出站** —— Agent 发起连接。目标主机上不需要入站端口。 - **基于密钥的身份验证** —— Agent 使用注册密钥进行身份验证(服务器端进行 SHA-256 哈希处理,从不以明文存储)。 - **密钥撤销** —— 在 Arktis 中撤销密钥会立即断开所有使用该密钥的 Agent。 - **按 Agent 撤销** —— 可以停止单个主机,而不影响同一密钥下的其他 Agent。 - **TLS 传输** —— 生产环境中使用 `wss://` 进行加密通信。 - **组织/工作区范围限定** —— 每个密钥绑定到一个组织,并可选绑定到一个工作区。Agent 无法为其他租户执行命令。 ## 从源码构建 需要 Go 1.22+。 ``` # 所有平台 make build-all # 单个平台 make build-linux-amd64 make build-linux-arm64 make build-windows-amd64 # 输出到 dist/ ls dist/ ``` ## 开发 ``` # 本地运行 go run ./cmd/arktis-agent --url ws://localhost:8000/api/v1/agent/ws --key # 运行测试 make test ``` ## 发布流程 `.github/workflows/` 中有两个工作流: | 工作流 | 触发条件 | 作用 | |----------|---------|--------------| | `ci.yml` | 每次 PR 和每次推送到 `main` | Lint、vet、test —— **不构建二进制文件,不创建发布** | | `release.yml` | 仅在推送 `v*` git 标签时 | 为所有平台构建二进制文件并发布 GitHub Release | **重要提示:** 将 PR 合并到 `main` 并不会创建发布。PR 合并仅运行 CI。您必须单独推送版本标签才能发布二进制文件。 ### 发布新版本 ``` # 1. 确保 main 是绿色的,并且你在想要发布的 commit 上 git checkout main && git pull # 2. 打 tag(使用 semver:MAJOR.MINOR.PATCH) git tag v0.2.0 # 3. 推送 tag —— 这会触发 release.yml git push origin v0.2.0 ``` 在大约 2 分钟内,发布将出现在 `https://github.com/bisskar/arktis-agent/releases/latest`,并附带三个资产: - `arktis-agent-linux-amd64` - `arktis-agent-linux-arm64` - `arktis-agent-windows-amd64.exe` 上述“快速开始”部分中的安装命令始终拉取 `/releases/latest/download/...`,因此它们会自动使用最新的标记版本。 ### 如果发布失败 在 `main` 上修复问题(提交新 commit),然后移动标签: ``` git tag -d v0.2.0 # delete local git push origin --delete v0.2.0 # delete remote git tag v0.2.0 # retag on fixed commit git push origin v0.2.0 # re-trigger release.yml ``` ## 许可证 私有。Arktis 平台的一部分。
标签:AI合规, AI安全分析, Atomic Red Team, EVTX分析, IP 地址批量处理, NAT穿透, systemd, TGT, WebSocket, 依赖分析, 内网穿透, 单文件, 原子红队, 反向连接, 后台服务, 命令执行, 安全测试, 攻击性安全, 攻防演练, 数据泄露检测, 无依赖, 日志审计, 系统代理, 终端交互, 网络安全, 网络调试, 自动化, 远程控制, 隐私保护, 零依赖