क्या प्रोडक्शन सर्वर के लिए यह सुरक्षित है कि वह स्थापित हो?


42

अपने वर्चुअल सर्वर इंस्टेंस के सेटअप के दौरान मुझे कुछ एप्लिकेशन का उपयोग करना आवश्यक है make। क्या कोई सुरक्षा जोखिम makeस्थापित होने से जुड़े हैं ? या उदाहरण को तैनात करने से पहले मुझे इसे साफ करना चाहिए?

मेरे पास gccसर्वर पर कंपाइलर भी है जिसका उपयोग मैं तैनाती से पहले एप्लिकेशन बनाने के लिए करता हूं।


4
यह आप किसी भी बेहतर महसूस करता है, किसी भी सॉफ्टवेयर का टुकड़ा स्थापित कहीं भी एक जोखिम पैदा करता है।
एमडीमोइर 313

1
और एक सर्वर पर गैर-रूट शेल एक्सेस के साथ एक "डिस्ट्रो इंडिपेंडेंट" कंपाइलर पैकेज (.tar.gz) डाउनलोड किया जा सकता है, जिसे इंस्टॉल करने की जरूरत नहीं होगी ...

1
क्या यह मुझे है, या "क्या यह सुरक्षित है" का संयोजन है? और "रूट एक्सेस" बल्कि असहज ?
डीएनए

2
यदि आप पहले से ही जीसीसी स्थापित कर चुके हैं, तो व्यावहारिक रूप से कोई रास्ता नहीं है जो किसी भी संभावित सुरक्षा समस्या को बदतर बना सकता है।
शादूर

1
@ बहादुर जीसीसी होने से क्या फर्क पड़ता है? यदि उपयोगकर्ता के पास पहले से ही मशीन है तो वे gcc की किसी भी प्रति को तुच्छ रूप से अपलोड कर सकते हैं। वैसे भी, जीसीसी अप्रभावी उपयोगकर्ताओं के लिए उपयोगी हो सकता है और सुरक्षा जोखिम नहीं जब तक कि कोई विशेषाधिकार प्राप्त उपयोगकर्ता इसे नहीं चलाते।
वैधता

जवाबों:


50

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

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

बाहर देखने के लिए अन्य बहुत अधिक प्रासंगिक चीजें हैं। यदि सॉफ़्टवेयर के एक स्थापित टुकड़े में एक सुरक्षा बग है, तो कुछ तरीके हैं जो इसे एक हमलावर के सामने ला सकते हैं:

  • पैकेज में एक suid या sgid निष्पादन योग्य हो सकता है।
  • पैकेज सिस्टम पर सेवाएं शुरू कर सकता है।
  • पैकेज उन स्क्रिप्ट को स्थापित कर सकता है जो कुछ परिस्थितियों में स्वचालित रूप से मंगाई जाती हैं (इसमें क्रोन जॉब्स भी शामिल हैं, लेकिन स्क्रिप्ट को अन्य घटनाओं द्वारा लागू किया जा सकता है, उदाहरण के लिए जब नेटवर्क इंटरफ़ेस की स्थिति बदलती है या जब उपयोगकर्ता लॉग इन करता है)।
  • पैकेज डिवाइस इनोड स्थापित कर सकता है।

मैं विकास के साधनों की अपेक्षा उपरोक्त में से किसी एक से नहीं करूँगा, और जैसा कि उच्च जोखिम पैकेज नहीं है।

यदि आपके पास वर्कफ़्लोज़ हैं जिसमें आप विकास टूल का उपयोग करेंगे, तो आपको पहले यह तय करना होगा कि क्या वे उचित वर्कफ़्लोज़ हैं, और यदि वे हैं, तो आपको डेवलपमेंट टूल इंस्टॉल करना चाहिए।

यदि आप पाते हैं कि आपको सर्वर पर वास्तव में उन टूल की आवश्यकता नहीं है, तो आपको उन्हें कई कारणों से स्थापित करने से बचना चाहिए:

  • सर्वर और बैकअप दोनों पर डिस्क स्थान बचाता है।
  • कम स्थापित सॉफ़्टवेयर यह ट्रैक करना आसान बनाता है कि आपकी निर्भरताएं क्या हैं।
  • यदि आपको पैकेज की आवश्यकता नहीं है, तो अतिरिक्त सुरक्षा जोखिम को स्थापित करने से कोई मतलब नहीं है, भले ही वह सुरक्षा जोखिम छोटा हो।

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


