मेरे व्यवस्थापक को कैसे समझाएं कि जावा ऑन ए सर्वर कभी असुरक्षित नहीं है?


13

आवेदन पत्र

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

जिस सर्वर पर यह एप्लिकेशन चल रहा था, उसे विघटित कर दिया गया है। अभी के लिए हमें इसे कमज़ोर हार्डवेयर पर चलाना होगा, क्योंकि मैं व्यवस्थापक को वेबसर्वर (जो वास्तव में एक बहुउद्देश्यीय सर्वर है) पर JRE स्थापित करने के लिए नहीं मना सकता।

डर

मैं खुद एक जावा एप्लीकेशन इंजीनियर हूं, मैं एक जीवित के लिए जेईई कोड लिखता हूं, प्रति सप्ताह हजारों € यूरो के बी 2 बी लेनदेन से निपटता हूं। लेकिन मेरे पास विश्वसनीय स्रोत खोजने में समस्याएं हैं जो इस मिथक का खंडन करती हैं कि जावा प्रति सेकेण्ड असुरक्षित है।

JRE को स्थापित करने के खिलाफ एडमिन के दो मुख्य तर्क:

  1. जावा एप्लिकेशन मेरे सभी रैम को खा जाते हैं
  2. जावा कमजोरियों से भरा है

सच्चाई?

जब यह जावा अनुप्रयोगों राम खाने की बात आती है। खैर ... मैं कहूंगा कि हमें Xmx के लिए उचित मूल्य निर्धारित करने होंगे। किया हुआ।

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

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

या मुझसे यहां कुछ छूट रहा है?

[2014-08-28 को संपादित करें] स्पष्टीकरण: मैं केवल सर्वर पर जावा के बारे में चिंतित हूं। मैं जावा प्लगइन और / या जावा में विकसित विशिष्ट सॉफ्टवेयर के साथ समस्याओं की परवाह नहीं करता।


7
यदि यह हार्डवेयर चालू है, तो यह अंडरस्टैंडिंग से कम हो गया है और समस्याएं पैदा कर रहा है, तो साथ ही साथ SA की चिंताएं निश्चित रूप से आपके पास नए हार्डवेयर के लिए एक व्यावसायिक मामला है।
user9517

4
उसे समझाएं कि यह आपकी कंपनी का कोड नहीं है जिसे उसने सिर्फ thedailywtf.com पर देखा है।
माइकल हैम्पटन

9
जावा एक था किसी न किसी तरह 2013 में साल भी एक था 0-दिन कारनामे का ट्रैक वेबसाइट रखने के रूप में वे सिर्फ बाहर चल रखा। पिछले साल के मध्य से कोई 0-दिवसीय कारनामे नहीं हुए हैं, लेकिन शोधकर्ताओं ने अभी भी इस साल 107 जावा सीवीई पाया है । यह "सुरक्षित" से एक लंबा रास्ता है।
क्रिस एस

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

3
@lajuette मैंने एक कारण के लिए 107 नंबर के साथ एक लिंक प्रदान किया है - यदि आपने इसे उन सभी प्रश्नों पर क्लिक किया है जो आपने अभी पूछे हैं तो इसका उत्तर दिया जाएगा। उन 107 में से कुछ गैर-ओरेकल कार्यान्वयन से संबंधित हैं, जैसे कि एंड्रॉइड का डलाव, लेकिन विशाल बहुमत ओरेकल कार्यान्वयन से संबंधित हैं। जावा स्वाभाविक रूप से असुरक्षित नहीं है, लेकिन सन / ओरेकल का JRE समस्याओं से भरा हुआ है। PHP, पर्ल, रूबी सभी में कमजोरियां भी हैं - उनमें से कोई भी सही नहीं है। मैं यह नहीं कह सकता कि यदि जावा वर्तमान में बेहतर या बदतर है, लेकिन पिछले वर्ष की तुलना में यह निश्चित रूप से सुरक्षा उद्योग का सचेतक लड़का है।
क्रिस एस

जवाबों:


18

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

सबसे पहले, JRE में सुरक्षा बग होने के लिए भयानक रिकॉर्ड है। एक विशिष्ट बिंदु को इंगित करना मुश्किल है, और यह डरावना हिस्सा है - कीड़े अनिर्दिष्ट वैक्टर के साथ अत्यधिक अनिर्दिष्ट भेद्यता हैं।

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

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

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

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

अपडेट करने के लिए, यहाँ प्रदर्शन के माध्यम से कुछ सीवीई I क्रिस-लिंक्ड सीवीई खोज से चेरी-पिक किए गए हैं।

और मेरा पसंदीदा, जब से मैं वहां था:

यह सिर्फ एक छोटा सा नमूना है, वैसे।


6

जावा एप्लिकेशन मेरे सभी रैम को खा जाते हैं

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

जावा कमजोरियों से भरा है

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


3
ठीक है, इसलिए काम नहीं करता है। आपके अनुनय टूलबॉक्स में कौन से अन्य उपकरण हैं? क्या आपके पास कोई जंग लगी सरौता है?
डेविड श्वार्ट्ज

