אנדרואיד 8.0 הוסיפה תכונות הקשחת ליבה כדי לסייע בהפחתת פגיעויות ליבה ולמצוא באגים במנהלי התקנים של ליבה. התכונות נמצאות בקרנל/נפוצות בענפים android-3.18, android-4.4 ו-android-4.9.
יישום
כדי לרכוש תכונות אלה, יצרני התקנים ו-SOCs צריכים למזג את כל תיקוני ההקשחה 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
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
בעיות נפוצות
שינויים אלו עשויים לחשוף באגים במנהלי התקנים של הליבה, אשר צריכים להיות מתוקנים על ידי יצרן המכשיר או הבעלים של מנהל ההתקן הליבה.
- עותק משתמש מוקשה חושף בדיקת גבולות שגויה בעת העתקת נתונים אל/ממרחב המשתמש. אלה צריכים להיות מתוקנים כמו כל באגים אחרים של שחיתות זיכרון.
- אמולציית PAN חושפת גישה ישירה למרחב משתמש מהקרנל, מה שאסור. יש לשנות מנהלי התקנים המנסים לגשת לזיכרון שטח המשתמש כדי להשתמש בפונקציות הסטנדרטיות
copy_to_user()
/copy_from_user()
במקום זאת.
אנדרואיד 8.0 הוסיפה תכונות הקשחת ליבה כדי לסייע בהפחתת פגיעויות ליבה ולמצוא באגים במנהלי התקנים של ליבה. התכונות נמצאות בקרנל/נפוצות בענפים android-3.18, android-4.4 ו-android-4.9.
יישום
כדי לרכוש תכונות אלה, יצרני התקנים ו-SOCs צריכים למזג את כל תיקוני ההקשחה 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
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
בעיות נפוצות
שינויים אלו עשויים לחשוף באגים במנהלי התקנים של הליבה, אשר צריכים להיות מתוקנים על ידי יצרן המכשיר או הבעלים של מנהל ההתקן הליבה.
- עותק משתמש מוקשה חושף בדיקת גבולות שגויה בעת העתקת נתונים אל/ממרחב המשתמש. אלה צריכים להיות מתוקנים כמו כל באגים אחרים של שחיתות זיכרון.
- אמולציית PAN חושפת גישה ישירה למרחב משתמש מהקרנל, מה שאסור. יש לשנות מנהלי התקנים המנסים לגשת לזיכרון שטח המשתמש כדי להשתמש בפונקציות הסטנדרטיות
copy_to_user()
/copy_from_user()
במקום זאת.
אנדרואיד 8.0 הוסיפה תכונות הקשחת ליבה כדי לסייע בהפחתת פגיעויות ליבה ולמצוא באגים במנהלי התקנים של ליבה. התכונות נמצאות בקרנל/נפוצות בענפים android-3.18, android-4.4 ו-android-4.9.
יישום
כדי לרכוש תכונות אלה, יצרני התקנים ו-SOCs צריכים למזג את כל תיקוני ההקשחה 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
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
בעיות נפוצות
שינויים אלו עשויים לחשוף באגים במנהלי התקנים של הליבה, אשר צריכים להיות מתוקנים על ידי יצרן המכשיר או הבעלים של מנהל ההתקן הליבה.
- עותק משתמש מוקשה חושף בדיקת גבולות שגויה בעת העתקת נתונים אל/ממרחב המשתמש. אלה צריכים להיות מתוקנים כמו כל באגים אחרים של שחיתות זיכרון.
- אמולציית PAN חושפת גישה ישירה למרחב משתמש מהקרנל, מה שאסור. יש לשנות מנהלי התקנים המנסים לגשת לזיכרון שטח המשתמש כדי להשתמש בפונקציות הסטנדרטיות
copy_to_user()
/copy_from_user()
במקום זאת.