Компания ReversingLabs опубликовала результаты анализа применения тайпсквоттинга в репозитории RubyGems. Обычно тайпсквоттинг применяется для распространения вредоносных пакетов, рассчитанных на то, что невнимательный разработчик при поиске допустит опечатку или не заметит разницы. В ходе исследования было выявлено более 700 пакетов, названия которых схожи с популярными пакетами и отличаются незначительными деталями, например, заменой похожих букв или использованием подчёркивания вместо тире...Подробнее: https://www.opennet.ru/opennews/art.shtml?num=52785
Никогда, ни в одном, открытом репозитории не было вредоносных пакетов и вот нате вам опять!
ну, согласись, 700 штук с двух акаунтов - это все же достижение!
Для публично открытых на запись "репозиториев" следовало бы придумать другое название, дабы не путать с нормальными репозиториями.
Например говнозиторий. Или репоговнорий. Или говноговнорий. Всем бы было понятно.
crapository - звучит :) продвигай идею в палату мер и весов, мы тебя поддержим :)
Тогда уж coprository.
Думать что в закрытом ПО нет вредоносного кода - это как закрыть глаза руками и думать что спрятался и в безопасностиНо у проприетарщиков обычно и уровень развития 6-летнего
При чем тут закрытый код? Речь про открытые репозитории, неважно, что в них лежит, проприетарной или открытое ПО.Это как сайт без HTTPS, открытый для MITM. Неважно, на чем он написан, ASP.NET или RoR, открыт его код или закрыт.
Речь о том, что нужно ужесточать контроль за репозиториями. Например, все так же разрешать загружать любые пакеты, но делать процедуру получения флага "trusted", а пользователи без флага маркировать как требующие особой осторожности со стороны пользователей.
приношу извининения, тк я не думал, что существуют настолько открытые репозитории (точнее свалка)
и не думал что существуют те, кто таким слепо пользуетсяне перестают удивлять феноменам современности
просто дичь
Как хорошо, что не использую софт на руби.
Рад за коллегу, но> проблема не специфична для RubyGems и касается других популярных репозиториев
1. Надо пакеты, без личной OpenPGP подписи разраба, в репы не принимать!2. Контролировать каждому и верифицировать OpenPGP ключи хороших разрабов.
3. Тулзы которые грузят что-то с реп должны автоматом проверять подпись OpenPGP.
> 1. Надо пакеты, без личной OpenPGP подписи разраба, в репы не принимать!оно примерно так и работает фактически
> 2. Контролировать каждому и верифицировать OpenPGP ключи хороших разрабов.
механизм отличия хороших от плохих в студию (плохих предлагаю скриптом сразу расстреливать)
> 3. Тулзы которые грузят что-то с реп должны автоматом проверять подпись OpenPGP.
оно так и работает чаще всего (https всякий)
1. Идентификация пакетов в репозитории строго по подписи OpenPGP ключа.2. Строгая верификация публичных OpenPGP ключей пользователей: https://www.opennet.ru/openforum/vsluhforumID3/117882.html#4
Скрипт для отстрела левых пакетов в репозитории:
Создаем список публичных ключей не прошедших проверку:
gpg --check-trustdb
Удаляем все пакеты с репозитория без подписи или подписанные ключами не прошедшими проверку.3. Каждый пользователь репозитория должен у себя поддерживать, периодически проверять, публичные ключи разрабов пакетов и по них верифицировать скачанные с репозитория пакеты.
Да подпись тут -- инструмент, вопрос в доверии к ней (и подписавшему). Это задачка на репутацию, а не на криптуху.
gpg --check-trustdb
Дает возможность верифицировать базу публичных ключей.
Можно в настройках потребовать чтобы каждый публичный ключ имел не 3, а 5 подписей.Эти 2 экаунта, что 700 зловредов запостили точно не собрали бы даже 3 подписей.
Репутация здесь больше о корректности работы с ключиками. Если небрежно относится к хранению приватных ключей и подписывать левые публичные ключи, то создаются проблемы. Придется добавлять blacklist с плохими пользователями ключей и не учитывать их подписи при верификации.
Если команда длительное время развивает проект и сама его использует, то вероятность внедрения закладок низкая. Когда забежал и сразу пару сот проектов в репу загнал, а публичный ключ его никто не подписал, то это наверняка зловреды и отсутствие подписей публичного ключа значительно притормозил их распространение.
> gpg --check-trustdb
> Дает возможность верифицировать базу публичных ключей.
> Можно в настройках потребовать чтобы каждый публичный ключ имел не 3, а
> 5 подписей.
> Эти 2 экаунта, что 700 зловредов запостили точно не собрали бы даже
> 3 подписей.и что же им помешает набрать подписи???
А говнокодомакаки как костылили с использованием левых модулей, так и будут дале
Хочется M$ монопольнои контролировать верификацию пакетов в GNU/Linux? Сколько будете со счета списывать за загрузку GNU/Linux?https://www.opennet.ru/openforum/vsluhforumID3/120270.html#190
Хорошие разработчики тоже используют инструментарий. SDK к примеру и вообще чужой код, в том числе открытый. Но https://www.computerra.ru/261789/kak-prilozheniya-shpionyat-.../ И как нам, хорошим, быть?
Так ведь НЕ БЫЛИ скомпроментированы существующие пакеты.Злоумышленники создали НОВЫЕ пакеты от СВОЕГО имени.
Просто имена подобрали подходящие на существующие: если кто-то опечатается, или в поиске выберет не тот, то попадётся.
Да на Node.js тебе ничего не угрожает.
И JS тоже нигде не использую, даже dbus & polkitd не устанавливаю.
В зависимости подставить можно?
Если нет - то тут уж у кого глаз острее
а сколько их в нпм...
NPM всего-то в 100+ раз больше размером
Гусары, молчать!
Низабудим про лифтпад!!111
> NPM всего-то в 100+ раз больше размеромИ за RubyGems стоит компания Ruby Inc, у которой репа и все с ней связанное - основная часть бизнеса?
Или опять сравнивается мягкое и фиолетовое?
Там даже целенаправленный зловредный код может быть опасен.
Если я правильно посмотрел, то в rubygems всего 10620 пакетов. 724 от этих 10620 это почти 7%.
Это вы нашли пока только 724Думаешь, у меня было только два акаунта?
репозитории, говорили они, мантейнеры, говорили они
какие майнтейнеры? Там практически анонимная свалка.
> какие майнтейнеры? Там практически анонимная свалка.а кто, используя RubyGems, понимает это? большинство считают репозиторием а не свалкой
"невнимательный разработчик".. ох уж эта ваша политкорректность.
А как правильно? Негр?
Не удивительно что в одном из лучших и крупнейших архивах яп выявлены троянчики=)
RubyGerms
Как так-то? Как так-то?!
Может макаки уже начнут проверять имена пакетов и перестать ныть когда сами виноваты?
Как, одной командочкой скачивая пакетик "leftpad-makes-everything-good" вместе со всеми зависимостями, ещё надо что-то проверять?
А как ты узнаешь, что тебе нужно, и как оно называется? Простые батарейки конечно просмотришь глазами (1 раз), но со сложными как быть? Если есть возможность, я смотрю на список других пакетов автора. И копирую, чтобы не ошибиться при вводе. Так ведь не проблема нагенерировать по автору на каждый пакет! И как ты отличишь это нормальный форк, или малварь? А если половина авторов просто китайские нонеймы?
Не использовать такое уг в проекте. Иииии проверять то что подключаеш а не верить васяну на чисто ну тут я те говору да мамо клянусь все путем
Количество и частота скачиваний, количество звёзд и issue( в т.ч исправленных )в репе проектаОчевидно же, что если есть пара почти одинаковых пакетов, но у одного 10 тыс скачиваний, а у другого - просто 10, то кто-то желает кого-то н*ть, надеясь, что пользователи не заметят разницы в названии.
Если бы это ещё работало. Обычно ближе у 1 100 скачиваний, но протухло, у 2 10, но не протухло. А на гитхабе ещё и 100500 форков, пойди найди живой. Выбирай. При этом обычно там ещё и норм код оказывается, намного лучше, чем сейчас бы накостылял под задачу.
Лучший критерий - время загрузки первой версии.
> касается других популярных репозиториев
> те же исследователи выявили
> также периодически всплываютХы... осталось дождаться, когда эти исследователи доберутся до hex.pm.
Помнити лифтпад!
>В RubyGems выявлено 724 вредоносных пакетаЗловещие мертвецы
Ну частично сами виноваты - надо быть конченым чтобы различать - и _ в названиях пакетов, а вообще вполне ожидаемо от uncurated репозитория - в pypi и npm такие же проблемы. Поэтому их можно рассматривать только как помойки, а ставить пакеты только через родные репозитории системы, где на них хотя бы посмотрели мантейнеры.