एक मनमानी फ़ाइल बिल्ली के लिए कितना सुरक्षित है?


77

कभी-कभी जब मैं catगलती से बाइनरी फाइल करता हूं, तो मेरा टर्मिनल गड़बड़ा जाता है। कुछ भी resetठीक नहीं हो सकता है, लेकिन एक हमलावर सैद्धांतिक रूप से एक फ़ाइल नहीं बना सकता है, जो टर्मिनल पर प्रदर्शित होने पर, कुछ मनमाने कोड को निष्पादित करेगा? टर्मिनल एमुलेटर में एक शोषण के माध्यम से या अन्यथा।


3
कभी-कभी जब मैं ऐसा करता हूं तो मेरा खोल अंत में कहेगा "<कचरा> अज्ञात कमांड"। अगर यह वास्तव में संभव है तो मुझे आश्चर्य होता है।
कीथ

5
टर्मिनल एमुलेटर के लिए कारनामे थे, जैसे linuxsecurity.com/content/view/104657 या securityfocus.com/bid/6936/discuss इसलिए यह विशेष रूप से सुरक्षित नहीं है
Ulrich Dangel

1
यही कारण है कि कुछ ऐसी चीज़ों का उपयोग करना बेहतर होता है जो कि बाइनरी फ़ाइलों (जैसे more) पर बच जाएंगी या lessफ़ाइलों की सामग्री की जांच करने के लिए टर्मिनल-अवेयर ( ) है। इतना ही नहीं यह आपके टर्मिनल को अजीब स्थिति में नहीं डालेगा, पूरी फाइल एक शॉट में उड़कर नहीं जाएगी।
ब्लरफ्ल

stty saneआदेश एक xterm (या समान) जो में जैसे एक अलग वर्ण सेट बदल दिया गया है रीसेट करता है।
थोरबजोरन रावन एंडरसन

moshप्रलेखन के उस पर कुछ विचार हैं: mosh.mit.edu/#techinfo
मैक्स

जवाबों:


34

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

कुछ पुराने hardwareटर्मिनलों के साथ यह एक समस्या हो सकती है जैसे कि आपने प्रोग्राम किया है जैसे कि हार्डवेयर में उस कुंजी के लिए कमांड अनुक्रम को स्टोर करके इस तरह के एस्केप सीक्वेंस के साथ फ़ंक्शन कुंजियाँ। आपको अभी भी सक्रिय करने के लिए एक भौतिक कुंजी-प्रेस की आवश्यकता होगी।

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


3
"आप रिसीवर्स मशीन पर निष्पादित होने के लिए कमांड शामिल कर सकते हैं" आपका मतलब कुछ ऐसा है जिसमें ईमेल वीबीएसस्क्रिप्ट भी शामिल है जो विंडोज स्क्रिप्टिंग होस्ट को कॉल करता है? :)
एक CVn

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

आप NeWS के बारे में बात नहीं कर रहे हैं? IIRC SGI अंतिम होल्ड-आउट में से एक था।
लूसर डॉग

@luserdroog नहीं यह Irix के
एंथॉन

1
@Anthon मुझे यकीन नहीं है कि अगर यह अभी भी संभव है, लेकिन writeकमांड से इसे आने वाले पाठ को "दोहराने" के लिए एक टर्मिनल प्राप्त करने के लिए एस्केप-कोड का उपयोग करने की संभावना है - इस प्रकार कमांड / स्क्रिप्ट को निष्पादित करने वाला उपयोगकर्ता टर्मिनल का मालिक है। यह माना जाता है कि कई लोग mesg -nज्यादातर समय के लिए और root हमेशा के लिए संदेशों को बंद करने की सलाह देते हैं । AFAIK, यह वास्तव में किया गया था - हालांकि मुझे नहीं पता कि क्या यह कभी शोषण किया गया था। तो एक से यादृच्छिक पाठ catटेड निष्पादन, हो सकता है शायद क्रियान्वित किया।
बार्ड कोपरपुड

33

