Назад к обновлениям
New releaseSep 12, 2026

kasld v0.4.0

KASLD устраняет рандомизацию виртуального и физического размещения памяти ядра Linux из локального процесса, используя все доступные ему возможности — привилегии, конфигурацию и ограничения изоляции.

Поделиться

KASLD logo generated with Copilot (cropped)

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

KASLD восстанавливает виртуальное и физическое расположение памяти ядра Linux — в первую очередь базовый адрес текста ядра — из локального процесса. То, что удаётся восстановить, зависит от точки обзора этого процесса: его привилегий и возможностей, конфигурации системы и любых ограничений контейнера. Там, где утечка или побочный канал позволяют, базовый адрес восстанавливается напрямую; в противном случае он сужается до наименьшего набора размещений, которые поддерживаются доступными свидетельствами.

Механизм вывода объединяет свидетельства из десятков независимых методов с известными инвариантами архитектуры, сужая размещение ядра до остаточного окна — которое сообщается как число сохранившихся слотов (размещений, которые мог выбрать KASLR) и представляющие их биты энтропии: верхняя граница защиты, которую KASLR сохраняет с этой точки обзора, а не гарантия того, что базовый адрес недосягаем для атакующего (см. docs/limitations.md).

Полное восстановление часто невозможно на усиленно защищённой цели — такой, где не сохраняется прямая утечка текста ядра и закрыты побочные каналы, которые предоставляют её архитектура и CPU — но множество ограничений редко бывает пустым. На архитектурах без KASLR механизм определяет адрес загрузки, выбранный загрузчиком.

Поддерживаются:

  • 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

Быстрый старт

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              <- запускать это
  components/        <- компоненты утечек

Усиленно защищённая конфигурация (kernel.dmesg_restrict=1, kernel.kptr_restrict=1, kernel.perf_event_paranoid=2 или выше, kernel.unprivileged_bpf_disabled=1 и хеширование указателей %pK) сужает путь через оракулы файловой системы, но это лишь одна ось точки обзора: методы побочных каналов, слабой энтропии и предоставляемые возможностями не зависят от этих sysctl. Для тестирования скрипт extra/weaken-kernel-hardening может временно ослабить эти настройки (требуется root).

Пример вывода

Режим текстового вывода по умолчанию печатает обзор, начинающийся с ответа:

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]

Столбец Certainty разделяет два разных утверждения об одной и той же величине. Строка guaranteed доказана: истинное значение лежит внутри этого окна. Строка likely — это единственная наилучшая оценка, которую поддерживают свидетельства; она всегда является подмножеством гарантированного окна и может быть неверной, поскольку опирается на сигналы ниже порога достоверности, такие как временные побочные каналы. Результат, на котором стоит действовать напрямую, — это строка guaranteed, суженная до одного кандидата; значение likely — это зацепка для подтверждения, а не факт, на который можно полагаться.

-v добавляет полный подробный вывод (баннер, блок конфигурации системы, журналы по каждому компоненту, анализ KASLR, карты расположения памяти). -j выдаёт машиночитаемый JSON — полное структурированное представление, всегда включающее записи по каждому компоненту и оценку защищённости. -1 выдаёт одну строку, пригодную для передачи в shell. -m форматирует для трекеров задач. -H добавляет оценку защищённости к текстовым/markdown-отчётам.

Полный CLI, подробности режимов вывода, режим объяснения и оценку защищённости см. в docs/usage.md.

Точка обзора

То, что KASLD может восстановить, зависит от точки обзора запущенного процесса — не от одного уровня привилегий, а от сочетания трёх независимых вещей:

Категории