Torna agli aggiornamenti
New releaseSep 12, 2026

kasld v0.4.0

KASLD derandomizza il layout della memoria virtuale e fisica del kernel Linux da un processo locale, utilizzando tutto ciò che il suo punto di osservazione — privilegi, configurazione e confinamento — consente.

Condividi

KASLD logo generato con Copilot (ritagliato)

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

KASLD recupera il layout della memoria virtuale e fisica del kernel Linux — principalmente la base del testo del kernel — da un processo locale. Ciò che può recuperare è funzione del punto di osservazione di quel processo: i suoi privilegi e le sue capability, la configurazione del sistema e qualsiasi confinamento in container. Recupera la base direttamente dove un leak o un canale laterale lo consente, e altrimenti la restringe al più piccolo insieme di posizionamenti supportati dalle prove disponibili.

Il motore di inferenza fonde le prove provenienti da decine di tecniche indipendenti con le invarianti note dell'architettura, restringendo il posizionamento del kernel a una finestra residua — riportata come il numero di slot sopravvissuti (i posizionamenti che KASLR avrebbe potuto scegliere) e i bit di entropia che essi rappresentano: un limite superiore alla protezione che KASLR conserva da questo punto di osservazione, non una garanzia che la base sia fuori dalla portata di un attaccante (vedi docs/limitations.md).

Il recupero completo è spesso impossibile su un target irrobustito — uno in cui non sopravvive alcun leak diretto del testo del kernel e i canali laterali esposti dalla sua architettura e dalla sua CPU sono chiusi — ma l'insieme dei vincoli è raramente vuoto. Su architetture senza KASLR, il motore individua l'indirizzo di caricamento scelto dal bootloader.

Supporta:

  • 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

Avvio rapido

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

La directory build/<arch>/ è autosufficiente e può essere distribuita su un sistema target:

build/<arch>/
  kasld              <- eseguire questo
  components/        <- componenti di leak

Una configurazione irrobustita (kernel.dmesg_restrict=1, kernel.kptr_restrict=1, kernel.perf_event_paranoid=2 o superiore, kernel.unprivileged_bpf_disabled=1 e hashing dei puntatori %pK) restringe il percorso dell'oracolo del filesystem, ma è solo un asse del punto di osservazione: le tecniche basate su canali laterali, entropia debole e capability concesse sono indipendenti da questi sysctl. Per i test, lo script extra/weaken-kernel-hardening può allentare temporaneamente queste impostazioni (richiede root).

Esempio di output

La modalità testo predefinita stampa una panoramica che mette la risposta al primo posto:

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]

La colonna Certainty separa due diverse affermazioni sulla stessa quantità. Una riga guaranteed è dimostrata: il valore vero giace all'interno di quella finestra. Una riga likely è la singola migliore stima supportata dalle prove — sempre un sottoinsieme della finestra garantita, e può essere errata, perché si basa su segnali al di sotto della soglia di solidità, come i canali laterali temporali. Un risultato su cui vale la pena agire direttamente è una riga guaranteed ristretta a un solo candidato; un valore likely è un indizio da confermare, non un fatto su cui fare affidamento.

-v aggiunge la lettura dettagliata completa (banner, blocco di configurazione del sistema, log per componente, analisi KASLR, mappe del layout di memoria). -j emette JSON leggibile dalla macchina — la vista strutturata completa, includendo sempre i record per componente e la valutazione dell'hardening. -1 emette una singola riga incanalabile in shell. -m formatta per i sistemi di issue tracking. -H aggiunge la valutazione dell'hardening ai report testo/markdown.

Vedi docs/usage.md per la CLI completa, i dettagli delle modalità di output, la modalità explain e la valutazione dell'hardening.

Punto di osservazione

Ciò che KASLD può recuperare dipende dal punto di osservazione del processo in esecuzione — non un singolo livello di privilegio, ma la combinazione di tre cose indipendenti:

Categorie