कैसे अन्य उपयोगकर्ताओं के लिए एक प्रक्रिया अदृश्य बनाने के लिए?


19

आप एक प्रक्रिया कैसे शुरू कर सकते हैं और इसे topकमांड के लिए अदृश्य बना सकते हैं ? प्रक्रिया एक सामान्य उपयोगकर्ता (रूट नहीं) द्वारा शुरू की जाती है, और अन्य सामान्य उपयोगकर्ताओं को दिखाई नहीं देनी चाहिए।


1
इस तरह के शीर्ष के उद्देश्य को पराजित करना और दुरुपयोग करना बहुत आसान होगा। बस प्रक्रिया का नाम बदला क्यों नहीं? this_is_not_the_process_you_are_looking_for?

मैं देखता हूं, उपयोगकर्ता को छिपाने के बारे में क्या?

5
कृपया हमें बताएं कि आप रूट-किट लिखने का प्रयास नहीं कर रहे हैं। क्या आप अपने परिदृश्य की व्याख्या कर सकते हैं ताकि शायद हम एक बेहतर सुरक्षा वास्तुकला का सुझाव दे सकें, जो आमतौर पर "बुराई" व्यवहार के रूप में माना जाता है?
कालेब

2
आप ग्रामसुरक्षा या SELinux का उपयोग कर सकते हैं । प्रारंभिक सेटअप के लिए दोनों को रूट हस्तक्षेप की आवश्यकता होती है।
गाइल्स का SO- बुराई पर रोक '20:

जवाबों:


14

3.3 के बाद से लिनक्स कर्नेल अन्य उपयोगकर्ताओं के लिए प्रक्रियाओं को छिपाने के लिए समर्थन करता है।

यह द्वारा किया जाता है hidepid=और gid=में वर्णित के रूप / proc के लिए विकल्प माउंट इसी प्रतिबद्ध और प्रलेखन / फ़ाइल सिस्टम / proc.txt

डेबियन व्हीज़ी में यह सुविधा भी शामिल है।


11

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


4

यह दो मुख्य विकल्प लगता है।

  • सेलिनक्स अलग-अलग लोगों को अलग-अलग सुरक्षा डोमेन में डालते हैं और एक अर्थ में रेत-बॉक्सिंग करते हैं, ताकि वे एक-दूसरे का सामान न देख सकें। यह इस प्रश्न में शामिल है । चूंकि सेलिनक्स लिनक्स दुनिया में जल्दी से वास्तविक सुरक्षा ढांचा बन रहा है, इसलिए शायद यही वह दिशा है जिसे आपको देखना चाहिए।

  • जैसा कि मारियोश द्वारा उल्लिखित है और जैसा कि इस प्रश्न में कहा गया है, अन्य है । कुछ डिस्ट्रोस में वैकल्पिक कर्नेल पैकेज होते हैं जिनमें ग्रेसीसिटी पैच लगाए जाते हैं। यदि आपका यह है तो आप उनका उपयोग कर सकते हैं।

यदि किसी कारण से आप सेलेनक्स या ग्रामसुरक्षा जैसे सुरक्षा ढांचे को शामिल किए बिना ऐसा करना चाहते हैं, तो कृपया बताएं कि आप जो कर रहे हैं वह रूट-किट नहीं लिख रहा है।


1

यह मानक लिनक्स बॉक्स पर इतना सरल नहीं है। व्याकरण को देखें , लेकिन इसके लिए पैचिंग कर्नेल आदि की आवश्यकता होती है।


2
मुझे लगता है कि यह एक सेलिनक्स कर्नेल के साथ मानक आता है।
user606723


0

आप एक समान कमांड लिख सकते हैं जो ठीक वैसे ही काम करता है top, लेकिन एक विशिष्ट नाम से मेल खाने वाली प्रक्रियाओं को प्रदर्शित नहीं करता है। वैकल्पिक रूप से आप topकमांड का स्रोत कोड प्राप्त कर सकते हैं और तदनुसार संशोधित कर सकते हैं । फिर आप अपने संस्करण के साथ (या जहां भी हो) topकमांड को बदल सकते हैं /usr/sbin


2
'शीर्ष' को प्रतिस्थापित करने से कोई उपयोगकर्ता ऐसा नहीं करता जो शीर्ष करता है।
टिम पोस्ट

2
नहीं, लेकिन सवाल यह पूछा गया कि topकमांड को अदृश्य कैसे किया जाए ।
लॉरेंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.