Unter Android 8.0 wurden Funktionen zur Kernel-Härtung hinzugefügt, um Kernel zu entschärfen. und Fehler in Kernel-Treibern zu finden. Die Funktionen sind in kernel/common in Branchs android-3.18, android-4.4 und android-4.9.
Implementierung
Um diese Funktionen zu erhalten, sollten Gerätehersteller und SOCs alle
Härtungs-Patches von kernel/common
zu ihrem Kernel-Baum und
Aktivieren Sie die folgenden Kernel-Konfigurationsoptionen:
- Gehärtete Nutzerkopie:
CONFIG_HARDENED_USERCOPY=y
- PAN-Emulation – Verzweigung64:
CONFIG_ARM64_SW_TTBR0_PAN=y
- PAN-Emulation – Verzweigung:
CONFIG_CPU_SW_DOMAIN_PAN=y
- KASLR – Kernel ab 4.4:
CONFIG_RANDOMIZE_BASE=y
KASLR erfordert außerdem Bootloader-Unterstützung, um Hardwareentropie
entweder den Gerätebaumknoten /chosen/kaslr-seed
oder durch Implementieren
EFI_RNG_PROTOCOL
.
Achten Sie außerdem darauf, dass vorhandene Härtungsfunktionen aktiviert sind:
- Minderung des Stack-Pufferüberlaufs:
CONFIG_CC_STACKPROTECTOR_STRONG=y
- Schutz für internen Speicher:
CONFIG_DEBUG_RODATA=y
oderCONFIG_STRICT_KERNEL_RWX=y
- Schränken Sie den Nutzerbereich-Zugriff vom Kernel aus x86 ein (standardmäßig aktiviert):
CONFIG_X86_SMAP=y
Testen
Fügen Sie dem Kernel CONFIG_LKDTM=y
hinzu, um Ihre Implementierung zu testen
und bestätigen Sie, dass jeder der folgenden Befehle zu einem Kernel führt,
Panik:
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
Häufige Probleme
Diese Änderungen führen wahrscheinlich zu Fehlern in Kernel-Treibern, die behoben, die entweder vom Gerätehersteller oder vom Eigentümer des Kernel-Treibers behoben wurden.
- Gehärtete Nutzerkopie zeigt beim Kopieren von Daten falsche Grenzen an zum/vom Userspace. Diese Fehler sollten wie alle anderen Speicherschäden behoben werden.
- Die PAN-Emulation ermöglicht den direkten Zugriff auf den User-Bereich vom Kernel aus,
Zulässig sind. Treiber, die auf den Arbeitsspeicher des Nutzers zugreifen möchten, müssen zu geändert werden:
Standard-
copy_to_user()
/copy_from_user()
verwenden -Funktionen.