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