Protestware: найти и обезвредить

Привет, Хабр! Меня зовут Владимир Исабеков, я работаю в Swordfish Security, где занимаюсь динамическим анализом приложений. Сегодня мы поговорим о таком явлении, как Protestware, когда вредоносный код встраивается в открытые программные компоненты. В статье разберем нюансы «протестного ПО» и как от него защититься с помощью безопасной разработки.

ca456d45ddeeca7ed04414443a3f9ff1.jpg

Что такое Protestware?

Термин произошел от слов protest (протест) и software (ПО). Он возник, когда по политическим причинам разработчики стали внедрять в программное обеспечение зловредный код. Россия столкнулась с этим явлением в начале 2022 года, проблема затронула как приложения, так и пользователей.
Protestware встречается в пакетах с открытым исходным кодом в виде закладок, в которых можно встретить различные протестные лозунги и призывы. Этим явление, к сожалению, не ограничивается, есть и другие неприятные атаки:

  • Malware — вредоносная программа, которая несанкционированно проникает в технику с целью нанесения вреда компьютеру и его владельцу

  • DDOS — способ заблокировать работу сайта путем подачи большого количества запросов, превышающих пропускную способность сети

  • блокировка доступа к сервису клиентов с определенным IP-адресом

Чем опасны «протестные ПО»?

В первую очередь тем, что они действуют не только в момент работы или сборки приложения, но и во время инсталляции пакета.
Пользователь может наткнуться на Protestware, даже не подозревая об этом. Рассмотрим популярный пакет «es5-ext» на GitHub, который имеет порядка 6 млн. скачиваний. Он может быть использован для улучшения функциональности и производительности вашего кода на JavaScript. Обычно «es5-ext» включается в проект через менеджер пакетов NPM (от Node.js) или YARN (от Facebook) и используется в коде через директиву Import или Require (). В одном из коммитов обнаружили, что пакет определяет тайм-зону, в которой он работает.

Определение тайм-зоны

Определение тайм-зоны

Как только он понимает, что попал в российский часовой пояс, то начинает выводить слоганы политического характера.

Пример

Пример

В поисках Protestware

И вот перед нами стоит два основных вопроса: как и где искать Protestware? Если в компании налажен процесс безопасной разработки, то всегда будет проще понять, какие зависимости используются в проекте. С этим поможет SCA (Software Composition Analysis). Это сканирование исходного кода или скомпилированных бинарных файлов приложения, позволяющее отслеживать и идентифицировать компоненты с известными уязвимостями и проблемами безопасности. Для России эта практика особенно актуальна, поэтому, если ваша компания еще не использует SCA-анализ, стоит провести инвентаризацию всех имеющихся OpenSource-пакетов.

3568f090daa7c4b1142242da2d552cda.jpg

Здесь на помощь приходит SBOM (Software Bill Of Materials). Это спецификация, содержащая информацию о компонентах программного обеспечения: названия, версии, лицензии и другие элементы, необходимые для создания и использования ПО. С помощью этого списка можно получить все зависимости с версиями пакетов, что упрощает анализ используемых файлов с открытым исходным кодом. Существует несколько стандартов SBOM, одни из самых известных — SPDX и CycloneDX.

d76fa17266430c69a26b2c899bd298ee.jpg

Разведка по открытым источникам

После того, как мы определились что искать, встает вопрос, как же обнаружить пакеты с Protestware. В первую очередь нужно использовать OSINT (Open Source Intelligence) — это сбор информации из открытых источников: интернет, книги, газеты и журналы и др. Можно найти используемые пакеты в списках известных Protestware. Есть даже сообщество, которое собирает все известные файлы, содержащие вредоносный код протеста. Также можно изучить страницу пакета на GitHub и проверить, нет ли на ней каких-либо лозунгов и призывов.
Стоит обратить внимание также и на мейнтенеров, которые поддерживают зависимости вашего приложения: не размещают ли они баннеры и посты политического характера в своих профилях в GitHub или соцсетях? Для этого можно использовать API или парсинг страницы на слова-триггеры, автоматизировав таким образом проверки. На основании всех этих данных можно оценить уровень вредоносности пакета и принять решение о его использовании в разработке. Например, если на странице разработчика присутствует баннер, то следует обратить более пристальное внимание на сам пакет.

