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

एंड्रॉइड 8.0 ने कर्नेल कमजोरियों को कम करने और कर्नेल ड्राइवरों में बग ढूंढने में मदद के लिए कर्नेल हार्डनिंग सुविधाओं को जोड़ा। विशेषताएं एंड्रॉइड-3.18, एंड्रॉइड-4.4, और एंड्रॉइड-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

एंड्रॉइड-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() फ़ंक्शंस का उपयोग करने के लिए बदलने की आवश्यकता है।
,

एंड्रॉइड 8.0 ने कर्नेल कमजोरियों को कम करने और कर्नेल ड्राइवरों में बग ढूंढने में मदद के लिए कर्नेल हार्डनिंग सुविधाओं को जोड़ा। विशेषताएं एंड्रॉइड-3.18, एंड्रॉइड-4.4, और एंड्रॉइड-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

एंड्रॉइड-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() फ़ंक्शंस का उपयोग करने के लिए बदलने की आवश्यकता है।
,

एंड्रॉइड 8.0 ने कर्नेल कमजोरियों को कम करने और कर्नेल ड्राइवरों में बग ढूंढने में मदद के लिए कर्नेल हार्डनिंग सुविधाओं को जोड़ा। विशेषताएं एंड्रॉइड-3.18, एंड्रॉइड-4.4, और एंड्रॉइड-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

एंड्रॉइड-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() फ़ंक्शंस का उपयोग करने के लिए बदलने की आवश्यकता है।