क्या किसी उपयोगकर्ता को निष्पादनयोग्य बनाने और उन्हें चलाने से रोकने का कोई तरीका है?


31

रैंसमवेयर हमले शून्य-दिन के कारनामों का उपयोग कर सकते हैं, लेकिन अक्सर एक हमलावर केवल एक भोला-भाला उपयोगकर्ता को डाउनलोड और क्लिक करके एक निष्पादन योग्य चलाने में मूर्ख बना देगा।

मान लीजिए कि हमारे पास एक भोला-भाला उपयोगकर्ता है और उन्हें सामान्य रास्ते तक सीमित रखना चाहता है। क्या निष्पादन योग्य विशेषाधिकार वाली फ़ाइल बनाने से उन्हें प्रतिबंधित करने का कोई तरीका है?

या, अधिक सामान्य रूप से, एक्सेस कंट्रोल लिस्ट बनाने और यह परिभाषित करने का कोई तरीका है कि यह उपयोगकर्ता केवल इस सूची में फ़ाइलों को निष्पादित कर सकता है?


7
इस तरीके से निष्पादन को अक्षम करना उपयोगकर्ताओं को सिस्टम पर कुछ भी करने में सक्षम होने से रोक देगा । वहाँ में निर्मित इस सिस्टम तक या तीसरे पक्ष के सॉफ्टवेयर है कि मुझे पता है सुरक्षा लॉकडाउन के इस प्रकार करने के लिए की कर रहा हूँ के साथ के लिए कोई तंत्र है
थॉमस वार्ड

3
जवाब नहीं दे रहा है, लेकिन संकेत दें कि आप क्या कर सकते हैं: उपयोगकर्ता लिखने योग्य mounts पर noexec जोड़ें। अभ्यस्त लिपियों को रोकें लेकिन वास्तविक बाइनरी निष्पादन।
Sampo Sarrala

3
@ थोमसवर्ड, क्या वास्तव में एक प्रतिबंधित शेल नहीं है?
रॉबर्ट रिडेल

7
@ThomasWard 'श्वेतसूचीबद्ध निष्पादनयोग्य' की एक सामान्य अवधारणा है, जहाँ (आमतौर पर हस्ताक्षरित) निष्पादनयोग्य की एक निश्चित सूची की अनुमति दी जाती है और कुछ भी उन्नत विशेषाधिकार के बिना नहीं चलाया जा सकता है; और Windows और OS X दोनों के पास उचित समाधान हैं जो ऐसा करते हैं। मैं नहीं जानता कि वहाँ अनुप्रयोग के लिए एक अच्छा उबंटू (या अन्य लिनक्स) समाधान है, हालांकि।
पीटरिस

2
@ पशुचिकित्सा, ऐसे कई समाधान हैं। मेरा पसंदीदा आपके निष्पादकों के साथ एक हस्ताक्षरित, केवल-पढ़ने वाली फाइल सिस्टम है और अन्य सभी को माउंट कर रहा है noexec, साथ ही यह भी बताता dm_verityहै कि रूट फाइल सिस्टम की अखंडता को सुनिश्चित करने के लिए क्रोमओएस कैसे उपयोग करता है। उन लोगों के लिए जो काफी कट्टर नहीं हैं, ईवीएम मॉड्यूल का उपयोग कर सकते हैं; उसी पर जेंटू के प्रलेखन के लिए wiki.gentoo.org/wiki/Extended_Verification_Module देखें ।
चार्ल्स डफी

जवाबों:


50

आपने जिस विशिष्ट हमले के बारे में चिंता व्यक्त की है वह है:

अक्सर एक हमलावर केवल डाउनलोड करने और क्लिक करके एक निष्पादन योग्य चलाने में एक भोला उपयोगकर्ता को मूर्ख बना देगा।

कम से कम सामान्य मामले में जहां फ़ाइल को एक वेब ब्राउज़र में डाउनलोड किया जाता है, इसे पहले से ही उबंटू में ब्राउज़र की एक्ज़ेक्यूट-परमिशन बिट आवश्यक नीति के पालन द्वारा रोका जाना चाहिए । उस नीति के सबसे सीधे प्रासंगिक हिस्से हैं:

  • डेस्कटॉप और शेल सहित एप्लिकेशन को दोनों के होने पर फ़ाइलों से निष्पादन योग्य कोड नहीं चलाना चाहिए:

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

