
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.
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: