অ্যান্ড্রয়েড 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()
ফাংশন ব্যবহার করতে পরিবর্তন করতে হবে।