
kasld v0.4.0
KASLD устраняет рандомизацию виртуального и физического размещения памяти ядра Linux из локального процесса, используя все доступные ему возможности — привилегии, конфигурацию и ограничения изоляции.
KASLD восстанавливает виртуальную и физическую раскладку памяти ядра Linux — прежде всего базовый адрес текста ядра — из локального процесса, используя всё, что позволяет точка обзора этого процесса: его привилегии и возможности, конфигурацию системы и любое ограничение контейнера. Там, где утечка или побочный канал позволяют, он восстанавливает базовый адрес текста ядра напрямую, а в остальных случаях сужает его до наименьшего набора размещений, которые подтверждаются доступными свидетельствами. Механизм вывода объединяет свидетельства от десятков независимых техник с известными инвариантами архитектуры, сужая размещение ядра до остаточного окна — сообщаемого как число выживших слотов и биты энтропии: верхняя граница защиты, которую KASLR сохраняет с этой точки обзора, а не гарантия того, что базовый адрес находится вне досягаемости атакующего (см. docs/limitations.md). На полностью пропатченном современном ядре — где побочные каналы x86-64 нейтрализованы и не сохраняется прямой утечки текста ядра — полное восстановление часто невозможно, но набор ограничений редко бывает пустым. На архитектурах без KASLR механизм определяет адрес загрузки, выбранный загрузчиком.
Поддерживает:
- x86 (i386+, amd64)
- ARM (armv6, armv7, armv8, aarch64)
- MIPS (mipsbe, mipsel, mips64el)
- PowerPC (ppc, ppcle, ppc64, ppc64le)
- RISC-V (riscv32, riscv64)
- LoongArch (loongarch64)
- s390
Быстрый старт
sudo apt install libc-dev make gcc binutils git
git clone https://github.com/bcoles/kasld
cd kasld
make
./build/<arch>/kasld
Каталог build/<arch>/ самодостаточен и может быть развёрнут на целевой
системе:
build/<arch>/
kasld <- run this
components/ <- leak components
Усиленная конфигурация (kernel.dmesg_restrict=1,
kernel.kptr_restrict=1, kernel.perf_event_paranoid=2 или выше,
kernel.unprivileged_bpf_disabled=1) сужает путь через файловые оракулы, но
это лишь одна ось точки обзора: техники побочных каналов, слабой энтропии и
предоставленных возможностей не зависят от этих sysctl. Для тестирования
скрипт extra/weaken-kernel-hardening может
временно ослабить эти настройки (требуется root).
Пример вывода
Режим текстового вывода по умолчанию печатает обзор, начинающийся с ответа:
KASLD 0.3.1-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 505 2 MiB
Virtual Image Base likely 0xffffffff93400000 slide +0x12400000 1 of 483 2 MiB
Physical Image Base guaranteed 0x1000000 - 0x3d400000 474 of 8185 2 MiB
Physical Image Base likely 0x1000000 - 0x3c29d000 474 of 474 2 MiB
Direct Map Base guaranteed 0xffff800000000000 - 0xffffa4aa80000000 37547 1 GiB
Vmalloc Base guaranteed 0xffff898000000000 - 0xffffd6d580000000 79191 of 79191 1 GiB
Vmemmap Base guaranteed 0xffffa98040000000 - 0xfffffd0000000000 85504 1 GiB
Module Region Base guaranteed 0xffffffffa0000000 - 0xffffffffff000000 389121 4 KiB
Module Region Base likely 0xffffffffc0000000 - 0xffffffffc0400000 1025 of 389121 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]
-v добавляет полный подробный вывод (баннер, блок конфигурации системы,
журналы по компонентам, анализ KASLR, карты раскладки памяти). -j выдаёт
машиночитаемый JSON — полное структурированное представление, всегда включающее
записи по компонентам и оценку усиления защиты. -1 выдаёт одну строку,
пригодную для конвейера оболочки. -m форматирует для трекеров задач. -H
добавляет оценку усиления защиты к текстовым/markdown-отчётам.
Полный CLI, подробности режимов вывода, режим объяснения и оценку усиления защиты см. в docs/usage.md.
Точка обзора
То, что KASLD может восстановить, зависит от точки обзора запущенного процесса — не от одного уровня привилегий, а от сочетания трёх независимых вещей:
- Привилегии, группы и возможности — непривилегированный uid, членство в
группе вроде
adm(которая даёт доступ к журналам ядра в/var/log/), задача контейнера, обладающая дополнительной возможностью, или root. Они не образуют единой лестницы, потому что права доступа файловой системы ограничивают каждый источник независимо: контейнер, получившийCAP_SYS_RAWIO, является root'ом init-пространства имён для этой проверки и может читать/proc/kcore— утечку, недоступную обычному пользователю — тогда как дистрибутивы различаются в том, является ли файл вроде/boot/System.mapдоступным для чтения всем вообще. - Конфигурация системы —
kptr_restrict,dmesg_restrict,perf_event_paranoid, непривилегированный BPF, блокировка ядра. Конфигурация независима от привилегий: root не может читать/proc/kallsymsприkptr_restrict=2, тогда как ослабленный sysctl или непривилегированный BPF могут дать обычному пользователю утечку, в которой усиленная система отказала бы. - Ограничение — пространство имён или песочница seccomp, которая маскирует
оракулы
/procили блокирует системные вызовы, сужая то, что наблюдает любой уровень привилегий.
Эти три оси ограничивают каждый источник утечки независимо — поэтому больше привилегий не является надмножеством меньших: конфигурация может отказать в источнике root'у, а побочные каналы полностью обходят sysctl. docs/usage.md содержит матрицу «источник утечки — ограничитель», показывающую, какая ось управляет каждым источником.
KASLD по умолчанию предполагает мало привилегий и оппортунистически использует
всё, что даёт точка обзора. Сообщаемое гарантированное окно никогда не зависит
от привилегий: повышенный доступ или слабая конфигурация могут расширить то, что
предпринимается, но никогда — обоснованную раскладку, которую доказывают
свидетельства. Подробный (-v), JSON (-j) и Markdown (-m) выводы сообщают
обнаруженную точку обзора — контейнер, ограничение, читаемые оракулы и утечки,
ограниченные возможностями, достижимые из текущих возможностей.
Документация
Впервые в KASLD? Читайте по порядку: docs/kaslr.md (что такое KASLR и что он рандомизирует) → docs/architecture.md → A leak from end to end (как KASLD превращает одну утечку в ответ) → docs/limitations.md (что результат доказывает, а что нет) → CONTRIBUTING.md (добавление компонента утечки или правила вывода). Таблица ниже индексирует документацию по темам.
| Тема | Документ |
|---|---|
| Введение в KASLR | docs/kaslr.md — история KASLR по архитектурам, базовый адрес текста по умолчанию, vmsplit, FG-KASLR |
| Использование и CLI | docs/usage.md — CLI, режимы вывода, режим объяснения, оценка усиления защиты |
| Интерпретация результатов | docs/limitations.md — что означает отрицательный или частичный результат: обоснованно, но не полно, и почему неудача не является гарантией безопасности |
| Техники обхода | docs/bypass-techniques.md — утечки через файловую систему, побочные каналы, утечки через syscall / ioctl, слабая энтропия, пропатченные CVE, произвольное чтение |
| Эксплуатация | docs/exploitation.md — где обход KASLR вписывается в эксплойт, control-flow против data-only, шаблон pwntools, ksymoff |
| След и обнаружение | docs/footprint.md — как выглядит запуск на отслеживаемом хосте: поведенческая сигнатура для его обнаружения и цена OPSEC для оператора; громкий по замыслу |
| Утилиты | extra/README.md — вспомогательные скрипты в extra/ (capture/replay, проверка обоснованности, posture-diff, ksymoff) и как они сочетаются |
| Архитектура и внутреннее устройство | docs/architecture.md — механизм вывода, швы потоков данных, протокол тегированных строк, вывод между регионами |
| Участие в разработке | CONTRIBUTING.md — написание компонента или правила, API эмиттера, коды выхода, метаданные |
| Тестирование и CI | docs/testing.md — тесты на хосте, фикстуры воспроизведения, кросс-архитектуры под qemu-user, покрытие |
| Воспроизводимость | docs/reproducibility.md — независимая проверка: на локальном ядре, вживую на разных архитектурах или на захваченном корпусе |
Сборка
Требуется компилятор, поддерживающий макрос _GNU_SOURCE, из-за использования
непортируемого кода (MAP_ANONYMOUS, getline(), popen(), …).
make # build kasld + components
make run # build and run
make test # build and run unit tests
make cross # cross-compile for all supported architectures
make install # install to /usr/local (PREFIX=/usr/local)
make installcheck # smoke-test the installed bin/kasld + libexec/kasld/
make uninstall # remove installed files
make clean # remove build directory
make print-deps # list build dependencies (libs + per-component flags)
make help # show all targets and options
make print-deps сообщает требуемый инструментарий, две необязательные
библиотеки (pthread, zlib) с результатом их автоопределения для текущего
компилятора и исключения флагов компиляции/компоновки по компонентам — этого
достаточно, чтобы заполнить control-файл пакета дистрибутива, не читая логику
проверок в Makefile.
make installcheck запускает установленный bin/kasld и подтверждает, что он
обнаруживает свои компоненты через путь FHS ../libexec/kasld — дымовой тест
после установки для схемы раздельной установки, использующий те же
PREFIX/DESTDIR, что и make install (поэтому он также работает против
промежуточного корня DESTDIR в CI пакетов).
make install также устанавливает страницы руководства man1 для kasld и
ksymoff в <prefix>/share/man/man1/, так что man kasld и man ksymoff
работают после установки.
KASLD можно кросс-компилировать с помощью make, указав соответствующий
компилятор (CC). При кросс-компиляции статическая компоновка применяется
автоматически:
make CC=aarch64-linux-musl-gcc
Собрать все поддерживаемые цели кросс-компиляции (инструментарии должны быть в
PATH):
make cross
Лицензия
KASLD распространяется под лицензией MIT (см. LICENSE). Некоторые компоненты утечек адаптируют сторонний код proof-of-concept или реализуют технику, впервые опубликованную другими; каждый такой файл указывает своего исходного автора и источник в заголовке, а THIRD-PARTY-NOTICES.md перечисляет каждый с его лицензией или основанием для повторного использования (лицензия upstream, разрешение автора или материал техники/воспроизведения, перереализованный здесь).
Цитирование KASLD
KASLD распространяется под лицензией MIT — указание авторства не требуется для использования, но цитирование или ссылка приветствуются везде, где на него ссылаются в исследованиях, инструментах, эксплойтах или текстах:
KASLD: Kernel Address Space Layout Derandomization, Brendan Coles, https://github.com/bcoles/kasld
BibTeX:
@software{kasld,
title = {KASLD: Kernel Address Space Layout Derandomization},
author = {Coles, Brendan},
url = {https://github.com/bcoles/kasld},
version = {0.3.0},
year = {2026}
}
GitHub также показывает кнопку "Cite this repository" из
CITATION.cff. Для невыпущенной сборки из master цитируйте
конкретный коммит и дату обращения — например, bcoles/kasld@<commit>
(accessed YYYY-MM-DD) — поскольку строки версии -dev не уникальны для
отдельного коммита.