The OpenNET Project / Index page

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

26.03.2016 10:29  Незащищённость NPM к атакам по внедрению вредоносных модулей-червей

Инцидент с нарушением работы многих известных проектов после удаления модуля из NPM-репозитория привёл к обсуждению незащищённости NPM от атак, инициированных со стороны разработчиков модулей. В том числе раскрыты данные о незащищённости инфраструктуры NPM к атаке по внедрению в репозиторий самораспространяющихся вредоносных модулей.

Совершению атаки способствуют несколько факторов:

  • Использование семантического версионирования (SemVer), по умолчанию не привязывающего приложение к конкретным версиям модулей, что позволяет инициировать установку обновления модуля через выпуск его новой версии;
  • Применение постоянного кэширования параметров аутентификации в NPM - после входа с машины разработчика можно выполнять любые действия от его имени, пока разработчик вручную не отсоединится от репозитория. Подобный подход мешает разработчику контролировать свою активность в репозитории, что может быть использовано для скрытой публикации обновлений с его компьютера.
  • Использование централизованного реестра, который используется большинством систем на базе платформы Node.js. Любой опубликованный модуль сразу становится доступен для всех, без прохождения какой-либо проверки;
  • Возможность определения shell-скриптов, запускаемых на различных этапах установки модуля и позволяющих выполнить любые действия на системе пользователя.

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

Публикация с уровнем "bugfix" приведёт к установке обновления большинством пользователей. Далее цепочка повторяется; при установке модуля будет запущен вредоносный скрипт, который изменит модули, разрабатываемые текущим пользователем и опубликует их. Все операции по публикации будут выполнены без участия разработчика, так как сеанс подключения к репозиторию NPM прокэширован.

Отличная возможность для внедрения вредоносных модулей появилась после инцидента с модулем kik, автор которого удалил из репозитория свои 273 модуля, связанные зависимостями со многими проектами. Злоумышленник мог разместить в репозитории новые модули с теми же именами и они были бы установлены на системах, в которых удалённые модули были упомянуты в зависимостях. В результате эксперимента исследователю безопасности удалось перехватить контроль над 238 из 273 удалённых модулей.

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

Для блокирования подобных атак разработчикам модулей рекомендуется не использовать постоянное подключение к NPM, установить "npm shrinkwrap" для привязки зависимостей и использовать при установке опцию "npminstall ... --ignore-scripts" для игнорирования установочных скриптов.

