Проверки#

Анализатор прогоняет тринадцать проверок. Любой их набор можно выбрать флагом --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. Находит имена и интерфейсы, которые приложение экспортирует и к которым обращается, и сверяет их с политиками шины в метаданных. Выявляет интерфейсы без объявленного владения и обращения к именам, не покрытые политикой, и показывает, какой бинарник использует каждое имя. Непокрытые имена и интерфейсы - замечания; полностью покрытое приложение или приложение, которое только обращается к чужим именам, - норма.