Инциденты

В репозитории PyPI найдено еще два вредоносных пакета Python

По данным отчета компании CheckPoint за 8 августа, в самом популярном репозитории Python среди разработчиков — PyPI (Python Package Index) — затаились десять вредоносных пакетов. Они предназначались для кражи персональных сведений и учетных данных разработчиков.

Изучив отчет, мы решили проверить PyPI через свою внутреннюю автоматизированную систему для мониторинга репозиториев пакетов с открытым исходным кодом. В результате мы обнаружили еще два вредоносных пакета Python, которые маскировались под один из самых популярных пакетов с открытым исходным кодом — requests.

Хронология отправки пакетов:

Имя пакета Версия Временная метка (UTC)
pyquest 2.28.1 30.07.2022 10:11:47.000
pyquest 2.28.2 30.07.2022 10:15:28.000
pyquest 2.28.3 30.07.2022 10:19:14.000
ultrarequests 2.28.3 30.07.2022 10:25:41.000

Злоумышленник скопировал описание официального пакета requests, чтобы пользователи по ошибке устанавливали вредоносную подделку. В описании приведена фальшивая статистика, согласно которой пакет был установлен 230 миллионов раз за месяц и имеет более 48 000 «звезд» на GitHub. Кроме того, даны ссылки на веб-страницы оригинального пакета requests и указана электронная почта автора. Везде, где упоминается имя оригинального пакета, оно заменено на имя вредоносного.

Если загрузить вредоносный пакет, становится ясно, что его исходный код почти идентичен оригинальному коду requests, за исключением одного файла — exception.py. Во вредоносном пакете последний раз этот скрипт был изменен 30 июля, в день публикации этого пакета.

Вредоносная полезная нагрузка — это скрипт Python в кодировке base64, скрытый в классе HTTPError. Он записывает еще один однострочный скрипт Python во временный файл, а затем запускает его с помощью функции system.start(). Затем однострочный скрипт загружает скрипт следующего этапа со страницы https://zerotwo-best-waifu[.]online/778112985743251/wap/enner/injector и выполняет его.

Загрузчик

На следующем этапе запускается загрузчик, обфусцированный с помощью общедоступного инструмента Hyperion. Применено несколько методик обфускации — переименование переменных и библиотечных функций, добавление смешанных логико-арифметических выражений и ненужного кода, а также сжатие фрагментов кода с помощью библиотеки zlib.

Если имя ОС не «nt» (Windows), загрузчик завершает работу. Если же имя подходящее, он случайным образом выбирает один из каталогов в C:\Users\<имяпользователя>\AppData\Roaming или C:\Users\<имяпользователя>\AppData\Local, генерирует случайную восьмисимвольную строку из символов «bcdefghijklmnopqrstuvwxyz» и случайным образом выбирает одно из расширений из следующего списка:

Затем зловред загружает код финальной стадии со страницы https://zerotwo-best-waifu[.]online/778112985743251/wap/shatlegay/stealer123365, сохраняет его в ранее сгенерированном месте и выполняет.

Для закрепления в зараженной системе зловред создает значение Realtek HD Audio Universal Service в ветке системного реестра HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run.

Скрипт ищет существующий исполняемый файл в каталоге %system32% с именем SecurityHealthSystray.exe или SystemSettingsAdminFlows.exe, добавляет символ «&» (для последовательного выполнения в командной строке), а затем добавляет путь к интерпретатору Python и вредоносному скрипту. Стоит отметить, что этот метод закрепления фактически не работает, поскольку система запускает только первый исполняемый файл.

Финальная полезная нагрузка: W4SP Stealer

Финальная полезная нагрузка представляет собой троянец, написанный на Python и обфусцированный тем же способом, что и загрузчик. Автор зловреда оставил в его коде название W4SP Stealer.

При запуске стилер идентифицирует внешний IP-адрес машины жертвы, отправляя запрос GET на https://api.ipify.org, и устанавливает два легитимных пакета PyPI — requests и pycryptodome, чтобы отправлять оператору полученные данные и расшифровывать файлы cookie и пароли из браузеров. Затем зловред начинает собирать токены Discord, сохраненные файлы cookie и пароли от браузеров в отдельных потоках.

Пароли и файлы cookie сохраняются в файлах %TEMP%\wppassw.txt и %TEMP%\wpcook.txt в следующем формате:

Все файлы, созданные стилером на машине жертвы, начинаются со строки: <—W4SP STEALER ON TOP—>.  Все собранные данные отправляются оператору через веб-хук Discord (https://discord[.]com/api/webhooks/1001296979948740648/4wqCErLU3BVeKWnxDA70Gns5vcfxh5OCb3YDIFZaFujqfSRIwHH4YIu3aLOVWjCDeO1H) и рендерятся в удобном формате:

Стилер также создает и отправляет список сохраненных учетных данных браузера для ссылок, содержащих ключевые слова mail, card, bank, buy, sell и др. (Полный список приведен в Приложении.) Кроме того, он собирает данные из кошельков MetaMask, Atomic и Exodus, а также учетные данные Steam и Minecraft.

Собрав учетные данные, стилер начинает прочесывать каталоги «Загрузки», «Документы» и «Рабочий стол» на компьютере жертвы в поисках имен файлов, содержащих следующие слова:

Как ни странно, в этом списке есть несколько слов на французском: mot de passe («пароль»), mdp (сокращение от mot de passe), banque («банк») и compte («учетная запись»). Затем соответствующие файлы выгружаются на тот же канал Discord.

Стилер также загружает код JavaScript со страницы zerotwo-best-waifu[.]online/778112985743251/wap/dsc_injection и записывает его в файл index.js платформы Discord. После этого он завершает запущенный процесс discord.exe — пользователю приходится перезапустить Discord, активировав тем самым вредоносный код.

Внедренный скрипт отслеживает действия жертвы — изменение адреса электронной почты, пароля или платежной информации. Обновленная информация также поступает на канал Discord.

Мы уже сообщили об этих двух пакетах команде безопасности PyPI и занесли их в базу данных уязвимостей Snyk.

Программные решения «Лаборатории Касперского» обнаруживают следующие угрозы:

  • Trojan.Python.Inject.d
  • Trojan.Python.Agent.gj

Индикаторы компрометации

Образцы

34c9d77afd77611ce55716f23594275a ultrarequests-2.28.3.tar.gz
f2102dee0caba546ef98b47b373bab9a pyquest-2.28.3.tar.gz
556ee928fbffd4bbd1cec282ec1a5bb3 Скрипт загрузчика
42f0f3b4d5a2be7f09d1c02668cb2c08 Внедряемый в Discord файл index.js
d7b6df674690c2e81c72ea031ed44a6f W4SP stealer

URL-адреса

https://zerotwo-best-waifu[.]online/778112985743251/wap/enner/injector
https://zerotwo-best-waifu[.]online/778112985743251/wap/shatlegay/stealer123365
https://zerotwo-best-waifu[.]online/778112985743251/wap/dsc_injection

Приложение

[‘mail’, ‘[coinbase](https://coinbase.com)’, ‘[gmail](https://gmail.com)’, ‘[steam](https://steam.com)’, ‘[discord](https://discord.com)’, ‘[riotgames](https://riotgames.com)’, ‘[youtube](https://youtube.com)’, ‘[instagram](https://instagram.com)’, ‘[tiktok](https://tiktok.com)’, ‘[twitter](https://twitter.com)’, ‘(https://facebook.com)’, ‘card’, ‘[epicgames](https://epicgames.com)’, ‘[spotify](https://spotify.com)’, ‘[yahoo](https://yahoo.com)’, ‘[roblox](https://roblox.com)’, ‘[twitch](https://twitch.com)’, ‘[minecraft](https://minecraft.net)’, ‘bank’, ‘[paypal](https://paypal.com)’, ‘[origin](https://origin.com)’, ‘[amazon](https://amazon.com)’, ‘[ebay](https://ebay.com)’, ‘[aliexpress](https://aliexpress.com)’, ‘[playstation](https://playstation.com)’, ‘[hbo](https://hbo.com)’, ‘[xbox](https://xbox.com)’, ‘buy’, ‘sell’, ‘[binance](https://binance.com)’, ‘[hotmail](https://hotmail.com)’, ‘[outlook](https://outlook.com)’, ‘[crunchyroll](https://crunchyroll.com)’, ‘[telegram](https://telegram.com)’, ‘[pornhub](https://pornhub.com)’, ‘[disney](https://disney.com)’, ‘[expressvpn](https://expressvpn.com)’, ‘crypto’, ‘[uber](https://uber.com)’, ‘[netflix](https://netflix.com)’]

В репозитории PyPI найдено еще два вредоносных пакета Python

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Отчеты

StripedFly: двуликий и незаметный

Разбираем фреймворк StripedFly для целевых атак, использовавший собственную версию эксплойта EternalBlue и успешно прикрывавшийся майнером.

Азиатские APT-группировки: тактики, техники и процедуры

Делимся с сообществом подходами, которые используют азиатские APT-группировки при взломе инфраструктуры, и подробной информацией о тактиках, техниках и процедурах (TTPs) злоумышленников, основанной на методологии MITRE ATT&CK.

Как поймать «Триангуляцию»

Эксперты «Лаборатории Касперского» смогли получить все этапы «Операции Триангуляция»: эксплойты нулевого дня для iOS, валидаторы, имплант TriangleDB и дополнительные модули.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике