इसे पढ़ते हुए , मुझे निम्नलिखित कारनामे मिले:
% cp /usr/bin/id ~
% chmod -x ~/id
% ls -al ~/id
-rw-r--r-- 1 edd edd 22020 2012-08-01 15:06 /home/edd/id
% ~/id
zsh: permission denied: /home/edd/id
% /lib/ld-linux.so.2 ~/id
uid=1001(edd) gid=1001(edd) groups=1001(edd),1002(wheel)
यह स्निपेट दिखाता है कि हम सामान्य अनपेक्षित उपयोगकर्ता के रूप में फाइल सिस्टम के निष्पादन की अनुमति को तुच्छ रूप से रोक सकते हैं। मैंने इसे एक Ubuntu 12.04 पर चलाया।
जबकि फ़ाइल (1) के अनुसार लिनक्स लोडर एक साझा वस्तु है, इसमें एक प्रवेश बिंदु भी है जो इसे सीधे निष्पादित करने की अनुमति देता है। जब इस तरह से निष्पादित किया जाता है तो लिनक्स लोडर ईएलएफ बायनेरिज़ के लिए दुभाषिया के रूप में कार्य करता है।
मेरी ओपनबीएसडी मशीन पर, हालांकि, यह शोषण प्रभावी नहीं है, क्योंकि आप लोडर को एक कार्यक्रम के रूप में निष्पादित नहीं कर सकते हैं। OpenBSD मैनुअल पेज कहता है: "ld.so अपने आप में एक साझा वस्तु है जिसे शुरू में कर्नेल द्वारा लोड किया जाता है।"
सोलारिस 9 पर यह कोशिश करें, और आपको एक सेगफॉल्ट मिलेगा। मुझे यकीन नहीं है कि कहीं और क्या होता है।
मेरे प्रश्न इसलिए हैं:
- क्यों लिनक्स लोडर (जब सीधे निष्पादित) करता नहीं एक ELF द्विआधारी की व्याख्या से पहले फाइल सिस्टम विशेषताओं की जांच?
- एक तंत्र को क्यों लागू किया गया है, जिसे फाइलों के निष्पादन को अस्वीकार करने के लिए डिज़ाइन किया गया है, अगर यह इतना तुच्छ है? क्या मुझे कुछ याद आया?
libc
(मैंने एक बार किया था, एक आर्क बॉक्स को अपग्रेड करते हुए), तो आप इस छोटे क्विक के लिए आभारी होंगे।