क्या किसी भी तरह से हमलावर एक सिस्टम से समझौता करने के लिए mkdir का उपयोग कर सकता है?


22

मैं उपयोगकर्ता के लिए एक प्रतिबंधित उपयोगकर्ता खाता स्थापित कर रहा हूं ricardo, मेरे सिस्टम पर एक परेशानी उपयोगकर्ता। मैं उसे निर्देशिकाओं का उपयोग करने का अधिकार देना चाहता हूं sudo, जिसे उसे कभी-कभी करना पड़ता है। मैं अपनी /etc/sudoersफाइल में इस नियम पर विचार कर रहा हूं :

ricardo   ALL=(root) NOPASSWD: /bin/mkdir

केवल इस नियम का उपयोग करते हुए, क्या कोई तरीका है जिससे रेकॉर्डो जानबूझकर या गलती से सिस्टम से समझौता कर सकता है?


2
यदि आपके पास स्थिर इनसाइड काउंट वाली फाइलसिस्टम है, तो वह आपके सभी इनकोड का उपयोग कर सकता है।
जोर्डन

2
@schaiba वह टिंकर को पसंद करती है और देखती है कि क्या वह सिस्टम का फायदा उठा सकता है और हमेशा मैन पेजों को उतना नहीं पढ़ता जितना उसे चाहिए।
रिकार्डो अल्टामिरानो

8
एक उचित उपयोगकर्ता शिक्षा, जो इस समय बिना किसी सूडो के साथ संयुक्त है, मेरे द्वारा की जाने वाली अनुशंसित चीज होगी।
schaiba

2
जैसा @schaiba कहती है, आप ऐसे उपयोगकर्ताओं का उपयोग उन्हें सिखाकर, और उन्हें जिम्मेदारियाँ देकर (करीबी निगरानी में) कर सकते हैं। मैंने sysdamins और उपयोगकर्ताओं के बीच युद्ध देखा है, क्योंकि पहले लोगों ने सिस्टम को बहुत अधिक लॉक करने की कोशिश की थी। उपयोगकर्ताओं ने 10 से 1 के sysadmins को उखाड़ फेंका , और तब भी ( आज के इंटरनेट एक्सेस के बिना !) Sysdamins की हार अपमानजनक थी। ऐसी स्थिति में कभी मत आना!
वॉनब्रांड

2
यही हाल एक रिकार्डो का भी है। या कम से कम, इस प्रकार BOFH ...
हिरण हंटर

जवाबों:


21

मुझे संदेह है कि इस तरह के हमले से काम होगा, जहां «कुछ» एक कर्नेल मॉड्यूल है जो रूटफ़्स माउंट होने के बाद लोड करने का प्रयास करेगा:

$ sudo mkdir -m 777 /lib/modules/`uname -r`/a
$ cp evil.ko /lib/modules/`uname -r`/a/«something».ko

ध्यान दें कि आप मॉड्यूल में घोषित उपनामों के आधार पर अन्य नामों का उपयोग कर सकते हैं। मैं अनुमान लगा रहा हूं कि यह तब तक लोड नहीं होगा जब तक कि डेमोड चलाया नहीं जाता है, जो अगली बार एक कर्नेल अपडेट होगा - इसलिए mkdirहाल ही में सूडो लॉग में भी नहीं दिखाया जाएगा।

/ आदि में बहुत सारी चीजें हैं जो एक निर्देशिका में सभी फ़ाइलों को पढ़ती हैं, कभी-कभी पुनरावर्ती। इससे भी बदतर, उन निर्देशिकाओं में से कुछ डिफ़ॉल्ट रूप से मौजूद नहीं हैं, और उनके बारे में जानने का एकमात्र तरीका प्रोग्राम का उपयोग करने के लिए मैनपेज, इनिट स्क्रिप्ट आदि को पढ़ना है। कुछ, और भी बदतर, पीछे की ओर अनुकूलता वाली चीजों को हटा दिया जाता है, और अब भी प्रलेखित नहीं किया जा सकता है।

संपादित करें: कुछ और निर्देशिकाओं के बारे में सोचा, इनमें /usr/local:

  • /usr/local/lib/perl/5.14.2(पर्ल संस्करण पर निर्भर करता है, perl -Vयह पता लगाने की कोशिश करें)। Fileवहाँ एक उपनिर्देशिका बनाएँ , और उसमें एक डालें Find.pm। अब जब भी कोई उपयोग करेगा File::Find, वे हमलावर के संस्करण का उपयोग करेंगे। इसी तरह, के साथ भी ऐसा ही करें Getopt::Long। सिस्टम उपयोगिताओं को अक्सर पर्ल में लिखा जाता है, इसलिए यह संभवतः रूट देता है। (कोशिश ack-grep --color -a 'use.+::' /usr/sbin | less -R)
  • मुझे लगता है कि पायथन, रूबी, आदि की समान निर्देशिकाएं हैं। सिस्टम उपयोगिताएँ पायथन में भी लिखी गई हैं।
  • सब-वे के साथ उप-संकलित की गई कई चीज़ों को अपने पास रखें /usr/local/include

ओह, लेकिन अगर <बुरे उपयोगकर्ता> उन मॉड्यूल को कॉपी कर सकते हैं जहां कर्नेल उन्हें लोड करेगा, तो खेल शुरू होने से पहले खत्म हो गया है।
वॉनब्रांड

