ISP के माध्यम से पढ़ने से AVR फ्लैश की रक्षा करना?


15

मैं आईएसपी के माध्यम से पूरे फ्लैश को पढ़ने से बचाने की कोशिश कर रहा हूं। इसमें बूटलोडर है, जो सेल्फ प्रोग्राम एप्लिकेशन सेक्शन में सक्षम है।

लॉक बाइट सेट करना:

LB1/LB2 उपयोगकर्ता को नए फ़र्मवेयर अपलोड करने के लिए बूटलोडर का उपयोग करने की अनुमति नहीं देगा।

BLB12/BLB11और BLB01&BLB02आईएसपी के माध्यम से फ्लैश पढ़ने से नहीं रोकेगा, अगर मैं गलत नहीं हूं।

तो कस्टम बूटलोडर द्वारा उपयोगकर्ता को फर्मवेयर अपडेट करने और फ्लैश को एक ही समय में पढ़ने से बचाने का कोई तरीका नहीं है?

जवाबों:


18

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

कहा जा रहा है, और जैसा कि आपने कहा, सभी AVR उपकरणों में LB1 और LB2 नामक दो लॉक बिट्स होते हैं। इनका प्रोग्रामिंग करना (0, निम्न) नीचे दी गई तालिका के अनुसार फ्लैश और ईईपीआरओएम यादों को लिखी गई सामग्री में सुरक्षा को जोड़ देगा। सुरक्षा का स्तर तीन मोड में विभाजित है, जहां मोड 1 कोई सुरक्षा प्रदान नहीं करता है और मोड 3 अधिकतम सुरक्षा प्रदान करता है। लॉक बिट्स को रीप्रोग्राम करके बस सुरक्षा के उच्च मोड में जाना संभव है।

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

AVR लॉक बिट टेबल

ये 2 लॉक बिट्स अकेले (LB1 और LB2) जब कम 99.9% लोगों को आपके फर्मवेयर चोरी करने से रोकेंगे! शायद 99.9% से अधिक। इंजीनियर को अपने कोड को उलट देना लगभग हमेशा आसान होगा।

तो कस्टम बूटलोडर द्वारा उपयोगकर्ता को फर्मवेयर अपडेट करने और फ्लैश को एक ही समय में पढ़ने से बचाने का कोई तरीका नहीं है?

अपने ज्ञान का सबसे अच्छा करने के लिए (मुझे गलत किया जा सकता है लेकिन मुझे लगता है कि मेरे पास इस मुद्दे को पहले जारी किया गया होगा), उन उपकरणों पर जो बूटलोडर सुरक्षा फ़्यूज़ (BLB12 और BLB11) हैं, आप अपने कस्टम बूटलोडर अनुभाग को लॉक कर सकते हैं , SPI को निष्क्रिय कर सकते हैं और हो सकते हैं 97-98% लोगों से सुरक्षित।

हालाँकि जब कोई भी लॉक बिट्स प्रोग्राम नहीं किया जाता है, तो मेमोरी लॉक की कोई भी सुविधा सक्षम नहीं होती है !!! ISP अक्षम केवल 70% लोगों को ब्लॉक करने के लिए पर्याप्त है।

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

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


संपादित करें

मैं एचवी प्रोग्रामिंग इंटरफेस हेडर ऑनबोर्ड लगाऊंगा। लेकिन क्या कोई HV प्रोग्रामर का उपयोग फ़्लैश के लिए कर सकता है? मुझे पता है कि एचवी प्रोग्रामर चिप को मिटा सकता है, यहां तक ​​कि आईएसपी / जेएटीएजी भी अक्षम हैं।

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

बूटलोडर को अपग्रेड करने के लिए (कभी-कभार) मैं एचवी प्रोग्रामिंग इंटरफेस हेडर ऑनबोर्ड लगाऊंगा। लेकिन क्या कोई HV प्रोग्रामर का उपयोग फ़्लैश के लिए कर सकता है? मुझे पता है कि एचवी प्रोग्रामर चिप को मिटा सकता है, यहां तक ​​कि आईएसपी / जेएटीएजी भी अक्षम हैं।

मुझे लगता है कि बूटलोडर के माध्यम से लॉक किए गए फ्लैश को अपडेट करने का एक तरीका हो सकता है, (आंतरिक लेखन ध्वज और / या आईएसआर के साथ कुछ करना होगा ???) लेकिन मुझे अपने नोटों को खोजना होगा और शायद इसका परीक्षण करना होगा। मैं ~ 20 घंटे तक ऐसा नहीं कर पाऊंगा; इसलिए मैं अत्यधिक सलाह देता हूं कि आप केवल एक नए प्रश्न पर ध्यान दें और आपके द्वारा उल्लेखित प्रोसेसर के लिए। यह बहुत अच्छा सवाल है !


अंतिम टिप्पणी के लिए +1, यदि कोई अन्य फेल हो जाता है तो केवल चिप को हटा सकता है और लॉक बिट्स को रीसेट करने के लिए हमें AVR डिबगर / प्रोग्रामर से चिपका सकता है और आपकी सुरक्षा समाप्त हो गई है।
helloworld922

@Garrett फोगेर्ली: निश्चित नहीं है कि आपको क्या लगता है कि मैं कोड चोरी करने की कोशिश कर रहा हूं, plz मुझे बताएं और मैं अपने प्रश्न को सही कर दूंगा, ताकि दूसरे भी उसी तरह से न सोचें। मैं अपने स्वयं के कोड, अपने स्वयं के बूटलोडर की न्यूनतम सुरक्षा देने की कोशिश कर रहा हूं। वैसे भी, इस पर कुछ और सवाल। चिप ATMega328 है, सोचा कि परिवार में सामान्य लॉक बिट का उपयोग होगा। आपने समझाया है LB1और LB2, जिसे मैंने अपने प्रश्न में अपग्रेड उद्देश्यों के लिए बूटलोडर का उपयोग करने के लिए सीमित विकल्प के रूप में वर्णित किया है। तो यह एक विकल्प नहीं है। के रूप में BLB12और BLB11- कि मैं क्या समझ में नहीं आता है। (जारी रखने के लिए)
पाब्लो '

