2011-06-22 14 views
9

मेरे पास मेरे प्रोग्राम का भाग है जिसके लिए व्यवस्थापकीय पहुंच की आवश्यकता होती है (सेटिंग्स जो एचकेएलएम में संग्रहीत सभी उपयोगकर्ताओं को प्रभावित करती हैं, और प्रशासनिक पहुंच तक सीमित हैं)।सुरक्षित रूप से यूएसी ऊंचाई के साथ आईपीसी कैसे करें?

मैं अपने सॉफ्टवेयर को बदल दिया है कि ऊंचाई से संकेत मिलता है के लिए आवश्यक है:

SHELLEXECUTEINFO shExecInfo; 
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); 
shExecInfo.fMask = NULL; 
shExecInfo.hwnd = NULL; 
shExecInfo.lpVerb = L"runas"; 
shExecInfo.lpFile = L"myapp.exe"; 
shExecInfo.lpParameters = NULL; 
shExecInfo.lpDirectory = NULL; 
shExecInfo.nShow = SW_MAXIMIZE; 
shExecInfo.hInstApp = NULL; 
ShellExecuteEx(&shExecInfo); 

मैं क्या था:

enter image description here

जवाब में मैं अपने निष्पादन योग्य शुरू करने के लिए है, जबकि ऊंचाई के लिए उत्साह जा रहा हूँ करने के लिए कमांड लाइन पर एक नामित पाइप का नाम पास कर दिया गया है, यह बता रहा है कि यह कहां से किया जा रहा है, इस पर निर्देश प्राप्त करने के लिए यह कहां से कनेक्ट हो सकता है:

myapp.exe /uac 6C844671-E262-46DD-939E-47517F105FB6 

(हां, पाइप के नाम के रूप में GUID का उपयोग करके)।

इस पाइप के माध्यम से

मैं अपने ऊंचा क्लोन क्या डेटाबेस, जैसे कहते थे:

  • क्या सर्वर डेटाबेस यह अपेक्षा की जाती है
  • उपयोगकर्ता से कनेक्ट होने जा करने के लिए यह कहना चाहिए कि यह परिवर्तन
  • बात कर रही है इसे

मेरी चिंता तब थी कि कोई भी myapp.exe लॉन्च कर सकता है, और फिर इसे सभी प्रकार के अनुरोधों को खिला सकता है - चीज़ें जो मैं नहीं चाहता ओ कारण मैं इसे लॉन्च नहीं किया है, उदाहरण के लिए:

MaliciousProgram.exe:

ShellExecute("myapp.exe /uac HahaYouDoWhatISayNow") 

मैं सूंडवाले बीटा के दौरान याद वहाँ एक Channel9 वीडियो, या एक लेख, यूएसी बारे में बात कर रहा था और आईपीसी (इंटर-प्रोसेस संचार) करने के गलत होने के खतरे।

मैं पहिया का फिर से आविष्कार नहीं करना चाहता, सुरक्षा गलतियों को पहले से हल कर चुका हूं। लेकिन मुझे यूएसी ऊंचाई के साथ आईपीसी करने के तरीके "सही" पर कोई मौजूदा मार्गदर्शन नहीं मिल रहा है।

क्या उन्होंने आईपीसी करने के लिए अस्थायी उन्नत क्रियाओं के लिए उन्नत उन्नत प्रक्रिया के साथ संवाद करने के लिए पैटर्न स्वीकार नहीं किया?


संपादित करें: uac और ipc टैग की संयुक्त अनुयायियों: 53

+0

मुझे आश्चर्य है - सवाल पूछने के बाद से लगभग पांच साल हो गए हैं। क्या आपने कभी एक संतोषजनक समाधान के साथ समाप्त किया? –

उत्तर

2

मैं नहीं मानता कि यह कोई सुरक्षा समस्या यहां है (कुछ कैविएट्स के साथ नीचे के रूप में उल्लेख किया है)। यदि उपयोगकर्ता ऊपर नहीं बढ़ सकता है, तो यह समाधान वैसे भी काम नहीं करेगा; यदि उपयोगकर्ता बढ़ सकता है, और दुर्भावनापूर्ण है, तो मशीन पहले ही समझौता कर चुकी है। उदाहरण के लिए, यदि कोई दुर्भावनापूर्ण उपयोगकर्ता HKLM में परिवर्तन करना चाहता है, तो regedit उपलब्ध होने पर myapp.exe का उपयोग क्यों करें?

हालांकि, मैं सर्वर डेटाबेस के आपके उल्लेख से उलझन में हूं; यह ऊंचाई के लिए आवश्यकता के साथ कैसे फिट है? रिमोट संसाधनों तक पहुंचने के लिए आम तौर पर बोलने की आवश्यकता नहीं होती है। (अगर या तो मैप।exe या HKLM में सर्वर डेटाबेस के लिए एक पासवर्ड है, यह नहीं होना चाहिए।)

आईपीसी की पसंद के लिए: मैं यूएसी प्रोग्रामिंग में विशेषज्ञ नहीं हूं, लेकिन एमएसडीएन खोज रहा हूं मैंने देखा है कि उन्नत COM ऑब्जेक्ट्स का उल्लेख किया गया है कई बार, जैसे:

http://msdn.microsoft.com/en-us/library/bb756996.aspx

, लेकिन यदि आप कॉम से खुश नहीं हैं (में शामिल होने:

http://msdn.microsoft.com/en-us/magazine/cc163486.aspx

भी powerpoint स्लाइड इस लेख में पांचवें लिंक पर देख क्लब!) फिर एक नामित पाइप का उपयोग करते हुए सुझाव देते हैं कि यह उतना ही प्रभावी होना चाहिए। हालांकि आपको नामित पाइप के लिए आवश्यक सामान्य सावधानी बरतनी पड़ती है - सुनिश्चित करें कि आप उन्नत प्रक्रिया को लॉन्च करने से पहले नामित पाइप का सर्वर अंत बनाते हैं, ताकि आप जांच सकें कि पाइप पहले से मौजूद है या नहीं, और आप इसे उचित एसीएल के साथ बनाते हैं ।

+0

समस्या यह है कि यदि मेरी ** उन्नत ** प्रक्रिया पाइप पर सुन रही है: एक ही पाइप पर आदेश भेजने से ** गैर-उन्नत ** प्रक्रिया को रोकना कुछ भी नहीं है। इससे भी बदतर मेरे कोड में एक बफर-ओवरफ्लो बग का शोषण करने वाली गैर-उन्नत प्रक्रिया होगी। अब एक गैर-उन्नत प्रक्रिया मनमाने ढंग से कोड को चलाने में सक्षम है। –

+0

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

+0

साथ ही, याद रखें कि एक ही उपयोगकर्ता खाते में चल रही कोई भी गैर-उन्नत प्रक्रिया हमेशा आपकी गैर-उन्नत प्रक्रिया को विचलित करने में सक्षम होगी यदि वह ऊंचा प्रक्रिया को दुर्भावनापूर्ण निर्देश भेजना चाहती है। इसलिए, आपको केवल अन्य उपयोगकर्ता खातों के खिलाफ पाइप की रक्षा करने की आवश्यकता है; एक ही खाते में अन्य प्रक्रियाओं के खिलाफ इसे बचाने की कोशिश करना व्यर्थ होगा। –

संबंधित मुद्दे