Volver a actualizaciones
Nuevo releaseSep 12, 2026

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.

Compartir

Logotipo de KASLD generado con Copilot (recortado)

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

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:

Categorías