bbb3636349d828289018205e49c27452.jpg

SAST

Следующий этап поиска — SAST (Static Application Security Testing). Это метод тестирования безопасности приложений с целью обнаружения уязвимостей в коде без его запуска. Если код содержит функции определения используемой языковой локали, IP- или тайм-зоны, необходим статический анализ. Для каждого языка можно выделить функции и написать определенные кастомные правила — пользовательские настройки, позволяющие направить работу анализатора на конкретные задачи проекта. Пример таких правил:

(if)((?=.*(\w+)\((ip|ip_.*|.*_ip)\))|.*(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}).*
(.*)(?=.*(if))(?=.*((\w+)\((.*ZONE*.|.*zone.*|.*timezone*.|.*TIMEZONES*.|.*TIMEZONE*.)))(?=.*(RU_|ru|SAMT|YEKT|IRKT|SAKT|OMST|KRAT|NOVT|EET|MSK|YAKT|VLAT|MAGT|SRET|ANAT|PETT|samt|yekt|irkt|sakt|omst|krat|novt|eet|msk|yakt|vlat|magt|sret|anat|pett)).*
(.*)(?=.*(if))(?=.*((\w+)\(.*\)))(?=.*(ru_|RU_)).*

Можно выделить два бесплатных хороших решения для написания подобных правил: CodeQL и Semgrep. Платные инструменты мы подробно разберем в следующей статье. Практика SAST также хорошо автоматизируется и легко встраивается в CI/CD, его результаты также можно рассматривать в рамках общего анализа пакета на вредоносность.

Песочница

dae5b4ca49819e4d9286a61fc5fcb1b8.jpg

Песочница (Sandbox) — это механизм для безопасного исполнения программ. Есть, опять же, отличные бесплатные решения для проверки компонентов на наличие недекларированных возможностей, Malware и других проблем: Cuckoo Sandbox и Package Analysis. Данные песочницы ориентированы и для поиска Protestware. С их помощью в изолированную среду можно скачать пакет и анализировать:

  • Какие команды запускаются

  • Какие файлы необходимы для анализа

  • Какие запросы направляются вне системы По результатам мониторинга мы получаем отчет со всеми подозрительными действиями пакета.

Анализ результатов

В ходе всех проверок формируется скоринг, на основании которого принимается решение о допустимости использования отдельного пакета в разработке.
На основании описанных методик можно сформировать пайплайн для поиска Protestware или внедрить проверки в уже существующий. Далее, в зависимости от инцидента, нужно действовать в соответствии с правилами безопасности. Например, если мейнтейнер конкретного пакета также сопровождает файлы из списка Protestware, требуется уделить особое внимание безопасности. Мы подготовили для вас несколько примеров по защите от «протестного ПО»:

Политика

Действие

Пакет из списка известных Protestware

Поместить в карантин

Найдены сигнатурные срабатывания SAST

Триаж AppSec-инженером

Найдены недекларированные возможности

Анализ поведения AppSec-инженером

Вывод

В заключение хотелось бы сказать, что проблема Protestware в России спустя два года также актуальна. Но ставить «на паузу» все обновления пакетов, как сделали некоторые компании в 2022 году, не выход. Есть практики безопасной разработки, которые позволяют настроить, добавить или видоизменить несколько правил для анализа используемых пакетов. Можно проводить анализ на любом уровне зрелости компаний, начиная с проверки на Protestware по запросу от разработчиков и заканчивая внедрением в CI/CD. Если раньше вы не занимались этим вопросом, самое время начать, для этого есть все возможности.

© Habrahabr.ru