6
मैं इसमें यह जोड़ना चाहूंगा कि कई उत्पादन प्रणाली व्याख्या किए गए कोड (जैसे PHP, पर्ल, पायथन, ...) पर निर्भर हैं। इस संदर्भ में विकास के साधनों पर प्रतिबंध लगाने से कोई मतलब नहीं होगा। मुझे लगता है कि कंपाइलर gccइनकी तुलना में अधिक जोखिम नहीं पेश करेंगे। जैसा कि आप कहते हैं, एक सिस्टम पर संकलक का उपयोग करने की स्थिति में एक हमलावर आम तौर पर वैसे भी बदतर काम करने की स्थिति में होता है, जैसे कि अपने स्वयं के (संभवतः सांख्यिकीय रूप से जुड़े) निष्पादन योग्य अपलोड करना।
ब्रूनो

3
प्रासंगिक: Wget का एक छोटा संस्करण (51 बाइट्स?) । एक echoफ़ाइल में बाद के बयानों का उपयोग करके सर्वर पर एक बाइनरी को स्थानांतरित करने वाले हमलावर का वास्तविक जीवन उदाहरण । पूरी प्रक्रिया एक ही लिंक में मिली स्क्रिप्ट के साथ स्वचालित है।
आदि

2
@ अदनान, दिलचस्प। जहां तक ​​मैं बता सकता हूं, इस डीवीआर उदाहरण में मुख्य सुरक्षा दोष यह है कि हमलावर इसे पहले स्थान पर 123456 पासवर्ड के साथ रूट के रूप में टेलनेट कर सकता है। होने या नहीं होने पर (हमले से पहले) अन्य उपकरण तब मुश्किल से वास्तव में प्रासंगिक होते हैं।
ब्रूनो

15

makeएक ऐसा शेल है जिसकी तुलना में एक अलग वाक्यविन्यास है bash

एक कंपाइलर gccएक शक्तिशाली awkरूपांतरों के एक सेट के साथ कॉन्फ़िगर किया गया है जो मानक का awkसमर्थन नहीं करता है। यह एक गैर-पॉसिक्स-अनुपालन है sortया catजो आउटपुट में बकवास को इंजेक्ट करता है। यह एक इंटरैक्टिव टेक्स्ट एडिटर (थिंक vi) है जो स्टार्टअप पर कुछ संपादन करने के लिए कॉन्फ़िगर किया गया है, फिर उपयोगकर्ता इंटरफ़ेस प्रदर्शित करने से पहले बाहर निकलें।

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


2
एक जवाब तो ज़ेन मुझे नहीं पता कि इसे कैसे रेट करना है।
कास्परैड

4
@kasperd यह उत्तर गंभीर है। मुझे लगा कि प्रोग्रामर की बात को सामने लाना मददगार हो सकता है। एक फ़ंक्शन जो आउटपुट में इनपुट का अनुवाद करता है, वह केवल भेद्यता का परिचय नहीं देता है क्योंकि इसका आउटपुट सीपीयू-समझने योग्य प्रारूप में होता है।
इग्निस

1
मैं उस बिंदु से सहमत हूं जो आप बना रहे हैं। मुझे लगता है कि आपका जवाब किसी भी व्यक्ति के लिए बहुत अच्छा है जो पहले से ही इससे सहमत है। मुझे बस इस बात की चिंता है कि आपका जवाब किसी ऐसे व्यक्ति के लिए मज़ाक के रूप में सामने आ सकता है जो इससे असहमत है।
कास्परड

मुझे यह उत्तर स्वीकृत एक से कहीं अधिक पसंद है :)
रुस्लान

15

