
إضافة نقل 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
تدفق البيانات:
inboundoutbound لمدة تصل إلى 8 ثوانٍ (لسدّ الفجوة غير المتزامنة الخاصة بالتسجيل)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/ | تصحيحات شفرة 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) بالأعلام المطابقةBeaconServerlessrelay_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 | عنوان 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