इसलिए यदि किसी उपयोगकर्ता को वेब ब्राउज़र में प्रोग्राम डाउनलोड करने के लिए कहा जाता है, तो वह ऐसा करता है, और फ़ाइल को डबल क्लिक करके चलाने का प्रयास करता है, यह नहीं चलेगा। यह तब भी लागू होता है जब डाउनलोड की गई फ़ाइल एक शेल स्क्रिप्ट या यहां तक ​​कि .desktop फ़ाइल है। (यदि आपने कभी सोचा है कि आपके घर निर्देशिका में .desktop फ़ाइलों को निष्पादन योग्य के रूप में चिह्नित किया जाना है, भले ही वे वास्तव में कार्यक्रम नहीं हैं, इसलिए।)

उपयोगकर्ताओं के लिए कॉन्फ़िगरेशन परिवर्तनों के माध्यम से इस व्यवहार को बदलना संभव है। अधिकांश नहीं करेंगे, और जबकि वे जो शायद नहीं करना चाहिए, यह वास्तव में आप के बारे में चिंता करने की ज़रूरत नहीं है। बड़ी चिंता वह अधिक जटिल हमला है जो मुझे लगता है कि आप पहले से ही चिंतित हैं, जिसमें एक दुर्भावनापूर्ण व्यक्ति (या बॉट) उपयोगकर्ता को एक विशिष्ट फ़ाइल डाउनलोड करने के लिए निर्देश देता है, इसे स्वयं निष्पादन योग्य (उनके फ़ाइल ब्राउज़र के साथ या chmod), और फिर इसे चलाएं।

दुर्भाग्य से, किसी फ़ाइल पर निष्पादन बिट सेट करने के लिए या कुछ श्वेतसूची पर उन के अलावा अन्य फ़ाइलों को निष्पादित करने के लिए उपयोगकर्ता की क्षमता को प्रतिबंधित करने से समस्या को कम नहीं किया जा सकेगा। कुछ हमले पहले से ही काम करेंगे, और वे जो तुच्छ रूप से संशोधित नहीं किए जा सकते ताकि वे करें। मूलभूत मुद्दा यह है कि फ़ाइल चलाने का प्रभाव तब भी प्राप्त किया जा सकता है , जब फ़ाइल में निष्पादन योग्य अनुमतियां न हों

यह सबसे अच्छा उदाहरण द्वारा चित्रित किया गया है। मान लीजिए evilकि वर्तमान निर्देशिका में एक फ़ाइल है, जिसे यदि निष्पादन योग्य अनुमतियाँ ( chmod +x evil) और रन ( ./evil) दी जाती हैं, तो इससे कुछ बुराई होगी। यह किस प्रकार का कार्यक्रम है, इसके आधार पर, निम्नलिखित में से एक द्वारा एक ही प्रभाव प्राप्त किया जा सकता है:

उनमें से कोई भी, अंतिम एक भी नहीं, इसके लिए आवश्यक है कि फ़ाइल में निष्पादन योग्य अनुमति हो या यहां तक ​​कि उपयोगकर्ता फ़ाइल को निष्पादन योग्य अनुमति देने में सक्षम हो।

लेकिन दुर्भावनापूर्ण निर्देशों को भी उतना जटिल नहीं होना चाहिए। इस गैर-दुर्भावनापूर्ण आदेश पर विचार करें , जो NVM को स्थापित या अद्यतन करने के आधिकारिक तौर पर सुझाए गए तरीकों में से एक है :

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

दुर्भावनापूर्ण नहीं होने का कारण यह है कि NVM मैलवेयर नहीं है, लेकिन अगर URL किसी की स्क्रिप्ट के बजाय होता है जो रन करते समय बुराई करता है, तो वह कमांड स्क्रिप्ट को डाउनलोड और रन करेगा। किसी भी बिंदु पर किसी भी फ़ाइल को निष्पादन योग्य अनुमति देने की आवश्यकता नहीं होगी। इस तरह के एक ही आदेश के साथ एक दुर्भावनापूर्ण फ़ाइल में निहित कोड को डाउनलोड करना और चलाना, मेरा मानना ​​है, एक बहुत ही सामान्य कार्रवाई है जो हमलावर उपयोगकर्ताओं को लेने में छल करती है।

