Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Привет, Хабр! Меня зовут Владимир Исабеков, я работаю в Swordfish Security, где занимаюсь динамическим анализом приложений. Сегодня мы поговорим о таком явлении, как Protestware, когда вредоносный код встраивается в открытые программные компоненты. В статье разберем нюансы «протестного ПО» и как от него защититься с помощью безопасной разработки.
![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/ca4/56d/45d/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(). В одном из коммитов обнаружили, что пакет определяет тайм-зону, в которой он работает.
![Определение тайм-зоны](https://habrastorage.org/r/w780q1/getpro/habr/post_images/892/2b4/c65/8922b4c65f4e9ebb86acaad79b5be9fc.jpg)
Как только он понимает, что попал в российский часовой пояс, то начинает выводить слоганы политического характера.
![Пример](https://habrastorage.org/r/w780q1/getpro/habr/post_images/636/e1b/88a/636e1b88adee6b3d26fbeab01fd34948.jpg)
В поисках Protestware
И вот перед нами стоит два основных вопроса: как и где искать Protestware? Если в компании налажен процесс безопасной разработки, то всегда будет проще понять, какие зависимости используются в проекте. С этим поможет SCA (Software Composition Analysis). Это сканирование исходного кода или скомпилированных бинарных файлов приложения, позволяющее отслеживать и идентифицировать компоненты с известными уязвимостями и проблемами безопасности. Для России эта практика особенно актуальна, поэтому, если ваша компания еще не использует SCA-анализ, стоит провести инвентаризацию всех имеющихся OpenSource-пакетов.
![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/356/8f0/90d/3568f090daa7c4b1142242da2d552cda.jpg)
Здесь на помощь приходит SBOM (Software Bill Of Materials). Это спецификация, содержащая информацию о компонентах программного обеспечения: названия, версии, лицензии и другие элементы, необходимые для создания и использования ПО. С помощью этого списка можно получить все зависимости с версиями пакетов, что упрощает анализ используемых файлов с открытым исходным кодом. Существует несколько стандартов SBOM, одни из самых известных – SPDX и CycloneDX.
![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/d76/fa1/726/d76fa17266430c69a26b2c899bd298ee.jpg)
Разведка по открытым источникам
После того, как мы определились что искать, встает вопрос, как же обнаружить пакеты с Protestware. В первую очередь нужно использовать OSINT (Open Source Intelligence) – это сбор информации из открытых источников: интернет, книги, газеты и журналы и др. Можно найти используемые пакеты в списках известных Protestware. Есть даже сообщество, которое собирает все известные файлы, содержащие вредоносный код протеста. Также можно изучить страницу пакета на GitHub и проверить, нет ли на ней каких-либо лозунгов и призывов.
Стоит обратить внимание также и на мейнтенеров, которые поддерживают зависимости вашего приложения: не размещают ли они баннеры и посты политического характера в своих профилях в GitHub или соцсетях? Для этого можно использовать API или парсинг страницы на слова-триггеры, автоматизировав таким образом проверки. На основании всех этих данных можно оценить уровень вредоносности пакета и принять решение о его использовании в разработке. Например, если на странице разработчика присутствует баннер, то следует обратить более пристальное внимание на сам пакет.
![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/bbb/363/634/bbb3636349d828289018205e49c27452.jpg)
SAST
Следующий этап поиска – SAST (Static Application Security Testing). Это метод тестирования безопасности приложений с целью обнаружения уязвимостей в коде без его запуска. Если код содержит функции определения используемой языковой локали, IP- или тайм-зоны, необходим статический анализ. Для каждого языка можно выделить функции и написать определенные кастомные правила – пользовательские настройки, позволяющие направить работу анализатора на конкретные задачи проекта. Пример таких правил:
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}).*
TIME ZONE
(.*)(?=.*(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)).*
LOCALE
(.*)(?=.*(if))(?=.*((\w+)\(.*\)))(?=.*(ru_|RU_)).*
Можно выделить два бесплатных хороших решения для написания подобных правил: CodeQL и Semgrep. Платные инструменты мы подробно разберем в следующей статье. Практика SAST также хорошо автоматизируется и легко встраивается в CI/CD, его результаты также можно рассматривать в рамках общего анализа пакета на вредоносность.
Песочница
![](https://habrastorage.org/r/w780q1/getpro/habr/post_images/dae/5b4/ca4/dae5b4ca49819e4d9286a61fc5fcb1b8.jpg)
Песочница (Sandbox) – это механизм для безопасного исполнения программ. Есть, опять же, отличные бесплатные решения для проверки компонентов на наличие недекларированных возможностей, Malware и других проблем: Cuckoo Sandbox и Package Analysis. Данные песочницы ориентированы и для поиска Protestware. С их помощью в изолированную среду можно скачать пакет и анализировать:
Какие команды запускаются
Какие файлы необходимы для анализа
Какие запросы направляются вне системы По результатам мониторинга мы получаем отчет со всеми подозрительными действиями пакета.
Анализ результатов
В ходе всех проверок формируется скоринг, на основании которого принимается решение о допустимости использования отдельного пакета в разработке.
На основании описанных методик можно сформировать пайплайн для поиска Protestware или внедрить проверки в уже существующий. Далее, в зависимости от инцидента, нужно действовать в соответствии с правилами безопасности. Например, если мейнтейнер конкретного пакета также сопровождает файлы из списка Protestware, требуется уделить особое внимание безопасности. Мы подготовили для вас несколько примеров по защите от «протестного ПО»:
Политика | Действие |
---|---|
Пакет из списка известных Protestware | Поместить в карантин |
Найдены сигнатурные срабатывания SAST | Триаж AppSec-инженером |
Найдены недекларированные возможности | Анализ поведения AppSec-инженером |
Вывод
В заключение хотелось бы сказать, что проблема Protestware в России спустя два года также актуальна. Но ставить «на паузу» все обновления пакетов, как сделали некоторые компании в 2022 году, не выход. Есть практики безопасной разработки, которые позволяют настроить, добавить или видоизменить несколько правил для анализа используемых пакетов. Можно проводить анализ на любом уровне зрелости компаний, начиная с проверки на Protestware по запросу от разработчиков и заканчивая внедрением в CI/CD. Если раньше вы не занимались этим вопросом, самое время начать, для этого есть все возможности.