Voltar às atualizações
New releaseSep 12, 2026

kasld v0.4.0

O KASLD remove a aleatoriedade do layout de memória virtual e física do kernel Linux a partir de um processo local, usando o que sua posição — privilégio, configuração e confinamento — permite.

Compartilhar

Logotipo do KASLD gerado com Copilot (recortado)

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

O KASLD recupera o layout de memória virtual e física do kernel Linux — principalmente a base do texto do kernel — a partir de um processo local. O que ele consegue recuperar é função do ponto de observação desse processo: seus privilégios e capacidades, a configuração do sistema e qualquer confinamento de container. Ele recupera a base de forma direta onde um vazamento ou canal lateral o permite e, caso contrário, a restringe ao menor conjunto de posicionamentos que as evidências disponíveis sustentam.

O motor de inferência funde evidências de dezenas de técnicas independentes com as invariantes conhecidas da arquitetura, restringindo o posicionamento do kernel a uma janela residual — reportada como o número de slots sobreviventes (os posicionamentos que o KASLR poderia ter escolhido) e os bits de entropia que eles representam: um limite superior da proteção que o KASLR mantém a partir desse ponto de observação, não uma garantia de que a base está fora do alcance de um atacante (veja docs/limitations.md).

A recuperação completa geralmente é impossível em um alvo endurecido — um onde nenhum vazamento direto do texto do kernel sobrevive e os canais laterais que sua arquitetura e CPU expõem estão fechados — mas o conjunto de restrições raramente é vazio. Em arquiteturas sem KASLR, o motor localiza o endereço de carregamento escolhido pelo bootloader.

Suporta:

  • 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

Início rápido

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

O diretório build/<arch>/ é autocontido e pode ser implantado em um sistema alvo:

build/<arch>/
  kasld              <- execute isto
  components/        <- componentes de vazamento

Uma configuração endurecida (kernel.dmesg_restrict=1, kernel.kptr_restrict=1, kernel.perf_event_paranoid=2 ou superior, kernel.unprivileged_bpf_disabled=1 e hashing de ponteiros %pK) restringe o caminho do oráculo do sistema de arquivos, mas é apenas um eixo do ponto de observação: técnicas de canal lateral, de entropia fraca e concedidas por capacidades são independentes desses sysctls. Para testes, o script extra/weaken-kernel-hardening pode relaxar temporariamente essas configurações (requer root).

Exemplo de saída

O modo de texto padrão imprime uma visão geral com a resposta em primeiro lugar:

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]

A coluna Certainty separa duas afirmações diferentes sobre a mesma quantidade. Uma linha guaranteed é provada: o valor verdadeiro está dentro dessa janela. Uma linha likely é a melhor estimativa única que as evidências sustentam — sempre um subconjunto da janela garantida, e pode estar errada, pois se baseia em sinais abaixo do piso de solidez, como canais laterais de temporização. Um resultado que vale a pena usar diretamente é uma linha guaranteed reduzida a um único candidato; um valor likely é uma pista a confirmar, não um fato em que confiar.

-v adiciona a leitura verbosa completa (banner, bloco de configuração do sistema, logs por componente, análise de KASLR, mapas de layout de memória). -j emite JSON legível por máquina — a visão estruturada completa, sempre incluindo os registros por componente e a avaliação de endurecimento. -1 emite uma única linha canalizável para shell. -m formata para rastreadores de issues. -H anexa a avaliação de endurecimento aos relatórios de texto/markdown.

Veja docs/usage.md para a CLI completa, detalhes dos modos de saída, modo explain e avaliação de endurecimento.

Ponto de observação

O que o KASLD consegue recuperar depende do ponto de observação do processo em execução — não de um único nível de privilégio, mas da combinação de três coisas independentes:

Categorias