Plugin de transporte C2 serverless para AdaptixC2 v1.2 que utiliza AWS Lambda + DynamoDB como infraestructura de retransmisión.

Plugin de transporte C2 sin servidor para AdaptixC2 v1.2 que utiliza AWS Lambda + DynamoDB como infraestructura de retransmisión. El tráfico del agente aparece como HTTPS saliente hacia endpoints de AWS, sin requerir puertos entrantes ni IPs públicas en el servidor C2.
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
Flujo de datos:
inbound de DynamoDBoutbound durante un máximo de 8 segundos (salva la brecha asíncrona para el registro)inbound de DynamoDB en busca de registros no procesadosoutbound| Componente | Ruta | Propósito |
|---|---|---|
| Agente Kharon | agent/ | Implante Kharon incluido (código fuente C++) |
| Terraform | deploy/aws/ | Infraestructura de Lambda + DynamoDB + IAM + KMS |
| Relay Lambda | deploy/aws/lambda/ | Proxy sin estado de HTTP a DynamoDB con sondeo de salida |
| Plugin de listener | listener/ | Plugin de AdaptixC2, sondeo de DynamoDB, puente de protocolo Kharon |
| Configuraciones de Kharon | kharon/ | Registro de comandos AXS y configuración para los extensores de agente/listener |
| Parches | patches/ | Parches del código fuente de AdaptixC2 para el soporte de BeaconServerless |
| Perfiles | profiles/ | Perfil HTTP maleable para la URL de Lambda |
| Scripts | scripts/ | Instalación, compilación, despliegue, desinstalación |
aws configure)apt install clang lldapt install nasmapt install binutils-mingw-w64-x86-64En la consola de 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
Verificar:
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
Este script hará lo siguiente:
dist/ (certificados, base de datos, perfil)GOEXPERIMENT del binario del servidor.so) con los flags coincidentesBeaconServerlessrelay_api_key en tu terraform.tfvars)profiles/lambda_default.jsonBeaconServerlessdeploy/aws/terraform.tfvars)region = "us-east-1"
function_name = "adaptix-relay"
relay_api_key = "your-secret-key-here"
tags = {
Project = "adaptix-serverless"
}
| Campo | Descripción | Valor predeterminado |
|---|---|---|
| Región de AWS | Región donde se despliega la infraestructura | us-east-1 |
| URL de Lambda | URL de la función desde la salida de Terraform | (obligatorio) |
| Clave de API del relay | Debe coincidir con relay_api_key de Terraform | (opcional) |
| Tabla de entrada | Tabla de DynamoDB para los check-ins de los agentes | adaptix-inbound |
| Tabla de salida | Tabla de DynamoDB para las respuestas del servidor | adaptix-outbound |
| Intervalo de sondeo | Frecuencia con la que se consulta DynamoDB (segundos) | 5 |
| Horas de TTL | Caducidad de los registros de DynamoDB | 24 |
El agente Kharon utiliza un protocolo binario personalizado sobre HTTP:
[36-byte UUID][encrypted_checkin_data][16-byte LokyCrypt key][36-byte UUID][encrypted_payload] (sin clave al final)TotalLen-16 se solapa con el área del UUID. Para un paquete de 44 bytes, la clave comienza en el desplazamiento 28, sobrescribiendo los bytes 28-35 del UUID y todos los datos cifrados.El listener detecta los tres formatos y los maneja correctamente.