अनुप्रयोगों द्वारा जारी लिनक्स शून्य मेमोरी करता है


3

मैं लिनक्स को और अधिक सुरक्षित बनाने के बारे में सोच रहा था। क्या मैं कोड लिख सकता हूं जो स्मृति के एक समूह को पकड़ लेता है और "दिलचस्प" सामान ढूंढ रहा है?

    main()
    {
    char *p = (char *)malloc(10000000);

    scan_for_stuff(p,10000000);
    }

मुझे लगता है कि इस तरह से दिलचस्प चीजें खोजना मुश्किल होगा, लेकिन आप कभी नहीं जानते ...

जवाबों:


2

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

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

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


ठीक है, इस तरह के हमले के लिए, आपको कंप्यूटर के साथ ठीक होना चाहिए। गर्म स्मृति के माध्यम से जाना दूर से, यहां तक ​​कि वायरस के माध्यम से भी हो सकता है। मैं यह देखने जा रहा हूं कि अपने खुद के मॉलोक या सब्रक को लिखना कितना कठिन होगा जो मेमोरी को शून्य नहीं करता है। क्या बूट चक्र में जाने से पहले बायोस को पूरी भौतिक स्मृति शून्य होने में बहुत समय लगेगा?
Bing Bang

4

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

ठेठ malloc कार्यान्वयन उनके पृष्ठों को या तो उपयोग करके प्राप्त करते हैं sbrk या मानचित्रण द्वारा /dev/zero, दोनों ही शून्य पृष्ठ देते हैं। यदि आपको एक ठेठ से गैर-शून्य पृष्ठ मिलते हैं malloc, यह केवल इसलिए होगा क्योंकि आपकी प्रक्रिया ने उनमें कुछ डाला है।

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


मैं यह नहीं कह रहा हूँ कि आप एक जीवित प्रक्रिया की स्मृति को देख सकते हैं। निश्चित ही यह संभव नहीं है। मैं पूछ रहा हूं कि क्या प्रक्रिया के रिलीज होने के बाद लिनक्स स्मृति को शून्य कर देता है..यह रिलीज के समय किया जाना चाहिए। क्योंकि यदि आप इसे करने के लिए इसे मॉलोक पर छोड़ देते हैं, तो घुसपैठिया अपना खुद का मॉलोक लिख सकता है जो शून्यकरण नहीं करता है।
Bing Bang

और आपको स्वैप स्पेस को एन्क्रिप्ट या पूरी तरह से हटा देना चाहिए। आपके कंप्यूटर को स्वैपिंग शुरू करने के लिए मजबूर करना और फिर दिलचस्प चीजों के लिए स्वैप स्थान को स्कैन करना संभव हो सकता है।
Bing Bang

मुझे लगता है कि आप जो भी सिस्टम कॉल मॉलॉक करते हैं, उस पर आप भी जीरो कर सकते हैं। sbrk अपने आप में एक लाइब्रेरी फंक्शन है, इसलिए वहां शून्यकरण नहीं किया जा सकता है। यह कर्नेल में किया जाना है, सिस्टम कॉल पर जो sbrk बनाता है।
Bing Bang

@BingBang आप इसे किसी भी समय कर सकते हैं, इससे कोई फर्क नहीं पड़ता कि कब। वास्तव में, यदि आप एक हार्डवेयर पेज ज़ीरर है, तो आप इसे हार्डवेयर से कर सकते हैं। किसी प्रक्रिया को पृष्ठ देने से पहले आपको केवल शून्य पृष्ठों के पूल से आकर्षित होना होगा। आप इसे तब कर सकते हैं जब आप व्यस्त न हों।
David Schwartz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.