विंडोज स्व-प्रतिबंध सुरक्षा विचार

माता-पिता सबसे अच्छा जानते हैं कि उनका बच्चा क्या कर सकता है और क्या नहीं। तो एक विशेष कार्यक्रम के प्रोग्रामर को दूसरों से बेहतर पता होता है कि प्रोग्राम को क्या कार्य करना चाहिए और कौन सा नहीं। लेकिन सब कुछ उतना अच्छा नहीं है जितना हम चाहेंगे। दुर्भावनापूर्ण कार्यक्रम अक्सर दूसरों के काम में बाधा डालते हैं। नेटवर्क कार्यक्रमों में कमजोरियों के दोहन के परिणाम बिल्कुल भी अनुमानित नहीं हैं। यह सब एक या दूसरे तरीके से सूचना सुरक्षा का उल्लंघन करता है, न केवल उद्यमों में, बल्कि आम उपयोगकर्ताओं के कंप्यूटरों पर भी।

और यह अच्छा होगा यदि कार्यक्रम को स्वयं पता हो कि उसे किन क्रियाओं की आवश्यकता नहीं है और, बस मामले में, उन्हें बंद कर दिया।



एंटीवायरस और अन्य समान सिस्टम डिफेंडर की भूमिका निभाने की कोशिश करते हैं, लेकिन सभी सुरक्षा नियमों के एक सेट के लिए नीचे आते हैं जो कई के लिए समान हैं और संरक्षित कार्यक्रमों की बारीकियों को ध्यान में नहीं रखते हैं। यह दृष्टिकोण कभी-कभी अप्रिय स्थितियों की ओर जाता है। यहाँ कुछ उदाहरण हैं:


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

विचार उत्पादकता

इसके लिए धन्यवाद, आप इसे प्राप्त कर सकते हैं:


एक और अधिक यथार्थवादी बिंदु से बोलते हुए, एक:


विचारों के कार्यान्वयन और उपयोग की विशेषताएं

विचार को लागू करने के लिए, विंडोज कर्नेल में यह आवश्यक है:


Kernel32.dll में एक फ़ंक्शन जोड़ें जो सुरक्षा को नियंत्रित करता है। जो भी विशेष रूप से बड़ी नहीं होगी।

ये क्रियाएं किसी भी प्रोग्रामर (और एक दिन में) की शक्ति के भीतर होती हैं। लेकिन सबसे बड़ी मुश्किल यह है कि Microsoft को ही ऐसा करना चाहिए। यही कारण है कि इस तरह के एक रक्षा तंत्र अभी के लिए सपने में है।

सैद्धांतिक पीछे हटना

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

विंडोज में कॉलिंग सिस्टम फ़ंक्शन के मूल सिद्धांत को निम्नलिखित चित्र के रूप में दर्शाया जा सकता है:



Sysenter / syscall / int 0x2E या कॉल dword ptr fs: [0xC0] (विंडोज़ के संस्करण के आधार पर) को कॉल करने के बाद, नियंत्रण कर्नेल में जाएगा, जहां KiSystemService सिस्टम सेवाओं के पते (SDT) की तालिका के माध्यम से दिखता है और सेवा संख्या (eax रजिस्टर में संचरित) द्वारा ) वांछित फ़ंक्शन का पता ढूंढता है और फिर उस पर नियंत्रण स्थानांतरित करता है। इस प्रकार, वांछित फ़ंक्शन कहा जाता है।

सिस्टम दो तालिकाओं का उपयोग करता है - एक सीधे सिस्टम के संचालन के लिए जिम्मेदार है और कर्नेल द्वारा संसाधित किया जाता है, और दूसरा जीयूआई के संचालन के लिए जिम्मेदार है और इसे win32.sys ड्राइवर द्वारा संसाधित किया जाता है। हम पहली तालिका में रुचि रखते हैं।

इस वास्तुकला के लिए धन्यवाद, किसी भी सिस्टम फ़ंक्शन के कॉल पर एक्सेस प्रतिबंध लगाना संभव है। ऐसा करने के लिए, बस KiSystemService फ़ंक्शन में एक साधारण चेक डालें।

हमने पहले ही सत्यापन का स्थान ढूंढ लिया है, अब दार्शनिक के पत्थर को एक्सेस मैट्रिक्स को संग्रहीत करने के लिए एक जगह ढूंढना आवश्यक है।

विंडोज ऑपरेटिंग सिस्टम पर, कर्नेल स्ट्रीम का वर्णन करने के लिए KTHREAD संरचना का उपयोग करता है, जो प्रत्येक स्ट्रीम का अपना होता है। यह वह जगह है जहां एक्सेस मैट्रिक्स को स्टोर करना संभव होगा। लेकिन अब यह एक मैट्रिक्स नहीं होगा, लेकिन एक रैखिक सूची (चूंकि प्रत्येक धागा केवल अपने बारे में जानकारी संग्रहीत करेगा)।

सब कुछ ठीक होगा, लेकिन एक नेटवर्क भी है, जिसके साथ विशेष ड्राइवरों के माध्यम से काम किया जाता है। लेकिन यहाँ समस्या को कुछ IRP अनुरोधों को डिवाइसों \\ Device \ Tcp, \\ Device \ Udp, \\ Device \ Raw में संसाधित करने में हल किया गया है, जो कुछ धाराओं से नेटवर्क तक पहुँचने की क्षमता की पारदर्शी जाँच भी करेगा।

हम कैसे सुरक्षा को लागू करेंगे

सुरक्षा के कार्यान्वयन को निम्नानुसार देखा जाता है:


संरक्षण प्रगति:


मैं सुरक्षा स्थापित करने के कार्य पर विशेष ध्यान देना चाहूंगा। उसके प्रोटोटाइप को इस रूप में देखा जाता है:
DWORD QuerySystemSecurity (HANDLE hThread, DWORD Flag, QWORD * Key, VOID / डेटा);


इसके अलावा QuerySystemSecurity में निषिद्ध फ़ंक्शन की संख्या और एसडीओ से इसकी संख्या के लिए पत्राचार की एक तालिका होनी चाहिए। बाद वाला संस्करण संस्करण से भिन्न होता है।

निष्कर्ष

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

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

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

Source: https://habr.com/ru/post/In145174/


All Articles