Состоялся релиз первой (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
>>> Подробности