शराब कार्यक्रमों के लिए 'ptrace_scope' क्या है और क्या कोई जोखिम हैं?


37

WINE में कुछ विंडोज प्रोग्राम चलाने के लिए आपको इस वर्कअराउंड की आवश्यकता है:

echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope

समर्थन वेबसाइटों के अनुसार, यह उबंटू गिरी में एक बग के कारण होता है जो ptrace और WINE को एक साथ खेलने से रोकता है।

उपरोक्त कमांड का उपयोग करके आपने ptrace को 0 पर सेट किया है, जो कि मैंने किए गए शोध के अनुसार (मुझसे यह न पूछें कि कौन सी वेबसाइट्स हैं, मुझे उनमें से बहुत कुछ लगता है), ptrace को प्रोग्राम्स के बीच के इंटरैक्शन के साथ करना है। 1 की तुलना में 0 सेटिंग अधिक अनुमेय है।

मुझे लगता है कि एक अच्छा कारण था कि उबंटू को ptrace = 1 चाहिए था, इसलिए यह मुझे सवाल के संक्षिप्त रूप में ले जाता है।

क्या ptrace = 0 सेट करने में कोई जोखिम शामिल हैं। कम सुरक्षा? डिबगिंग में समस्याएं? कोई अन्य जो मैंने नहीं सोचा था ???

PS इसे पढ़ने वाले किसी भी व्यक्ति के लिए आश्चर्य है कि बग क्या कारण है, विंडोज प्रोग्राम बिल्कुल भी खोलने में विफल होंगे, सिस्टम मॉनिटर में आप प्रोग्राम के कई उदाहरणों को खोलने की कोशिश करते हुए देखेंगे और फिर वे अंततः सभी को छोड़ देंगे और यदि आप progam चलाते हैं टर्मिनल के लिए आपको एक त्रुटि मिलेगी जो आपको बताती है कि प्रोग्राम इंस्टेंसेस की अधिकतम संख्या पहुंच गई है।


यहाँ एक PlayOnLinux पॉप-अप त्रुटि संदेश से जुड़ा एक वर्णन है जो .net 4.5 की स्थापना को रोकता है जब तक कि ptrace_scope 0 पर सेट नहीं होता है: playonlinux.com/en/…
pabouk

जवाबों:


41

संक्षिप्त उत्तर: अभी तक कोई व्यावहारिक खतरा नहीं है, लेकिन बेहतर तरीके से पढ़ें ...


क्या इस ptrace बात वैसे भी है?

यह उबंटू कर्नेल में एक बग के कारण है जो ptrace और WINE को एक साथ खेलने से रोकता है।

  • नहीं, ptrace सुरक्षा एक जानबूझकर गिरी हुई सुरक्षा उपाय है जिसे पहले Ubuntu 10.10 के आसपास पेश किया गया था। यह बग नहीं है , और इसलिए यह "निश्चित" नहीं है।

  • सरल शब्दों में, पहली प्रक्रिया (माता-पिता) द्वारा दूसरी प्रक्रिया (बच्चा) शुरू होने तक किसी अन्य प्रक्रिया को जांचने और संशोधित करने से एक प्रक्रिया ptrace_scopeको 1ब्लॉक किया जाता है।

  • यह शराब के तहत कुछ कार्यक्रमों के साथ समस्या पैदा कर सकता है क्योंकि wineserverइन कार्यक्रमों के लिए "विंडोज सेवाएं" प्रदान करता है।

स्थापित करने में जोखिम क्या हैं ptrace_scopeकरने के लिए 0?

  • यह पुराने व्यवहार को पुनर्स्थापित करता है जहां एक प्रक्रिया किसी अन्य प्रक्रिया को "ट्रेस" कर सकती है, भले ही माता-पिता-बच्चे का कोई संबंध न हो।

  • सिद्धांत रूप में, मैलवेयर का एक टुकड़ा आपको / आपके कंप्यूटर को नुकसान पहुंचाने के लिए इसका उपयोग कर सकता है; उदाहरण के लिए, यह फ़ायरफ़ॉक्स से जुड़ सकता है और आपके सभी URL / पासवर्ड को लॉग इन कर सकता है, आदि। जब तक आप रैंडम साइट्स से बाइनरी डीब को आँख बंद करके स्थापित नहीं करते हैं, तब तक यह संभव नहीं है।

  • जहां तक ​​डिबगिंग की बात है, तब तक गैर-बच्चों को संलग्न करने के 0लिए सेटिंग्स आदि की आवश्यकता होती है gdb, straceजब तक कि आप उन्हें उन्नत विशेषाधिकार (सुडो) के साथ नहीं चलाते।

वर्कअराउंड के साथ समस्याएं क्या हैं?

  • वर्कअराउंड कुछ समस्याग्रस्त है क्योंकि ptrace_scopeयह एक वैश्विक मूल्य है, और जब यह सेट हो जाता है 0, तो आपके सिस्टम की सभी प्रक्रियाएं गैर-बाल प्रतिबंध से मुक्त होती हैं।
  • यदि आप वर्कअराउंड का उपयोग करते हैं, तो इसे एक साधारण बैश स्क्रिप्ट में रखें जो इसे सक्षम करता है, आपके विंडोज प्रोग्राम को चलाता है और फिर बाहर निकलने पर (1 पर सेट) अक्षम करता है।
    • ptrace_scopeफोरम पोस्ट की सिफारिश के अनुसार विश्व-योग्य (666) मत बनाओ - यह एक बड़ा सुरक्षा जोखिम है क्योंकि अब कोई भी प्रक्रिया इसे इच्छानुसार बदल सकती है!

क्या कोई बेहतर समाधान है?

  • एक बेहतर उपाय जो अधिक सुरक्षित है और Wineserver ptrace क्षमताओं को देने के लिए ptrace_scope को पुन: व्यवस्थित करने की आवश्यकता नहीं है ।

    • एक टर्मिनल में:

      sudo apt-get install libcap2-bin 
      sudo ने cap_sys_ptrace = eip / usr / bin / wineserver सेट किया
      sudo ने cap_sys_ptrace = eip / usr / bin / वाइन-प्रीलोडर सेट किया
      
    • यह गैर-बच्चे ptrace प्रतिबंध से वाइनर और वाइन- प्रीलोडर बायनेरिज़ को छूट देता है, और उन्हें किसी भी प्रक्रिया को ptrace करने की अनुमति देता है।

    • इसे केवल एक बार करने की आवश्यकता है, और सुरक्षित है क्योंकि ये बायनेरिज़ आमतौर पर एक विश्वसनीय स्रोत से हैं - आधिकारिक रिपॉजिटरी या आधिकारिक वाइन पीपीए, इसलिए वे मैलवेयर नहीं होने जा रहे हैं।

यदि आप क्रॉसओवर का उपयोग कर रहे हैं

Libcap2 स्थापित करें:

sudo apt-get install libcap2-bin;

फिर, क्रॉसओवर के लिए एक अपवाद जोड़ें:

sudo ने cap_sys_ptrace = eip / opt / cxoffice / bin / wineserver सेट किया;
sudo ने cap_sys_ptrace = eip / opt / cxoffice / bin / wine-preloader सेट किया;

अंत में, अपने पुस्तकालयों को ld.so.conf में जोड़ें (या आपको साझा लाइब्रेरी लोड करते समय त्रुटि मिलेगी: libwine.so.1: साझा की गई ऑब्जेक्ट फ़ाइल नहीं खोल सकता: ऐसी कोई फ़ाइल या निर्देशिका नहीं):

echo / opt / cxoffice / lib / | sudo tee /etc/ld.so.conf.d/crossover.conf
सुडो / सिन / लेडकोफिग

मुझे लगता है कि इसे बग कहा जा रहा है क्योंकि शराब का समर्थन करने के लिए पीट्रेस 10.10 में ठीक काम कर रहा था। यह १०.१०-११.१० के साथ काम कर रहा है लेकिन १२.०४ में फिर से संगठित हुआ है।
TrailRider

@TrailRider स्वीकार करने के लिए धन्यवाद; मैं आपके कथन का उल्लेख कर रहा था कि "यह कर्नेल में एक बग है " (जो यह नहीं है); यह निश्चित रूप से शराब के लिए एक बग-प्रकार है, और इसे स्वाट हो जाना चाहिए :) चीजें निश्चित रूप से कर्नेल में कभी-कभी बदल जाती हैं, आमतौर पर बेहतर के लिए, और यह सॉफ़्टवेयर के लिए छोड़ दिया जाता है जो लाइनस "यो मैन को बताने के बजाय खुद को ठीक करने के लिए प्रभावित होता है," अपने आप को वापस ले जाओ ": P
ish

