The OpenNET Project / Index page

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

09.06.2016 21:39  Применение тайпсквоттинга для распространения вредоносных модулей NPM, PyPI и Gems

Опубликованы результаты эксперимента по использованию методов тайпсквоттинга для распространения вредоносного ПО в репозиториях модулей для языков программирования Python, Node.JS и Ruby. Метод основан на том, что популярные репозитории модулей для разработчиков позволяют любому желающему разместить свою библиотеку, не проверяя при этом её содержимое и допуская выполнение произвольного кода в момент установки. В том числе репозитории допускают загрузку библиотек, имена которых почти полностью совпадает с названием других популярных библиотек. Расчёт делается на то, что пользователь допустит опечатку при наборе имени или не заметит различий выбирая модуль из списка. Забегая вперёд можно сказать, что метод позволил получить контроль над более чем 17 тысячами хостов и на 8 тысячах систем выполнить код с правами администратора.

Для оценки эффективности метода в репозиториях PyPI (Python), Npmjs.com (Node.js) и rubygems.org (Ruby) было размещено 214 подставных пакетов, имена для которых были выбраны в соответствии с тремя основными критериями: опечатки в названии (например, coffe-script вместо coffee-script), незарегистрированные варианты имён из стандартной библиотеки (например, urllib2) и имена, вычисленные алгоритмами оценки схожести имён (например, req7est вместо request). В качестве полезной нагрузки в фиктивные модули был добавлен код, отправляющий запрос на сервер сбора статистики. Модули добавлялись в репозитории постепенно в течение нескольких месяцев, чтобы не вызвать подозрений со стороны администраторов.

Результат превзошёл все ожидания - на сервере было зафиксировано 45334 запросов от 17289 уникальных хостов. Т.е. если бы метод был применён для организации атаки, то удалось бы захватить управление над более чем 17 тысячами компьютеров, чего более чем достаточно для развёртывания ботнета. Более того, в 43.6% случаев (на 8552 хостах) код был выполнен с правами администратора (!), позволяющими полностью контролировать операционную систему. 15221 хоста были поражены через пакеты PyPi, 1631 через rubygems и 525 через NPM. 8614 захваченных хостов работают под управлением Linux, 6174 - Windows и 4758 - OS X. Наиболее популярным фиктивным пакетом стал urllib2, который за две недели оказался установленным на 3929 системах.

