Retour aux mises à jour
New releaseSep 12, 2026

kasld v0.4.0

KASLD dérandomise la disposition de la mémoire virtuelle et physique du noyau Linux depuis un processus local, en utilisant tout ce que son point de vue — privilège, configuration et confinement — lui permet.

Partager

KASLD logo generated with Copilot (cropped)

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

KASLD reconstitue la disposition de la mémoire virtuelle et physique du noyau Linux — principalement la base du texte du noyau — depuis un processus local. Ce qu'il peut reconstituer dépend du point de vue de ce processus : ses privilèges et capacités, la configuration du système et tout confinement de conteneur. Il reconstitue la base directement lorsqu'une fuite ou un canal auxiliaire le permet, et la réduit sinon au plus petit ensemble de placements que les preuves disponibles étayent.

Le moteur d'inférence fusionne les preuves issues de dizaines de techniques indépendantes avec les invariants connus de l'architecture, réduisant le placement du noyau à une fenêtre résiduelle — rapportée comme le nombre d'emplacements (slots) survivants (les placements que KASLR aurait pu choisir) et les bits d'entropie qu'ils représentent : une borne supérieure de la protection que KASLR conserve depuis ce point de vue, et non une garantie que la base est hors de portée d'un attaquant (voir docs/limitations.md).

La reconstitution complète est souvent impossible sur une cible durcie — une cible où aucune fuite directe du texte du noyau ne subsiste et où les canaux auxiliaires exposés par son architecture et son CPU sont fermés — mais l'ensemble de contraintes est rarement vide. Sur les architectures sans KASLR, le moteur localise l'adresse de chargement choisie par le bootloader.

Prend en charge :

  • 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

Démarrage rapide

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

Le répertoire build/<arch>/ est autonome et peut être déployé sur un système cible :

build/<arch>/
  kasld              <- exécuter ceci
  components/        <- composants de fuite

Une configuration durcie (kernel.dmesg_restrict=1, kernel.kptr_restrict=1, kernel.perf_event_paranoid=2 ou plus, kernel.unprivileged_bpf_disabled=1, et le hachage des pointeurs %pK) réduit le chemin des oracles du système de fichiers, mais ne constitue qu'un seul axe du point de vue : les techniques par canal auxiliaire, à faible entropie et accordées par capacité sont indépendantes de ces sysctls. Pour les tests, le script extra/weaken-kernel-hardening peut temporairement assouplir ces réglages (nécessite root).

Exemple de sortie

Le mode texte par défaut affiche un aperçu commençant par la réponse :

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 colonne Certainty sépare deux affirmations différentes sur la même quantité. Une ligne guaranteed est prouvée : la valeur réelle se situe à l'intérieur de cette fenêtre. Une ligne likely est la meilleure estimation unique que les preuves étayent — toujours un sous-ensemble de la fenêtre garantie, et elle peut être fausse, car elle s'appuie sur des signaux sous le seuil de solidité, comme les canaux auxiliaires temporels. Un résultat sur lequel agir directement est une ligne guaranteed réduite à un seul candidat ; une valeur likely est une piste à confirmer, pas un fait sur lequel s'appuyer.

-v ajoute la sortie détaillée complète (bannière, bloc de configuration système, journaux par composant, analyse KASLR, cartes de disposition mémoire). -j émet du JSON lisible par machine — la vue structurée complète, incluant toujours les enregistrements par composant et l'évaluation du durcissement. -1 émet une seule ligne exploitable dans un pipe shell. -m formate pour les gestionnaires de tickets. -H ajoute l'évaluation du durcissement aux rapports texte/markdown.

Voir docs/usage.md pour l'interface CLI complète, les détails des modes de sortie, le mode explain et l'évaluation du durcissement.

Point de vue

Ce que KASLD peut reconstituer dépend du point de vue du processus en cours — non pas d'un seul niveau de privilège, mais de la combinaison de trois éléments indépendants :

Catégories