Интернет подсел на пакеты. Хакеры заметили

Кибератаки, направленные на «пакеты», лежащие в основе глобальных программ, потрясли сообщество разработчиков открытого исходного кода и выявили пробелы в методах обеспечения безопасности цепочки поставок разработчиков.

Современная жизнь зависит от пакетов — и не только тех, на которых напечатан логотип Amazon.

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

Но некоторые шины, поставляемые по почте, доставляются с дырами: недавние нарушения кибербезопасности сделали все более очевидным, что использование пакетов и индексов, которые их предоставляют, может сделать разработчиков уязвимыми для атак на цепочку поставок и внести уязвимости в их код.

В четверг взлом популярной библиотеки coa в индексе пакетов NPM сломал другие проекты JavaScript, которые полагаются на нее. Атака произошла менее чем через две недели после того, как другой пакет NPM, ua-parser-js, был аналогичным образом взломан для распространения вредоносного ПО, что вызвало предупреждения правительства и отрасли. Согласно статистике NPM, в последнее время разработчики загружали каждый пакет примерно 9 и 8 миллионов раз в неделю соответственно.

Это не первый случай, когда хакеры используют пакеты для заражения систем разработчиков. Компания-разработчик программного обеспечения JFrog Inc. раскрыла этим летом, что разработчики Python стали мишенью вредоносных пакетов, распространяемых через широко используемый Python Package Index (PyPI). Старший директор JFrog по исследованиям в области безопасности Шачар Менаше сообщил README, что компания обнаружила аналогичные проблемы, затрагивающие менеджер пакетов RubyGems, используемый программистами Ruby, инструмент Apache Maven, используемый разработчиками Java, и NPM.

«Некоторые люди не понимали, что это возможно, и были удивлены», когда JFrog сделала свое первое раскрытие информации после использования автоматизированного инструмента сканирования, который разрабатывает компания, — сказал Менаше. «Но другие разработчики сказали: «Это хорошо известно, но никто ничего с этим не делает». Кто-то обязательно должен что-то с этим сделать».

Как пакеты могут сделать или сломать Интернет

Пакеты обычно создаются разработчиками, чтобы поделиться своим решением проблемы кодирования, экономя время для своих коллег. Ярлыки перечислены на центральной платформе, такой как NPM, что позволяет другим разработчикам использовать их с помощью менеджера пакетов, который обрабатывает все, от установки до обновлений. Пакеты могут рассчитывать на работу других пакетов, и задача менеджера пакетов — отслеживать эту паутину зависимостей.

NPM и PyPI — два самых популярных индекса пакетов, предлагающие важные ресурсы миллионам разработчиков по всему миру.

У обоих были свои проблемы в последнее время, но риски, связанные с использованием индексов с открытым исходным кодом, пожалуй, лучше всего были продемонстрированы в 2016 году, когда разработчик сломал интернет, как выразился Quartz, удалив 11 строк кода в пакете. называется левой панелью из-за спора о товарных знаках. Код мало что делал — он просто добавлял символы в начало строки текста — но так много пакетов зависело от левой панели, что NPM предпринял экстраординарный шаг, восстановив удаленный пакет JavaScript вопреки возражениям его автора. , эффективно отменив публикацию, чтобы не сломать Интернет.

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

Вредоносные фрагменты

Популярный пакет может стать привлекательной мишенью для распространителей вредоносных программ. В случае с ua-parser-js неизвестный злоумышленник 22 октября выпустил три вредоносные версии пакета, содержащие скрипт, который пытался украсть учетные данные из систем Linux и Windows. Он также пытался установить программное обеспечение для майнинга криптовалюты на Windows.

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

Но многие разработчики могут даже не знать, что они используют этот пакет. Статистика NPM показывает, что более 1200 других пакетов зависят от ua-parser-js. В этот список входит fbjs, пакет, поддерживаемый Facebook, который за последнюю неделю был загружен более 5 миллионов раз. Этот пакет имеет более 1200 собственных иждивенцев, многие из которых имеют своих иждивенцев. Неудивительно, что многие пакеты загружаются миллионы раз в неделю.

Однако не все вредоносные пакеты имеют такое большое количество загрузок. Этим летом компания JFrog раскрыла, что разработчики Python стали мишенью вредоносных пакетов, распространяемых через PyPI, количество загрузок которых оценивается примерно в 30 000 раз.

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

JFrog раскрыл восемь вредоносных пакетов от PyPI, которые использовались для кражи токенов аутентификации Discord, а также информации автозаполнения, управляемой через Google Chrome и Microsoft Edge, среди других целей.

Менаше из JFrog призвал разработчиков убедиться, что они доверяют сопровождающему пакета, прежде чем использовать программное обеспечение в своих собственных проектах, и, по крайней мере, должны выбирать пакеты, которые многие другие разработчики отметили на GitHub.

Но Менаше признал, что это не обязательно проблема для отдельных разработчиков, и призвал такие индексы, как PyPI, предпринять шаги для обнаружения вредоносных пакетов до их распространения.

«Некоторые разработчики знают об этом и обеспокоены этим, — сказал он, — но способ решить эту проблему — безопасные значения по умолчанию» для части индексов. Это может включать автоматическое сканирование или обеспечение того, чтобы вредоносные пакеты не могли использовать имена установленных программных продуктов, таких как Discord.

