Безопасное управление пакетами с помощью Pipenv Python

Pipenv Python безопасное управление пакетами

Как и любой менеджер пакетов для Python, Pipenv извлекает и устанавливает сторонние пакеты из репозитория пакетов, такого как PyPI. Но к сожалению, не всегда программисты осознают, что репозитории пакетов также могут стать мишенью для атак. В статье расскажу, как можно предотвратить атаки внедрения кода с использованием Pipenv.

Еще по теме: Выбор криптографической хеш-функции Python

Безопасное управление пакетами с помощью Pipenv Python

Конечно, вот перенесенный текст:

Подобно любому диспетчеру пакетов для Python, Pipenv извлекает и устанавливает сторонние пакеты из репозитория пакетов, такого как PyPI. К сожалению, программисты не осознают, что репозитории пакетов также входят в пространство для атаки на сервис.

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

Мэллори скомпрометировала репозиторий пакетов, от которого зависит Алиса, и модифицировала одну из зависимостей Алисы, добавив вредоносный код. В какой-то момент диспетчер пакетов на стороне Алисы извлекает вредоносный код и копирует его на сайт alice.com, где он выполняется. На скрине ниже показано, как развивается атака Мэллори.

Безопасность Pipenv Python

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

При первом извлечении пакета Pipenv записывает хеш-значение каждого компонента этого пакета в файл Pipfile.lock. Рекомендуется открыть этот файл и потратить немного времени, чтобы ознакомиться с хеш-значениями некоторых ваших зависимостей. Например, в следующем фрагменте из моего файла Pipfile.lock видно, что Pipenv извлек версию 2.24 пакета requests.

Когда Pipenv встречает уже известный пакет, он хеширует каждый компонент пакета и сравнивает полученные хеш-значения с теми, что находятся в файле Pipfile.lock. Если хеши совпадают, то Pipenv предполагает, что пакет остался неизменным и, следовательно, его можно устанавливать безопасно. Однако если хеш-значения не совпадают, как это показано на следующем скрине, Pipenv отклоняет пакет, поскольку это может свидетельствовать о его изменении.

Pipenv Python

Следующий вывод команды демонстрирует, как действует Pipenv, когда пакет не прошел проверку. Локальные хеш-значения и предупреждение выделены жирным:

Использование Pipenv Python

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

В следующих статьях мы продолжим обсуждение атак внедрения кода.

ПОЛЕЗНЫЕ ССЫЛКИ:

Ban32

Хакер-самоучка, который может взломать тостер и настроить его на отправку вам утреннего приветствия в коде Морзе.

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