1
@vonbrand <दुष्ट उपयोगकर्ता> आम तौर पर नहीं कर सकता है, लेकिन अपनी sudo mkdirनई निर्देशिका बनाने के लिए उसका उपयोग करता है जहां वह कर सकता है।
derobert

20

mkdirरूट के रूप में चलाकर , उपयोगकर्ता अन्य प्रक्रियाओं / उपयोगकर्ताओं को समान नाम (और / या गलत अधिकारों) के साथ निर्देशिका बनाकर नई फाइलें और निर्देशिका बनाने से रोक सकता है।

यह विशेष रूप से लॉग- और लॉक- फाइलों के साथ सुरक्षा प्रासंगिक हो सकता है ।

के रूप में jordanm बताया गया है, की अधिकतम संख्या inodes भी इस्तेमाल किया जा सकता है जो पूरी व्यवस्था ब्लॉक कर सकते हैं।

उपयोगकर्ता को विशिष्ट समूहों (या ACL का उपयोग करके ) में जोड़कर , आपको किसी भी अधिकार के बिना मुद्दों को हल करने में सक्षम होना चाहिए sudo


शानदार अंक। मैं शायद mkdirकमांड की सूची को छोड़ दूंगा ricardo का उपयोग करने की अनुमति है।
रिकार्डो अल्टामिरानो

यदि यह थकावट को for((i = 0;; i++)); do touch $i; doneखत्म करने के लिए है , तो एक साधारण ही ठीक होगा (बैशीवाद, क्षमा करें; लेकिन आपको यह विचार मिलता है)।
वॉनब्रांड

@vonbrand को छोड़कर वह मूल नहीं है, इसलिए इसे कोटा द्वारा रोक दिया जाएगा। बेशक, अन्य sudoआदेश ओपी पर विचार कर रहे हैं और साथ ही इनोडिंग को समाप्त करने की अनुमति दे सकते हैं; ओपी को उस DoS वेक्टर के बारे में पता होना चाहिए।
derobert

11

आपको उसे चेरोट जेल में पुनर्निर्देशित करना चाहिए। या उससे भी बेहतर, थोड़ा VM के लिए, कि वह एक घंटे में एक बार दुर्घटनाग्रस्त हो सकता है। आपको बस एक नई कॉपी प्रदान करनी है।


मैं इसकी अत्यधिक अनुशंसा करता हूं। उसे अपने वीएम पर रूट एक्सेस दें।
एमोरी

चेरोट के लिए ^ H ^ H ^ H ^ H ^ Hounty जेल ...
हिरण हंटर

6

लेखन पहुंच के साथ निर्देशिकाएं बनाने में सक्षम होने के कारण संभावनाएं हैं। साथ उपयोगकर्ता जो कुछ भी वे नई निर्देशिका में तरह लिख सकते हैं। आपको सिस्टम पर एक प्रक्रिया की आवश्यकता होगी जो पहले से ही एक अलग उपयोगकर्ता के रूप में चल रही हो, जो कि कॉन्फ़िगरेशन, स्क्रिप्ट या मॉड्यूल लोड करने के लिए डायरेक्ट्री ट्री को फिर से तैयार करेगा। तब उपयोगकर्ता संभवतः अपनी खुद की चीजों को लोड करने या चलाने के लिए जोड़ सकता है। पहली बात मैं सोच सकता हूं कि क्या आप एक वेब सर्वर चलाते हैं जो php या cgi को निष्पादित कर सकता है। फिर आप उस उपयोगकर्ता के रूप में स्क्रिप्ट चला सकते हैं। मैं और अधिक वास्तविक दुनिया उदाहरण के साथ आने के लिए संघर्ष कर रहा हूँ, विशेष रूप से वाले, लेकिन मुझे यकीन है कि वे इसके बारे में हैं। mkdir -m 777 blahricardoroot

ssh एक डेमॉन का एक उदाहरण है जो इस तरह के परिदृश्य को फँसाता है। यदि आपने एक .sshऐसे उपयोगकर्ता के लिए एक निर्देशिका बनाई है जिसके पास एक नहीं है और अपनी खुद की authorized_hostsफ़ाइल डाल दी है। sshdनोटिस कि निर्देशिका की अनुमति बहुत खुली है और सार्वजनिक कुंजी को अनदेखा करती है।

आप निश्चित रूप से निर्देशिका बनाने के लिए खुद का एक उपद्रव कर सकते हैं जहां फ़ाइलों को चालू करने की अपेक्षा की जाती है (जैसे क्षणिक tmp या स्वैप फ़ाइलें) जो बहुत सारे प्रोग्राम अच्छी तरह से नहीं संभालेंगे।

आप बहुत सी cgroups बना सकते हैं, लेकिन ऐसा नहीं लगता कि आप उनके साथ कुछ भी करते हैं। आप कम से कम घुटनों तक की प्रणाली लाने में सक्षम हो सकते हैं। यह ओओएम हत्यारे के लिए 256M के साथ एक बॉक्स पर लगभग 10000 cgroups लिया sshd।

यदि आप -mविकल्प mkdirऔर sudoपर्यावरण के UMASK को नियंत्रित करते हैं तो मुझे लगता है कि यह सिर्फ एक उपद्रव है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.