В качестве мер по противостоянию подобным атакам предлагается:

  • Запретить в пакетных менеджерах выполнение встроенных в пакет обработчиков различных стадий установки, которые позволяют запустить произвольный код на системе пользователя в момент установки модуля;
  • Подготовить список типовых опечаток и проверять схожесть названий с использованием метода Дамерау — Левенштейна для наиболее популярных пакетов;
  • Анализировать логи на наличие 404-ошибки (файл не найден) и блокировать фигурирующие в них неверные названия пакетов.


  1. Главная ссылка к новости (http://incolumitas.com/2016/06...)
  2. OpenNews: Незащищённость NPM к атакам по внедрению вредоносных модулей-червей
  3. OpenNews: Инцидент с захватом прав на NPM-модуль привёл к сбою в работе проектов, использующих NPM
  4. OpenNews: Rubygems.org подвергся взлому
  5. OpenNews: В RubyGems устранена уязвимость, позволявшая подменять файлы в репозитории
Лицензия: CC-BY
Тип: Интересно / Проблемы безопасности
Ключевые слова: malware, node.js, python, npm, pypi, ruby, gems
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.1, rob pike (?), 21:46, 09/06/2016 [ответить] [показать ветку] [···]    [к модератору]
  • +6 +/
    Теперь в npm встроят искуственный интеллект с десятком нейросетей, который будет проверять опечатки.

    С "поколением Javascript" одно плохо - сколько попкорна не бери, все равно не хватает.

     
     
  • 2.6, Crazy Alex (ok), 22:45, 09/06/2016 [^] [ответить]    [к модератору]
  • +2 +/
    Ну, жертв джаваскрипта меньше всего... Но суть от этого не меняется.
     
     
  • 3.8, rob pike (?), 23:15, 09/06/2016 [^] [ответить]    [к модератору]
  • +/
    Жертв джаваскрипта меньше всего - что?
     
     
  • 4.15, Crazy Alex (ok), 01:37, 10/06/2016 [^] [ответить]    [к модератору]
  • +1 +/
    "15221 хоста были поражены через пакеты PyPi, 1631 через rubygems и 525 через NPM"

    Основная масса жертв - питонисты

     
     
  • 5.26, Нанобот (ok), 09:26, 10/06/2016 [^] [ответить]    [к модератору]
  • +1 +/
    возможно, это просто значит, что юзеров pypi в семь раз больше, чем юзеров rubygems и npm, вместе взятых
     
     
  • 6.34, Crazy Alex (ok), 10:06, 10/06/2016 [^] [ответить]    [к модератору]  
  • –3 +/
    Вполне возможно. С другой стороны - серверного JS сейчас на вид не меньше, чем питона.
     
  • 2.32, омномномнимус (?), 09:55, 10/06/2016 [^] [ответить]    [к модератору]  
  • +3 +/
    новые времена - новые проблемы. С поколеним старперов тоже все плохо - раньше было лучше ;-)
     
     
  • 3.39, rob pike (?), 11:03, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Огласите список "новых" проблем.
     
     
  • 4.42, омномномнимус (?), 11:42, 10/06/2016 [^] [ответить]    [к модератору]  
  • +2 +/
    тайпсквоттинг
     
     
  • 5.59, rob pike (?), 17:57, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Раздолбайство - проблема не новая.
     
     
  • 6.61, Michael Shigorin (ok), 18:38, 10/06/2016 [^] [ответить]    [к модератору]  
  • +1 +/
    > Раздолбайство - проблема не новая.

    И не всегда проблема: http://img-fotki.yandex.ru/get/3104/yurasikgor.3/0_1af70_405badb7_L

     
  • 6.62, омномномнимус (?), 20:13, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    ну, с таким подходом все можно подвести под "раздолбайство"
     
  • 1.2, Sabakwaka (ok), 22:24, 09/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    Проблема в безграмотности владельцев/админов, а не в Javascript?
     
     
  • 2.7, Аноним (-), 22:52, 09/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Это очень даже связанные вещи. Достойные плоды низкого порога вхождения и привычки к "хреняк, хреняк и в продакшен".
     
     
  • 3.38, Аноним (-), 10:36, 10/06/2016 [^] [ответить]     [к модератору]  
  • +/
    Когда злоумышленники регистрируют какой-нибудь vkontalke ru, надеясь получить па... весь текст скрыт [показать]
     
     
  • 4.40, Аноним (-), 11:19, 10/06/2016 [^] [ответить]     [к модератору]  
  • +/
    А вот и вебмакака подтянулась со своей попоболью Репозиторий в который кто уг... весь текст скрыт [показать]
     
     
  • 5.47, synweap (ok), 12:48, 10/06/2016 [^] [ответить]     [к модератору]  
  • +1 +/
    Может лучше вообще интернет запретим А то по запросу скачать винрар открывает... весь текст скрыт [показать]
     
     
  • 6.53, Аноним (-), 16:15, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Просто объясните как на 17289-х уникальных хостах оказались левые пакеты.
     
     
  • 7.56, synweap (ok), 17:34, 10/06/2016 [^] [ответить]     [к модератору]  
  • +/
    Я откуда знаю Мой npm-пакет с очень редким специфичным применением кто-то тоже ... весь текст скрыт [показать]
     
     
  • 8.58, Аноним (-), 17:50, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Угу. Сервисы, сервисы, 17289 одних сервисов.
     
     
  • 9.60, synweap (ok), 18:27, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    > 15221 хоста были поражены через пакеты PyPi, 1631 через rubygems и 525 через NPM.

    Новость не читай
    @
    Камменты оставляй
    @
    Ненавидь веб всею душою своею

     
     
  • 10.68, Аноним (-), 16:59, 11/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Как я и думал, по делу вам сказать нечего.
     
  • 2.27, Нанобот (ok), 09:28, 10/06/2016 [^] [ответить]    [к модератору]  
  • +1 +/
    > Проблема в безграмотности владельцев/админов, а не в Javascript?

    та вроде никто и не говорил, что проблема в javascript

     
  • 1.3, Аноним (-), 22:36, 09/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +8 +/
    Обязательную pgp-подпись пакетов да ручное добавление ключей в доверенные
     
     
  • 2.13, Аноним (-), 00:43, 10/06/2016 [^] [ответить]    [к модератору]  
  • +1 +/
    > Обязательную pgp-подпись пакетов да ручное добавление ключей в доверенные

    В чем разница с обязательным подписанием RSA-ключами и ручным добавлением ключей в доверенные в PKI?

     
     
  • 3.33, Аноним (-), 09:59, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Очевидно тем что PGP ключ не обязательно RSA.
     
  • 2.24, Нанобот (ok), 09:01, 10/06/2016 [^] [ответить]     [к модератору]  
  • +/
    верный способ отпугнуть 95 пользователей и привести всю систему в негодность дл... весь текст скрыт [показать]
     
     
  • 3.29, Andrey Mitrofanov (?), 09:32, 10/06/2016 [^] [ответить]     [к модератору]  
  • +2 +/
    Не, велосипеды _должны_ быть разнообразны и неожиданны Просто работать оно до... весь текст скрыт [показать]
     
  • 1.4, Аноним (-), 22:36, 09/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    > код был выполнен с правами администратора (!)

    Может, это какие-нибудь докеры и прочие контейнеры, в которых это норма?

     
     
  • 2.21, Аноним (-), 06:29, 10/06/2016 [^] [ответить]     [к модератору]  
  • +/
    Я знаю только за ноду В npm лежат не только модули к ноде, но, иногда, попадают... весь текст скрыт [показать]
     
     
  • 3.30, Moomintroll (ok), 09:38, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    > один такой крупный проект может накрутить всю статистику с установкой модулей под рутом

    Вы невнимательно читаете:

    "... было зафиксировано 45334 запросов от 17289 уникальных хостов"

     
     
  • 4.37, Crazy Alex (ok), 10:20, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Уикальных IP, скорее всего. Если IPv6 у кого-то поднят - то запросто.
     
  • 1.5, AS (??), 22:40, 09/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    так то это совсем капец.
    ведь чтоб гарантировано защититься от этого -
    никаких мощностей/человекоресурсов не хватит.
    ну почему я в дворники не пошел ?
    сидел бы шас бухал - горя не знал ..
    но придется похоже разрабов идти пинать завтра -
    уже по zabbиксу вижу, похоже цапнули с npm ом эту дрянь !
     
     
  • 2.10, Аноним (-), 00:03, 10/06/2016 [^] [ответить]     [к модератору]  
  • +4 +/
    Бухать меньше надо, тогда бред мерещаться по zabbix-у не будет и мания величия п... весь текст скрыт [показать]
     
  • 1.9, IZh. (?), 23:45, 09/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +5 +/
    А я сижу и жду, пока это болото не перебодит. Когда есть 100500 модулей, и сотня разных CSS-препроцессоров, фреймворком, менеджеров зависимостей и ещё много чего другого, то это как-то неправильно. Надеюсь, со временем останется не более десятой части от того, что есть.

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

     
     
  • 2.14, Аноним (-), 00:43, 10/06/2016 [^] [ответить]     [к модератору]  
  • +/
    Ну Логическую цепочку продолжай Зачем нам 2048 дистров пингвина Лучше десяток... весь текст скрыт [показать]
     
     
  • 3.17, Crazy Alex (ok), 01:41, 10/06/2016 [^] [ответить]     [к модератору]  
  • +/
    Разница в том, что у дистров пингвина очень крутая кривая распределения популярн... весь текст скрыт [показать]
     
     
  • 4.20, rob pike (?), 04:50, 10/06/2016 [^] [ответить]     [к модератору]  
  • +1 +/
    Там кривая более пологая, может быть, но в целом похоже на пингвинов Но с одной... весь текст скрыт [показать]
     
     
  • 5.36, Crazy Alex (ok), 10:13, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Ну так, считай, при любом сравнении популярности надёте гауссиану - конечно похоже. Я бы различие проводил скорее в том, что линуксовый самопал всё же крайне редко тянут в коммерческую эксплуатацию.
     
  • 3.18, . (?), 01:42, 10/06/2016 [^] [ответить]     [к модератору]  
  • +1 +/
    Хрен вам ОСС - тем и силён что тут всего овердомного И у проприетарщиков шан... весь текст скрыт [показать]
     
     
  • 4.22, Michael Shigorin (ok), 07:16, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    > И у проприетарщиков шансов с каждым днём убавляется :)

    Эк Вы жёстко ихнего добровольного (?) обслуживателя-то (это судя по типовым стираемым комментариям с того же адреса)...

     
  • 4.28, Аноним (-), 09:30, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Угу, по десктопу особенно видна смла этого подхода.
     
  • 2.51, hatersgonnahate (?), 15:56, 10/06/2016 [^] [ответить]    [к модератору]  
  • +1 +/
    зачем столько комментариев - по одному на каждого зарегистрированного
    зачем столько новостей - по одной в день
    зачем столько сайтов - один, но крутой
    один коммент, одна новость, один сайт! хейль!
     
  • 1.19, Онаним (?), 04:49, 10/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Дожили...
     
  • 1.23, Аноним (-), 08:52, 10/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +2 +/
    Хипстерские подходы, увы... Почему-то эти ребята считают, что всю безопасность кто-то должен сделать за них.
     
  • 1.25, Нанобот (ok), 09:23, 10/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    просто разрабы расслабились, т.к. целевые атаки против них - большая редкость (и мне бы хотелось, чтоб так было и дальше)
     
  • 1.31, пучапучс (?), 09:53, 10/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    Вспоминается старая байка времен DOS.
    Клиент vs саппорт.
    ...
    -надо набирать install.exe
    -но меня n не нажимается и я её на m заменяю.
     
  • 1.35, Аноним (-), 10:13, 10/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    > 8614 захваченных хостов работают под управлением Linux, 6174 - Windows и 4758 - OS X.
    > 45334 запросов от 17289 уникальных хостов.

    8614+6174+4758=19546

    шутка о ста сорока шести процентах...

     
     
  • 2.41, Аноним (-), 11:22, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Уникальный IP != уникальный хост.

    Искренне ваш, К.О.

     
     
  • 3.48, Шапкоед (?), 12:57, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Все еще хуже. Это виртуальные машины или virtualenv у питона. %-)
     
  • 3.57, анином (?), 17:38, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Будте любезны, поясните - VPS это уникальный хост или просто уникальное IP?

     
     
  • 4.66, Аноним (-), 00:21, 11/06/2016 [^] [ответить]    [к модератору]  
  • +2 +/
    > Будте любезны, поясните - VPS это уникальный хост или просто уникальное IP?

    Да.

     
  • 1.43, анон (?), 11:46, 10/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    что-что? кто-то еще не использует йомена и свои сценарии разворачивания окружения к нему? кто-то не пользуется package.json? есть не осилившие requirements.txt ?

    не вижу особой проблемы. тем кто не пользуется этими вещами, не заходит на страницы с оригинальными пакетами на гитхаб, а пишет по памяти - ссзб.

    ну а если есть дятлы которые ставят все подряд пакеты нода с флагом -g, то тут уже ничего не поможет. даже грант отказывается запускаться если он установлен не локально. по питону также - есть virtualenv, pip и ~.

     
  • 1.44, Аноним (-), 11:48, 10/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    Есть репы с deb-пакетами. Всё остальное от лукавого.
     
     
  • 2.49, Andrey Mitrofanov (?), 13:12, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    > Есть репы с deb-пакетами. Всё остальное

    Есть репы с р-п-м-ами, gpgcheck=0 и вперёд[I]![/I]

    > от лукавого.

     
  • 1.50, arisu (ok), 14:52, 10/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    > В качестве мер по противостоянию подобным атакам предлагается

    …душить скрипт‐киддисов пока они ещё маленькие.

     
     
  • 2.54, Аноним (-), 16:18, 10/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Похоже что уже поздно. Вон их сколько уже понабежало.
     
     
  • 3.70, Нониус (?), 13:14, 14/06/2016 [^] [ответить]    [к модератору]  
  • +/
    Два раза "уже" это пунктик
     
  • 1.63, тОпор (?), 22:29, 10/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Система рейтингов для пакетов + право заверять пакеты тем, кому мы доверяем (10-20 коре разработчиков).

     
  • 1.64, spotify.space (?), 23:18, 10/06/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Проблема высосана из пальца. Единственное, что надо запретить отъем названия пакета из лицензионных соображений, и то, только с согласия владельца пакета.
    Плюс нужно предусмотреть фиксацию версий пакетов, чтобы сохранять обратную совместимость с существующимми приложениями.
     
     
  • 2.67, Никто (??), 15:02, 11/06/2016 [^] [ответить]    [к модератору]  
  • +/
    - На сервере было зафиксировано 45334 запросов от 17289 уникальных хостов. В 43.6% случаев код был выполнен с правами администратора, позволяющими полностью контролировать операционную систему. Что Вы по этому думаете, господин эксперт?
    - Проблема высосана из пальца.
     

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


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