मैं समझता हूं कि आप यहां क्या कह रहे हैं और सहमत हैं, मैंने केवल यह कहा था कि यह कर्नेल में एक बग था और कई समर्थन वेबसाइटों के साथ-साथ कोडेवियर्स ने इसे कर्नेल बग कहा। यहाँ पर कोडवर्ड पेज है। codeweavers.com/support/wiki/linux/faq/ubuntu1204
ट्रेलरिडर

2
मैं वैश्विक ptrace को 0 पर सेट कर रहा था, और 1 से कुछ सेकंड के बाद आवेदन शुरू होता है; सेट सुरक्षित है और हर समय sudo होने के रूप में कष्टप्रद नहीं है .. thm vm!
कुंभ राशि

@izx: इस उत्तर के लिए धन्यवाद। यह जानना दिलचस्प होगा कि "eip" का क्या अर्थ है (यहाँ समझाया गया है: andy-pearce.com/blog/posts/2013/Mar/file-capabilities-in-linux )। इसके अतिरिक्त, मैंने इस विधि को पुनरावृत्ति डॉक्स में अनुशंसित करने का सुझाव दिया है, जहां लेखक ने उत्तर दिया कि यह एक सुरक्षा मुद्दा हो सकता है: github.com/nelhage/reptyr/pull/27#issuecomment-29486673 : यदि आप विस्तृत कर सकते हैं तो यह बहुत अच्छा होगा। उस पर।
blueyed

4

में ubuntuforums.org मैं नीचे दिए गए लिंक के साथ एक जवाब मिला

https://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#ptrace_Protection

यहाँ लिंक से पेस्ट है (मेरे जोर के साथ)

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

यह कोई सैद्धांतिक समस्या नहीं है। SSH सत्र अपहरण और यहां तक ​​कि मनमाने ढंग से कोड इंजेक्शन पूरी तरह से संभव है अगर ptrace को सामान्य रूप से अनुमति दी जाती है

एक समाधान के लिए, कुछ एप्लिकेशन विशेष रूप से ऐसे ptrace अटैचमेंट (जैसे ssh- एजेंट) को हटाने के लिए prctl () का उपयोग करते हैं। एक अधिक सामान्य समाधान केवल एक बच्चे की प्रक्रिया के लिए माता-पिता से सीधे ptrace की अनुमति है (यानी प्रत्यक्ष gdb और स्ट्रेस अभी भी काम करते हैं), या रूट उपयोगकर्ता के रूप में (यानी gdb बिन पीआईडी, और स्ट्रेस -p पीआईडी ​​अभी भी रूट के रूप में काम करते हैं)।

यह व्यवहार / proc / sys / कर्नेल / yama / ptrace_scope sysctl मान के माध्यम से नियंत्रित किया जाता है। गैर-बच्चे ptrace को ब्लॉक करने के लिए डिफ़ॉल्ट "1" है। "0" का एक मूल्य पूर्ववर्ती अधिक व्यावहारिक व्यवहार को पुनर्स्थापित करता है, जो केवल व्यवस्थापक खातों के साथ कुछ विकास प्रणालियों और सर्वरों के लिए अधिक उपयुक्त हो सकता है। "Sudo" का उपयोग करके CAP_SYS_PTRACE क्षमता के माध्यम से अस्थायी रूप से ptrace की अनुमति दे सकते हैं, हालांकि यह विधि किसी भी प्रक्रिया के ptrace की अनुमति देती है।

इसलिए मुझे लगता है कि संक्षिप्त उत्तर यह होगा कि यह कम सुरक्षित है, लेकिन उन प्रकार के हमलों के तहत आने वाले एक व्यक्तिगत कंप्यूटर की संभावना हुड बहुत पतली होगी।


1

अद्यतन उपरोक्त निर्देश:

sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wineserver;
sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wine-preloader;

Ubuntu 18.04.1 और PlayOnLinux v.4.2.12 पर 9/15/2018 के अनुसार काम नहीं करता है जो नवीनतम स्थिर संस्करण वाइन का उपयोग करता है जो v.3.0.1 libcap2 पहले से ही स्थापित था।

सूक्ति टर्मिनल में त्रुटि संदेश इस प्रकार है:

Failed to set capabilities on file `/usr/bin/wineserver' (Invalid argument)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file

यकीन नहीं है कि इसका क्या मतलब है ..... लेकिन मुझे लगा कि मैं इसे किसी के लिए भी व्याख्या के लिए रखूंगा और शायद एक नया, व्यावहारिक समाधान हो।

धन्यवाद।

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