टर्मिनलों में भागने के क्रम के हमलों से कैसे बचें?


29

पढ़ना CVE-2009-4487 का विवरण (जो लॉग फ़ाइलों में भागने दृश्यों के खतरे के बारे में है) मैं थोड़ा हैरान हूँ।

CVE-2009-4487 उद्धृत करने के लिए :

nginx 0.7.64 गैर-मुद्रण योग्य वर्णों को साफ किए बिना एक लॉग फ़ाइल में डेटा लिखता है, जो दूरस्थ हमलावरों को एक खिड़की के शीर्षक को संशोधित करने की अनुमति दे सकता है, या संभवतः एक टर्मिनल एमुलेटर के लिए एक भागने के अनुक्रम वाले HTTP अनुरोध के माध्यम से, मनमाने ढंग से आदेशों या फाइलों को अधिलेखित कर सकता है।

स्पष्ट रूप से, यह वास्तव में नगीनेक्स में एक सुरक्षा छेद के बारे में नहीं है, बल्कि टर्मिनल एमुलेटर में है।

यकीन है, शायद catटर्मिनल के लिए एक लॉग फ़ाइल आईएनजी केवल दुर्घटना से होता है, लेकिन लॉग लॉग grepएक बहुत आम है। lessशायद भागने के दृश्यों को पवित्र करता है, लेकिन कौन जानता है कि शेल कमांड्स एस्केप सीक्वेंस को नहीं बदलते ...

मैं वार्निश की प्रतिक्रिया से सहमत हूं :

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

इस प्रकार मेरे प्रश्न:

मैं अपने xterm को कैसे सुरक्षित कर सकता हूं, जैसे कि भागने के अनुक्रम के माध्यम से कमांड निष्पादित करना या फाइलों को अधिलेखित करना संभव नहीं है?

इस हमले के खिलाफ एक्स के लिए कौन से टर्मिनल एमुलेटर सुरक्षित हैं?


4
कई पलायन क्रम वैध चीजें करते हैं (नाम बदलें / आकार बदलें आदि)। लेकिन क्या कोई कमांड या निष्पादन फ़ाइलों को निष्पादित करने वाले एस्केप अनुक्रमों की पहचान कर सकता है ?
क्रुबो


सुरक्षा SE पर पेस्ट-कंट्रोल-चार्ज-से-वेब-ब्राउज़र हमलों के बारे में इसी तरह का मुद्दा: मैं इस तरह के क्लिपबोर्ड दुरुपयोग से खुद को कैसे बचा सकता हूं? tl; dr: यदि आप 2013/2015 के बाद जारी किए गए xterm / vte आधारित टर्मिनल का उपयोग कर रहे हैं, तो आप इसके खिलाफ सुरक्षित हैं क्योंकि वे नियंत्रण वर्णों को डिफ़ॉल्ट रूप से फ़िल्टर कर रहे हैं।
मैक्सक्लेपजिग

जवाबों:


