Состоялся релиз первой (v1.0.0) версии out-of-tree ― инструментария для разработки и тестирования эксплоитов и модулей ядра Linux.
out-of-tree позволяет автоматизировать некоторые рутинные действия по созданию окружений для отладки модулей ядра и эксплоитов, генерации статистики надежности эксплоитов, а также предоставляет возможность простой интеграции в CI (Continuous Integration).
Каждый модуль ядра либо эксплоит описывается файлом .out-of-tree.toml
, где указывается информация о необходимом окружении и (в случае, если это эксплоит) о ограничениях работы при наличии определенных мер безопасности (security mitigations).
Также инструментарий позволяет определять конкретные версии ядра, затронутые уязвимостью (с помощью команды --guess
), а также может использоваться для упрощения бинарного поиска конкретного коммита.
Далее список изменений со времен версии v0.2.
Добавлено
-
Реализована возможность ограничивать количество генерируемых (
out-of-tree kernel autogen
) ядер (на основе описания в.out-of-tree.toml
) и запусков проверки (out-of-tree pew
) c помощью параметра--max=X
. -
Новая команда
genall
, позволяющая сгененировать все ядра для определенного дистрибутива и версии. -
Все логи теперь хранятся в sqlite3 базе данных. Реализованы команды для простых часто необходимых запросов, а также экспорт данных в json и markdown.
-
Реализован подсчет вероятности успешной эксплуатации (на основе предыдущих запусков).
-
Возможность сохранять результаты сборки (новый параметр
--dist
для командыout-of-tree pew
) -
Поддержка генерации метаданных для ядер, установленных в хостовой системе, а также сборка непосредственно на хосте.
-
Поддержка сторонних ядер.
-
Теперь отладочное окружение (
out-of-tree debug
) автоматически ищет отладочные символы на хостовой системе. -
Добавлена возможность управления мерами безопасности (security mitigations) флагами включения/отключения KASLR, SMEP, SMAP и KPTI во время отладки.
-
Добавлен параметр
--threads=N
для команды запуска тестированияout-of-tree pew
, с помощью которого можно указать количество потоков, в которых будет выполняться сборка/запуск и тестирование эксплоитов и модулей ядра. -
Возможность задать тег, который будет записываться в лог и далее может использоваться для расчета статистики.
-
Добавлена возможность указать версию ядра без использования регулярных выражений.
-
Новая команда
pack
, используемая для массовых тестов эксплоитов и модулей ядра в поддиректориях. -
В конфигурации (
.out-of-tree.toml
) для эксплоита и модуля ядра добавлена возможность отключать KASLR, SMEP, SMAP и KPTI, а также указывать необходимое количество ядер и памяти. -
Теперь образы (rootfs) загружаются автоматически во время работы
kernel autogen
. bootstrap больше не нужен. -
Поддержка ядер CentOS.
Изменения
-
Теперь, если нет образа (rootfs) для нужной версии дистрибутива ―
out-of-tree
будет пытаться использовать образ наиболее близкой версии. Например, образ Ubuntu 18.04 для Ubuntu 18.10. -
Теперь тесты для модулей ядра не будут считаться провальными в том случае, если они отсутствуют (нет тестов ― нет ошибок!).
-
Теперь
out-of-tree
будет возвращать отрицательный код ошибки в том случае, если хотя бы один этап (сборка, запуск или тестирование) на любом из ядер был завершен с ошибкой. -
Проект перешел на использование Go modules, сборка с GO111MODULE=on теперь предпочтительна.
-
Добавлены тесты по умолчанию.
-
Теперь test.sh будет использован по умолчанию в том случае, если сборка в ${TARGET}_test не реализована в Makefile.
-
Лог ядра более не очищается перед запуском модуля ядра или эксплоита. Некоторые из эксплоитов используют утечку базы ядра в dmesg для обхода KASLR, поэтому очистка может нарушить реализованную логику эксплоита.
-
qemu/kvm теперь использует все возможности хостового процессора.
Удалено
-
Фабрика ядер убрана полностью в связи с реализацией генерации ядер на основе инкрементально дополняемых Dockerfile.
-
bootstrap
более ничего не делает. Команда будет удалена в следующем релизе.
Исправлено
-
На macOS более не требуется GNU coreutils для работы.
-
Временные файлы перенесены в
~/.out-of-tree/tmp/
из-за ошибок монтирования внутри docker на некоторых системах.
>>> Документация
>>> CHANGELOG
>>> Подробности