उन बिट्स को सेट करने से फ्लैश (एप्लिकेशन + बूटलोडर) को बाहर से पढ़ने के लिए किसी को रोका नहीं जा सकेगा। डेटाशीट से यह प्रतीत होता है कि वे बिट्स केवल एलपीएम / एसपीएम कमांड को ब्लॉक करेंगे, लेकिन सीरियल प्रोग्रामर इसका उपयोग नहीं कर रहा है। धारावाहिक प्रोग्रामिंग और jtag को अक्षम करने के लिए, यह मेरे लिए एक और बड़ा सवाल है। बूटलोडर को अपग्रेड करने के लिए (कभी-कभार) मैं एचवी प्रोग्रामिंग इंटरफेस हेडर ऑनबोर्ड लगाऊंगा। लेकिन क्या कोई HV प्रोग्रामर का उपयोग फ्लैश करने के लिए कर सकता है? मुझे पता है कि एचवी प्रोग्रामर चिप को मिटा सकता है यहां तक ​​कि आईएसपी / जेएटीएजी भी अक्षम हैं।
पाब्लो

@ पाब्लो, सॉरी, मेरा मतलब कोई अपराध नहीं था। जब मैंने पहली बार आपका प्रश्न देखा, तो चोरी का विचार मुझे नहीं हुआ; और मैंने एक उत्तर लिखा जो लॉक कोड को पुनः प्राप्त करने पर केंद्रित था। हालाँकि मैं काम पर था और उस जवाब को सबमिट करने से पहले मेरे पास ~ 2 घंटे का ठहराव था। फिर जब मैं वापस आया, मैंने देखा कि अभी भी कोई जवाब नहीं था और थोड़ा आश्चर्यचकित था, तो आपके प्रश्न को फिर से पढ़ने पर मुझे लगा कि 'चोरी' हो सकती है। आपकी गलती नहीं है, मैंने अब अस्वीकरण हटा दिया है। उस तालिका में सूचीबद्ध अंतरों के कारण प्रोसेसर मॉडल की आवश्यकता थी और क्योंकि
8/16/32

1
ъGarrett फोगेरली: मेरा मतलब एचवी प्रोग्रामर ऑनबोर्ड लगाना नहीं था, सिर्फ हेडर :) लेकिन मुझे लगा कि यह नेक्सेसरी नहीं है क्योंकि लॉक बिट्स ने काम किया है और सिर्फ इस मामले में कि मैं आईएसपी हेडर का उपयोग करके चिप को मिटा सकता हूं और डिवाइस पर फिर से पूरा फ्लैश लिख सकता हूं। तो मेरे मूल प्रश्न के उत्तर को संक्षेप में प्रस्तुत करने के लिए - LB1 और LB2 को सेट करने से पूरे फ़्लैश क्षेत्र को पढ़ने से किसी को रोका जा सकेगा और साथ ही मुझे बूटलोडर के माध्यम से प्रोग्राम मेमोरी लिखने से भी नहीं रोका जा सकेगा।
पाब्लो

3

आप कुछ ATMega उपकरणों पर लॉक बिट्स का उपयोग कर सकते हैं और फिर भी अपने कोड को बूटलोडर के साथ अपडेट कर सकते हैं।

मैंने एक ATMega 328 पर LB1 और LB2 क्रमादेशित किया। फिर बूटलोडर मंगाया, मुख्य कार्यक्रम को अद्यतन किया - सभी ने पूरी तरह से काम किया।

आईएसपी न तो किसी फ्लैश / ईप्रोम / फ़्यूज़ को पढ़ सकता है और न ही लिख सकता है लेकिन बूटलोडर अभी भी एप्लिकेशन सेक्शन लिख सकता है।

ISP के साथ एक चिप मिटा लॉक बिट्स (LB1 और LB2) को साफ कर देगा, लेकिन पूरे फ्लैश / ईप्रोम को भी मिटा देगा, इस प्रकार आप अपने कोड की रक्षा कर सकते हैं (हालांकि आपको आश्वस्त करना होगा कि आपका बूटलोडर हैक नहीं किया जा सकता)


3
वर्तमान में स्वीकृत उत्तर पर यह कैसे सुधरता है?
इग्नासियो वाज़क्वेज़-अब्राम्स

ध्यान दें कि जब तक आपके पास एक मानक Arduino- शैली बूटलोडर है, तब तक रीडबैक लॉक करना लगभग व्यर्थ होगा क्योंकि बूटलोडर में एक रीडबैक क्षमता होती है जब तक कि आप उन्नत 328P-केवल मोड का उपयोग नहीं करते हैं जो कि बूटलोडर LPM को स्मृति को लागू करने में अक्षम करता है। अन्यथा आपको बूट-लोडर को संशोधित करने की आवश्यकता होगी, जिसे हटाने के लिए, अब प्रोग्रामिंग को सत्यापित करने में सक्षम नहीं होने की कीमत पर। (आप संभावित रूप से एक अलग सत्यापन तंत्र बना सकते हैं, लेकिन यह गैर-मानक होगा, जिसके लिए आपको अवार्ड को बदलने / बदलने की आवश्यकता होगी)
क्रिस स्ट्रैटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.