В качестве рекомендуемых мер усиления безопасности инфраструктуры NPM, которые помогут избежать проведения подобных атак, предлагается:

  • Ввести ограниченное время жизни параметров входа;
  • Применять двухфакторную аутентификацию при публикации модулей (например, ввести обязательное подтверждение операции по SMS);
  • Производить отключение от репозитория перед выполнением операции установки модулей;
  • Ввести обязательное ручное подтверждение выполнения скриптов, вызываемых перед установкой или удалением модуля;
  • Включить по умолчанию shrinkwrap для организации привязки проекта к конкретной версии модуля;
  • Вынести процесс обновления версий в отдельно подтверждаемую операцию "npm upgrade";
  • Внедрить систему проверки и рецензирования публикуемых модулей.


  1. Главная ссылка к новости (https://medium.com/@nm_johnson...)
  2. OpenNews: Инцидент с захватом прав на NPM-модуль привёл к сбою в работе проектов, использующих NPM
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: npm
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.1, Аноним (-), 11:25, 26/03/2016 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    коммитим репо -> обновляемся -> проверяем что пришло
     
     
  • 2.21, rshadow (ok), 18:00, 26/03/2016 [^] [ответить]    [к модератору]
  • +8 +/
    Тут все проще. "Дистрибутив" жидко обкакался. И пытается все свалить на разработчиков.

    По факту же, в любом дистрибутиве все зависит от разработчиков. Просто есть свободные дистры, в которых все правильно сделано умными людьми. А есть коммерческие дистры, где правильно стараются делать из за клиентов и денег. А это ни то ни се.

     
     
  • 3.40, Аноним (-), 19:40, 27/03/2016 [^] [ответить]    [к модератору]
  • +/
    Какой дистрибутив? Вернее дистрибутив чего?
     
  • 1.4, Аноним (-), 12:23, 26/03/2016 [ответить] [показать ветку] [···]    [к модератору]
  • –3 +/
    Все правильно, проекту пора "взрослеть".
     
     
  • 2.6, Аноним (-), 12:58, 26/03/2016 [^] [ответить]    [к модератору]
  • +27 +/
    Что уж там..., проекту пора "умирать".
     
     
  • 3.16, Аноним (-), 16:33, 26/03/2016 [^] [ответить]    [к модератору]  
  • +5 +/
    нпму в текущем виде действительно надо умереть как можно скорее, иначе ничего нового не родится
     
  • 2.36, Аноним (-), 14:06, 27/03/2016 [^] [ответить]    [к модератору]  
  • +1 +/
    На яваскрипте сложно писать большие проекты, поэтому вместо взрослоты - хипстота. И даже пример десятилетий успешной работы других пакетных манеджеров не помог.
     
  • 1.7, Аноним (-), 13:40, 26/03/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    >Использование семантического версионирования по умолчанию не привязывающего приложение к конкретным версиям модулей

    Только JS макаки могли додуматься до такого.

     
     
  • 2.8, Аноним (-), 13:48, 26/03/2016 [^] [ответить]    [к модератору]  
  • +/
    У них там CouchDB без привилегий, можно заливать все что угодно и любых размеров.
     
  • 2.9, конь (?), 13:49, 26/03/2016 [^] [ответить]    [к модератору]  
  • +10 +/
    если бы не жил в пещере, знал бы что это, на данный момент, распространенная практика не только в js сообществе.
     
     
  • 3.10, Аноним (-), 14:23, 26/03/2016 [^] [ответить]    [к модератору]  
  • –1 +/
    Ну не знаю, у нас в Java мире везде надо версии указывать. Без них не работает.
     
     
  • 4.13, _ (??), 14:49, 26/03/2016 [^] [ответить]    [к модератору]  
  • +10 +/
    мда.. в Java где всё идет через коммерческий mavencentral и где тебе с "непонятного" источника прилетают скомпилированные классы, - это не лучший пример для подражания в подобных ситуациях.

    cargo в Rust, более совершенен, да там semver, на все пакеты приходят в исходниках на машину, все пакеты хостятся на гитхабе(публичный ревью).

     
     
  • 5.20, mine (ok), 17:35, 26/03/2016 [^] [ответить]    [к модератору]  
  • +/
    > cargo в Rust, более совершенен, да там semver, на все пакеты приходят в исходниках на машину, все пакеты хостятся на гитхабе(публичный ревью).

    Чем это отличается от сабжа?

     
     
  • 6.22, _ (??), 19:27, 26/03/2016 [^] [ответить]     [к модератору]  
  • +3 +/
    Я сильно не знаком с NPM, хоть и пользовался им, но непонятна ситуация с владель... весь текст скрыт [показать]
     
     
  • 7.30, Аноним (-), 01:59, 27/03/2016 [^] [ответить]     [к модератору]  
  • +/
    Чем это отличается от сабжа 2 Запрещены - и ладно, в NPM подобных запретов не... весь текст скрыт [показать]
     
  • 7.37, Аноним (-), 14:07, 27/03/2016 [^] [ответить]    [к модератору]  
  • –1 +/
    > Я сильно не знаком с NPM, хоть и пользовался им,

    ...но мнение имею. Молодец, настоящий адепт cargo-культа. Садись, пять.

     
  • 7.45, anonimous (?), 12:15, 28/03/2016 [^] [ответить]    [к модератору]  
  • +/
    Т.е. владельцам NPM ты не доверяешь, а владельцам Гитхаба -- всем сердцем и душой?
     
  • 7.47, anonimous (?), 12:31, 28/03/2016 [^] [ответить]     [к модератору]  
  • +3 +/
    Как и с любым другим онлайн-сервисом Хочешь надежности -- проверяй и держи на с... весь текст скрыт [показать]
     
  • 4.31, angra (ok), 03:10, 27/03/2016 [^] [ответить]     [к модератору]  
  • +/
    Любопытно, как при таком подходе решается ситуация конфликта версий Вот некая п... весь текст скрыт [показать]
     
     
  • 5.48, Очередной аноним (?), 08:48, 29/03/2016 [^] [ответить]     [к модератору]  
  • +/
    Не знаю как в голой яве раньше часто в саму jar-ку приложения сразу библиотек... весь текст скрыт [показать]
     
  • 4.50, Клыкастый (ok), 14:54, 31/03/2016 [^] [ответить]    [к модератору]  
  • +/
    это одна из причин по которой жабасофт считается (и является) убогим говном.
     
  • 2.11, Аноним (-), 14:42, 26/03/2016 [^] [ответить]    [к модератору]  
  • –3 +/
    Развитие QA, DevOps, и т.д. и переход из в JS-разработчики делают своё дело
     
  • 2.14, Crazy Alex (ok), 15:57, 26/03/2016 [^] [ответить]    [к модератору]  
  • –1 +/
    О да, прибивать гвоздями к минорной версии - лучше, конечно.
     
     
  • 3.24, Wladmis (ok), 21:52, 26/03/2016 [^] [ответить]    [к модератору]  
  • +1 +/
    > О да, прибивать гвоздями к минорной версии - лучше, конечно.

    Зачем же бросаться в крайности? О ранжировании не слышали?

     
     
  • 4.29, Crazy Alex (ok), 00:23, 27/03/2016 [^] [ответить]    [к модератору]  
  • +1 +/
    Я просто этот Java мир видел вблизи - там обычно именно миноры гвоздями и прибивают, хотя Maven очень гибок в это плане.
     
  • 1.12, Аноним (-), 14:49, 26/03/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    О, ну неужели они всё-таки это заметили?
     
  • 1.15, Crazy Alex (ok), 15:58, 26/03/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +6 +/
    Ну вот обязательно надо было собрать все мыслимые грабли? На чужом примере учиться - никак?
     
     
  • 2.39, Michael Shigorin (ok), 17:27, 27/03/2016 [^] [ответить]    [к модератору]  
  • +2 +/
    > Ну вот обязательно надо было собрать все мыслимые грабли?

    И ряд немыслимых типа https://www.youtube.com/watch?v=1TioQx2jVN0 ...

    > На чужом примере учиться - никак?

    Это удел мудрых.

     
  • 1.19, Аноним (-), 16:41, 26/03/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Кто то говорил, что на js меньше ошибок на кол-во кода.
    Как может быть меньше того, чего нету совсем?
     
     
  • 2.27, Аноним (-), 22:25, 26/03/2016 [^] [ответить]     [к модератору]  
  • –1 +/
    Выгнали с работы в кризис и отдали набивание иксымелей для жабы индусу-аутсорсер... весь текст скрыт [показать]
     
  • 1.25, kleem_head (?), 21:57, 26/03/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +2 +/
    народ, хорош шлак изливать. все такие маркетологи, а кто код писать будет? ну хоть кто-то может вектор для исправления ситуации дать? а то пока все работали вопросов как-то ни кто не задавал, зато теперь реквиумы и оды у всех прут. противно. блин.
     
     
  • 2.28, Аноним (-), 23:03, 26/03/2016 [^] [ответить]    [к модератору]  
  • +/
    проще некуда: запилить новый нпм с ссл, гитом, подписями и без шавок у руля.
     
     
  • 3.32, Аноним (-), 03:33, 27/03/2016 [^] [ответить]    [к модератору]  
  • –1 +/
    > ссл

    При чем тут SSL?

    Кто будет проверять соответсвие подписи и личности автора?

     
     
  • 4.34, Наме (?), 10:04, 27/03/2016 [^] [ответить]    [к модератору]  
  • +/
    Храните свои подписи в блокчейне и будет вам счастье.
     
     
  • 5.38, Аноним (-), 14:23, 27/03/2016 [^] [ответить]    [к модератору]  
  • +1 +/
    Счастья будет много. В биткоине более 30Гб уже.
     
  • 4.46, agent_007 (ok), 12:23, 28/03/2016 [^] [ответить]    [к модератору]  
  • +2 +/
    > Кто будет проверять соответсвие подписи и личности автора?

    Поинтересуйтесь, как этот вопрос решается в различных дистрибутивах Linux. Например, в Debian.

     
  • 3.44, Аноним (-), 10:38, 28/03/2016 [^] [ответить]    [к модератору]  
  • +/
    > проще некуда: запилить новый нпм с ссл, гитом, подписями и без шавок у руля.

    ... на питоне...

     
     
  • 4.49, Аноним (-), 09:41, 30/03/2016 [^] [ответить]    [к модератору]  
  • +/
    > ... на питоне...

    Который не тормозит еще больше чем js.

     
  • 1.26, Вася (??), 22:21, 26/03/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    пора на http://jspm.io/ сваливать
     
     
  • 2.43, Аноним (-), 08:16, 28/03/2016 [^] [ответить]    [к модератору]  
  • +/
    >  npm install systemjs

    а там копирастический червь скачается?

     
  • 1.35, BlackRaven86 (ok), 13:11, 27/03/2016 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    > Включить по умолчанию shrinkwrap для организации привязки проекта к конкретной версии модуля

    Как они умудрились до сих пор это не включить? Я не представляю, как можно вообще без shrinkwrap можно чего-то разрабатывать.

     
     
  • 2.41, Anonimous (?), 22:01, 27/03/2016 [^] [ответить]    [к модератору]  
  • +/
    Легко и просто: захерачиваешь node_modules в свн/гит и никаких тебе ужасов с npm install. Раз в несколько месяцев обновляешься, ну или когда нужно добавить новый модуль. И волосы твои мягкие и шелковистые.
     
     
  • 3.42, Anonimous (?), 22:05, 27/03/2016 [^] [ответить]    [к модератору]  
  • +2 +/
    + независишь от интернета/авторов, выпиливающих свои модули/политиков, блокирующих гитхаб
    + нормальные, повторяемые сборки

     

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


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