क्या बाहरी मेमोरी पर प्रमाण पत्र रखना एक बुरा अभ्यास है?


11

हम एक STM32 माइक्रोकंट्रोलर का उपयोग करके AWS-IoT पर काम कर रहे हैं।

आज तक, हम फ़्लैश को प्रमाण पत्र लिख रहे थे और फ्लैश को बाहरी रीडिंग से लॉक कर रहे थे। जैसे-जैसे एप्लिकेशन कोड बढ़ता जाता है, हमें फ्लैश पर कम जगह मिल रही है, इसलिए हम प्रमाण पत्र को एसडी कार्ड / ईईप्रॉम पर बाह्य रूप से स्थानांतरित करने की योजना बना रहे थे और जब भी एडब्ल्यूएस-आईओटी से जुड़ने से पहले इसे पढ़ना पड़ता था।

टिप्पणियाँ:

  • चीज़ के लिए लिखी गई नीति केवल विशेष नाम वाले उपकरणों को उस विशेष प्रमाणपत्र पर कनेक्ट करने की अनुमति देगी।

  • इस चीज़ को केवल 2 चैनलों (यह नाम और एक डेटा फीड चैनल) पर प्रकाशित करने की अनुमति है, जो एक डेटा प्रोसेसर से जुड़ा है, जो आने वाले किसी भी दुष्ट पैकेट को अनदेखा करेगा।

  • यदि वह चीज किसी अन्य विषय पर प्रकाशित / सब्सक्राइब करती है, तो AWS उस चीज को तुरंत काट देगा।

अगर मुझे पता चलता है कि कोई उपकरण चोरी हो गया है / बदमाश हम सर्वर से कुंजी निष्क्रिय कर देते हैं।

एक शोषक प्रमाण पत्र (RootCA, सर्वर कुंजी, क्लाइंट कुंजी) के साथ क्या कर सकता है?

क्या बाहरी संग्रहण पर ऐसे usecase के लिए प्रमाण पत्र रखना एक बुरा अभ्यास है जिसे किसी शोषणकर्ता द्वारा पहुँचा जा सकता है?


क्या आप पठन सुरक्षा स्तर 2 (स्थायी एक) या स्तर 1 का उपयोग केवल पढ़ने के लिए फ़्लैश बनाने के लिए कर रहे थे?
अरोरा ००००

"सर्टिफिकेट" से आपका क्या अभिप्राय है? क्या आपका मतलब सार्वजनिक प्रमाण पत्र (जैसे, सार्वजनिक कुंजी, और विश्वसनीय रूट से हस्ताक्षर) है? या आप इसी निजी कुंजी का मतलब है? आम तौर पर प्रमाणपत्र का मतलब पूर्व समझा जाता है, लेकिन "सर्वर कुंजी, क्लाइंट कुंजी" और आपके प्रश्न के बारे में आपकी टिप्पणी से मुझे लगता है कि हम आपके द्वारा की गई जांच को बेहतर ढंग से दोहरा पाएंगे।
DW

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

अरे हां हाथ की चिप के लिए ऑनबोर्ड फ्लैश, मेरे पहले के बयान को भंग कर दें, जो कि स्पाई फ्लैश या बाहरी फ्लैश के लिए था।
मार्शल शिल्प

जवाबों:


7

आप "प्रमाणपत्र" का उल्लेख करते हैं, लेकिन संदर्भ से, मुझे लगता है कि आप दो अलग-अलग चीजों का उल्लेख कर रहे हैं।

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

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

    यह निजी कुंजी बेहतर गोपनीय बनी हुई थी।

  • आपके डिवाइस में संभवतः कम से कम एक सार्वजनिक कुंजी है, जो इसे पहचानने की अनुमति देती है कि यह किस सर्वर से बात कर रहा है। यह ठीक है अगर कोई भी इस कुंजी को पढ़ सकता है: यह सार्वजनिक है। लेकिन एक हमलावर को कुंजी को संशोधित करने में सक्षम नहीं होना चाहिए। अन्यथा, वे डिवाइस के साथ संचार कर सकते हैं और सर्वर को प्रतिरूपित कर सकते हैं। यह उन्हें ऐसा करने की अनुमति दे सकता है:

    • डिवाइस पर फर्मवेयर अपडेट पुश करें।
    • डिवाइस के लिए कॉन्फ़िगरेशन अपडेट पुश करें।
    • डिवाइस को एक अलग स्थान पर अपना डेटा अपलोड करें।

