The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

В RubyGems выявлено 724 вредоносных пакета

22.04.2020 09:55

Компания ReversingLabs опубликовала результаты анализа применения тайпсквоттинга в репозитории RubyGems. Обычно тайпсквоттинг применяется для распространения вредоносных пакетов, рассчитанных на то, что невнимательный разработчик при поиске допустит опечатку или не заметит разницы. В ходе исследования было выявлено более 700 пакетов, названия которых схожи с популярными пакетами и отличаются незначительными деталями, например, заменой похожих букв или использованием подчёркивания вместо тире.

В более чем 400 пакетах были обнаружены компоненты, подозреваемые в совершении вредоносных действий. В частности, внутри находился файл aaa.png, включающий исполняемый код в формате PE. Указанные пакеты были связаны с двумя учётными записями, через которые с 16 по 25 февраля 2020 года в RubyGems было размещено 724 вредоносных пакета, которые в сумме были загружены около 95 тысяч раз. Исследователи проинформировали администрацию RubyGems и выявленные вредоносные пакеты уже удалены из репозитория.

Из выявленных проблемных пакетов наиболее популярным оказался "atlas-client", который на первый взгляд практически неотличим от легитимного пакета "atlas_client". Указанный пакет был загружен 2100 раз (нормальный пакет при этом был загружен 6496 раз, т.е. пользователи ошибались почти в 25% случаях). Остальные пакеты в среднем были загружены 100-150 раз и камуфлировались под другие пакеты с использованием схожей техники замены подчёркивания и тире (например, среди вредоносных пакетов: appium-lib, action-mailer_cache_delivery, activemodel_validators, asciidoctor_bibliography, assets-pipeline, apress_validators, ar_octopus-replication-tracking, aliyun-open_search, aliyun-mns, ab_split, apns-polite).

Вредоносные пакеты включали в себя PNG-файл, в котором вместо изображения размещался исполняемый файл для платформы Windows. Файл был сформирован при помощи утилиты Ocra Ruby2Exe и включал самораспаковывающийся архив с Ruby-скриптом и интерпретатором Ruby. При установке пакета файл png переименовывался в exe и запускался. В ходе выполнения создавался и добавлялся в автозапуск файл с VBScript. Указанный вредоносный VBScript в цикле анализировал содержимое буфера обмена на предмет наличия информации, напоминающей адреса криптокошельков, и в случае выявления подменял номер кошелька с расчётом на то, что пользователь не заметит отличий и переведёт средства не на тот кошелёк.

Проведённое исследование показало, что не представляет труда добиться добавления вредоносных пакетов в один из самых популярных репозиториев и данные пакеты могут оставаться незамеченными, несмотря на значительное число загрузок. Следует отметить, что проблема не специфична для RubyGems и касается других популярных репозиториев. Например, в прошлом году те же исследователи выявили в репозитории NPM вредоносный пакет bb-builder, использующий аналогичную технику запуска исполняемого файла для кражи паролей. До этого бэкдор был найден в зависимости к NPM-пакету event-stream и вредоносный код был загружен около 8 млн раз. Вредоносные пакеты также периодически всплывают в репозитории PyPI.

  1. Главная ссылка к новости (https://www.theregister.co.uk/...)
  2. OpenNews: В каталоге Python-пакетов PyPI выявлены две вредоносные библиотеки
  3. OpenNews: В каталоге PyPI выявлены вредоносные пакеты
  4. OpenNews: Применение тайпсквоттинга для распространения вредоносных модулей NPM, PyPI и Gems
  5. OpenNews: Выявлены следы взлома PHP-репозитория PEAR и модификации пакетного менеджера
  6. OpenNews: В RubyGems выявлена удалённо эксплуатируемая уязвимость
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/52785-gems
Ключевые слова: gems, ruby, malware
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (50) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 10:26, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    Никогда, ни в одном, открытом репозитории не было вредоносных пакетов и вот нате вам опять!
     
     
  • 2.14, нах. (?), 11:47, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +8 +/
    ну, согласись, 700 штук с двух акаунтов - это все же достижение!

     
  • 2.24, gogo (?), 14:13, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Для публично открытых на запись "репозиториев" следовало бы придумать другое название, дабы не путать с нормальными репозиториями.
    Например говнозиторий. Или репоговнорий. Или говноговнорий. Всем бы было понятно.
     
     
  • 3.28, Константавр (ok), 15:08, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +12 +/
    crapository - звучит :) продвигай идею в палату мер и весов, мы тебя поддержим :)
     
     
  • 4.48, Nxx (ok), 12:16, 23/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Тогда уж coprository.
     
  • 2.31, заминированный тапок (ok), 16:08, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Думать что в закрытом ПО нет вредоносного кода - это как закрыть глаза руками и думать что спрятался и в безопасности

    Но у проприетарщиков обычно и уровень развития 6-летнего

     
     
  • 3.55, MadeInRussiaPlus (?), 10:41, 24/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    При чем тут закрытый код? Речь про открытые репозитории, неважно, что в них лежит, проприетарной или открытое ПО.

    Это как сайт без HTTPS, открытый для MITM. Неважно, на чем он написан, ASP.NET или RoR, открыт его код или закрыт.

    Речь о том, что нужно ужесточать контроль за репозиториями. Например, все так же разрешать загружать любые пакеты, но делать процедуру получения флага "trusted", а пользователи без флага маркировать как требующие особой осторожности со стороны пользователей.

     
     
  • 4.56, заминированный тапок (ok), 11:22, 24/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    приношу извининения, тк я не думал, что существуют настолько открытые репозитории (точнее свалка)
    и не думал что существуют те, кто таким слепо пользуется

    не перестают удивлять феноменам современности

    просто дичь

     

  • 1.2, Аноним (1), 10:32, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как хорошо, что не использую софт на руби.
     
     
  • 2.3, Аноним (3), 10:39, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Рад за коллегу, но

    > проблема не специфична для RubyGems и касается других популярных репозиториев

     
     
  • 3.8, Аноним (1), 10:51, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +4 +/
    1. Надо пакеты, без личной OpenPGP подписи разраба, в репы не принимать!

    2. Контролировать каждому и верифицировать OpenPGP ключи хороших разрабов.

    3. Тулзы которые грузят что-то с реп должны автоматом проверять подпись OpenPGP.

     
     
  • 4.12, JL2001 (ok), 11:37, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > 1. Надо пакеты, без личной OpenPGP подписи разраба, в репы не принимать!

    оно примерно так и работает фактически

    > 2. Контролировать каждому и верифицировать OpenPGP ключи хороших разрабов.

    механизм отличия хороших от плохих в студию (плохих предлагаю скриптом сразу расстреливать)

    > 3. Тулзы которые грузят что-то с реп должны автоматом проверять подпись OpenPGP.

    оно так и работает чаще всего (https всякий)

     
     
  • 5.21, Аноним (21), 12:59, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    1. Идентификация пакетов в репозитории строго по подписи OpenPGP ключа.

    2. Строгая верификация публичных OpenPGP ключей пользователей: https://www.opennet.ru/openforum/vsluhforumID3/117882.html#4
    Скрипт для отстрела левых пакетов в репозитории:
    Создаем список публичных ключей не прошедших проверку:
    gpg --check-trustdb
    Удаляем все пакеты с репозитория без подписи или подписанные ключами не прошедшими проверку.

    3. Каждый пользователь репозитория должен у себя поддерживать, периодически проверять, публичные ключи разрабов пакетов и по них верифицировать скачанные с репозитория пакеты.

     
     
  • 6.25, Michael Shigorin (ok), 14:16, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да подпись тут -- инструмент, вопрос в доверии к ней (и подписавшему).  Это задачка на репутацию, а не на криптуху.
     
     
  • 7.45, Аноним (45), 06:19, 23/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    gpg --check-trustdb Дает возможность верифицировать базу публичных ключей Можно... большой текст свёрнут, показать
     
     
  • 8.58, JL2001 (ok), 13:07, 24/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    и что же им помешает набрать подписи ... текст свёрнут, показать
     
  • 6.34, microsoft (?), 19:17, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А говнокодомакаки как костылили с использованием левых модулей, так и будут дале
     
     
  • 7.46, Аноним (45), 06:30, 23/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Хочется M$ монопольнои контролировать верификацию пакетов в GNU/Linux? Сколько будете со счета списывать за загрузку GNU/Linux?

    https://www.opennet.ru/openforum/vsluhforumID3/120270.html#190

     
  • 4.16, Аноним (3), 11:56, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Хорошие разработчики тоже используют инструментарий. SDK к примеру и вообще чужой код, в том числе открытый. Но https://www.computerra.ru/261789/kak-prilozheniya-shpionyat-za-nami/ И как нам, хорошим, быть?
     
  • 4.23, funny.falcon (?), 13:16, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Так ведь НЕ БЫЛИ скомпроментированы существующие пакеты.

    Злоумышленники создали НОВЫЕ пакеты от СВОЕГО имени.

    Просто имена подобрали подходящие на существующие: если кто-то опечатается, или в поиске выберет не тот, то попадётся.

     
  • 2.9, Аноним (9), 10:53, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Да на Node.js тебе ничего не угрожает.
     
     
  • 3.22, Аноним (21), 13:01, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И JS тоже нигде не использую, даже dbus & polkitd не устанавливаю.
     

  • 1.4, КО (?), 10:40, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В зависимости подставить можно?
    Если нет - то тут уж у кого глаз острее
     
  • 1.5, Аноним (5), 10:40, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    а сколько их в нпм...
     
     
  • 2.7, Аноним (7), 10:48, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    NPM всего-то в 100+ раз больше размером
     
     
  • 3.26, Michael Shigorin (ok), 14:17, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Гусары, молчать!
     
  • 3.41, Lex (??), 01:18, 23/04/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Низабудим про лифтпад!!111
     
  • 3.54, Аноним84701 (ok), 17:47, 23/04/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > NPM всего-то в 100+ раз больше размером

    И за RubyGems стоит компания Ruby Inc, у которой репа и все с ней связанное - основная часть бизнеса?
    Или опять сравнивается мягкое и фиолетовое?

     
  • 2.10, Аноним (9), 10:54, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Там даже целенаправленный зловредный код может быть опасен.
     

  • 1.6, Аноним (7), 10:46, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если я правильно посмотрел, то в rubygems всего 10620 пакетов. 724 от этих 10620 это почти 7%.
     
     
  • 2.17, разработчик (?), 12:03, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Это вы нашли пока только 724

    Думаешь, у меня было только два акаунта?

     

  • 1.11, JL2001 (ok), 11:26, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    репозитории, говорили они, мантейнеры, говорили они
     
     
  • 2.29, Константавр (ok), 15:10, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    какие майнтейнеры? Там практически анонимная свалка.
     
     
  • 3.57, JL2001 (ok), 13:04, 24/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > какие майнтейнеры? Там практически анонимная свалка.

    а кто, используя RubyGems, понимает это? большинство считают репозиторием а не свалкой

     

  • 1.18, Аноним (18), 12:16, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    "невнимательный разработчик".. ох уж эта ваша политкорректность.
     
     
  • 2.30, Аноним (30), 15:13, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А как правильно? Негр?
     

  • 1.19, robot228 (?), 12:32, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Не удивительно что в одном из лучших и крупнейших архивах яп выявлены троянчики=)
     
  • 1.20, user (??), 12:51, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    RubyGerms
     
  • 1.33, Аноним (33), 19:04, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как так-то? Как так-то?!
     
  • 1.35, microsoft (?), 19:20, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Может макаки уже начнут проверять имена пакетов и перестать ныть когда сами виноваты?
     
     
  • 2.37, Онаним (?), 20:51, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Как, одной командочкой скачивая пакетик "leftpad-makes-everything-good" вместе со всеми зависимостями, ещё надо что-то проверять?
     
  • 2.39, Аноним (39), 21:26, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А как ты узнаешь, что тебе нужно, и как оно называется? Простые батарейки конечно просмотришь глазами (1 раз), но со сложными как быть? Если есть возможность, я смотрю на список других пакетов автора. И копирую, чтобы не ошибиться при вводе. Так ведь не проблема нагенерировать по автору на каждый пакет! И как ты отличишь это нормальный форк, или малварь? А если половина авторов просто китайские нонеймы?
     
     
  • 3.40, microsoft (?), 21:48, 22/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Не использовать такое уг в проекте. Иииии проверять то что подключаеш а не верить васяну на чисто ну тут я те говору да мамо клянусь все путем
     
  • 3.42, Lex (??), 01:23, 23/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Количество и частота скачиваний, количество звёзд и issue( в т.ч исправленных )в репе проекта

    Очевидно же, что если есть пара почти одинаковых пакетов, но у одного 10 тыс скачиваний, а у другого - просто 10, то кто-то желает кого-то н*ть, надеясь, что пользователи не заметят разницы в названии.

     
     
  • 4.44, Аноним (39), 02:20, 23/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Если бы это ещё работало. Обычно ближе у 1 100 скачиваний, но протухло, у 2 10, но не протухло. А на гитхабе ещё и 100500 форков, пойди найди живой. Выбирай. При этом обычно там ещё и норм код оказывается, намного лучше, чем сейчас бы накостылял под задачу.
     
  • 4.50, nebularia (ok), 12:20, 23/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Лучший критерий - время загрузки первой версии.
     

  • 1.38, YetAnotherOnanym (ok), 21:09, 22/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > касается других популярных репозиториев
    > те же исследователи выявили
    > также периодически всплывают

    Хы... осталось дождаться, когда эти исследователи доберутся до hex.pm.

     
  • 1.43, Аноним (43), 01:49, 23/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Помнити лифтпад!
     
  • 1.47, Аноним (47), 11:14, 23/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >В RubyGems выявлено 724 вредоносных пакета

    Зловещие мертвецы

     
  • 1.52, Аноним (52), 16:43, 23/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну частично сами виноваты - надо быть конченым чтобы различать - и _ в названиях пакетов, а вообще вполне ожидаемо от uncurated репозитория - в pypi и npm такие же проблемы. Поэтому их можно рассматривать только как помойки, а ставить пакеты только через родные репозитории системы, где на них хотя бы посмотрели мантейнеры.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру