কার্নেল হার্ডেনিং

অ্যান্ড্রয়েড 8.0 কার্নেল দুর্বলতা প্রশমিত করতে এবং কার্নেল ড্রাইভারগুলিতে বাগ খুঁজে পেতে সহায়তা করার জন্য কার্নেল শক্ত করার বৈশিষ্ট্য যুক্ত করেছে। বৈশিষ্ট্যগুলি android-3.18, android-4.4, এবং android-4.9 শাখাগুলিতে কার্নেল/সাধারণ

বাস্তবায়ন

এই বৈশিষ্ট্যগুলি অর্জন করতে, ডিভাইস প্রস্তুতকারক এবং SOC-দের kernel/common থেকে তাদের কার্নেল ট্রিতে সমস্ত হার্ডেনিং প্যাচ মার্জ করা উচিত এবং নিম্নলিখিত কার্নেল কনফিগারেশন বিকল্পগুলি সক্রিয় করা উচিত:

  • কঠোর ব্যবহারকারী কপি: CONFIG_HARDENED_USERCOPY=y
  • PAN অনুকরণ - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • PAN অনুকরণ - আর্ম: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 এবং পরবর্তী কার্নেল: CONFIG_RANDOMIZE_BASE=y

ডিভাইস ট্রি নোড /chosen/kaslr-seed অথবা EFI_RNG_PROTOCOL প্রয়োগ করে হার্ডওয়্যার এনট্রপি পাস করার জন্য KASLR-এর বুটলোডার সমর্থন প্রয়োজন।

এছাড়াও বিদ্যমান শক্তকরণ বৈশিষ্ট্যগুলি সক্ষম করা হয়েছে তা নিশ্চিত করুন:

  • স্ট্যাক বাফার ওভারফ্লো প্রশমন: 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() ফাংশন ব্যবহার করতে পরিবর্তন করতে হবে।
,

অ্যান্ড্রয়েড 8.0 কার্নেল দুর্বলতা প্রশমিত করতে এবং কার্নেল ড্রাইভারগুলিতে বাগ খুঁজে পেতে সহায়তা করার জন্য কার্নেল শক্ত করার বৈশিষ্ট্য যুক্ত করেছে। বৈশিষ্ট্যগুলি android-3.18, android-4.4, এবং android-4.9 শাখাগুলিতে কার্নেল/সাধারণ

বাস্তবায়ন

এই বৈশিষ্ট্যগুলি অর্জন করতে, ডিভাইস প্রস্তুতকারক এবং SOC-দের kernel/common থেকে তাদের কার্নেল ট্রিতে সমস্ত হার্ডেনিং প্যাচ মার্জ করা উচিত এবং নিম্নলিখিত কার্নেল কনফিগারেশন বিকল্পগুলি সক্রিয় করা উচিত:

  • কঠোর ব্যবহারকারী কপি: CONFIG_HARDENED_USERCOPY=y
  • PAN অনুকরণ - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • PAN অনুকরণ - আর্ম: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 এবং পরবর্তী কার্নেল: CONFIG_RANDOMIZE_BASE=y

ডিভাইস ট্রি নোড /chosen/kaslr-seed অথবা EFI_RNG_PROTOCOL প্রয়োগ করে হার্ডওয়্যার এনট্রপি পাস করার জন্য KASLR-এর বুটলোডার সমর্থন প্রয়োজন।

এছাড়াও বিদ্যমান শক্তকরণ বৈশিষ্ট্যগুলি সক্ষম করা হয়েছে তা নিশ্চিত করুন:

  • স্ট্যাক বাফার ওভারফ্লো প্রশমন: 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() ফাংশন ব্যবহার করতে পরিবর্তন করতে হবে।
,

অ্যান্ড্রয়েড 8.0 কার্নেল দুর্বলতা প্রশমিত করতে এবং কার্নেল ড্রাইভারগুলিতে বাগ খুঁজে পেতে সহায়তা করার জন্য কার্নেল শক্ত করার বৈশিষ্ট্য যুক্ত করেছে। বৈশিষ্ট্যগুলি android-3.18, android-4.4, এবং android-4.9 শাখাগুলিতে কার্নেল/সাধারণ

বাস্তবায়ন

এই বৈশিষ্ট্যগুলি অর্জন করতে, ডিভাইস প্রস্তুতকারক এবং SOC-দের kernel/common থেকে তাদের কার্নেল ট্রিতে সমস্ত হার্ডেনিং প্যাচ মার্জ করা উচিত এবং নিম্নলিখিত কার্নেল কনফিগারেশন বিকল্পগুলি সক্রিয় করা উচিত:

  • কঠোর ব্যবহারকারী কপি: CONFIG_HARDENED_USERCOPY=y
  • PAN অনুকরণ - arm64: CONFIG_ARM64_SW_TTBR0_PAN=y
  • PAN অনুকরণ - আর্ম: CONFIG_CPU_SW_DOMAIN_PAN=y
  • KASLR - 4.4 এবং পরবর্তী কার্নেল: CONFIG_RANDOMIZE_BASE=y

ডিভাইস ট্রি নোড /chosen/kaslr-seed অথবা EFI_RNG_PROTOCOL প্রয়োগ করে হার্ডওয়্যার এনট্রপি পাস করার জন্য KASLR-এর বুটলোডার সমর্থন প্রয়োজন।

এছাড়াও বিদ্যমান শক্তকরণ বৈশিষ্ট্যগুলি সক্ষম করা হয়েছে তা নিশ্চিত করুন:

  • স্ট্যাক বাফার ওভারফ্লো প্রশমন: 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() ফাংশন ব্যবহার করতে পরিবর্তন করতে হবে।