Win32 एपीआई में लंबे समय से ज्ञात कमजोरी के कारण इसका इतना बड़ा प्रभाव है।
CreateProcess()
सिस्टम कॉल के माध्यम से प्रोग्राम को Win32 में देखा जाता है। इसे कई तरह से इस्तेमाल किया जा सकता है। यूनिक्स, लिनक्स, या ओएस / 2 पृष्ठभूमि से आने वाले लोग आमतौर पर कार्यक्रम (छवि फ़ाइल) के लिए दो अलग-अलग तर्क लेने के लिए सोचेंगे और नई प्रक्रिया को पारित करने के लिए कमांड पूंछ, क्योंकि फ़ाइल नाम और तर्क वैक्टर / कमांड मेल करते हैं। उन ऑपरेटिंग सिस्टम के एपीआई में दो अलग-अलग चीजें हैं। लेकिन वास्तव में सिस्टम कॉल को वैकल्पिक रूप में प्रोग्राम नाम और एक बड़े स्ट्रिंग में एक साथ मैश किए गए तर्कों के साथ किया जा सकता है। CreateProcess()
कमांड टेल से प्रोग्राम फाइलनाम को अलग करने का प्रयास करेंगे।
समस्या यह है कि यह क्रमिक रूप से प्रत्येक क्रमिक अंतरिक्ष चरित्र में जुड़वां में स्ट्रिंग को विभाजित करके करता है, जब तक कि बाएं हाथ का हिस्सा किसी फ़ाइल या निर्देशिका से मेल नहीं खाता। कई Win32 प्रोग्राम C:\Program Files\Contoso\TakeOver.exe StackExchange.com
सिस्टम कॉल की तरह स्ट्रिंग्स पास करने का प्रयास करेंगे । यह सही प्रोग्राम चलाएगा - C:\Program Files\Contoso\TakeOver.exe
- सही कमांड पूंछ के साथ - StackExchange.com
- जब तक कि इस बिंदु पर कि कुछ स्पष्ट रूप से खतरनाक व्यक्ति साथ आता है और C:\Program
आपके द्वारा किए गए फ़ाइल को बनाता है ।
उस बिंदु पर, C:\Program
कमांड कॉल के साथ प्रोग्राम इमेज फाइल को चलाने की कोशिश में सिस्टम कॉल समाप्त होता है Files\Contoso\TakeOver.exe StackExchange.com
। यदि C:\Program
वास्तव में एक निष्पादन योग्य कार्यक्रम छवि है, तो स्वर्ग आपकी मदद करता है।
यह एक सामान्य कमजोरी है, और यह किसी भी प्रोग्राम के संयोजन में रिक्त स्थान वाले किसी भी प्रोग्राम फ़ाइलनाम पर लागू होता है जो अन्य कार्यक्रमों को स्पॉन करने के लिए वन बिग स्ट्रिंग का उपयोग करता है। लेकिन इसके द्वारा मारा जाने वाला सबसे सामान्य मामला उन सभी कार्यक्रमों का है, C:\Program Files\
जो बड़ी संख्या में जीते हैं और बड़ी संख्या में Win32 प्रोग्राम हैं जो वन बिग स्ट्रिंग दृष्टिकोण का उपयोग करते हैं।
Win32 API को बदलने में बहुत देर हो चुकी है। एक दशक पहले बहुत देर हो चुकी थी। और Microsoft अन्य लोगों द्वारा लिखे गए सभी कार्यक्रमों को नहीं बदल सकता है जो दो के बजाय एक बड़ा स्ट्रिंग पास करते हैं CreateProcess()
। इसलिए Microsoft, उपयोगकर्ता लॉगऑन पर, C:\Program
आपके द्वारा देखी जाने वाली चेतावनी को प्रदर्शित करने और प्रदर्शित करने के लिए, विंडोज की जाँच करता है ।
और, जैसा कि आप देख सकते हैं, माइक्रोसॉफ्ट के Win32 डोको में एक बड़ी "सुरक्षा" चेतावनी है, डेवलपर्स को बता रहे हैं कि वे वन बिग स्ट्रिंग दृष्टिकोण का उपयोग करके प्रोग्राम नहीं लिख सकते हैं , जो अब कुछ वर्षों से है।
आगे की पढाई