अच्छी खबर यह है कि यह धमकी विश्लेषण वास्तव में बहुत प्रासंगिक नहीं है। आपको किसी भी सुरक्षा का त्याग करने की आवश्यकता नहीं है ! (कम से कम गोपनीयता और प्रामाणिकता गुण नहीं - यदि आप सामान को बाहरी रूप से संग्रहीत करते हैं, तो उपलब्धता हिट होती है, क्योंकि यह सिस्टम का एक टुकड़ा है जो लापता हो सकता है।)

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

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

प्रामाणिक एन्क्रिप्शन डेटा की गोपनीयता और प्रामाणिकता की गारंटी देने के लिए पर्याप्त है , लेकिन यह इसकी अखंडता की गारंटी नहीं देता है

  • यदि डेटा का एक से अधिक हिस्सा है, तो जब डिवाइस डेटा का एक हिस्सा वापस पढ़ता है, तो यह सुनिश्चित नहीं किया जा सकता है कि यह सही हिस्सा है। समाधान: (उदाहरण के लिए में से एक के साथ एक हिस्सा शुरू प्रत्येक हिस्सा की सामग्री में एक अद्वितीय पहचानकर्ता शामिल "AWS-IoT private key.", "configuration CA certificate.", "publishing server CA certificate.", "user personal data.", ...)।
  • यदि आप किसी बिंदु पर डेटा को अपडेट करते हैं, तो जब आप इसे वापस पढ़ते हैं, तो आप यह सुनिश्चित नहीं कर सकते कि आपको उस डेटा का नवीनतम संस्करण मिल रहा है। यदि कोई बाहरी संग्रहण को संशोधित कर सकता है, तो वे नकली डेटा नहीं डाल सकते क्योंकि यह प्रामाणिकता जांच में विफल हो जाएगा, लेकिन वे पुराने डेटा को पुनर्स्थापित कर सकते हैं, क्योंकि जो प्रामाणिक हुआ करता था वह अभी भी प्रामाणिक है। समाधान: प्रत्येक डेटा चंक में जो बाहरी रूप से संग्रहीत किया जाता है, इसमें एक काउंटर शामिल होता है जिसे आप हर बार उस चंक के नए संस्करण को लिखने के लिए बढ़ाते हैं। जब आप एक चंक वापस पढ़ते हैं, तो सत्यापित करें कि यह अपेक्षित संस्करण है।

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


10

थोड़ा सा संदर्भ

चूंकि आप AWS IoT के साथ MQTT का उपयोग कर रहे हैं, इसलिए आपको प्रमाणीकरण और सुरक्षा के लिए X.509 प्रमाणपत्र का उपयोग करने की उम्मीद है । अमेज़ॅन के पास थोड़ा सा मार्गदर्शन है कि आपको अपने प्रमाणपत्रों को कैसे सुरक्षित करना चाहिए, इसलिए मैं इसे यहां उद्धृत करूंगा:

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

चूंकि आप वर्तमान में STM32 की रीड आउट प्रोटेक्शन (RDP) का उपयोग कर रहे हैं , लेकिन सभी निर्धारित हमलावरों को आपकी वर्तमान योजना में आपके प्रमाणपत्र तक पहुँचने में परेशानी होगी:

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

  • स्तर 0 - कोई सुरक्षा नहीं (डिफ़ॉल्ट)
  • लेवल 1 - फ्लैश मेमोरी को रैम लोडेड कोड द्वारा डिबगिंग या कोड डंपिंग द्वारा पढ़ने के खिलाफ संरक्षित किया जाता है
  • स्तर 2 - सभी डीबग सुविधाएँ अक्षम हैं

