मुझे संदेह है कि इस तरह के हमले से काम होगा, जहां «कुछ» एक कर्नेल मॉड्यूल है जो रूटफ़्स माउंट होने के बाद लोड करने का प्रयास करेगा:
$ 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
।