
kasld v0.4.0
KASLD desaleatoriza la disposición de la memoria virtual y física del kernel de Linux desde un proceso local, utilizando lo que su ventaja —privilegio, configuración y confinamiento— le permita.
KASLD recupera el diseño de memoria virtual y física del kernel de Linux — principalmente la base del texto del kernel — desde un proceso local. Lo que puede recuperar es función del punto de observación de ese proceso: sus privilegios y capacidades, la configuración del sistema y cualquier confinamiento de contenedor. Recupera la base directamente cuando una fuga o un canal lateral lo permite y, en caso contrario, la reduce al conjunto más pequeño de ubicaciones que respalda la evidencia disponible.
El motor de inferencia fusiona evidencia de docenas de técnicas independientes con las invariantes conocidas de la arquitectura, reduciendo la ubicación del kernel a una ventana residual — reportada como el número de slots supervivientes (las ubicaciones que KASLR podría haber elegido) y los bits de entropía que representan: una cota superior de la protección que KASLR conserva desde este punto de observación, no una garantía de que la base esté fuera del alcance de un atacante (véase docs/limitations.md).
La recuperación completa suele ser imposible en un objetivo endurecido — uno en el que no sobrevive ninguna fuga directa de texto del kernel y los canales laterales que exponen su arquitectura y CPU están cerrados — pero el conjunto de restricciones rara vez está vacío. En arquitecturas sin KASLR, el motor localiza la dirección de carga elegida por el gestor de arranque.
Compatible con:
- 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
Inicio rápido
sudo apt install libc-dev make gcc binutils git
git clone https://github.com/bcoles/kasld
cd kasld
make
./build/<arch>/kasld
El directorio build/<arch>/ es autocontenido y puede desplegarse en un
sistema objetivo:
build/<arch>/
kasld <- ejecutar esto
components/ <- componentes de fuga
Una configuración endurecida (kernel.dmesg_restrict=1,
kernel.kptr_restrict=1, kernel.perf_event_paranoid=2 o superior,
kernel.unprivileged_bpf_disabled=1 y el hashing de punteros %pK) reduce la
ruta del oráculo del sistema de archivos, pero es solo un eje del punto de
observación: las técnicas de canal lateral, de entropía débil y las que
otorgan capacidades son independientes de estos sysctls. Para pruebas, el
script extra/weaken-kernel-hardening puede
relajar temporalmente estos ajustes (requiere root).
Ejemplo de salida
El modo de texto predeterminado imprime una visión general que prioriza la respuesta:
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 columna Certainty separa dos afirmaciones distintas sobre la misma
cantidad. Una fila guaranteed está demostrada: el valor verdadero se
encuentra dentro de esa ventana. Una fila likely es la mejor estimación
única que respalda la evidencia — siempre un subconjunto de la ventana
garantizada, y puede ser errónea, porque se basa en señales por debajo del
umbral de solidez, como los canales laterales de temporización. Un resultado
sobre el que merece la pena actuar directamente es una fila guaranteed
reducida a un único candidato; un valor likely es una pista que confirmar,
no un hecho en el que confiar.
-v añade la lectura detallada completa (banner, bloque de configuración del
sistema, registros por componente, análisis de KASLR, mapas de diseño de
memoria). -j emite JSON legible por máquina — la vista estructurada
completa, que incluye siempre los registros por componente y la evaluación de
endurecimiento. -1 emite una única línea canalizable a un shell. -m
formatea para gestores de incidencias. -H añade la evaluación de
endurecimiento a los informes de texto/markdown.
Véase docs/usage.md para la CLI completa, los detalles de los modos de salida, el modo explicativo y la evaluación de endurecimiento.
Punto de observación
Lo que KASLD puede recuperar depende del punto de observación del proceso en ejecución — no de un único nivel de privilegio, sino de la combinación de tres cosas independientes: