Для того чтобы воспользоваться инструментом Natch необходимо подготовить образ системы, совместимый с виртуальной машиной QEMU.
-
Объект оценки должен быть собран внутри образа, а бинарные файлы выгружены наружу, чтобы и в гостевой и хостовой системах имелись одинаковые экземпляры (с версии 3.2 выгрузка может быть сделана автоматически на этапе создания проекта).
-
Чтобы компиляция и настройка ПО внутри виртуальной машины проходила комфортней, рекомендуется запускать QEMU в режиме аппаратной виртуализации, что существенно ускорит работу гостевой системы. Для этого можно использовать команду
natch kvm
, или, если запускаете эмулятор с помощью собственной командной строки, виртуализация включается ключом-enable-kvm
. -
Для отображения символьных имен функций в отчётах Natch, нужно собирать ПО с отладочной информацией. В любом современном компиляторе это достигается использованием ключа
-g
. Если при этом отключать оптимизации (ключ-O0
), то отображаемый в интерфейсе анализа стек вызовов будет более точным/понятным.
Если по какой-то причине собрать программу с отладочной информацией невозможно, то для получения символов Natch может использовать map-файлы. Получение map-файлов для исполняемого файла возможно с помощью сторонних инструментов. Например, для генерации map-файла можно применить бесплатную версию дизассемблера IDA Pro. Для этого необходимо скачать установочный комплект по указанной ссылке и, возможно, доустановить библиотеки Qt:
apt install -y qt5-default
После установки IDA необходимо запустить её, открыть интересующий исполняемый файл.
Загрузка бинарного файла в IDA ProПройти процедуру генерации map-файла.
Генерация map-файлаОбязательным пунктом является только Segmentation information, остальные по желанию.
Выбор опций map-файлаПолученный map-файл должен быть помещен в папку с исполняемыми файлами, которые будут переданы в Natch.
Имя map-файла должно соответствовать имени бинарного файла, например, program
-> program.map
, lib_x.so
-> lib_x.so.map
.
Для наблюдения полноценной символьной информации в аналитиках SNatch, Natch должен получить отладочную информацию не только для исследуемых модулей, но и для используемых интерпретаторов.
С версии 3.2 есть возможность гибко настраивать получение отладочной информации
на этапе создания проекта, а также редактировать ее в дальнейшем при работе с проектом.
Информация о сборе отладочных символов находится в конфигурационном файле
debug_info.cfg
(подробнее в разделе
Конфигурационный файл для управления отладочной информацией debug_info.cfg),
который может быть отредактирован в любой момент после создания проекта
с помощью команды (natch edit debug
).
После редактирования следует выполнить команду natch modules update
(natch modules update
).
При использовании стандартных Python, Java отладочная информация скачивается автоматически на этапе создания проекта, если вы умышленно не отключите эту возможность в расширенных настройках.
При использовании собственной сборки Python необходимо отдельно предоставить отладочные символы, в противном случае символизации Python-кода не будет.
Расположить отладочные символы можно по стандартному пути для отладочных символов в системе, либо использовать расширенные настройки получения отладочной информации на этапе создания проекта и указать собственный путь.
При использовании стандартной сборки следует проконтролировать, что символы будут загружены (в случае если вы выбрали расширенные настройки получения отладочной информации, если нет, все будет загружено автоматически).
Как и в случае с Python, использование собственной сборки Java машины влечет необходимость предоставления отладочных символов.
Расположить отладочные символы можно по стандартному пути для отладочных символов в системе, либо использовать расширенные настройки получения отладочной информации на этапе создания проекта и указать собственный путь.
Также, в связи с особенностями реализации интроспекции кода Java, для успешного проведения анализа требуется включать в сценарий момент запуска Java-машины, в противном случае функции Java не смогут быть распознаны.
Анализ кластеров из нескольких гостевых систем возможен по отдельности -- для каждой гостевой системы запускается отдельный экземпляр Natch. Кластер можно связать через виртуальный коммутатор. Генерация совокупной интегральной поверхности атаки и ее единого графического представления не поддерживается.
Если в вашей системе используются docker/podman-контейнеры, то, на данный момент, для получения максимально возможной информации о них, сохранять состояние машины следует до запуска контейнеров.