The OpenNET Project

 
Поиск (теги):    НОВОСТИ (+) КОНТЕНТ WIKI MAN'ы ФОРУМ twitter

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, 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, 17:35, 26/03/2016 [^] [ответить] [смотреть все]  
  • +/
    Чем это отличается от сабжа ... весь текст скрыт [показать]
     
     
  • 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 +/
    но мнение имею Молодец, настоящий адепт cargo-культа Садись, пять ... весь текст скрыт [показать]
     
  • 7.45, anonimous, 12:15, 28/03/2016 [^] [ответить] [смотреть все]  
  • +/
    Т е владельцам NPM ты не доверяешь, а владельцам Гитхаба -- всем сердцем и душо... весь текст скрыт [показать]
     
  • 7.47, anonimous, 12:31, 28/03/2016 [^] [ответить] [смотреть все]  
  • +3 +/
    Как и с любым другим онлайн-сервисом Хочешь надежности -- проверяй и держи на с... весь текст скрыт [показать]
     
  • 4.31, angra, 03:10, 27/03/2016 [^] [ответить] [смотреть все]  
  • +/
    Любопытно, как при таком подходе решается ситуация конфликта версий Вот некая п... весь текст скрыт [показать]
     
     
  • 5.48, Очередной аноним, 08:48, 29/03/2016 [^] [ответить] [смотреть все]  
  • +/
    Не знаю как в голой яве раньше часто в саму jar-ку приложения сразу библиотек... весь текст скрыт [показать]
     
  • 4.50, Клыкастый, 14:54, 31/03/2016 [^] [ответить] [смотреть все]  
  • +/
    это одна из причин по которой жабасофт считается (и является) убогим говном.
     
  • 2.11, Аноним, 14:42, 26/03/2016 [^] [ответить] [смотреть все] [показать ветку]  
  • –3 +/
    Развитие QA, DevOps, и т.д. и переход из в JS-разработчики делают своё дело
     
  • 2.14, Crazy Alex, 15:57, 26/03/2016 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    О да, прибивать гвоздями к минорной версии - лучше, конечно.
     
     
  • 3.24, Wladmis, 21:52, 26/03/2016 [^] [ответить] [смотреть все]  
  • +1 +/
    Зачем же бросаться в крайности О ранжировании не слышали ... весь текст скрыт [показать]
     
     
  • 4.29, Crazy Alex, 00:23, 27/03/2016 [^] [ответить] [смотреть все]  
  • +1 +/
    Я просто этот Java мир видел вблизи - там обычно именно миноры гвоздями и прибив... весь текст скрыт [показать]
     
  • 1.12, Аноним, 14:49, 26/03/2016 [ответить] [смотреть все]  
  • +/
    О, ну неужели они всё-таки это заметили?
     
  • 1.15, Crazy Alex, 15:58, 26/03/2016 [ответить] [смотреть все]  
  • +6 +/
    Ну вот обязательно надо было собрать все мыслимые грабли? На чужом примере учиться - никак?
     
     
  • 2.39, Michael Shigorin, 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, 12:23, 28/03/2016 [^] [ответить] [смотреть все]  
  • +2 +/
    Поинтересуйтесь, как этот вопрос решается в различных дистрибутивах Linux Напри... весь текст скрыт [показать]
     
  • 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, 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-2016 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by BSH TopList