إضافة نقل C2 بدون خادم لـ AdaptixC2 v1.2 باستخدام AWS Lambda + DynamoDB كبنية تحتية للترحيل.

إضافة نقل Serverless C2 لـ AdaptixC2 v1.2 باستخدام AWS Lambda + DynamoDB كبنية تحتية للترحيل. تظهر حركة المرور الخاصة بالوكيل كـ HTTPS صادر إلى نقاط نهاية AWS، دون الحاجة إلى منافذ واردة أو عناوين IP عامة على خادم 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
تدفق البيانات:
inbound في DynamoDBoutbound لمدة تصل إلى 8 ثوانٍ (يسد الفجوة غير المتزامنة للتسجيل)inbound في DynamoDB بحثًا عن السجلات غير المعالجةoutbound| المكوّن | المسار | الغرض |
|---|---|---|
| وكيل Kharon | agent/ | غرسة Kharon المضمّنة (كود مصدري C++) |
| Terraform | deploy/aws/ | بنية Lambda + DynamoDB + IAM + KMS التحتية |
| مرحّل Lambda | deploy/aws/lambda/ | وسيط HTTP-to-DynamoDB عديم الحالة مع استعلام صادر |
| إضافة المستمع | listener/ | إضافة AdaptixC2، استعلام DynamoDB، جسر بروتوكول Kharon |
| إعدادات Kharon | kharon/ | تسجيل أوامر AXS والإعداد لموصّلات الوكيل/المستمع |
| التصحيحات | patches/ | تصحيحات كود AdaptixC2 المصدري لدعم BeaconServerless |
| الملفات الشخصية | profiles/ | ملف HTTP قابل للتشكيل لعنوان Lambda URL |
| السكربتات | 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 في ملف 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"
}
| الحقل | الوصف | الافتراضي |
|---|---|---|
| AWS Region | المنطقة التي تُنشر فيها البنية التحتية | us-east-1 |
| Lambda URL | Function URL من مخرجات Terraform | (مطلوب) |
| Relay API Key | يجب أن يطابق relay_api_key في Terraform | (اختياري) |
| 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 مع منطقة UUID. بالنسبة لحزمة من 44 بايت، يبدأ المفتاح عند الإزاحة 28، داسًا بايتات UUID من 28 إلى 35 وكل البيانات المشفرة.يكتشف المستمع الصيغ الثلاث ويتعامل معها بشكل صحيح.
تعني الطبيعة غير المتزامنة لـ Lambda + DynamoDB أن المستمع لم يعالج سجل الوارد عندما يتحقق Lambda أولاً من وجود رد. يستعلم Lambda من جدول الصادر لمدة تصل إلى 8 ثوانٍ بعد تخزين سجل وارد، مما يمنح المستمع وقتًا لمعالجة الرد ووضعه في قائمة الانتظار. هذا أمر بالغ الأهمية للتسجيل (يجب أن يصل رد Checkin خلال مرحلة Checkin، وليس في GetTask لاحق).
تُحفظ مفاتيح تشفير الوكيل عبر TsExtenderDataSave/TsExtenderDataLoad (مدعومة بـ SQLite). هذا يضمن البقاء بعد إعادة تشغيل الخدمة. عند إعادة التشغيل، يستعيد المستمع المفاتيح من المخزن الدائم عندما يواجه معرّف وكيل معروف.
يتبادل Kharon بشكل عشوائي بين طلبات GET و POST (HTTP_METHOD_USE_BOTH). تضع طلبات GET البيانات في معامل الاستعلام id (مشفرة بـ base64 وفقًا للملف الشخصي). تضع طلبات POST بيانات ثنائية خام في جسم HTTP. يتعامل Lambda مع كليهما بشفافية.
*.lambda-url.*.on.aws# Remove plugin from AdaptixC2
./scripts/uninstall.sh /path/to/AdaptixC2
# Destroy AWS infrastructure
cd deploy/aws && terraform destroy