2012-11-03 14 views
7

के साथ निष्पादित करने से कैसे रोकें I Ideon-like system पर काम कर रहा हूं जहां अविश्वसनीय उपयोगकर्ता कोड sandboxed मोड में चलाना चाहिए।सिस्टम कॉल को ptrace

इसके लिए मैं सुरक्षा की पहली परत के लिए ptrace की संभावनाओं को देख रहा हूं। हालांकि, कुछ प्रयोगों के बाद ऐसा लगता है कि:

  • इनपुट तर्कों को बुलाए जाने और संशोधित करने से पहले मैं सिस्टम कॉल को रोक सकता हूं।
  • मैं इसे कॉल करने के बाद सिस्टम कॉल को रोक सकता हूं और वापसी मूल्य बदल सकता हूं।
  • हालांकि, कॉल को खुश करने से रोकने के लिए कोई रास्ता नहीं है (पूरे एप्लिकेशन को मारने के अलावा)।

मैं कुछ सिस्टम कॉल को रोकना चाहता हूं और वास्तव में कॉल के बिना नकली परिणाम कोड वापस करना चाहता हूं। क्या इसे लागू करने का कोई तरीका है?

+0

PTRACE_SYSEMU? मैनपेज के मुताबिक: "यह कॉल यूजर मोड लिनक्स की तरह प्रयोग किया जाता है जो सभी बच्चे की सिस्टम कॉल को अनुकरण करना चाहता है" – Krumelur

उत्तर

1

आप आईपी (निर्देश सूचक) को बढ़ाकर सिस्टम कॉल निष्पादित करने वाले निर्देश को कूद सकते हैं, इस तरह कॉल को निष्पादित नहीं किया जाएगा और आप सामान्य रूप से वापसी मान सेट कर सकते हैं।

संपादित करें:

वहाँ एक ptrace आवरण pinktrace कहा जाता है, कि आपका काम आसान बनाना चाहिए, यह भी यहाँ कुछ और जानकारी है:

https://security.stackexchange.com/questions/8484/wrapping-system-call-in-reliable-and-secure-way

2

कृपया ध्यान रखें कि आपके सैंडबॉक्स केवल कर सकते हैं सुरक्षित रहें यदि यह कोड चलाता है तो वह बहु-थ्रेड नहीं होता है। रेत के बक्से वाले कोड को भी फोर्किंग से रोकने के लिए आपको बहुत सावधानी बरतनी होगी।

उदाहरण के लिए देखें, एक कागज के निम्नलिखित चर्चा रॉबर्ट वाटसन द्वारा मुद्दों के बारे में:

Exploiting races in system call wrappers

कागज कि लेख में से जुड़ा हुआ है, लेकिन मैं यहाँ कड़ी सीधे रूप में प्रस्तुत करेंगे अच्छी तरह से:

"Exploiting Concurrency Vulnerabilities in System Call Wrappers"

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

+0

या, चूंकि आप एप्लिकेशन को पहले सिस्टम कॉल को कॉल करने से रोकने की योजना बना रहे हैं, तो आप उन्हें रोक सकते हैं फेंकना या धागे बनाना। हालांकि कार्यक्रम की क्षमताओं में काफी कमी आएगी। – petersohn