उपयोगकर्ताओं को चलाने के लिए कौन से दुभाषिए उपलब्ध हैं, इसे प्रतिबंधित करने की कोशिश करने के बारे में आप सोच सकते हैं। लेकिन वास्तव में ऐसा करने का कोई तरीका नहीं है जो उन सामान्य कार्यों को पर्याप्त रूप से प्रभावित नहीं करता है जो आप संभवतः उपयोगकर्ताओं को करने में सक्षम होना चाहते हैं। यदि आप एक अत्यंत प्रतिबंधित वातावरण की स्थापना कर रहे हैं, जिस पर लगभग हर उपयोगकर्ता जो कुछ भी कंप्यूटर पर करने के लिए सोचेगा, वह एक कियोस्क की तरह है, जो केवल एक जोड़े को चलाता है, तो यह कुछ हद तक सार्थक सुरक्षा प्रदान कर सकता है। लेकिन ऐसा नहीं लगता कि यह आपके उपयोग का मामला है।

तो आपके प्रश्न का अनुमानित उत्तर है, "नहीं।" पूर्ण उत्तर यह है कि आप उपयोगकर्ताओं को संभवतः उन फ़ाइलों को निष्पादित करने से रोकने के लिए प्रबंधित कर सकते हैं , जिन्हें आप श्वेतसूची में आपूर्ति करते हैं। लेकिन यह "निष्पादित," के सख्त, तकनीकी अर्थों में है, जिसे अधिकांश कार्यक्रमों या लिपियों को चलाने के पूर्ण प्रभाव को प्राप्त करने की आवश्यकता नहीं है। को रोकने के लिए है कि , आप बनाने के लिए कोशिश कर सकते श्वेत सूची बहुत छोटी है, इसलिए यह उन है कि अत्यधिक सीमित किया जा सकता है को छोड़कर किसी भी दुभाषिए श्रेणी में नहीं रखा। लेकिन यहां तक ​​कि अगर आप प्रबंधित करते हैं, तो उपयोगकर्ता बहुत कुछ नहीं कर सकते हैं, और यदि आपने इसे इतना छोटा बना दिया है कि वे खुद को चोट नहीं पहुंचा सकते हैं, तो वे शायद कुछ भी नहीं कर सकते। ( थॉमस वार्ड की टिप्पणी देखें ।)

यदि आपके उपयोगकर्ता खुद को चोट पहुंचा सकते हैं, तो उन्हें खुद को चोट पहुंचाने में मूर्ख बनाया जा सकता है।

आप विशिष्ट कार्यक्रमों को उपयोग करने से रोक सकते हैं या अन्यथा उन तरीकों से व्यवहार कर सकते हैं जो हानिकारक होने की संभावना है, और यदि आप विशिष्ट पैटर्न देख रहे हैं तो रैनसमवेयर का अनुसरण करने की प्रवृत्ति होती है, आप कुछ विशिष्ट सामान्य मामलों को रोकने में सक्षम हो सकते हैं। ( AppArmor देखें ।) जो कुछ मूल्य प्रदान कर सकता है। लेकिन यह आपको उस व्यापक समाधान के करीब कुछ भी नहीं देगा जिसकी आप उम्मीद कर रहे हैं।

आप जो भी तकनीकी उपाय (यदि कोई हो) समाप्त कर रहे हैं, तो आपका सबसे अच्छा दांव उपयोगकर्ताओं को शिक्षित करना है। इसमें उन्हें यह बताना शामिल है कि वे उन कमांड को न चलाएं जिन्हें वे नहीं समझते हैं और डाउनलोड की गई फ़ाइलों का उपयोग उन स्थितियों में नहीं करते हैं जहां वे यह समझाने में सक्षम नहीं होंगे कि ऐसा करने के लिए यह क्यों सुरक्षित है। लेकिन इसमें बैकअप बनाने जैसी चीजें भी शामिल हैं, ताकि अगर कुछ गलत हो जाए (मैलवेयर के कारण या अन्यथा), तो जितना नुकसान होगा उतना कम होगा।


