用于 AdaptixC2 v1.2 的无服务器 C2 传输插件,使用 AWS Lambda + DynamoDB 作为中继基础设施。

用于 AdaptixC2 v1.2 的无服务器 C2 传输插件,使用 AWS Lambda + DynamoDB 作为中继基础设施。Agent 流量表现为发往 AWS 端点的出站 HTTPS,C2 服务器无需任何入站端口或公网 IP。
Kharon Agent (target)
|
| HTTPS GET/POST (outbound only, randomly alternated)
v
AWS Lambda Function URL (stateless relay)
|
| Store inbound / Poll outbound (up to 8s)
v
DynamoDB (inbound + outbound tables)
^
| Poll every 5 seconds
|
Listener Plugin (inside AdaptixC2)
|
| TsAgent API + TsExtenderData (key persistence)
v
AdaptixC2 Teamserver + UI
数据流:
inbound 表中outbound 表最多 8 秒(弥合注册阶段的异步间隙)inbound 表以获取未处理的记录outbound 表中| 组件 | 路径 | 用途 |
|---|---|---|
| Kharon agent | agent/ | 捆绑的 Kharon 植入体(C++ 源码) |
| Terraform | deploy/aws/ | Lambda + DynamoDB + IAM + KMS 基础设施 |
| Lambda relay | deploy/aws/lambda/ | 无状态 HTTP 到 DynamoDB 代理,带出站轮询 |
| Listener plugin | listener/ | AdaptixC2 插件、DynamoDB 轮询、Kharon 协议桥接 |
| Kharon configs | kharon/ | 用于 agent/listener 扩展器的 AXS 命令注册与配置 |
| Patches | patches/ | 用于支持 BeaconServerless 的 AdaptixC2 源码补丁 |
| Profiles | profiles/ | 用于 Lambda URL 的 Malleable HTTP 配置文件 |
| Scripts | scripts/ | 安装、构建、部署、卸载 |
aws configure)apt install clang lldapt install nasmapt install binutils-mingw-w64-x86-64在 AWS 控制台中:
adaptix-deployerAmazonDynamoDBFullAccessAWSLambda_FullAccessIAMFullAccessCloudWatchLogsFullAccess{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"kms:*","Resource":"*"}]}KMSFullAccessaws configure
# AWS Access Key ID: <paste access key>
# AWS Secret Access Key: <paste secret key>
# Default region: us-east-1
# Default output format: json
验证:
aws sts get-caller-identity
# Build the Lambda relay binary (cross-compiled for Amazon Linux)
./scripts/build_relay.sh
# Deploy Lambda + DynamoDB + IAM with Terraform
./scripts/deploy_infra.sh
# Note the Lambda Function URL from the output, e.g.:
# lambda_function_url = "https://xxxxx.lambda-url.us-east-1.on.aws"
./scripts/install.sh /path/to/AdaptixC2
该脚本将:
dist/ 目录(证书、数据库、配置文件)GOEXPERIMENT 标志.so)BeaconServerless 监听器relay_api_key 匹配)profiles/lambda_default.json 中的 malleable 配置文件BeaconServerless 监听器生成 Kharon agentdeploy/aws/terraform.tfvars)region = "us-east-1"
function_name = "adaptix-relay"
relay_api_key = "your-secret-key-here"
tags = {
Project = "adaptix-serverless"
}
| 字段 | 描述 | 默认值 |
|---|---|---|
| AWS Region | 部署基础设施的区域 | us-east-1 |
| Lambda URL | Terraform 输出中的 Function URL | (必填) |
| Relay API Key | 必须与 Terraform 的 relay_api_key 匹配 | (可选) |
| Inbound Table | 用于 agent check-in 的 DynamoDB 表 | adaptix-inbound |
| Outbound Table | 用于服务器响应的 DynamoDB 表 | adaptix-outbound |
| Poll Interval | 检查 DynamoDB 的频率(秒) | 5 |
| TTL Hours | DynamoDB 记录过期时间 | 24 |
Kharon agent 使用基于 HTTP 的自定义二进制协议:
[36-byte UUID][encrypted_checkin_data][16-byte LokyCrypt key][36-byte UUID][encrypted_payload](无尾部密钥)TotalLen-16 的 16 字节密钥会重叠到 UUID 区域。对于 44 字节的数据包,密钥从偏移 28 开始,覆盖 UUID 的第 28-35 字节以及所有加密数据。监听器会检测所有三种格式并正确处理它们。
Lambda + DynamoDB 的异步特性意味着当 Lambda 首次检查响应时,监听器尚未处理 inbound 记录。Lambda 在存储 inbound 记录后,会轮询 outbound 表最多 8 秒,给监听器时间来处理并排队响应。这对于注册至关重要(Checkin 响应必须在 Checkin 阶段到达,而不是在后续的 GetTask 阶段)。
Agent 加密密钥通过 TsExtenderDataSave/TsExtenderDataLoad(基于 SQLite)持久化。这可以在服务重启后保留。重启后,当监听器遇到已知的 agent ID 时,会从持久化存储中恢复密钥。
Kharon 在 GET 和 POST 请求之间随机交替(HTTP_METHOD_USE_BOTH)。GET 请求将数据放在 id 查询参数中(根据配置文件进行 base64 编码)。POST 请求将原始二进制数据放在 HTTP body 中。Lambda 透明地处理这两种情况。
*.lambda-url.*.on.aws 端点的出站 HTTPS# Remove plugin from AdaptixC2
./scripts/uninstall.sh /path/to/AdaptixC2
# Destroy AWS infrastructure
cd deploy/aws && terraform destroy
adaptix-serverless-c2/
agent/
src_beacon/ # Kharon implant (C++ source)
src_loader/ # Loader wrappers (EXE, DLL, SVC)
deploy/
aws/
main.tf # Lambda + DynamoDB + IAM + KMS
variables.tf # Terraform variables
outputs.tf # Output Lambda URL and table ARNs
lambda/
main.go # Lambda relay handler
listener/
pl_main.go # AdaptixC2 plugin entry (Teamserver interface)
pl_transport.go # DynamoDB polling, Kharon protocol, LokyCrypt
ax_config.axs # Listener creation UI
config.yaml # Plugin metadata
kharon/
agent_kharon/ # AXS commands + config for Kharon agent extender
listener_kharon_http/ # AXS + config for Kharon HTTP listener extender
patches/ # AdaptixC2 source patches
profiles/
lambda_default.json # Malleable profile for Lambda URL
scripts/
install.sh # Full install into AdaptixC2
uninstall.sh # Reverse patches + cleanup
build_relay.sh # Cross-compile Lambda binary
build_agent.sh # Build Kharon agent shellcode
build_objects.sh # Build beacon objects
deploy_infra.sh # Terraform init + apply