क्या बाहरी भंडारण सुरक्षित होने वाला है?

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

मुझे निजी रखने के लिए किन बिट्स की आवश्यकता होगी?

जब आप AWS IoT पर एक उपकरण प्रमाणपत्र बनाते हैं, तो आपको इस तरह की एक छवि देखनी चाहिए:

AWS IoT

छवि बनाएं और AWS IoT प्रलेखन के एक उपकरण प्रमाणपत्र पृष्ठ को सक्रिय करें।

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

सार्वजनिक कुंजी क्रिप्टोग्राफी

विकिपीडिया से छवि , सार्वजनिक डोमेन में जारी की गई।

आपकी डिवाइस की सार्वजनिक कुंजी वह है जो आपके डिवाइस पर भेजने के लिए संदेशों पर हस्ताक्षर करने के लिए AWS IoT का उपयोग करता है (लेकिन यह साबित नहीं होता है कि कौन संदेश भेज रहा है )। इसलिए, वास्तव में, यह बहुत बड़ी आपदा नहीं है यदि कोई व्यक्ति सार्वजनिक कुंजी चुराता है, क्योंकि इसका मतलब गुप्त नहीं है।

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

आपने यह भी पूछा कि अगर हमलावर ने रूटसीए प्रमाणपत्र को चुरा लिया तो क्या होगा? अगर किसी ने AWS IoT की निजी कुंजी चुरा ली है , तो यह विनाशकारी होगा, लेकिन आपके डिवाइस पर RootCA प्रमाणपत्र ऐसा नहीं हैRootCA.crtकि अमेज़न दे आप है पूरी तरह से सार्वजनिक , और उद्देश्य आप सत्यापित कर सकते है कि आप किसी भी तरह से हमला किया जा रहा नहीं कर रहे हैं (सबसे अधिक संभावना एक मैन-इन-द-मिडल एडब्ल्यूएस IoT के सर्वर होने का नाटक) तो है।

हैक किए गए डिवाइस को क्या नुकसान हो सकता है?

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

इस चीज़ को केवल 2 चैनलों (इसका नाम और डेटा फीड चैनल) पर प्रकाशित करने की अनुमति है, जो एक डेटा प्रोसेसर से जुड़ा है, जो आने वाले किसी भी दुष्ट पैकेट को अनदेखा करेगा।

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


9

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

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

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

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


अपने नोट्स के लिए धन्यवाद, हमने MQTT ब्रोकर के अंतिम छोर पर इसे कैसे योजनाबद्ध किया है। 1. यदि आप किसी अन्य चैनल पर पोस्ट करते हैं, जिसे आप अधिकृत नहीं हैं या 2. यदि आप उचित चैनल पर असमान या 3 में दुष्ट डेटा पोस्ट करते हैं । हम जानते हैं कि डिवाइस अपहृत है (जब डिवाइस खोला जाता है: हॉल इफेक्ट सेंसर) AWS-IoT पर की कीसेट को नष्ट कर दिया जाता है जिससे किसेट बेकार हो जाता है। इसलिए यदि आप एक डिवाइस को हैक करते हैं / एक डिवाइस की कुंजी प्राप्त करते हैं, तो आपको ऐसा करने के लिए नहीं मिलेगा क्योंकि नीतियां बहुत सख्त हैं, जिसके लिए डिवाइस का उपयोग करने वाले विषय (यह 2 तक सीमित है) और आप किस डेटा से गुजरते हैं।
user2967920

5

आपको क्लाइंट कुंजी को गुप्त रखने की कोशिश करनी चाहिए (लेकिन इसे खो देने के निहितार्थ को समझें (1), जैसा कि अन्य उत्तरों में वर्णित है)। सर्वर सार्वजनिक कुंजी, और AWS सार्वजनिक प्रमाणपत्र डिवाइस अंत में सुरक्षित करने के लिए महत्वपूर्ण हैं, क्योंकि आप तब गुप्त रखना चाहते हैं, लेकिन क्योंकि AWS प्रमाणपत्र (एक समझौता किए गए डिवाइस पर) को बदलकर एक हमलावर डिवाइस को बाहर ले जाने के लिए राजी कर सकता है हमलावर के मेजबान के साथ, या एडब्ल्यूएस के लिए अपने संचार के बीच-बीच में आदान-प्रदान करें।

