Python подвергает фантомных зависимостей с скринингом SBOM

В июне Python Programermer Сет Майкл Ларсон был нанят Python Software Foundation, который выступает в качестве обеспечения безопасности. Но он уже работал над тем, какие самые высокие проблемы безопасности Python являются: скрытые программные зависимости или фантомные зависимости.

Термин «фантомные зависимости» был придуман Endor Labs в 2023 году для описания кода, встроенного в приложение, которое не было объявлено в каком -либо манифестном файле, что делает его невидимым для сканеров уязвимости.

Каждый программный пакет с открытым исходным кодом должен иметь какой-то манифест, перечисляющий все библиотеки и сторонние пакеты, используемые в этом приложении. Это может быть простой текстовый файл с именем «TERDY.TXT» или «SETUP.PY» или некоторым таким.

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

Но эти файлы часто просто имеют неполный список зависимостей. Особенно в Python.

В разговоре в Pycon 2025 в начале этого года Ларсон посмотрел на образец библиотеки визуализации Python под названием Pillow. Запуск команды Python Pip Freeze возвращает только имя самого файла. (Ларсон выступил с аналогичным выступлением на конференции с открытым исходным кодом Linux в июне).

Тем не менее, подушка упакована с зависимостью. Быстрый просмотр папки Python’s Packages для установленной копии Pillow показывает длинный список библиотек (Libfreetype, Libtiff, Libjpeg…)

Проблема — проявления для программ Python сегодня охватывают только библиотеки Python, которые находятся в пакете программы. Файл retement.txt имеет только пакеты Python, а не те, которые написаны на других языках.

Сканеры ищут метаданные. Они не сканируют все файлы в каталоге — это было бы слишком много работы. Но им нужен полный список.

Что такое фантомные зависимости?

Почти все фантомные зависимости существуют по совершенно логическим причинам.

Одной из причин является обычная практика, называемая связкой или поставщиком. Спекуляция означает, что программное обеспечение было поставляется с большим количеством зависимостей, но с небольшим или вообще без документации об их существовании. Во многих программных пакетах Python есть не один, а два деревья зависимости, один для пакетов Python и один для библиотек, написанных на других языках.

Другая практика, которая приводит к зависимостям скрытности, — это статическое связывание, где все библиотеки объединены в один бинар.

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

Бундлированные библиотеки необходимы по ряду причин. Один — начальная загрузка. Такая программа, как Pyphon’s Pip — пакет для установки программ Python — не может принять многое в поддержке программного обеспечения на целевой машине.

«Вам не нужно предполагать столько же в окружающей среде, если вы просто берете все свои зависимости и вкладываете ее в свой проект», — сказал он.

Сам Python имеет правило не использовать более одной версии пакета в виртуальной среде. Таким образом, объединение также становится необходимым в тех случаях, когда вы хотите убедиться, что конкретная версия пакета доступна.

Установщик пакета Python Wheels является еще одним важным источником фантомных зависимостей.

«Колесо» в этом контексте представляет собой архив почтовой почты, предоставляющий все необходимое для установки приложения Python для разных типов распределений Linux, не составляя сам код.

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

Наконец, сам Python является виновником нереста скрытых зависимостей. В конце концов, это язык клея, который заимствует много библиотек с других языков, таких как JavaScript, Rust и C/C ++.

«Внутри пакетов Python так много непитона»,-сказал Ларсон.

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

Введите SBOM.

SBOMS

SBOM означает «Билл материалов программного обеспечения». Это инвентарь всех компонентов, зависимостей и метаданных программного приложения. Это произошло как способ предотвратить атаки цепочки поставок программного обеспечения, хотя SBOMS также будет весьма полезен для встречи с Европой, предстоящим Законом о кибер -устойчивости ЕС (CRA). SPDX Foundation Linux (обмен данными программного пакета) стал де -факто стандартом в этом пространстве.

Лучшее в SBOMS-это то, что они являются технологическими. Сканер SBOM, такой как SYFT, собирает информацию о каждом пакете, а не только пакетах Python-если он где-то задокументирован в машиночитаемом файле.

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

Ларсон ранее выполнял некоторую работу над SBOM для CPYTHON, реализации Python по умолчанию, которая имеет огромное количество зависимостей.

Это привело его к созданию PEP 770, каталога SBOM для Python Packages, который был принят в апреле Руководящим советом Python в качестве основного компонента Python.

Он также работал над поддержкой PEP 770 в аудитории механизма упаковки колес, который может сразу же начать использовать этот каталог (./dist-info/sboms). Затем сканеры могут использовать информацию в своем каталоге, чтобы создать свои собственные манифесты и отчеты.

Этот пакет PIP с подушкой был создан AuditWheel с поддержкой SBOM.

Фактический файл «Биллятор материалов» включает в себя информацию, такую как имя приложения, версия, какой тип приложения это (библиотека и т. Д.), Все они упакованы в формате JSON.

Следующий шаг — заставить сканеры уязвимости распознавать манифест и сравнить результаты с собственным списком уязвимостей.

Для содействий пакетам Ларсон предлагает начать с сборки самого SBOM, чтобы почувствовать, какие типы зависимостей задействованы.

Чтобы искоренить уязвимости, используйте сканер, который охватывает все программное обеспечение, а не только Python. Ларсон рекомендует Grip. Если вы знаете, что среда-это все Python, вы можете использовать Pip-Audit.

Посмотреть все разговор здесь:

Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Joab Jackson является старшим редактором нового стека, охватывающего облачные нативные вычисления и системы системы. Он сообщил об инфраструктуре и развитии ИТ в течение более 30 лет, в том числе в IDG и государственных компьютерных новостях. До этого он … читал больше от Джоаба Джексона

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *