По данным
Они предназначались для кражи персональных сведений и учетных данных разработчиков.
Изучив отчет, мы решили проверить PyPI через свою внутреннюю автоматизированную систему для мониторинга репозиториев пакетов с открытым исходным кодом. В результате мы обнаружили еще два вредоносных пакета Python, которые маскировались под один из самых популярных пакетов с открытым исходным кодом —
Хронология отправки пакетов:
Злоумышленник скопировал описание официального пакета 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 и выполняет его.
[H2]Загрузчик[/H2]
На следующем этапе запускается загрузчик, обфусцированный с помощью общедоступного инструмента
Если имя ОС не «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 и вредоносному скрипту. Стоит отметить, что этот метод закрепления фактически не работает, поскольку система запускает только первый исполняемый файл.
[H2]
[/H2]
[H2]Финальная полезная нагрузка: W4SP Stealer[/H2]
Финальная полезная нагрузка представляет собой троянец, написанный на Python и обфусцированный тем же способом, что и загрузчик. Автор зловреда оставил в его коде название W4SP Stealer.
При запуске стилер идентифицирует внешний IP-адрес машины жертвы, отправляя запрос GET на
Пароли и файлы 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.
Мы уже сообщили об этих
Для просмотра ссылки необходимо нажать
Вход или Регистрация
компании CheckPoint за 8 августа, в самом популярном репозитории Python среди разработчиков — PyPI (Python Package Index) — затаились десять вредоносных пакетов. Они предназначались для кражи персональных сведений и учетных данных разработчиков.
Изучив отчет, мы решили проверить PyPI через свою внутреннюю автоматизированную систему для мониторинга репозиториев пакетов с открытым исходным кодом. В результате мы обнаружили еще два вредоносных пакета Python, которые маскировались под один из самых популярных пакетов с открытым исходным кодом —
Для просмотра ссылки необходимо нажать
Вход или Регистрация
.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Хронология отправки пакетов:
Имя пакета | Версия | Временная метка (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 и выполняет его.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
[H2]Загрузчик[/H2]
На следующем этапе запускается загрузчик, обфусцированный с помощью общедоступного инструмента
Для просмотра ссылки необходимо нажать
Вход или Регистрация
. Применено несколько методик обфускации — переименование переменных и библиотечных функций, добавление смешанных логико-арифметических выражений и ненужного кода, а также сжатие фрагментов кода с помощью библиотеки zlib.Если имя ОС не «nt» (Windows), загрузчик завершает работу. Если же имя подходящее, он случайным образом выбирает один из каталогов в C:\Users\<имяпользователя>\AppData\Roaming или C:\Users\<имяпользователя>\AppData\Local, генерирует случайную восьмисимвольную строку из символов «bcdefghijklmnopqrstuvwxyz» и случайным образом выбирает одно из расширений из следующего списка:
1 | ['.dll', '.png', '.jpg', '.gay', '.ink', '.url', '.jar', '.tmp', '.db', '.cfg'] |
Затем зловред загружает код финальной стадии со страницы 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 и вредоносному скрипту. Стоит отметить, что этот метод закрепления фактически не работает, поскольку система запускает только первый исполняемый файл.
1 | C:\Windows\System32\<SecurityHealthSystray.exe | SystemSettingsAdminFlows.exe> & <путь к интерпретатору Python> <сгенерированный путь для загрузки финальной полезной нагрузки> |
[H2]
Для просмотра ссылки необходимо нажать
Вход или Регистрация
[/H2]
[H2]Финальная полезная нагрузка: W4SP Stealer[/H2]
Финальная полезная нагрузка представляет собой троянец, написанный на Python и обфусцированный тем же способом, что и загрузчик. Автор зловреда оставил в его коде название W4SP Stealer.
При запуске стилер идентифицирует внешний IP-адрес машины жертвы, отправляя запрос GET на
Для просмотра ссылки необходимо нажать
Вход или Регистрация
, и устанавливает два легитимных пакета PyPI — requests и pycryptodome, чтобы отправлять оператору полученные данные и расшифровывать файлы cookie и пароли из браузеров. Затем зловред начинает собирать токены Discord, сохраненные файлы cookie и пароли от браузеров в отдельных потоках.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Пароли и файлы cookie сохраняются в файлах %TEMP%\wppassw.txt и %TEMP%\wpcook.txt в следующем формате:
1 | UR1: <URL> | U53RN4M3: <ИМЯПОЛЬЗОВАТЕЛЯ> | P455W0RD: <РАСШИФРОВАННЫЙПАРОЛЬ> |
1 | H057 K3Y: <КЛЮЧХОСТА> | N4M3: <НАЗВАНИЕ> | V41U3: <РАСШИФРОВАННЫЙФАЙЛ_COOKIE> |
Все файлы, созданные стилером на машине жертвы, начинаются со строки: <—W4SP STEALER ON TOP—>. Все собранные данные отправляются оператору через веб-хук Discord (https://discord[.]com/api/webhooks/1001296979948740648/4wqCErLU3BVeKWnxDA70Gns5vcfxh5OCb3YDIFZaFujqfSRIwHH4YIu3aLOVWjCDeO1H) и рендерятся в удобном формате:
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Стилер также создает и отправляет список сохраненных учетных данных браузера для ссылок, содержащих ключевые слова mail, card, bank, buy, sell и др. (Полный список приведен в Приложении.) Кроме того, он собирает данные из кошельков MetaMask, Atomic и Exodus, а также учетные данные Steam и Minecraft.
Собрав учетные данные, стилер начинает прочесывать каталоги «Загрузки», «Документы» и «Рабочий стол» на компьютере жертвы в поисках имен файлов, содержащих следующие слова:
1 | passw, mdp, motdepasse, mot de passe, login, paypal, banque, account, metamask, wallet, crypto, exodus, discord, 2fa, code, memo, compte и token. |
Как ни странно, в этом списке есть несколько слов на французском: 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, активировав тем самым вредоносный код.
1 | subprocess.Popen('taskkill /im discord.exe /t /f',shell=true) |
Внедренный скрипт отслеживает действия жертвы — изменение адреса электронной почты, пароля или платежной информации. Обновленная информация также поступает на канал Discord.
Мы уже сообщили об этих
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Для просмотра ссылки необходимо нажать
Вход или Регистрация
команде безопасности PyPI и занесли их в базу данных уязвимостей Snyk.
Для просмотра ссылки необходимо нажать
Вход или Регистрация