AdaptixC2 v1.2 के लिए सर्वरलेस C2 ट्रांसपोर्ट प्लगइन, जो रिले इंफ्रास्ट्रक्चर के रूप में AWS Lambda + DynamoDB का उपयोग करता है।

AWS Lambda + DynamoDB को रिले इन्फ्रास्ट्रक्चर के रूप में उपयोग करते हुए AdaptixC2 v1.2 के लिए सर्वरलेस C2 ट्रांसपोर्ट प्लगइन। एजेंट ट्रैफ़िक 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 तालिका को पोल करता है (पंजीकरण के लिए async अंतराल को पाटता है)inbound तालिका को पोल करता हैoutbound में संग्रहीत करता है| घटक | पथ | उद्देश्य |
|---|---|---|
| Kharon एजेंट | agent/ | बंडल किया गया Kharon इम्प्लांट (C++ स्रोत) |
| Terraform | deploy/aws/ | Lambda + DynamoDB + IAM + KMS अवसंरचना |
| Lambda रिले | deploy/aws/lambda/ | आउटबाउंड पोलिंग के साथ स्टेटलेस HTTP-से-DynamoDB प्रॉक्सी |
| लिसनर प्लगइन | listener/ | AdaptixC2 प्लगइन, DynamoDB पोलिंग, Kharon प्रोटोकॉल ब्रिज |
| Kharon कॉन्फ़िग | kharon/ | एजेंट/लिसनर एक्सटेंडर के लिए AXS कमांड पंजीकरण और कॉन्फ़िग |
| पैच | patches/ | BeaconServerless समर्थन के लिए AdaptixC2 स्रोत पैच |
| प्रोफ़ाइल | profiles/ | Lambda URL के लिए Malleable HTTP प्रोफ़ाइल |
| स्क्रिप्ट | scripts/ | इंस्टॉल, बिल्ड, डिप्लॉय, अनइंस्टॉल |
aws configure)apt install clang lldapt install nasmapt install binutils-mingw-w64-x86-64AWS कंसोल में:
adaptix-deployer रखेंAmazonDynamoDBFullAccessAWSLambda_FullAccessIAMFullAccessCloudWatchLogsFullAccess{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"kms:*","Resource":"*"}]}KMSFullAccess रखेंaws 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/ डायरेक्टरी का बैकअप लें (certs, database, profile)GOEXPERIMENT फ़्लैग्स का पता लगाएं.so) बनाएंBeaconServerless लिसनर बनाएंrelay_api_key से मेल खाना चाहिए)profiles/lambda_default.json से malleable प्रोफ़ाइल अपलोड करेंBeaconServerless लिसनर चुनकर एक Kharon एजेंट जनरेट करेंdeploy/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 आउटपुट से फ़ंक्शन URL | (आवश्यक) |
| Relay API Key | Terraform के relay_api_key से मेल खाना चाहिए | (वैकल्पिक) |
| Inbound Table | एजेंट चेक-इन के लिए DynamoDB तालिका | adaptix-inbound |
| Outbound Table | सर्वर प्रतिक्रियाओं के लिए DynamoDB तालिका | adaptix-outbound |
| Poll Interval | DynamoDB को कितनी बार जाँचना है (सेकंड में) | 5 |
| TTL Hours | DynamoDB रिकॉर्ड की समाप्ति | 24 |
Kharon एजेंट 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 पहली बार प्रतिक्रिया की जाँच करता है, तब तक लिसनर ने इनबाउंड रिकॉर्ड को प्रोसेस नहीं किया होता है। Lambda इनबाउंड रिकॉर्ड संग्रहीत करने के बाद अधिकतम 8 सेकंड तक आउटबाउंड तालिका को पोल करता है, जिससे लिसनर को प्रतिक्रिया को प्रोसेस करने और कतार में लगाने का समय मिल जाता है। यह पंजीकरण के लिए महत्वपूर्ण है (Checkin प्रतिक्रिया Checkin चरण के दौरान ही पहुँचनी चाहिए, किसी बाद के GetTask में नहीं)।
एजेंट एन्क्रिप्शन कुंजियाँ TsExtenderDataSave/TsExtenderDataLoad (SQLite-आधारित) के माध्यम से स्थायी रूप से संग्रहीत की जाती हैं। यह सेवा पुनः आरंभ होने पर भी बनी रहती हैं। पुनः आरंभ होने पर, लिसनर किसी ज्ञात एजेंट ID का सामना करने पर स्थायी स्टोर से कुंजियाँ पुनः प्राप्त करता है।