क्या कॉपी-पेस्ट अटैक के लिए विम इम्यून है?


112

आपको कभी भी अपने टर्मिनल से वेब पर पेस्ट नहीं करना चाहिए । इसके बजाय, आपको अपने टेक्स्ट एडिटर को पेस्ट करना चाहिए, कमांड को चेक करना चाहिए और फिर टर्मिनल पर पेस्ट करना चाहिए।

यह ठीक है, लेकिन क्या होगा अगर विम मेरा पाठ संपादक है? क्या कोई सामग्री जो कमांड मोड में विम स्विच करती है और दुर्भावनापूर्ण कमांड निष्पादित करती है?


2
@ryekayo मुझे पता है कि बैकग्राउंड में कमांड कैसे चलाते हैं। यह प्रश्न अधिक है कि क्या इन्सर्ट मोड से कमांड मोड में
वीम

3
विम के हाल के संस्करणों में ब्रैकेट पेस्ट किया गया है, जो इस तरह के हमलों को रोकने के लिए माना जाता है।
सातु कैटसुरा

2
@ EmilJe Emábek पोस्ट में लिंक आपको पहाड़ियों के लिए दौड़ने के लिए पर्याप्त कारण देता है।
सातु कटुरा

1
@ EmilJe Emábek जैसा कि आप एस्केप कैरेक्टर के साथ हिडन टेक्स्ट फोर्ज कर सकते हैं, मुझे लगता है कि आप ईओएफ के साथ भी टेक्स्ट फोर्ज कर सकते हैं। फिर छिपे हुए पाठ में कुछ हो सकता है /bin/bash ; EOF rm -rf ~। जब इसे टर्मिनल में चिपकाया जाता है, तो इसे बंद किया जाता है, इसे समाप्त किया जाता है और फिर अपने घर को हटा दिया जाता है। जब बिल्ली में चिपकाया जाता है, तो यह बिल्ली को कमांड प्रिंट करने, बिल्ली को खत्म करने और अपने घर को हटाने देगा।
एडम ट्रॉन

जवाबों:


106

संक्षिप्त उत्तर: कई स्थितियों में, विम इस तरह के हमले की चपेट में है (जब सम्मिलित मोड में पाठ चिपकाते हैं)।

अवधारणा के सुबूत

