2010-10-26 20 views
8

मान लीजिए कि आपके पास रूट/व्यवस्थापक विशेषाधिकारों के साथ चल रहा है। system() और file.*() के अलावा, आप आर आर कॉल क्या हानिकारक मानते हैं?संभावित रूप से दुर्भावनापूर्ण आर कॉल

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

+1

आर को रूट के रूप में चलाने का क्या कारण है? हो सकता है कि समाधान वहां स्थित है, यानी आपको खुद से यह सवाल पूछना चाहिए: "मैं उपयोगकर्ता को रूट के विशेषाधिकार देने के बिना xyz ** कैसे कर सकता हूं?"। दूसरी बात, ज़ाहिर है कि जो भी रूट विशेषाधिकारों के साथ सॉफ्टवेयर चला सकता है उसे इस बात पर भरोसा किया जाना चाहिए कि वह सिस्टम को गड़बड़ाने के बारे में चिंता न करें, अन्यथा उसे पहले स्थान पर रूट विशेषाधिकार नहीं होना चाहिए। – nico

+0

यह कुछ साल पहले आर-हेल्प या आर-डेवेल सूचियों पर पूछा गया था। मुझे विवरण याद नहीं है, लेकिन आप जो पूछते हैं वह प्रभावी रूप से असंभव था; एक बार जब आप आर के बाहर कुछ भी करने के सभी संभावित मार्ग बंद कर देते हैं, तो आपने आर बेकार प्रदान किया। रूट के रूप में मत चलाओ। –

+0

ए (शायद भी) संभावित हानिकारक कार्यों की विस्तृत सूची मेरे छोटे पैकेज में पाई जा सकती है: https://github.com/daroczig/sandboxR। यह पैकेज बहुत सारे आर कॉलों को रोक देगा और केवल "श्वेतसूची" पैकेजों को लोड करने की अनुमति देगा, इसलिए पर्याप्त अनुमोदित नहीं हो सकता है, लेकिन आपके उपयोगकर्ताओं को आपके सिस्टम पर किसी भी फाइल और संसाधनों से समझौता करने से मना कर देगा। बेशक इस सैंडबॉक्स किए गए पर्यावरण का उपयोग कुछ अनुप्रयोगों में किया जाना चाहिए जो उदा। डिस्क के लिए लिखता है - उपयोगकर्ताओं के आर कोड के बाहर। – daroczig

उत्तर

11

रूट निजी के साथ आर को न चलाएं। इस तरह से आर को सुरक्षित करने का कोई प्रभावी तरीका नहीं है, क्योंकि भाषा में eval और प्रतिबिंब शामिल है, जिसका अर्थ है कि मैं सिस्टम में आमंत्रण बना सकता हूं भले ही आप मुझे नहीं चाहते हैं।

आर को ऐसे तरीके से चलाने के लिए बेहतर है जो सिस्टम या उपयोगकर्ता डेटा को प्रभावित नहीं कर सकता, इससे कोई फर्क नहीं पड़ता कि यह क्या करने की कोशिश करता है।

+4

'eval' के बारे में उत्कृष्ट बिंदु, और आप जितनी चाहें उतनी सामग्री को खराब कर सकते हैं। 'eval (पार्स (टेक्स्ट = पेस्ट (rev (सी (") "," जो भी "," ("," एम "," ई "," टी "," एस "," वाई "," एस ")) , sep = "", collapse = ""))) ' –

+0

आप उस मामले में 'eval' को अवरुद्ध कर सकते हैं, लेकिन निश्चित रूप से हम इस बिंदु पर पहुंच रहे हैं कि कई मूल R फ़ंक्शन ठीक से काम करना बंद कर देंगे। – Shane

+0

@ शेन कैसे आप eval अवरुद्ध कर सकते हैं? आधार :: eval अपरिवर्तनीय है। – mbq

8

कुछ भी है कि, बाह्य कोड कॉल भी सिस्टम में परिवर्तन करना हो सकता है तो आप .Call() जैसे कुछ संकुल और चीजों को ब्लॉक करने के लिए की आवश्यकता होगी, .C(), .jcall(), आदि

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

5

आप नहीं कर सकते। आपको सिर्फ सवाल बदलना चाहिए: "मैं उपयोगकर्ता द्वारा आपूर्ति किए गए आर कोड कैसे चला सकता हूं ताकि उपयोगकर्ता या सिस्टम के अन्य उपयोगकर्ताओं को नुकसान न पहुंचाया जा सके?" यह वास्तव में एक बहुत ही रोचक सवाल है और जिसे क्लाउड कंप्यूटिंग, एपर्मर, क्रोट जादू इत्यादि के साथ हल किया जा सकता है।

+1

आप बिल्कुल सही हैं - मैं नहीं कर सकता। मुझे पूछा जाना चाहिए "क्या आर कॉल संभावित रूप से हानिकारक हो सकता है?" वैसे भी, सुझावों के लिए धन्यवाद ... – aL3xa

3

ऐसे कई आदेश हैं जिनका उपयोग आप सिस्टम को नुकसान पहुंचाने के लिए कर सकते हैं। उदाहरण के एक मुट्ठी: Sys.chmod, Sys.umask, unlink, किसी भी आदेश है कि आप (कई देखते हैं) एक कनेक्शन को पढ़ने/लिखने की अनुमति देता है, .Internal, .External, आदि

और अगर आप उन आदेशों से उन अवरुद्ध, पैकेज में कुछ लागू करने से उन्हें रोकना कुछ भी नहीं है जिसे आप ब्लॉक करना नहीं जानते हैं।

2

बंदूक अधिकार लोगों से एक cliche अनुकूलित करने के लिए, "प्रणाली() हानिकारक नहीं है - जो लोग सिस्टम() कहते हैं हानिकारक हैं"।

कोई फ़ंक्शन कॉल आंतरिक रूप से हानिकारक नहीं है, लेकिन यदि आप लोगों को स्वतंत्र रूप से उनका उपयोग करने की अनुमति देते हैं तो वे लोग नुकसान पहुंचा सकते हैं।

इसके अलावा, हानि की परिभाषा उस पर निर्भर करेगी जो आप हानिकारक मानते हैं।

3

इस सूत्र के लिए लगभग हर प्रतिक्रिया से बताया गया है, "संभावित हानिकारक" को हटाने आर भाषा में कहता होगा:

  • पूरी तरह से करने के लिए संभावित रूप से असंभव है।
  • जटिल लिखने में महत्वपूर्ण समय व्यतीत किए बिना करना मुश्किल हो (यानी बदसूरत) हैक्स।
  • कार्यक्षमता के एक टन को हटाकर भाषा को घुमाएं जो आर को इतना लचीला बनाता है।

का अधिक सुरक्षित समाधान को संशोधित/आर भाषा के बड़े हिस्से को फिर से लिखने की आवश्यकता नहीं है कि एक जेल BSD Jails, Jailkit या Solaris Zones की तरह कुछ का उपयोग कर अंदर आर चलाने के लिए किया जाएगा।

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

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

1

सामान्य रूप से, आर इतना जटिल है कि आप यह मान सकते हैं कि डेटा को निष्पादित करने में ऐसा करने का एक तरीका है जो उदाहरण के लिए बफर ओवरफ्लो के माध्यम से होता है।

3

मेरे सभी पसंदीदा पसंदीदा में से एक। आपको आर 00t भी नहीं होना चाहिए।

library(multicore); 
forkbomb <- function(){ 
    repeat{ 
    parallel(forkbomb()); 
    } 
} 
forkbomb(); 
संबंधित मुद्दे