जब कोई एप्लिकेशन SUID सेट करता है तो कोई कोर डंप कैसे बनाया जाता है?


16

जब मैं क्रैश करता हूं तो हर चीज का एक मुख्य डंप बनाने के लिए मैं अपना वातावरण सेटअप करता हूं, हालांकि जब मैं SUID के साथ एक प्रोग्राम चलाता हूं तो निष्पादित उपयोगकर्ता की तुलना में यह एक अलग डंप बनाता है। किसी भी विचार का यह क्यों हो सकता है? मुझे यह वेब पर कहीं भी नहीं मिला, मुझे लगता है कि यह किसी प्रकार की सुरक्षा सुविधा है लेकिन मैं इसे अक्षम करना चाहूंगा ...

मुसीबत:

$ cd /tmp
$ cat /etc/security/limits.conf | grep core
*     -     core     unlimited
root  -     core     unlimited

$ ls -l ohai
-rwsr-sr-x 1 root root 578988 2011-06-23 23:29 ohai

$ ./ohai
...
Floating point exception

$ sudo -i
# ./ohai
...
Floating point exception (core dumped)
# chmod -s ohai
# exit
$ ./ohai
...
Floating point exception (core dumped)

संपादित करें: जितना संभव हो सके इसे सुरक्षित बनाने के लिए मेरे पास अब पर्यावरण स्थापित करने के लिए निम्नलिखित स्क्रिप्ट है:

mkdir -p /var/coredumps/
chown root:adm /var/coredumps/
chmod 772 /var/coredumps/

echo "kernel.core_pattern = /var/coredumps/core.%u.%e.%p" >> /etc/sysctrl.conf
echo "fs.suid_dumpable = 2" >> /etc/sysctl.conf

echo -e "*\t-\tcore\tunlimited" >> /etc/security/limits.conf
echo -e "root\t-\tcore\tunlimited" >> /etc/security/limits.conf

अब बस इतना ही करना बाकी है कि ACL को / var / coredumps में जोड़ें ताकि उपयोगकर्ता केवल फाइलें जोड़ सकें और संशोधित न कर सकें और न ही उन्हें फिर कभी पढ़ सकें। केवल नकारात्मक यह है कि मुझे अभी भी chroot'ed अनुप्रयोगों के साथ एक समस्या होगी, जिसके लिए एक bind mountया कुछ और की आवश्यकता होगी ।

जवाबों:


21

एक गुप्त कार्यक्रम की स्मृति (संभवतः, यहां तक ​​कि) गोपनीय डेटा हो सकती है। तो कोर डंप को केवल जड़ से पठनीय होना होगा।

यदि कोर डंप रूट के स्वामित्व में है, तो मुझे एक स्पष्ट सुरक्षा छेद नहीं दिखता है, हालांकि कर्नेल को मौजूदा फ़ाइल को अधिलेखित नहीं करने के लिए सावधान रहना होगा।

लिनक्स सेटक्सिड कार्यक्रमों के लिए कोर डंप अक्षम करता है। उन्हें सक्षम करने के लिए, आपको कम से कम निम्नलिखित करने की आवश्यकता है (मैंने जांच नहीं की है कि यह पर्याप्त है):

  • fs.suid_dumpableSysctl को 2, जैसे के साथ सेट करके सामान्य रूप से सेट्युड कोर डंप सक्षम करें echo 2 >/proc/sys/fs/suid_dumpable। (नोट: 2, 1 नहीं; 1 का अर्थ है "मैं सिस्टम को संपूर्ण रूप से डीबग कर रहा हूं और सभी सुरक्षा को हटाना चाहता हूं")
  • prctl(PR_SET_DUMPABLE, 1)कार्यक्रम से बुलाओ ।

सर, अब आप मेरे निजी नायक हैं!
डिप्सविच

@DipSwitch अजीब बात है, कि प्रलेखन क्या fs.suid_dumpableकहता है। क्या आप प्रोग्राम में fs.suid_dumpableकॉल किए बिना सेटिंग की कोशिश कर सकते हैं pctrl? हो सकता है कि मैं प्रलेखन को गलत समझ रहा हूं और आपको इस मामले में एक मूल लेकिन स्वामित्व प्राप्त है।
गिल्स एसओ- बुराई को रोकना '

आह बकवास मेरा बुरा ... फ़ाइल जड़ के स्वामित्व में है लेकिन% u (uid) core_pattern में मुझे पहली नजर में बेवकूफ बना रहा था।
डिप्सविच

यह समाधान "सूडो-एस" के तहत चलने वाले कार्यक्रमों पर भी लागू होता है, कम से कम कर्नेल 2.6.27 के लिए।
सेठ नोबल

7

कोर डंप में उस सब की एक कॉपी होती है जो गलती के समय मेमोरी में थी। यदि प्रोग्राम सुसाइड चल रहा है, तो इसका मतलब है कि इसे किसी ऐसी चीज तक पहुंच की आवश्यकता है, जिसे आप एक उपयोगकर्ता के रूप में उपयोग नहीं कर सकते हैं। यदि प्रोग्राम को वह जानकारी मिलती है तो कोर डंप हो जाती है, तो आप उस विशेषाधिकार प्राप्त जानकारी को पढ़ पाएंगे।

ऊपर आपके उदाहरण से, ऐसा प्रतीत होता है कि आप रूट के रूप में चलने पर एक कोर डंप प्राप्त करने में सक्षम हैं या यदि आप विशेषाधिकार वृद्धि को हटा देते हैं।

हालांकि यह आसान हो सकता है (डेवलपर्स केवल मेथिंक के लिए) एक सेटिड प्रोग्राम से कोरपम्प के लिए आसान पहुंच हो, यह एक सुरक्षा छेद है, और इसे जगह में छोड़ दिया जाना चाहिए।


1
मुझे डर था कि आप ऐसा कुछ कहां कहेंगे :(
दीपस्विच

0

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

समस्या: वहाँ क्या हो रहा है कोई पता नहीं:

sudo id
Segmentation fault

हल: ठीक sudoसे valgrindकाम करने के लिए थोड़ा सा हटो :

chmod +s /usr/bin/valgrind
chmod -s /usr/bin/sudo
valgrind /usr/bin/sudo id

यदि debuginfo स्थापित है, तो अच्छा बैकट्रेस लिखा जाता है।


और इस बीच, जब तक आप पुन: स्थापन को याद नहीं करते हैं, तब तक हर कोई और चाची टिली valgrindजो चाहे कर सकते हैं। ऐसा न करें , यह एक बड़ा सुरक्षा जोखिम है।
वॉनब्रांड

केवल परीक्षण मशीन पर और पाठ्यक्रम के परीक्षण प्रयोजनों के लिए।
जकुज

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