6
शायद गैर-तकनीकी उपायों में किसी ऐसे व्यक्ति के लिए संपर्क जानकारी शामिल करना आवश्यक है जो कुछ ऐसा कर सकता है जिसे वे करना चाहते हैं। किसी भी समय वे निश्चित नहीं हैं, कॉल या संदेश और पूछें। यह अनुमान लगाने के लिए प्रलोभन को दूर कर सकता है।
पीटर कॉर्ड्स

1
यह ओप्स प्रश्न के पीछे के मुद्दों और आशंकाओं के बारे में एक महान सार है
रॉबर्ट रिडेल

माइनर नाइट: " . ./evilया source ./evilकमांड्स को evil.sh" में चलाता है - वे sourceकमांड्स कमांड को evilतब तक चलाएंगे जब तक कि वे विस्तार को निर्दिष्ट नहीं करते हैं, उदाहरण के लिए. ./evil.sh
जब तक कि आगे नोटिस न हो।

@DennisWilliamson धन्यवाद - तय! उस उत्तर का एक पुराना (प्रस्तुत नहीं किया गया) मोटा प्रारूप छोड़ दिया गया था जिसमें मैंने अलग-अलग स्क्रिप्ट नामों का उपयोग किया था। मुझे जल्दी से एहसास हुआ कि मूर्खतापूर्ण था, लेकिन स्पष्ट रूप से सभी घटनाओं को बदलने में विफल रहा।
एलियाह कगान

1
हर बार मुझे सॉफ़्टवेयर के एक टुकड़े को स्थापित करने या अपडेट करने का एक तरीका दिखाई देता है जिसमें "बस इस स्क्रिप्ट को भूल जाओ और इसे चलाओ", मेरे toenails थोड़ा कर्ल करते हैं। कोई भी व्यक्ति किसी GitHub खाते / रेपो को बनाने से नहीं रोक रहा है जो किसी एकल वर्ण द्वारा बंद है, या O के बजाय 0 का उपयोग करता है, या अस्पष्टता के लिए UTF-8 वर्णों का उपयोग करता है और इसमें अपनी दुर्भावनापूर्ण स्क्रिप्ट चिपका रहा है ... तो आपको बस एक की आवश्यकता है अपने w कमांड और bam में टाइपो।
इयान केम्प

11

हाँ *


इसे प्रतिबंधित खोल कहा जाता है।

आप उपयोग कर सकते हैं /bin/rbash, जो पहले से ही उबंटू में उपलब्ध है और इसे एक प्रतिबंधित पैथ चर के साथ जोड़ सकते हैंrbashकुछ भी है कि में नहीं है से निष्पादन निषेध होगा $PATH

प्रतिबंधित उपयोगकर्ता जोड़ें:

sudo adduser --shell /bin/rbash res-user

एक नई निर्देशिका बनाएं, जहां हम बायनेरिज़ को लिंक कर सकते हैं, कि उपयोगकर्ता को सीमित किया जाएगा:

sudo mkdir /home/res-user/bin

.profileफ़ाइल को संशोधित करें :

sudo vim /home/res-user/.profile

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

readonly PATH=/home/res-user/bin
export PATH

बनाओ .profile, bashrcऔर .bash_profileअपरिवर्तनीय:

sudo chattr +i /home/res-user/.profile
sudo chattr +i /home/res-user/.bashrc
sudo chattr +i /home/res-user/.bash_profile

अब हम उपयोगकर्ता को केवल वही चीज़ देते हैं जो उसे करने की अनुमति होगी, अर्थात फ़ायरफ़ॉक्स खोलें:

sudo ln -s /usr/lib/firefox/firefox /home/res-user/bin/

अब, अगर हम लॉगिन करते हैं तो हम res-userकेवल फ़ायरफ़ॉक्स खोल सकते हैं:

res-user@localhost:~$ /home/res-user/bin/firefox --version
Mozilla Firefox 68.0.1

हम अपने प्रतिबंधित शेल से आसानी से बच नहीं सकते हैं:

res-user@localhost:~$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
-su: PATH: readonly variable