makeखुद ठीक है। makeकेवल एक निर्भरता ट्रैकिंग और स्वचालन ढांचा है। यह आमतौर पर संकलक के साथ संयोजन में उपयोग किया जाता है, हालांकि, और वे अधिमानतः एक उत्पादन प्रणाली पर उपलब्ध नहीं होना चाहिए, क्योंकि वे पूरी तरह से आवश्यक नहीं हैं। वही सभी गैर-जरूरी पैकेजों के लिए सही है, चाहे वे साझा पुस्तकालयों, दुभाषियों, आदि हों। उत्पादन प्रणालियों पर स्थापित सॉफ़्टवेयर को कड़ाई से नियंत्रित किया जाना चाहिए, और केवल उन पैकेजों को लागू करना चाहिए जो आवेदन द्वारा आवश्यक हैं।

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

नोट: देशी पैकेजिंग उपकरण चूसना । उन्हें परेशान करने की कोशिश भी मत करो। इसके बजाय, जॉर्डन सिसेल की जाँच करें fpm। यह पैकेजिंग को एक परम आनंद बनाता है।


8
मैं यहां जिज्ञासा और अज्ञानता से बाहर पूछ रहा हूं: आप यह क्यों कहते हैं कि संकलक की उपस्थिति एक "महत्वपूर्ण सुरक्षा मुद्दा" है? संकलक स्थापित होने के साथ सुरक्षा समस्या क्या है? क्या यह सिर्फ एक मामला है कि आपको पहली बार किसी प्रोडक्शन सर्वर पर अपना कोड नहीं बनाना चाहिए और इस तरह कंपाइलर बहुत कम है, या वास्तव में कंपाइलर की मौजूदगी से कोई महत्वपूर्ण सुरक्षा समस्या है?
रीहैब

11
हालांकि एक अलग सर्वर पर अपने अनुप्रयोगों का निर्माण करना एक अच्छा विचार है, यह कहना कि उत्पादन प्रणाली पर संकलक की उपस्थिति एक महत्वपूर्ण सुरक्षा समस्या नहीं है। पटकथा भाषाओं और जेआईटी-संकलित प्रणालियों (पर्ल, पायथन, जावा, ...) के बारे में क्या?
ब्रूनो

3
उत्पादन परिवेश पर compilers के की उपस्थिति है नहीं एक "महत्वपूर्ण सुरक्षा जोखिम"। मैं, खुद, बायनेरिज़ का उपयोग करके समझौता किए गए बक्से में स्थानांतरित हो गया हूं echoऔर base64। वास्तव में, आप इसे echoबयानों की श्रृंखला के साथ भी कर सकते हैं और कोई अन्य उपकरण नहीं
आदि

1
अच्छे अंक, सभी। मैंने अपना उत्तर स्पष्ट करने के लिए संपादित किया है।
EEAA

9

इसके विपरीत, संभावित मुद्दा makeउत्पादन सर्वर पर होने के साथ नहीं है, संभावित मुद्दा परीक्षण पूर्व निर्मित छवियों को तैनात करने के बजाय उत्पादन सर्वर पर अनुप्रयोगों के निर्माण के साथ है। इस पद्धति के लिए मान्य कारण हो सकते हैं, लेकिन यह एक ऐसा है जिसके बारे में मैं कड़ाई से तर्क दूंगा कि मुझे इसे अपनाने के लिए कहा गया था।


4

आप पूछ रहे हैं कि क्या makeकिसी प्रोडक्शन सर्वर पर इंस्टॉल होना चाहिए, लेकिन मेरा असली सवाल यह होगा: उस प्रोडक्शन सर्वर का एक्सेस किसके पास है और एक इंसर्सेशन से निपटने के लिए आपके पास क्या सुरक्षा उपाय हैं? यदि makeस्थापित नहीं किया गया था, लेकिन कोई व्यक्ति rootपहुंच प्राप्त करता है, तो अनुमान करें कि क्या? वे मैन्युअल रूप से स्थापित कर सकते हैं makeऔर कुछ भी वे चाहते हैं।

कंप्यूटर सुरक्षा के बारे में कठोर वास्तविकता उतनी ही है जितनी आप अवांछित पहुंच को रोकना चाहते हैं, ब्लॉकिंग एक्सेस से ग्रस्त होना उतना महत्वपूर्ण नहीं है:

  1. सर्वर तक किसकी पहुंच है?
  2. आप एक ब्रेक के बाद से रोलबैक करने के लिए क्या कर सकते हैं?

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


1

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.