Проверки#
Анализатор прогоняет тринадцать проверок. Любой их набор можно выбрать флагом
--checkers, перечислив имена через запятую:
aft-analyzer org.astra.Kate --checkers=Signature,Bsign -v
Доступные имена: Manifest, Desktop, Icon, AppStream, Export, Permission, Binary, Xattr, Library, Environment, Signature, Bsign, DBus. Ниже разобрана каждая.
Manifest#
Разбирает описание приложения. Проверяет, что задана команда запуска и её бинарник существует и исполняем, что имя соответствует идентификатору, что указанная среда выполнения установлена, а объявленные расширения на месте. Сверяет команды из desktop-файлов с реальными бинарниками: путь команды должен существовать. Если рядом есть сборочный манифест, дополнительно сверяет команду и проверяет, что заявленная очистка действительно выполнена.
Отсутствие описания, имени, команды или среды, несуществующий бинарник команды, отсутствие обязательных каталогов - ошибки. Неисполняемая команда, ненайденное расширение, расхождение команды - замечания.
Desktop#
Проверяет desktop-файлы в экспортируемой части. У основного файла должны быть обязательные ключи (имя, команда запуска, иконка, тип), тип должен быть приложением, а иконка совпадать с идентификатором. Основной файл должен называться по идентификатору, остальные - иметь его в качестве префикса.
Отсутствие каталога, файлов или обязательных ключей - ошибки. Неверный тип или иконка, лишние файлы без префикса - замечания.
Icon#
Проверяет наличие иконок приложения в теме hicolor, число доступных размеров и наличие векторной иконки. Отсутствие подходящей иконки - ошибка, малое число размеров - замечание.
AppStream#
Разбирает метаданные AppStream. Обязательны идентификатор (совпадающий с идентификатором приложения), имя и краткое описание - их отсутствие или несовпадение идентификатора дают ошибку. Дополнительно проверяются поля, важные для витрин приложений: история выпусков, возрастной рейтинг (OARS), сведения о разработчике, ссылка на проект, связь с desktop-файлом, развёрнутое описание. Их отсутствие не мешает установке, но приложение показывается в магазине неполно, поэтому отмечается замечанием.
Export#
Сверяет экспортируемую часть с содержимым приложения: desktop-файлы, метаданные AppStream и иконки должны быть и доступны наружу, и иметь правильный префикс идентификатора. Расхождения и неверные префиксы - замечания.
Permission#
Разбирает разрешения песочницы и политики D-Bus и ищет опасные сочетания: полный доступ к файловой системе хоста, доступ ко всем устройствам, неограниченный доступ к системной или сессионной шине, возможность выхода из песочницы через служебные имена. Такие находки сопровождаются пояснением, почему это важно и как сузить разрешение. Безопасные разрешения показываются как информация.
Binary#
Разбирает ELF-бинарники и проверяет их защищённость. Для исполняемых файлов:
Полная защита таблиц перемещений (RELRO вместе с разрешением символов при загрузке) - норма; частичная защита - замечание; её отсутствие - ошибка.
Позиционно-независимый код (PIE) - норма; его отсутствие - замечание.
Идентификатор сборки - норма; его отсутствие - замечание.
Дополнительно отмечаются зависимости (NEEDED), пути поиска библиотек (RPATH и RUNPATH) с предупреждением, если путь абсолютный, а не относительный, и наличие записываемых страниц кода (TEXTREL). По каждому ослаблению защиты даётся рекомендация.
Xattr#
Проверяет расширенные атрибуты бинарников. Файловые возможности (capabilities), дающие повышенные привилегии вне модели песочницы, отмечаются замечанием; прочие атрибуты - информация.
Library#
Запускает разрешение зависимостей библиотек внутри песочницы для всех исполняемых файлов и проверяет, что все зависимости находятся. Недостающая библиотека - ошибка.
Environment#
Проверяет окружение внутри песочницы: идентификатор приложения, пути к исполняемым файлам и данным, переменные библиотек. Убеждается, что все каталоги, перечисленные в путях, действительно существуют внутри песочницы. Отсутствие ключевых переменных или несуществующие каталоги - замечания.
Signature#
Проверяет подпись GPG через OSTree: найдена ли подпись, валидна ли она, кто подписал, не истёк ли срок действия ключа. Отсутствие подписи и неверная подпись - ошибки; подписавший, идентификатор ключа и срок - информация.
Bsign#
Проверяет подписи и хеши по ГОСТ Р 34.11-2012 через bsign. Публичные ключи Astra Linux при этом импортируются автоматически из системного каталога ключей. Для каждого ELF-файла проверяются целостность хеша и валидность подписи; в результат попадают сведения об алгоритме, подписавшем и времени подписи. Несовпадение хеша - ошибка, непрошедшая подпись - замечание.
DBus#
Глубоко разбирает работу приложения с D-Bus. Находит имена и интерфейсы, которые приложение экспортирует и к которым обращается, и сверяет их с политиками шины в метаданных. Выявляет интерфейсы без объявленного владения и обращения к именам, не покрытые политикой, и показывает, какой бинарник использует каждое имя. Непокрытые имена и интерфейсы - замечания; полностью покрытое приложение или приложение, которое только обращается к чужим именам, - норма.