Проблемные пакеты

Пакеты также могут вносить недостатки в ключевые программные продукты. В мае разработчик HTTP Toolkit Тим Перри обнаружил серьезную уязвимость в пакете под названием pac-resolver, которая была публично раскрыта 22 августа. Уязвимость позволяла удаленно выполнять код через модуль JavaScript до того, как проблема была устранена с помощью релиз обновленной версии инструмента 12 июля.

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

Как подсчет звезд GitHub должен это исправить?

Это не. «На самом деле это не новая проблема», — сказал Менаше, сравнив проблему с ошибками в популярном программном обеспечении, таком как Windows или Linux. Лучшее, что могут сделать многие разработчики, — это следить за тем, чтобы пакеты всегда были в актуальном состоянии, чтобы злоумышленники, пытающиеся использовать публично раскрытые уязвимости, не могли найти покупку в целевой системе. «Большинство этих атак не являются атаками нулевого дня, — сказал он, — это однодневные атаки… вам просто нужно следить за ними и быть очень активными».

Методы обеспечения безопасности на перекрестках

Python Software Foundation (PSF) и NPM, Inc. не ответили на многочисленные запросы о комментариях.

Чтобы узнать больше о мерах безопасности PyPI, нужно пройти извилистый путь через несколько веб-сайтов для нескольких организаций, рабочих групп и проектов. Повседневное управление PyPI осуществляется рядом рабочих групп, которые в основном молчали во время пандемии коронавируса; самая четкая информация о его подходе к безопасности поступает через проект Warehouse, веб-приложение, целью которого является улучшение индекса пакетов.

Документация Warehouse показывает, что некоторая форма сканирования вредоносных программ выполняется до того, как пакеты становятся доступными в PyPI. Однако это сканирование пропустило пакеты, обнаруженные JFrog с помощью ранней версии собственного инструмента автоматического сканирования, а репозиторий Warehouse на GitHub показывает, что последние значительные обновления инструмента сканирования вредоносных программ были сделаны около двух лет назад. (Более поздние обновления сосредоточены на соглашениях об именах, а не на дополнительной защите от злоумышленников.)

В случае с NPM компания принадлежит GitHub, дочерней компании Microsoft Corp. Политика безопасности индекса гласит: Мы активно тестируем и проверяем программное обеспечение. В нем также говорится, что существует специальный контактный пункт службы безопасности и что происходит некоторая мера автоматического сканирования.

В политике также говорится, что аудиторская документация доступна «и может быть предоставлена ​​клиентам по запросу», но NPM не ответил на запросы о дополнительных деталях или примере отчета.

Ни GitHub, ни Microsoft не ответили на запросы о комментариях.

Денег меньше, проблем больше

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

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

«Если кто-то поддерживает это программное обеспечение, он обычно не делает это как часть потока доходов или бизнеса», — сказал Фишер. «Они любят делать это для решения технических задач, и они знают, что миллионы людей во многих из этих случаев используют программное обеспечение, над которым они работают».

Но это также означает, что разработчики могут не уделять столько внимания, сколько в профессиональном контексте. «Существует множество процессов и документов, связанных с поставкой и обслуживанием программного обеспечения коммерческого уровня в соответствии со стандартами безопасности», — сказал Фишер. По его словам, такие компании, как Red Hat, где Фишер работал в прошлом, платят разработчикам за работу над проектом системного уровня, таким как Linux, но это не относится ко многим другим разработкам.

«Это больше похоже на скучную часть создания программного обеспечения, — сказал Фишер. «Вся эта документация и размещение информации в машиночитаемых форматах и ​​так далее — это довольно утомительно».

По его словам, Tidelift был основан, чтобы упростить организациям поиск людей, создающих и поддерживающих эти проекты с открытым исходным кодом, чтобы они могли платить им за внимание к этим деталям. GitHub также работал над тем, чтобы предоставить больше финансовой поддержки разработчикам с открытым исходным кодом через свою программу Спонсоры.

Модель может быть полезна для защиты экосистемы пакетов. Но эксперты предупреждают, что это не помешает разработчикам ошибочно принять «бесплатное» в «бесплатном программном обеспечении с открытым исходным кодом» за то, что не требует никаких вложений для продолжения работы.

Повышение осведомленности может помочь, хотя бы для того, чтобы разработчики знали, что атаки на цепочку поставок, проводимые через индексы пакетов, возможны. «Люди понимают, что атаки на цепочку поставок теперь гораздо более эффективны», — сказал Менаше, добавив, что первое раскрытие JFrog касалось простых пакетов, которые основывались на «чрезвычайно новых» методах уклонения от обнаружения и компрометации целевой информации.

JFrog заявил, что некоторые из атак удалось избежать обнаружения с помощью общедоступных инструментов обфускации кода Python, таких как PyArmor и python-obfuscator. Их создателям не пришлось использовать сложные методы: им просто нужно было настроить свои пакеты, чтобы они не транслировали, как они собираются получить доступ к конфиденциальным файлам.

«Низко висящий плод — эти действительно начинающие злоумышленники, пытающиеся проникнуть во все виды машин, которые — при другом сценарии — они не смогли бы», — сказал Менаше.