आप एक प्रक्रिया कैसे शुरू कर सकते हैं और इसे top
कमांड के लिए अदृश्य बना सकते हैं ? प्रक्रिया एक सामान्य उपयोगकर्ता (रूट नहीं) द्वारा शुरू की जाती है, और अन्य सामान्य उपयोगकर्ताओं को दिखाई नहीं देनी चाहिए।
आप एक प्रक्रिया कैसे शुरू कर सकते हैं और इसे top
कमांड के लिए अदृश्य बना सकते हैं ? प्रक्रिया एक सामान्य उपयोगकर्ता (रूट नहीं) द्वारा शुरू की जाती है, और अन्य सामान्य उपयोगकर्ताओं को दिखाई नहीं देनी चाहिए।
जवाबों:
3.3 के बाद से लिनक्स कर्नेल अन्य उपयोगकर्ताओं के लिए प्रक्रियाओं को छिपाने के लिए समर्थन करता है।
यह द्वारा किया जाता है hidepid=
और gid=
में वर्णित के रूप / proc के लिए विकल्प माउंट इसी प्रतिबद्ध और प्रलेखन / फ़ाइल सिस्टम / proc.txt ।
डेबियन व्हीज़ी में यह सुविधा भी शामिल है।
top
आदेश proc, जो सीधे गिरी से प्रदान की जाती है से डेटा पढ़ता है। प्रक्रियाओं को छिपाने के लिए, आपको मास्किंग करने के लिए कर्नेल के अंदर कोड का उपयोग करना होगा।
सुरक्षा ढांचे जैसे SELinux और grsecurity (अन्य उत्तरों में उल्लिखित) का उपयोग करने के अलावा, rootkit- शैली कोड आपका एकमात्र शेष विकल्प है। मैं कहता हूं कि "शैली" क्योंकि "रूटकिट" अपने आप में खराब नहीं है, यह कैसे उपयोग किया जाता है। अन्य उपयोगकर्ताओं से प्रक्रियाओं को छिपाने के पीछे पूरी तरह से वैध कारण हैं, यही वजह है कि यह क्षमता सुरक्षा ढांचे में मौजूद है।
कार्य करने के लिए इसे प्राप्त करने के लिए आपको मूल मार्ग का अनुसरण करना होगा (या आप इसे कैसे देखते हैं, इस पर निर्भर करता है), लिनक्स कर्नेल में फ़ंक्शन (ओं) को /proc/pid/
डेटा सौंपने के आधार पर। मैंने एक सुरक्षा मॉड्यूल में लिनक्स कर्नेल फ़ंक्शन में हुकिंग की एक विधि प्रदर्शित की है:
https://github.com/cormander/tpe-lkm
इसके लिए "उच्च स्तर" कोड में hijack_syscalls()
विधि है security.c
, और इसके पीछे शैतान-में-विवरण जादू है hijacks.c
।
आपको संभवतः फ़ंक्शन मिल जाएगा fs/proc/
, जिससे आप लिनक्स कर्नेल के स्रोत कोड की निर्देशिका में हुक करना चाहेंगे । ध्यान रखें कि linux एक स्थिर ABI प्रदान नहीं करता है, इसलिए आपके कोड को लिनक्स कर्नेल के विभिन्न संस्करणों में काम करने के लिए कुछ हद तक बदलने की आवश्यकता होगी। इसके अलावा, ध्यान रखें कि इस कोड को डालने में सक्षम होने के लिए आपको मशीन की पूरी रूट एक्सेस की आवश्यकता है।
अपडेट करें:
यदि आप pid_getattr
कर्नेल प्रतीक को कुछ अतिरिक्त कोड के साथ लपेटते हैं तो ऐसा करना आसान है। मैंने हाल ही में कुछ जोड़ा है जो उपरोक्त कर्नेल मॉड्यूल में प्रक्रियाओं को छुपाता है:
https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
आप एक निश्चित उपयोगकर्ता या समूह की प्रक्रियाओं को जड़ और उस उपयोगकर्ता को छोड़कर किसी के द्वारा देखने योग्य नहीं बनाकर कुछ ऐसा ही कर सकते हैं। इसे प्रक्रिया नाम से करना थोड़ा अधिक जटिल है, लेकिन संभव है। exe_from_mm()
समारोह पर एक नजर है । ध्यान दें कि इसके अंदर उपयोग करने के प्रदर्शन निहितार्थ हो सकते हैं pid_getattr
।
यह दो मुख्य विकल्प लगता है।
सेलिनक्स अलग-अलग लोगों को अलग-अलग सुरक्षा डोमेन में डालते हैं और एक अर्थ में रेत-बॉक्सिंग करते हैं, ताकि वे एक-दूसरे का सामान न देख सकें। यह इस प्रश्न में शामिल है । चूंकि सेलिनक्स लिनक्स दुनिया में जल्दी से वास्तविक सुरक्षा ढांचा बन रहा है, इसलिए शायद यही वह दिशा है जिसे आपको देखना चाहिए।
जैसा कि मारियोश द्वारा उल्लिखित है और जैसा कि इस प्रश्न में कहा गया है, अन्य है । कुछ डिस्ट्रोस में वैकल्पिक कर्नेल पैकेज होते हैं जिनमें ग्रेसीसिटी पैच लगाए जाते हैं। यदि आपका यह है तो आप उनका उपयोग कर सकते हैं।
यदि किसी कारण से आप सेलेनक्स या ग्रामसुरक्षा जैसे सुरक्षा ढांचे को शामिल किए बिना ऐसा करना चाहते हैं, तो कृपया बताएं कि आप जो कर रहे हैं वह रूट-किट नहीं लिख रहा है।
यह मानक लिनक्स बॉक्स पर इतना सरल नहीं है। व्याकरण को देखें , लेकिन इसके लिए पैचिंग कर्नेल आदि की आवश्यकता होती है।
आप अपने argv [0] को किसी अन्य नाम के साथ ओवरराइड कर सकते हैं ... लेकिन सख्ती से बोलते हुए, आप किसी तरह के रूटकिट की तलाश कर रहे हैं। इससे आपको मदद मिल सकती है: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html
आप एक समान कमांड लिख सकते हैं जो ठीक वैसे ही काम करता है top
, लेकिन एक विशिष्ट नाम से मेल खाने वाली प्रक्रियाओं को प्रदर्शित नहीं करता है। वैकल्पिक रूप से आप top
कमांड का स्रोत कोड प्राप्त कर सकते हैं और तदनुसार संशोधित कर सकते हैं । फिर आप अपने संस्करण के साथ (या जहां भी हो) top
कमांड को बदल सकते हैं /usr/sbin
।
top
कमांड को अदृश्य कैसे किया जाए ।
this_is_not_the_process_you_are_looking_for
?