प्रतिबंधित उपयोगकर्ता फ़ाइलों को निष्पादन योग्य नहीं बना सकता, या उन्हें शुरू नहीं कर सकता:

res-user@localhost:~$ chmod +x script.sh 
Command 'chmod' is available in '/bin/chmod'
res-user@localhost:~$ bash script.sh 
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

प्रतिबंधित उपयोगकर्ता इंटरनेट से बुरी स्क्रिप्ट निष्पादित नहीं कर सकता है, क्योंकि उपयोगकर्ता आवश्यक आदेशों को निष्पादित नहीं कर सकता है:

res-user@localhost:~$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Command 'wget' is available in '/usr/bin/wget'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
wget: command not found
Command 'bash' is available in '/bin/bash'
The command could not be located because '/bin' is not included in the PATH environment variable.
bash: command not found

* प्रतिबंधित गोले को तोड़ने के तरीके हैं , लेकिन यदि आपका उपयोगकर्ता इसके लिए सक्षम है, तो वे आपके अनुसार उतना भोला नहीं हो सकते हैं।


2
यह "एक बेहद प्रतिबंधित पर्यावरण को प्राप्त करने की कोशिश करता है, जिस पर लगभग हर उपयोगकर्ता जो एक कंप्यूटर पर करने के बारे में सोचता है उसे अस्वीकृत कर दिया जाता है" (जैसा कि मैंने इसे अपने उत्तर में रखा है)। res-userआलेखीय रूप से लॉग इन नहीं कर सकते। एकमात्र उपयोगी चीज जो वे कर सकते हैं वह ssh -Xहै और चलाना firefox। आप अधिक कमांड की अनुमति दे सकते हैं ताकि उपयोगकर्ता अपना काम कर सके। फिर तोड़ना आसान हो जाता है। लिंक किए गए तरीकों में से कई को एक-लाइनर्स (जो एक हमलावर आपूर्ति कर सकता है) में बनाया जा सकता है। यदि उपयोगकर्ता प्रतिबंधों को भांप लेते हैं, तो वे उन्हें दरकिनार करने के विशेषज्ञ बन जाएंगे, जबकि पहले जैसे वे प्रेमी या भोला थे।
एलिया कागन

1
@ एलियाकगन हाँ, सही है। आपको वह सब कुछ लिंक करना होगा जो उपयोगकर्ता को चाहिए। लेकिन यह बहुत करीब है [...] एक एक्सेस कंट्रोल लिस्ट बनाने और परिभाषित करने का कोई तरीका है कि यह उपयोगकर्ता इस सूची में केवल फाइलों को निष्पादित कर सकता है [...] । तो यह ओपी की मदद कर सकता है। इन गोले को तोड़ना असंभव नहीं है, लेकिन बहुत कठिन है। हमारे पास विशिष्ट संसाधनों, या कूद-मेजबान के लिए बाहरी पहुंच के समान सेटअप हैं। मुझे संदेह है कि प्रतिबंधित-शेल सेटअपों के खिलाफ व्यापक हमले हो रहे हैं .... और अगर आप लक्षित हमले से निपट रहे हैं , जहां हमलावर पर्यावरण को जानता है .. वैसे भी सभी दांव बंद हैं।
रॉबर्ट रिडेल

4
मैं आपके उत्तर की पहली पंक्ति के लिए फुटनोट को ऊँचा करूँगा।
अगली सूचना तक रोक दिया गया।

संभवतः उन्हें कियोस्क मोड या किसी अन्य कठोर ब्राउज़र में क्रोम का उपयोग करना बेहतर होगा। बहुत उन्नत अनुमति और सिस्टम कमांड निष्पादन के साथ फ़ायरफ़ॉक्स प्लगइन या एक्सटेंशन स्थापित करना बहुत आसान होना चाहिए। फ़ायरफ़ॉक्स में सुनिश्चित करें कि आप बहुत अंतिम संस्करण का उपयोग करते हैं और एक्सटेंशन को अस्वीकृत करते हैं।
बेंजामिन ग्रुएनबाम

आगे की सुरक्षा के लिए, उपयोगकर्ता को केवल नोक्सेक विकल्प के साथ मुहिम शुरू की गई फ़ाइल सिस्टम तक पहुंच दें।
डैन डी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.