1
@FalconMomot हाँ, कर्नेल इसका उपयोग फ़ाइलों को कैश करने के लिए कर सकता है। कर्नेल मेमोरी को JVM से दूर ले जा सकता है अगर इसके लिए इसका बेहतर उपयोग हो। कि हर आधुनिक ओएस कितना काम करता है। रैम का उपयोग करने का विकल्प रैम को बर्बाद कर रहा है। ओएस में विशेष रूप से रैम को सुनिश्चित करने के लिए एक मेमोरी मैनेजर है जो सबसे अच्छे उद्देश्य से जाता है। "जावा एप्लिकेशन जैसे तर्क मेरे सभी रैम को खा जाते हैं" लगभग हमेशा एक व्यवस्थापक को इंगित करता है जो यह नहीं समझता है कि आधुनिक ऑपरेटिंग सिस्टम रैम का उपयोग कैसे करते हैं।
डेविड श्वार्ट्ज

1
यदि JVM मेमोरी को मुक्त नहीं करता है, तो उसे ऐसा करने के लिए स्वैप स्थान (यदि इसके पास कोई भी हो) को स्वैप करना होगा, जो धीमा है। कर्नेल कचरा संग्रहकर्ता को आमंत्रित नहीं कर सकता है। इसके अलावा, फ़ाइल कैशिंग आमतौर पर उपयोगकर्ताओं के आवंटन से कम प्राथमिकता है भले ही वे शायद ही कभी उपयोग किए जाते हैं (जितना कर्नेल बता सकता है कि वे शायद ही कभी उपयोग किए जाते हैं, जो बहुत अच्छी तरह से नहीं है)।
फाल्कन मोमेंट

3
मैं इस बारे में अधिक जानना चाहता हूं कि कैसे लिनक्स एक साथ कैश के लिए रैम के ब्लॉक का उपयोग कर सकता है जबकि एक प्रक्रिया अभी भी सोचती है कि यह उसका मालिक है। मैंने इसके बारे में पहले कभी नहीं सुना।
माइकल हैम्पटन

1
@FalconMomot कर्नेल को यह जानने की आवश्यकता नहीं है कि RAM "फ्री" है। जब तक एप्लिकेशन लॉक नहीं होता तब तक कर्नेल का हमेशा RAM के उपयोग पर नियंत्रण होता है। यह सिर्फ रैम वापस पाने के लिए मैप किए गए पृष्ठों को अस्वीकार्य बनाना है। यदि डेटा अनधिकृत और अप्रयुक्त समय की अवधि के लिए अप्रयुक्त है, और I / O बैंडविड्थ को संतृप्त नहीं किया गया है, तो वह इसे स्वैच्छिक रूप से स्वैप करने के लिए लिख सकता है, पृष्ठों को अस्वीकार्य बना सकता है, जिससे बेहतर उपयोग के रूप में इसे जल्द ही रैम को पुनः प्राप्त करने की अनुमति मिलती है। इसके लिए। (यह स्थान यह समझाने के लिए पर्याप्त नहीं है कि आधुनिक मेमोरी प्रबंधन कैसे काम करता है, लेकिन ऐसा लगता है कि आपके पास कुछ बहुत ही सामान्य गलत धारणाएं हैं।)
डेविड श्वार्ट्ज

2

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

अपने एडमिन टीम के चार्ज कोड को बिल करें, जाहिर है।


1

बता दें कि अन्य सभी भाषाओं (या आभासी मशीनों) को उस कोड द्वारा असुरक्षित किया जा सकता है जो उन पर तैनात है, जैसे कि जावा के साथ। अगर उसे लगता है कि अन्य प्लेटफ़ॉर्म सही ढंग से पता सुरक्षा के बिना स्वाभाविक रूप से सुरक्षित (या जावा से अधिक सुरक्षित) हैं, तो वह भ्रम है।

आपकी कंपनी ने स्पष्ट रूप से एक जावा डेवलपर को काम पर रखने में निवेश किया है, तो कंपनी द्वारा उपयोग करने का निर्णय लेने वाली तकनीक का समर्थन करने से इनकार क्यों कर रहा है?

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

हम संभवतः यह नहीं जान सकते हैं कि आप दोनों के बीच का पूरा रूपांतरण कैसे हुआ है, लेकिन अगर उसके दो तर्क थे, तो मेरा मानना ​​है कि आप एक जूनियर सिस्टम प्रशासक के साथ काम कर रहे हैं। क्या उसके पास जावा एप्लिकेशन सर्वर के साथ अनुभव है? शायद वह तकनीक के साथ असहज है और इसे अच्छी तरह से समझने के बिना उत्पादन में कुछ डालने से डरता है (अच्छा sysadmin रवैया तब)।


धन्यवाद। हम किसी कंपनी की बात नहीं कर रहे हैं। बल्कि एक गैर-लाभकारी संघ है। बाहर sysadmin आईटी और विपणन में एक डॉक्टर है, लेकिन एक "असली" sysadmin नहीं है। और हाँ: मेरा मानना ​​है कि वह जावा से डरता है, जिसे वह पूरी तरह से नहीं समझता है।
लजुएट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.