ऐसा करने से (2), एक हमलावर टीएलएस सुरक्षा छीन सकता है जिसके परिणामस्वरूप सुरक्षा में पर्याप्त कमी हो सकती है कि वे ग्राहक कुंजी को उल्टा कर सकते हैं।

इस तर्क से, एकमात्र कुंजी जिसे बाहरी मेमोरी डिवाइस में उजागर करना सुरक्षित है वह सर्वर सार्वजनिक कुंजी है। इसे बदलने से (3) केवल आपके डिवाइस को एक दुष्ट AWS सेवा से जुड़ने के लिए मजबूर होने की अनुमति मिलेगी, जो संभवत: इंजीनियर की पहुंच के लिए कठिन है। यहां तक ​​कि सिर्फ इस कुंजी को लीक करने से किसी को कुछ प्रसारण करने या नकली करने की अनुमति मिल सकती है (उदाहरण के लिए अगर टीएलएस परत किसी तरह डाउनग्रेड हो सकती है)।

इसलिए संक्षेप में, जोखिम केवल जानकारी को लीक करने में नहीं है, अगर (माना जाता है) फर्मवेयर को अन-विश्वसनीय सुरक्षित जानकारी के साथ प्रदान किया जा सकता है, तो जोखिम है।


1
दिलचस्प बिंदु, लेकिन आपके अंतिम के रूप में, एक हमलावर ने अपने कब्जे में एक डिवाइस पर सर्वर की सार्वजनिक कुंजी को बदल दिया, संभवतः तब इसे एक imposter प्रॉक्सी के माध्यम से कनेक्ट करने की अनुमति देता है, जिसके बहाव के किनारे पर स्थापित प्रतिस्थापन कुंजी का निजी मिलान होता है, वह प्रॉक्सी फिर वैध और आयातक क्रिप्टो सत्रों के बीच हस्तांतरण के बिंदु पर यह सब रिकॉर्ड करते हुए वास्तविक सर्वर पर यातायात को पारदर्शी रूप से आगे बढ़ा सकता है । यह मूल तकनीक भी नहीं होगी; इस तरह के बॉक्स उन सुविधाओं के लिए बेचे जाते हैं, जिन्हें अपने नेटवर्क पर उपकरणों की आवश्यकता होती है ताकि उनके इम्पोर्टर प्रमाणपत्रों पर भरोसा किया जा सके।
क्रिस स्ट्रैटन 19

मुझे लगता है कि आप यहां अपना दूसरा बिंदु बता रहे हैं। क्या यह तीसरी कुंजी टीएलएस प्रोटोकॉल के नीचे उपयोग नहीं की गई है ताकि विश्वसनीय लिंक पर प्रेषित डेटा को एन्क्रिप्ट किया जा सके?
शॉन हुलिएन

आम तौर पर टीएलएस को तोड़ने के लिए "हमारे प्रॉक्सी के इम्पोर्टर सर्टिफिकेट पर हमला" पर भरोसा किया जाता है, लेकिन इसे मूल रूप से किसी भी चीज पर इस्तेमाल किया जा सकता है, जहां आप प्रत्येक समापन बिंदु को दूसरे पर लगाने के लिए पर्याप्त जानकारी प्राप्त / बदल सकते हैं।
क्रिस स्ट्रैटन

आपको क्या लगता है कि सार्वजनिक कुंजी को बदलने से कोई व्यक्ति इंजीनियर को निजी कुंजी को उलट देगा? यही नहीं टीएलएस कैसे काम करता है। सार्वजनिक-कुंजी क्रिप्टोग्राफी उस तरह से काम नहीं करती है। यह मानव-मध्य हमलों को सक्षम कर सकता है, लेकिन यह ग्राहक की निजी कुंजी निकालने के लिए मानव-मध्य हमलावर को सक्षम नहीं करता है।
DW
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.