Kernhärtung

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 oder CONFIG_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.