अधिकांश टर्मिनल एमुलेटर कुछ प्रतिक्रिया को वापस भेज देंगे, अगर उन्हें कुछ भागने के क्रम मिलते हैं ( xterm नियंत्रण अनुक्रम प्रलेखन पर एक नज़र डालें )। उदाहरण के लिए, आप \e[0cवीटी 100 जैसे एमुलेटर भेज सकते हैं और यह डिवाइस विशेषताओं को वापस भेज देगा, कुछ \e[?1;2c इस तरह (यह शायद कीथ मनाया गया है।) लेकिन ये उत्तर मनमाने तार नहीं हैं। फिर भी, 2cआपके सिस्टम पर कहीं एक निष्पादन योग्य नाम होना जो कुछ घातक करता है, एक बुरा विचार है।

अपडेट: जोखिम वास्तव में मैंने जितना सोचा था उससे कहीं अधिक है, क्योंकि एक एक्सटर्म विंडो का शीर्षक सेट करने और उचित एस्केप सीक्वेंस ( http://www.securityfocus.com/bid/6940/ ) का उपयोग करके शीर्षक वापस भेजने के लिए । ऊपर दिए गए उदाहरण के विपरीत, शीर्षक लगभग एक मनमाना स्ट्रिंग हो सकता है।


वह पहले से ही इसे बहुत करीब से काट रहा है।
गनरचर्स

ENQ (Ce) वर्ण के जवाब में भेजा गया एक और भी पुराना फ़ीचर है - 'answerback message'। एक वास्तविक VT100 पर, यह उपयोगकर्ता द्वारा टर्मिनल के SETUP मेनू में सेट किया गया है; शायद वहाँ टर्मिनल एमुलेटर हैं जो इसे दूर से सेट करने की अनुमति देते हैं ...
sendmoreinfo

16

यह गनोम टर्मिनल 3.6.1 में टर्मिनल टाइटल को बदल देता है, जब तक कि PS1 जैसी किसी चीज से ओवरराइड न हो जाए :

printf "\033]2;Script Kiddie was here\007"

अब catसंस्करण का परीक्षण करने के लिए एक नई GNOME टर्मिनल विंडो खोलें :

printf "\033]2;Script Kiddie was here\007" > test.bin
cat test.bin

हां, यह टर्मिनल शीर्षक भी निर्धारित करता है।

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


8

उपयोग करते समय catकोड निष्पादन में परिणाम नहीं हो सकता है, एस्केप कोड संसाधित किए जाएंगे ताकि आपको आसानी से यह सोचकर गुमराह किया जा सके कि स्क्रिप्ट हानिरहित है जब वास्तव में यह दुर्भावनापूर्ण है।

यहां एक उदाहरण कमांड है जिसे आप चला सकते हैं जो "दुर्भावनापूर्ण" शेल स्क्रिप्ट बनाएगा:

echo -e '#!/bin/sh\necho "...doing something bad here..."\nexit\n\033[A\033[Aecho "Hello dear reader, I am just a harmless script, safe to run me!"' > demo.sh
chmod a+x demo.sh

जब आप फ़ाइल का निरीक्षण करते हैं, तो यह हानिरहित लगता है:

$ cat demo.sh
#!/bin/sh
echo "Hello dear reader, I am just a harmless script, safe to run me!"

लेकिन क्या आपको वास्तव में इसे चलाना चाहिए ...

$ ./demo.sh 
...doing something bad here...

स्क्रिप्ट कुछ पंक्तियों को ऊपर ले जाने के लिए रॉ एस्केप कोड्स को शामिल करके काम करती है, इसलिए बाकी स्क्रिप्ट को दुर्भावनापूर्ण कोड के शीर्ष पर लिखा जाता है, इसे छिपाया जाता है।

लगभग कोई भी अन्य कार्यक्रम स्क्रिप्ट को प्रकट करेगा कि वह क्या है। केवल प्रोग्राम जो फ़ाइल सामग्री को संसाधित नहीं करते हैं (जैसे cat, moreऔर less -r) भ्रामक आउटपुट का उत्पादन करेंगे।

ध्यान दें कि tailऔर headभी एक ही भ्रामक उत्पादन का उत्पादन। इसलिए "कम + एफ" का उपयोग करना "पूंछ-एफ" की तुलना में अधिक सुरक्षित है।


यह काफी समस्याग्रस्त है ... आप देख सकते हैं कि वास्तव में क्या चल रहा है echo $(cat demo.sh), cat demo.sh | grep . --color=yes(नोट: वही --color=yesहै जो यहां "दुर्भावनापूर्ण" कोड दिखा रहा है) या बिल्ड-इन cat -v demo.sh
चार्ली

सही या गलत, यह एक अलग सवाल का जवाब है: catफ़ाइल की सामग्री को प्रदर्शित करने में कितना भरोसेमंद है ।
इंनिस मिसी

@IncnisMrsi: यह वास्तव में एक अलग सवाल का जवाब नहीं है। यह उत्तर चेतावनी देता है कि बिल्ली एस्केप कोड दिखाएगी, और केवल एक प्रकार के एस्केप कोड के साथ एक सरल उदाहरण प्रदान करता है, लेकिन कई अन्य हैं। जब कुछ टर्मिनलों के साथ जोड़ा जाता है, तो ये चाबियों को हटा सकते हैं, फाइलों को अधिलेखित कर सकते हैं और सिद्धांत रूप में, यहां तक ​​कि आदेशों को भी निष्पादित कर सकते हैं । इसलिए एक बार जब आपको एस्केप कोड प्रदर्शित करने के खतरे का एहसास होता है, तो आप समझ जाएंगे कि यह कभी-कभी catएक अनियंत्रित फ़ाइल के लिए असुरक्षित हो सकता है , जैसा कि सवाल पूछा गया था!
मैल्वाइनस

6

मैंने निश्चित रूप xtermसे स्वयं में मनमाने चरित्र डालने का अनुभव किया है जैसे कि मैंने उन्हें टाइप किया था। और इस अवसर पर इसमें स्पष्ट रूप से न्यूलाइन चरित्र शामिल किया गया है, ताकि मुझे ngwerm:0riu: command not foundएक प्रतिक्रिया के रूप में मिले । मुझे कोई कारण नहीं दिखाई देता कि कोई व्यक्ति ऐसी फ़ाइल को क्यों नहीं बना सकता है जो विशिष्ट, हानिकारक आदेशों को भेजती है। तो हां, कम से कम कुछ टर्मिनलों पर मनमाने प्रभाव के साथ हमलों की आशंका है।


2

खैर, एक टर्मिनल एमुलेटर मूल रूप से इसे भेजे गए पात्रों को प्रिंट करता है।

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

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

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


0

सामान्य तौर पर एक आम तौर पर मनमानी फ़ाइल को पूरा करने का कोई जोखिम नहीं होता है। किसी फ़ाइल का विश्लेषण करने की मेरी सामान्य विधि निम्नलिखित है:

$ file <mystery file>
$ strings <mystery file> | less

उपरोक्त मुझे fileकमांड के माध्यम से एक फ़ाइल का प्रकार निर्धारित करने की अनुमति देता है और stringsकमांड मुझे किसी भी पहचाने जाने योग्य तार को डंप होने वाली द्विआधारी फाइलों से डंप करने की अनुमति देता है जो मुझे उनके वंश के बारे में निश्चित नहीं हैं।

उदाहरण

फ़ाइल आउटपुट
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
स्ट्रिंग्स आउटपुट
$ strings /bin/ls|less
...
across
vertical
single-column
force
never
auto
if-tty
slash
%b %e  %Y
%b %e %H:%M
long-iso
main
posix-
sort_files
?pcdb-lswd
dev_ino_pop
Try `%s --help' for more information.
Usage: %s [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
...

3
किसी अज्ञात फ़ाइल पर तार चलने से समस्यात्मक परिणाम भी हो सकते हैं। lcamtuf.blogspot.fi/2014/10/…
Jan Wikholm

@IncnisMrsi - पहला वाक्य पढ़िए !!!!
slm

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