कर्नेल हार्डनिंग

Android 8.0 में कर्नेल के सख्त होने की सुविधाएं जोड़ी गई हैं, ताकि कर्नेल के खतरों को कम किया जा सके और kernel ड्राइवर में बग मिल सकते हैं. ये सुविधाएँ, kernel/common में ब्रांच android-3.18, android-4.4, और android-4.9.

लागू करना

इन सुविधाओं को पाने के लिए, डिवाइस बनाने वाली कंपनी और एसओसी को सभी को मर्ज करना होगा kernel/common से लेकर उनके कर्नेल ट्री तक सख्त पैच और निम्न कर्नेल कॉन्फ़िगरेशन विकल्पों को सक्षम करें:

  • मज़बूत यूज़रकॉपी: CONFIG_HARDENED_USERCOPY=y
  • पैन एम्युलेशन - आर्म64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • पैन एम्युलेशन - ग्रुप: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 और उसके बाद के कर्नेल: CONFIG_RANDOMIZE_BASE=y अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

KASLR को हार्डवेयर एंट्रॉपी से आगे बढ़ने के लिए बूटलोडर की सुविधा की भी ज़रूरत होती है डिवाइस ट्री नोड /chosen/kaslr-seed या लागू करके EFI_RNG_PROTOCOL.

यह भी पक्का करें कि डेटा को सुरक्षित रखने वाली मौजूदा सुविधाएं चालू हों:

  • स्टैक बफ़र ओवरफ़्लो कम करने की सुविधा: CONFIG_CC_STACKPROTECTOR_STRONG=y अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  • इंटरनल मेमोरी सुरक्षा: CONFIG_DEBUG_RODATA=y या CONFIG_STRICT_KERNEL_RWX=y
  • कर्नेल से यूज़र-स्पेस ऐक्सेस प्रतिबंधित करें - x86 (डिफ़ॉल्ट रूप से चालू): CONFIG_X86_SMAP=y अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

टेस्ट करना

आपके लागू किए जाने की जांच करने के लिए, CONFIG_LKDTM=y को कर्नेल में जोड़ें कॉन्फ़िगर करें और पुष्टि करें कि नीचे दिया गया हर निर्देश, कर्नेल पर ले जाता है घबराहट:

echo ACCESS_USERSPACE > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_USERSPACE > /sys/kernel/debug/provoke-crash/DIRECT
echo WRITE_RO > /sys/kernel/debug/provoke-crash/DIRECT
echo WRITE_RO_AFTER_INIT > /sys/kernel/debug/provoke-crash/DIRECT
echo WRITE_KERN > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_STACK > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_RODATA > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_KMALLOC > /sys/kernel/debug/provoke-crash/DIRECT
echo EXEC_VMALLOC > /sys/kernel/debug/provoke-crash/DIRECT
echo CORRUPT_STACK > /sys/kernel/debug/provoke-crash/DIRECT

Android-4.9 के लिए:

echo USERCOPY_HEAP_SIZE_TO > /sys/kernel/debug/provoke-crash/DIRECT
echo USERCOPY_HEAP_SIZE_FROM > /sys/kernel/debug/provoke-crash/DIRECT

सामान्य समस्याएं

इन बदलावों से कर्नेल ड्राइवर में गड़बड़ियां हो सकती हैं, जिन्हें ऐसा करना चाहिए डिवाइस निर्माता या कर्नेल ड्राइवर के मालिक से तय होती है.

  • हार्डर्न यूज़रकॉपी डेटा को कॉपी करते समय, गलत सीमाओं को दिखाता है उपयोगकर्ता के स्पेस में. इन्हें भी, मेमोरी से जुड़ी अन्य गड़बड़ियों की तरह ठीक किया जाना चाहिए.
  • पैन एम्युलेशन, कर्नेल से सीधे उपयोगकर्ता स्पेस का ऐक्सेस दिखाता है, जो कि अनुमति है. जो ड्राइवर उपयोगकर्ता स्पेस की मेमोरी को ऐक्सेस करने की कोशिश कर रहे हैं उन्हें बदलकर यह करना होगा स्टैंडर्ड copy_to_user()/copy_from_user() का इस्तेमाल करें फ़ंक्शन का इस्तेमाल करना चाहिए.