27

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

  • HD मूर द्वारा रिपोर्ट की गई rxvt और Eterm में मनमानी लॉग फ़ाइल कमांड । ये वास्तव में प्रमुख कीड़े हैं, सौभाग्य से लंबे समय से तय।
  • उत्तर-वापसी आदेश, जिसे रिटर्न टर्मिनल स्थिति के रूप में भी जाना जाता है, द्वारा ENQ( Ctrl+E)। यह टर्मिनल में पाठ सम्मिलित करता है जैसे कि उपयोगकर्ता ने इसे टाइप किया था। हालाँकि, यह पाठ हमलावर के नियंत्रण में नहीं है: यह टर्मिनल का अपना नाम है, आम तौर पर ऐसा कुछ xtermया screen। मेरे सिस्टम पर (डेबियन निचोड़), xterm डिफ़ॉल्ट रूप से खाली स्ट्रिंग लौटाता है (यह answerbackStringसंसाधन द्वारा नियंत्रित होता है )।
  • भेजें डिवाइस आदेशों ESC [ cऔर मित्रों को पेश करता है। टर्मिनल जवाब देता है ESC [ … c(जहां अंक और ASCII विराम चिह्न केवल हो सकते हैं)। यह कुछ टर्मिनल क्षमताओं को क्वेरी करने का एक तरीका है, जो ज्यादातर अप्रचलित है लेकिन शायद पुराने अनुप्रयोगों द्वारा उपयोग किया जाता है। फिर से, टर्मिनल की प्रतिक्रिया उपयोगकर्ता इनपुट से अप्रभेद्य है, लेकिन यह हमलावर के नियंत्रण में नहीं है। नियंत्रण अनुक्रम एक फ़ंक्शन कुंजी की तरह लग सकता है, लेकिन केवल अगर उपयोगकर्ता के पास एक असामान्य कॉन्फ़िगरेशन है (मेरे द्वारा सामना की गई सामान्य सेटिंग्स में से कोई भी एक वैध फ़ंक्शन कुंजी एस्केप अनुक्रम नहीं है जो टर्मिनल प्रतिक्रिया का एक उपसर्ग है)।
  • विभिन्न डिवाइस नियंत्रण फ़ंक्शन (डीसीएस बच जाता है, जिसके साथ शुरुआत होती है ESC P)।
    • मुझे नहीं पता कि DECUDKएक विशिष्ट टर्मिनल एमुलेटर पर उपयोगकर्ता (निर्धारित उपयोगकर्ता-निर्धारित कुंजी) के माध्यम से क्या नुकसान हो सकता है ।
    • DECRQSS(रिक्वेस्ट स्टेटस स्ट्रिंग) अभी तक एक और कमांड है जिसके लिए टर्मिनल एक एस्केप सीक्वेंस के साथ प्रतिक्रिया करता है, इस समय के साथ शुरू होता है \eP; यह तब से समस्याग्रस्त हो सकता है क्योंकि \ePएक वैध कुंजी ( Alt+ Shift+ P) है।
    • Xterm में दो और प्रायोगिक विशेषताएं हैं: ESC P + p …और ESC P + q …, टर्मकैप स्ट्रिंग्स को प्राप्त करने और सेट करने के लिए। विवरण से, यह कम से कम फ़ंक्शन कुंजियों के प्रभाव को संशोधित करने के लिए उपयोग किया जा सकता है।
  • कई स्टेटस रिपोर्ट कमांड: ESC [ … n(डिवाइस स्टेटस रिपोर्ट)। टर्मिनल भागने के क्रम के साथ प्रतिक्रिया करता है। इनमें से अधिकांश एस्केप सीक्वेंस कुंजी एस्केप सीक्वेंस के कार्य के अनुरूप नहीं हैं। एक समस्याग्रस्त दिखता है: करने के लिए रिपोर्ट ESC [ 6 nफार्म की है जहां और अंकों दृश्यों रहे हैं, और ऐसा दिखाई दे सकता कुछ संशोधक के साथ।ESC [ x ; y RxyF3
  • विंडो हेरफेर कमांड ESC [ … t
    • इनमें से कुछ xterm विंडो को आकार बदलने, आइकॉनिक होने आदि के लिए अनुमति देते हैं, जो विघटनकारी है।
    • इनमें से कुछ के कारण टर्मिनल या तो भागने के क्रम से प्रतिक्रिया करता है। इन भागने दृश्यों में से अधिकांश कम जोखिम वाले लग रहे हैं, लेकिन वहाँ दो खतरनाक आदेशों हैं: के जवाब ESC [ 2 0 tऔर ESC [ 2 1 tक्रमशः टर्मिनल विंडो के आइकन लेबल और शीर्षक में शामिल हैं, और हमलावर इन चुन सकते हैं।
    • कम से कम डेबियन निचोड़ के तहत, xterm डिफ़ॉल्ट रूप से इन आदेशों की उपेक्षा करता है; उन्हें allowWindowOpsसंसाधन सेट करके या चुनिंदा रूप से disallowedWindowOpsसंसाधन के माध्यम से सक्षम किया जा सकता है । Ubuntu 10.04 के तहत गनोम-टर्मिनल भी डिफ़ॉल्ट रूप से शीर्षक उत्तरपुस्तिका को लागू करता है। मैंने अन्य टर्मिनलों या संस्करणों की जाँच नहीं की है।
  • टर्मिनल शीर्षक या आइकन नाम सेट करने के लिए आदेश देता है। Xterm और अधिकांश अन्य एक्स टर्मिनलों के तहत, वे हैं । स्क्रीन के नीचे, भागने का क्रम है । मुझे लगता है कि इन आदेशों की चिंता खत्म हो गई है। हालांकि वे कुछ मात्रा में शरारत की अनुमति देते हैं, किसी भी वेब पेज पर एक ही मुद्दा है। पूरी तरह से अपने शीर्षक के आधार पर एक खिड़की पर अभिनय करना और उसकी कक्षा पर नहीं एक फ़ाइल खोलने के लिए एक नाम है जिसका नाम आपको एक अविश्वसनीय पार्टी द्वारा दिया गया था, या शेल स्क्रिप्ट में एक चर विस्तार को उद्धृत नहीं करना, या नाक पर एक पागल कुत्ते को थपथपाना। - काटे जाने पर शिकायत न करें।ESC ] digit ; title ESC \ESC k title ESC \

मुझे वार्निश की प्रतिक्रिया असंगत लगती है। ऐसा लगता है कि यह या तो दोष को शिफ्ट करने की कोशिश कर रहा है, या सुरक्षा नज़ी मोड में (कोई सुरक्षा चिंता, वास्तविक या नहीं, एक सुविधा को ब्लैकबॉल करना उचित है)।

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

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

पाठ फ़ाइलों में गैर-मुद्रण वर्ण जैसे नियंत्रण वर्ण शामिल नहीं हैं। लॉग फाइलें आम तौर पर पाठ फाइलें होने की उम्मीद है। लॉग फ़ाइलों में नियंत्रण वर्ण नहीं होना चाहिए।

आप चिंतित हैं कि एक फ़ाइल से बच दृश्यों शामिल हो सकता है, एक संपादक में खोलें, या के साथ यह देखने lessके बिना -rया -Rविकल्प है, या यह देखने के माध्यम से cat -v


2
"इन के लिए पूरी तरह से ioctl कॉल पर भरोसा करना संभव होगा" लेकिन क्या होगा अगर ऐप और टर्मिनल के बीच वास्तव में सीरियल केबल है?
एमएमवी-आरयू

5

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

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


1
एक एक्स टर्म एस्केप सीक्वेंस के जरिए टाइटल बदलने की अनुमति दे सकता है लेकिन फाइलों को ओवरराइट करने और एग्जिट सीक्वेंस के जरिए मनमानी कमांड को निष्पादित करने की अनुमति नहीं देता है । यह एक कदम आगे होगा, है ना?
मैक्सक्लेपजिग

1
करने के प्रत्यक्ष तरीके जो वर्षों से अक्षम हैं। अप्रत्यक्ष तरीके अभी भी बने हुए हैं, हालांकि उन्हें कम से कम एक अतिरिक्त कदम की आवश्यकता है (यानी उपयोगकर्ता को फिर से संगठित फ़ंक्शन कुंजी को प्राप्त करने के लिए सामाजिक इंजीनियरिंग हमले की आवश्यकता होती है)। लेकिन शीर्षक बार को विशेष रूप से CVE में बुलाया गया था, संभवतः एक हमले के हिस्से के रूप में जो किसी उपयोगकर्ता को गलत जगह पर कुछ करने में भ्रमित करता है। सबसे बड़ी आधुनिक चिंता एक ऐसी चीज है जिसे मनमाने ढंग से पाठ को एक शेल में भेजने के लिए प्रोग्राम किया जा सकता है, और यह उत्तर देता है कि एक हमलावर को पता चल जाए कि टर्मिनल एमुलेटर क्या किया जा सकता है ...
geekosaur

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