Zurück zu den Updates
New releaseSep 12, 2026

kasld v0.4.0

KASLD randomisiert das virtuelle und physische Speicherlayout des Linux-Kernels von einem lokalen Prozess aus, wobei es nutzt, was seine Perspektive – Privilegien, Konfiguration und Einschränkungen – zulässt.

Teilen

KASLD-Logo, generiert mit Copilot (zugeschnitten)

Build Status CodeQL Platform: Linux Architectures C99 Release License: MIT

KASLD rekonstruiert das virtuelle und physische Speicherlayout des Linux-Kernels — hauptsächlich die Kernel-Textbasis — aus einem lokalen Prozess. Was es rekonstruieren kann, hängt von der Perspektive dieses Prozesses ab: seinen Privilegien und Fähigkeiten, der Systemkonfiguration und einer etwaigen Container-Eingrenzung. Wo ein Leck oder ein Seitenkanal es erlaubt, rekonstruiert es die Basis direkt; andernfalls grenzt es sie auf die kleinste Menge von Platzierungen ein, die die verfügbaren Hinweise stützen.

Die Inferenz-Engine fusioniert Hinweise aus Dutzenden unabhängiger Techniken mit den bekannten Invarianten der Architektur und grenzt die Platzierung des Kernels auf ein Restfenster ein — angegeben als Anzahl der verbleibenden Slots (der Platzierungen, die KASLR hätte wählen können) und die Bits an Entropie, die sie repräsentieren: eine obere Schranke für den Schutz, den KASLR aus dieser Perspektive behält, keine Garantie, dass die Basis außerhalb der Reichweite eines Angreifers liegt (siehe docs/limitations.md).

Eine vollständige Rekonstruktion ist auf einem gehärteten Ziel oft unmöglich — einem, bei dem kein direktes Kernel-Text-Leck überlebt und die Seitenkanäle, die seine Architektur und CPU offenlegen, geschlossen sind —, doch die Constraint-Menge ist selten leer. Auf Architekturen ohne KASLR ermittelt die Engine die vom Bootloader gewählte Ladeadresse.

Unterstützt:

  • x86 (i386+, amd64)
  • ARM (armv6, armv7, armv8, aarch64)
  • MIPS (mipsbe, mipsel, mips64, mips64el)
  • PowerPC (ppc, ppcle, ppc64, ppc64le)
  • RISC-V (riscv32, riscv64)
  • LoongArch (loongarch64)
  • s390

Schnellstart

sudo apt install libc-dev make gcc binutils git
git clone https://github.com/bcoles/kasld
cd kasld
make
./build/<arch>/kasld

Das Verzeichnis build/<arch>/ ist eigenständig und kann auf ein Zielsystem deployt werden:

build/<arch>/
  kasld              <- dies ausführen
  components/        <- Leck-Komponenten

Eine gehärtete Konfiguration (kernel.dmesg_restrict=1, kernel.kptr_restrict=1, kernel.perf_event_paranoid=2 oder höher, kernel.unprivileged_bpf_disabled=1 und %pK-Pointer-Hashing) verengt den Dateisystem-Oracle-Pfad, ist aber nur eine Achse der Perspektive: Seitenkanal-, Schwache-Entropie- und durch Fähigkeiten gewährte Techniken sind von diesen Sysctls unabhängig. Zum Testen kann das Skript extra/weaken-kernel-hardening diese Einstellungen vorübergehend lockern (erfordert Root).

Beispielausgabe

Der Standard-Textmodus gibt eine antwortorientierte Übersicht aus:

KASLD 0.4.2-dev  --  Kernel Address Space Layout Derandomization
Target: x86_64 / 7.0.0

Running 117 of 120 components (3 experimental skipped; use -x to enable)...
[####################] 100%  117/117  40.9s
1 component timed out after 30s and was killed (prefetch_directmap)

  Quantity             Certainty   Window                                   Candidates        Grain
  -------------------  ----------  ---------------------------------------  ----------------  -----
  Virtual Image Base   guaranteed  0xffffffff81000000 - 0xffffffffbd400000        483 of 512  2 MiB
  Virtual Image Base   likely      0xffffffff93400000 slide +0x12400000                    1  2 MiB
  Physical Image Base  guaranteed           0x1000000 -         0x3d400000               474  2 MiB
  Physical Image Base  likely               0x1000000 -         0x3c29d000               474  2 MiB
  Direct Map Base      guaranteed  0xffff800000000000 - 0xffffa4aa80000000            37,547  1 GiB
  Vmalloc Base         guaranteed  0xffff898000000000 - 0xffffd6d580000000  79,191 of 79,191  1 GiB
  Vmemmap Base         guaranteed  0xffffa98040000000 - 0xfffffd0000000000            85,504  1 GiB
  Module Region Base   guaranteed  0xffffffffa0000000 - 0xffffffffff000000           389,121  4 KiB
  Module Region Base   likely      0xffffffffc0000000 - 0xffffffffc0400000             1,025  4 KiB
  Paging Level         guaranteed  48                                                 1 of 2  -

  Note: physical and virtual text randomize independently

  Note: 1 sub-range excluded from the windows above; the counts
        already reflect them (-v lists the ranges).

Evidence  (1 finding, 2 components)
  Region             Position  Address             Sources
  -----------------  --------  ------------------  -------
  virt kernel image  base      0xffffffff93400000        2

[-v: detailed results, memory map, system info]  [-H: hardening assessment]

Die Spalte Certainty trennt zwei verschiedene Aussagen über dieselbe Größe. Eine guaranteed-Zeile ist bewiesen: Der wahre Wert liegt innerhalb dieses Fensters. Eine likely-Zeile ist die beste einzelne Schätzung, die die Hinweise stützen — immer eine Teilmenge des garantierten Fensters, und sie kann falsch sein, weil sie auf Signale unterhalb der Soliditätsschwelle wie Timing-Seitenkanäle zurückgreift. Ein direkt verwertbares Ergebnis ist eine guaranteed-Zeile, die auf einen einzigen Kandidaten verengt ist; ein likely-Wert ist eine zu bestätigende Spur, kein Fakt, auf den man sich verlassen sollte.

-v fügt die vollständige ausführliche Ausgabe hinzu (Banner, Systemkonfigurationsblock, Komponenten-Protokolle, KASLR-Analyse, Speicherlayout-Karten). -j gibt maschinenlesbares JSON aus — die vollständige strukturierte Ansicht, stets einschließlich der Komponenten-Datensätze und der Härtungsbewertung. -1 gibt eine einzelne shell-pipebare Zeile aus. -m formatiert für Issue-Tracker. -H hängt die Härtungsbewertung an die Text-/Markdown-Berichte an.

Siehe docs/usage.md für die vollständige CLI, Details zu den Ausgabemodi, den Erklärungsmodus und die Härtungsbewertung.

Perspektive

Was KASLD rekonstruieren kann, hängt von der Perspektive des laufenden Prozesses ab — nicht von einer einzelnen Privilegienstufe, sondern von der Kombination dreier unabhängiger Dinge:

Kategorien