Логический изъян в системе предложений пакетов Ubuntu 'command-not-found' и репозитории пакетов snap может позволить злоумышленникам продвигать вредоносные пакеты Linux среди ничего не подозревающих пользователей.
Проблема возникает из-за способности утилиты предлагать пакеты snap для установки, когда они отсутствуют, без механизма проверки, гарантирующего, что пакеты являются подлинными и безопасными.
Лазейка была обнаружена исследователями Aqua Nautilus, которые выяснили, что примерно 26% пакетных команд Advanced Package Tool (APT) подвержены риску выдать себя за вредоносные snap-пакеты, что представляет собой значительный риск для цепочки поставок Linux и Windows Subsystem for Linux (WSL).
Следует отметить, что, хотя отчет Aqua Nautilus посвященный Ubuntu, проблема имеет более широкие последствия, выходящие за рамки только популярного дистрибутива Linux.
Например, любые форки Ubuntu или дистрибутивы Linux, использующие по умолчанию утилиту "команда не найдена", а также пакетную систему Snap, также уязвимы.
Отсутствие проверок на всех этапах
Утилита 'command-not-found' - это скрипт на Python, который предлагает установить пакеты, позволяющие запустить определенную программу, которая в данный момент не установлена.
Например, если вы хотите запустить mojo, но программа не установлена, скрипт command-not-found порекомендует пакеты для установки, чтобы вы могли использовать эту команду.
Однако его безопасность предполагает, что на нижних уровнях цепочки поставок была проведена тщательная проверка, чтобы убедиться, что пакеты, которые предлагает утилита, безопасны для установки.
Механизм предложения утилиты опирается на внутреннюю базу данных для пакетов APT и регулярно обновляемую базу данных Snap Store для пакетов snap, что позволяет соотнести команды с пакетами.
Как объясняет Aqua Nautilus, злоумышленникам относительно легко публиковать вредоносные snap-пакеты в Snap Store, учитывая отсутствие строгих процессов проверки по сравнению с APT-пакетами.
Snap-пакеты могут быть опубликованы как "строгие" или "классические": в первом случае программное обеспечение ограничивается средой "песочницы", а во втором - предоставляется неограниченный доступ, как и в случае с APT-пакетами.
Злоумышленники могут пойти на риск и опубликовать свои плохие приложения как "классические". Однако они требуют ручной проверки перед утверждением, и шансы пройти эту проверку, если вредоносная функциональность соответствующим образом скрыта, высоки.
Исследователи говорят, что даже "строгие" сниппеты очень рискованны, поскольку в них можно злоупотреблять возможностью использования "интерфейсов" для широкого взаимодействия с внешними ресурсами или сервером отображения хост-системы, особенно при использовании X11что потенциально позволяет подслушивать другие приложения и осуществлять кейлоггинг.
Кроме того, аналитики Aqua отмечают риск злоупотребления функцией автоматического обновления пакетов snap для доставки на взломанную систему "свежих" эксплойтов, нацеленных на недавно обнаруженные дефекты.
Один из актуальных примеров такого риска касается дефектов ядра Linux. Поскольку snap-пакеты используют то же ядро системы, что и все программное обеспечение, работающее в системе, они могут потенциально использовать недостатки для выхода из "песочницы".
Риски опечаток и самозванства
Все вышесказанное закладывает основу для рискованной ситуации, если злоумышленники найдут способ продвигать свои пакеты через утилиту 'command-not-found', но, как объясняют аналитики, для этого тоже есть запас прочности.
Первый и самый простой прием - ассоциировать команды, содержащие опечатки (например, 'ifconfigg' вместо 'ifconfig'), с вредоносными snap-пакетами, в результате чего утилита 'command-not-found' предлагает установить вредоносное ПО пользователю, который вряд ли осознает свою опечатку в этот момент.
Второй метод заключается в том, что злоумышленники выявляют и регистрируют невостребованные имена привязок, которые пользователи могут ожидать, что они существуют, часто потому, что они соответствуют известным командам или псевдонимам.
"Если разработчик хочет, чтобы его привязка выполняла команду, которая отклоняется от и не является просто они должны запросить псевдоним", - объясняют исследователи.
"Такой запрос запускает ручной процесс проверки, в ходе которого запрашиваемый псевдоним голосуется, чтобы убедиться, что он соответствует приложению".
Однако если разработчики не зарегистрируют актуальный снап под этим псевдонимом, угрожающий агент может загрузить свои собственные пакеты под этим именем, которые затем будут предложены инструментом command-not-found.
Этот подход использует лазейку в системе именования и псевдонимов snap'ов, позволяя выдавать себя за легитимное программное обеспечение без необходимости запроса псевдонимов, используя преимущества незарезервированных, но предсказуемых имен.
Третий метод атаки заключается в регистрации вредоносных пакетов snap для легитимных пакетов APT таким образом, чтобы утилита "команда не найдена" указывала на оба пакета.
По данным Aqua Nautilus, 26 % команд могут быть использованы таким образом, поскольку многие издатели легитимного ПО не заявили соответствующий псевдоним пакета привязки для своего проекта, что дает злоумышленникам возможность для эксплуатации.
По словам аналитиков безопасности, объем эксплуатации вышеупомянутых проблем в настоящее время неизвестен, но по крайней мере о двух случаях стало известно.1, 2).
Некоторые шаги, которые можно предпринять для снижения рисков, включают проверку пользователями подлинности пакетов, которые они собираются установить, регистрацию разработчиками Snap псевдонимов, похожих на их приложения, и регистрацию сопровождающими пакетов APT соответствующих имен Snap для своих команд.