Зловредный Питон: установка Python-пакетов может заразить компьютер
Недавно Python попал в тройку самых популярных языков программирования, обогнав даже С++. Эксперты не без оснований полагают, что со временем он может переместиться и на первую строчку. Python простой, функциональный и выполняется в большинстве современных ОС. Но в этой бочке меда нашлась и ложка дегтя. А точнее, уязвимость, которая ставит под удар информационную безопасность пользователей.
Новая угроза от Python
На прошлой неделе пользователь Github с ником mschwager обнаружил новую уязвимость Python, которая исходит из особенностей функционирования программного языка.
Как известно, Python позволяет устанавливать на ПК новые пакеты для расширения функционала основной программы. Код в этих пакетах исполняется при запуске программы. Но иногда это может произойти даже при инсталляции самих пакетов.
Для установки новых пакетов используется специальный pip-менеджер, который обращается к конфигурационному файлу setup.py. Как правило, на него никто не обращает внимания, и, по словам mschwager, это дает отличную возможность проникнуть в систему.
Чтобы доказать свою гипотезу, mschwager создал собственный пакет 0wned, который при установке внедряет в операционную систему вредоносное ПО. Как это происходит?
- Зараженный пакет обращается к модулю setuptools файла setup.py и прописывает в нем собственный PostInstallCommand (инсталляционный класс ПО), который позволяет исполнять код на правах администратора или супер-пользователя.
- При запуске pip-менеджера активируется не только основная программа, которая уже есть на ПК, но и внедренный пакет, а с ним – и PostInstallCommand.
- Злоумышленник получает права администратора в системе.
Что это ему дает? Ну, например, он может скомпрометировать локальную есть, слить конфиденциальные данные или выкрасть информацию с жестких дисков.
Драматизма ситуации добавляет и тот факт, что из-за специфики работы pip-менеджера Python заразить компьютер могут даже пакеты, которые еще не были активированы. То есть, просто скачав зараженный пакет на свой ПК, пользователь рискует стать жертвой взлома.
И самое ужасное – новая уязвимость отлично подкрепиться старыми багами. Еще в 2004-ом году специалисты из SecurityLab показали, что практически весь софт Python подвержен удаленным атакам с целью компрометации системы. Хакеру не нужно пробираться в чужие дома или офисы, чтобы установить вредоносное ПО на компьютеры ничего не подозревающих граждан. Он может подменить пакеты в удаленном режиме, и граждане все равно ничего не узнают.
Конечно, mschwager создал свой пакет с целью продемонстрировать реальность угрозы. Но что мешает настоящим злоумышленникам переделать его код и использовать его для реальных атак? Как, например, сделали хакеры из PowerPool, чтобы эксплуатировать уязвимость планировщика задач Windows.
Защита от взлома: базовые рекомендации
Устанавливайте новые пакеты Python с флагом “user” (так зловред не сможет получить права администратора).
Используйте флаг “require-hashes” (это минимизирует риск удаленной подмены пакетов).
Тщательно проверяйте новые пакеты (зловреды часто маскируются под существующие модули – например, легитимный модуль urllib может быть подменен зараженным urlib).
Используйте специальные программы для обнаружения, сканирования и очистки вредоносного ПО.
Если вы устанавливаете Python-пакеты для собственного пользования, советуем скачать хороший антивирусник и регулярно его обновлять. Но если на Python держатся важные бизнес-приложения или вся IT-инфраструктура компании, защита от взлома должна быть более существенной. Для начала советуем пройти Penetration test и заказать аудит безопасности сети. Это позволит обнаружить слабые места, через которые злоумышленники могут проникнуть в систему и нанести ущерб вашему бизнесу.