लिंक किए गए लेख को शुरुआती बिंदु के रूप में उपयोग करते हुए, मैं टेक्स्ट के मध्य भाग को छिपाने के लिए HTML स्पैन एलिमेंट्स और CSS का उपयोग करते हुए जल्दी से निम्न कोड के साथ एक वेब पेज बनाने में सक्षम था, ताकि केवल ls -laआकस्मिक दर्शक को दिखाई दे (देखने के लिए नहीं) स्रोत)। नोट: ^[पलायन चरित्र है और ^Mगाड़ी वापसी चरित्र है। स्टैक एक्सचेंज उपयोगकर्ता इनपुट को सुरक्षित करता है और सीएसएस का उपयोग करके सामग्री को छिपाने से बचाता है इसलिए मैंने अवधारणा का प्रमाण अपलोड किया है ।

ls ^[:echom "This could be a silent command."^Mi -la

यदि आप इन्सर्ट मोड में थे और इस पाठ को टर्मिनल विम (कुछ क्वालीफायर के साथ, नीचे देखें) में चिपकाया था, ls -laतो आप देखेंगे लेकिन यदि आप :messagesकमांड चलाते हैं , तो आप छिपे हुए विम कमांड के परिणाम देख सकते हैं।

रक्षा

इस हमले से बचाव के लिए नॉर्मल मोड में रहना और इसका इस्तेमाल करना "*pया पेस्ट करना सबसे अच्छा है "+p। सामान्य मोड, जब में पी एक रजिस्टर से utting पाठ, (छिपा भाग सहित) पूरा टेक्स्ट चिपकाया जाता है। यह इन्सर्ट मोड में नहीं होता है (भले ही :set paste) सेट किया गया हो।

ब्रैकेट पेस्ट मोड

विम के हाल के संस्करण ब्रैकेटेड पेस्ट मोड का समर्थन करते हैं जो इस प्रकार के कॉपी-पेस्ट हमले को कम करते हैं। सातो कैटसुरा ने स्पष्ट किया है कि "ब्रैकेटेड पेस्ट के लिए समर्थन विम 8.0.210 में दिखाई दिया, और हाल ही में संस्करण 8.0.303 (2 फरवरी 2017 को जारी किया गया) में तय किया गया था"।

नोट: मैं यह समझ के रूप में, कोष्ठकों के भीतर पेस्ट मोड के लिए समर्थन के साथ विम के संस्करणों चाहिए आप का उपयोग करते समय चिपकाने की रक्षा Ctrl- Shift- V(सबसे जीएनयू / लिनक्स डेस्कटॉप वातावरण), Ctrl- V(एमएस विंडोज), Command- V(मैक ओएस एक्स), Shift- Insertया एक माउस बीच-क्लिक करें।

परिक्षण

मैंने ल्यूबुन्टू 16.04 डेस्कटॉप मशीन से कुछ परीक्षण बाद में किया था लेकिन मेरे परिणाम भ्रमित और अनिर्णायक थे। मैं के बाद से महसूस किया कि इस वजह से मैं हमेशा का उपयोग किया है जीएनयू स्क्रीन , लेकिन यह है कि पता चला है स्क्रीन फिल्टर भाग सकें इस्तेमाल किया अनुक्रम / कोष्ठक पेस्ट मोड अक्षम (वहाँ एक है पैच लेकिन ऐसा लगता है यह एक समय था जब में प्रस्तुत की गई थी परियोजना को सक्रिय रूप से बनाए नहीं रखा जा रहा था)। मेरे परीक्षण में, अवधारणा का प्रमाण हमेशा काम करता है जब GNU स्क्रीन के माध्यम से विम चल रहा है, भले ही विम या टर्मिनल एमुलेटर ब्रैकेटेड पेस्ट मोड का समर्थन करता है।

आगे का परीक्षण उपयोगी होगा, लेकिन अब तक, मैंने पाया कि टर्मिनल एमुलेटर द्वारा ब्रैकेटेड पेस्ट मोड के लिए समर्थन मेरे प्रूफ ऑफ कॉन्सेप्ट को अवरुद्ध करता है - जब तक कि जीएनयू स्क्रीन प्रासंगिक एस्केप अनुक्रमों को अवरुद्ध नहीं करता है। हालांकि, उपयोगकर्ता नेनेनो रिपोर्ट करते हैं कि ब्रैकेट पेस्ट पेस्ट से बाहर निकलने के लिए एस्केप सीक्वेंस का सावधानीपूर्वक उपयोग किया जा सकता है।

ध्यान दें कि विम के अप-टू-डेट संस्करण के साथ, अवधारणा का प्रमाण हमेशा काम करता है अगर उपयोगकर्ता *रजिस्टर से सम्मिलित करता है, जबकि इन्सर्ट मोड ( Ctrl- R*) लिखकर । यह GVim पर भी लागू होता है जो टाइप किए गए और पेस्ट किए गए इनपुट के बीच अंतर कर सकता है। इस मामले में, विम अपनी रजिस्टर सामग्री की सामग्री पर भरोसा करने के लिए उपयोगकर्ता को छोड़ देता है। इसलिए कभी भी इस विधि का उपयोग न करें जब एक अविश्वसनीय स्रोत से चिपकाया जाता है (यह कुछ ऐसा है जो मैं अक्सर करता हूं - लेकिन मैंने अब खुद को प्रशिक्षण देना शुरू नहीं किया है)।

सम्बंधित लिंक्स

निष्कर्ष

पाठ ( +या *रजिस्टरों से) चिपकाते समय सामान्य मोड का उपयोग करें ।

… या Emacs का उपयोग करें। मैंने सुना है यह एक सभ्य ऑपरेटिंग सिस्टम है। :)


2
आप विम में चिपकाने से पहले pasteमोड ( :set paste) को सक्षम करने वाले हैं । फिर ब्रैकेटेड पेस्ट प्रभावी होना चाहिए, बशर्ते कि आपका टर्मिनल भी इसका समर्थन करता हो। pasteमोड सक्षम होने पर आपकी अवधारणा का प्रमाण काम नहीं करता है।
सातु कटुरा

1
मैं यह नहीं देखता कि कैसे ब्रैकेटेड पेस्ट मोड सुरक्षित है। यदि हमलावर को पता है कि आप ब्रैकेटेड पेस्ट का उपयोग कर रहे हैं, तो वे \e[201~ब्रैकेटेड पेस्ट मोड से बाहर निकलने के लिए पेस्ट कमांड में एक सिक्वेंस चिपका देंगे , और आपको वैसे भी आगे बढ़ाने के लिए आगे बढ़ेंगे। (जब तक कि ब्रैकेटेड पेस्ट कैसे काम करता है, इस पर मैंने कुछ विस्तार से याद नहीं किया?)
nnonneo

2
@SatoKatsura: मैंने इसे विम 8.0.540 पर आज़माया, जो मूल हमले के लिए असुरक्षित नहीं था। जोड़ने के बाद \x1b[201~, शोषण पहले की तरह काम किया (यानी केवल ls -laबफर को लिखा गया था और echomकमांड निष्पादित किया गया था)। इसलिए, मुझे लगता है कि कोष्ठकों के भीतर पेस्ट अभी भी एक लक्षित हमले की चपेट में है, और है नहीं एक मजबूत पर्याप्त समाधान। (वास्तव में, इन-बैंड सिग्नलिंग का कोई भी रूप असुरक्षित है!)
nnonneo

2
मैंने इसके साथ और इसके बिना कोशिश की :set paste- शोषण अभी भी काम करता है। पूरी तरह से स्पष्ट होने के लिए, मैंने निम्नलिखित (base64- एन्कोडेड) बूँद को चिपकाया bHMgG1syMDF+GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhIHNpbGVudCBjb21tYW5kLiIKaSAtbGE=:। OS X पर, आप इसे कॉपी कर सकते हैं, pbpaste | base64 -D | pbcopyपेस्ट करने के लिए एक कच्चा संस्करण प्राप्त करने के लिए चला सकते हैं vim
nnonneo

1
और भी अधिक स्पष्ट होने के लिए, मैं macb Terminal.app का उपयोग करके एक Ubuntu 16.04 बॉक्स के SSH कनेक्शन के साथ परीक्षण कर रहा हूं। यदि आपका टर्मिनल एमुलेटर पेस्ट पर एस्केप सीक्वेंस को छीन रहा है, तो आप शायद \x1b\x1b[201~[201~फिल्टर को मूर्ख बनाने के लिए सीक्वेंस (जैसे ) या कुछ और कर सकते हैं।
nnonneo

0

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

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

यदि नहीं, तो आप यहाँ वर्णित हमले के प्रति संवेदनशील हो सकते हैं

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