Plugin de transport C2 serverless pour AdaptixC2 v1.2 utilisant AWS Lambda + DynamoDB comme infrastructure de relais.

Plugin de transport C2 serverless pour AdaptixC2 v1.2 utilisant AWS Lambda + DynamoDB comme infrastructure de relais. Le trafic de l'agent apparaît comme du HTTPS sortant vers des points de terminaison AWS, ne nécessitant aucun port entrant ni IP publique sur le serveur 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
Flux de données :
inboundoutbound pendant jusqu'à 8 secondes (comble le décalage asynchrone pour l'enregistrement)inbound pour les enregistrements non traitésoutbound| Composant | Chemin | Objectif |
|---|---|---|
| Agent Kharon | agent/ | Implant Kharon embarqué (source C++) |
| Terraform | deploy/aws/ | Infrastructure Lambda + DynamoDB + IAM + KMS |
| Relais Lambda | deploy/aws/lambda/ | Proxy HTTP-vers-DynamoDB sans état avec interrogation sortante |
| Plugin listener | listener/ | Plugin AdaptixC2, interrogation DynamoDB, pont de protocole Kharon |
| Configurations Kharon | kharon/ | Enregistrement des commandes AXS et configuration pour les extenders agent/listener |
| Patchs | patches/ | Patchs du code source AdaptixC2 pour le support BeaconServerless |
| Profils | profiles/ | Profil HTTP Malleable pour l'URL Lambda |
| Scripts | scripts/ | Installation, compilation, déploiement, désinstallation |
aws configure)apt install clang lldapt install nasmapt install binutils-mingw-w64-x86-64Dans la console 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
Vérifier :
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
Ce script va :
dist/ (certificats, base de données, profil)GOEXPERIMENT à partir du binaire du serveur.so) avec les indicateurs correspondantsBeaconServerlessrelay_api_key dans votre 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"
}
| Champ | Description | Valeur par défaut |
|---|---|---|
| AWS Region | Région où l'infrastructure est déployée | us-east-1 |
| Lambda URL | URL de la fonction issue de la sortie Terraform | (requis) |
| Relay API Key | Doit correspondre au relay_api_key de Terraform | (facultatif) |
| Inbound Table | Table DynamoDB pour les check-ins des agents | adaptix-inbound |
| Outbound Table | Table DynamoDB pour les réponses du serveur | adaptix-outbound |
| Poll Interval | Fréquence de vérification de DynamoDB (secondes) | 5 |
| TTL Hours | Expiration des enregistrements DynamoDB | 24 |
L'agent Kharon utilise un protocole binaire personnalisé sur HTTP :
[36-byte UUID][encrypted_checkin_data][16-byte LokyCrypt key][36-byte UUID][encrypted_payload] (pas de clé finale)TotalLen-16 chevauche la zone de l'UUID. Pour un paquet de 44 octets, la clé commence à l'offset 28, écrasant les octets 28-35 de l'UUID et toutes les données chiffrées.Le listener détecte les trois formats et les traite correctement.