В Python Package Index (PyPI), официальном репозитории ПО, написанного на языке Python, выявлены 10 потенциально опасных библиотек, замаскированных под популярные кросс-платформенные продукты. Словацкая группа реагирования на инциденты, связанные с компьютерной безопасностью (SK-CSIRT), уведомила администраторов ресурса о своей находке; все идентифицированные экспертами программные пакеты уже удалены из открытого доступа.

Согласно бюллетеню SK-CSIRT, неизвестные злоумышленники замаскировали свои загрузки с помощью тайпсквоттинга в расчете на невнимательность пользователей — разработчиков и системных администраторов. Так, под видом известного Python-пакета urllib3 в хранилище был загружен urlib3, вместо acquisition — acqusition, вместо crypto — crypt и т.п. К сожалению, такую подмену на PyPI очень легко совершить: в этом репозитории отсутствует контроль качества и проверка загружаемых кодов.

Проведенный в SK-CSIRT анализ показал, что все имитации являются полнофункциональными копиями оригиналов, но в скрипт-инсталлятор setup.py добавлен потенциально опасный код. При исполнении он связывается по HTTP с удаленным сервером в Китае и отправляет на него следующую информацию: имя и версию подложного пакета, имя установившего его пользователя и имя узла. Эти данные шифруются путем выполнения операции XOR с прописанным в коде паролем, а затем по base64.

По имеющимся данным, подставные пакеты были многократно скачаны и встроены в программы в период с июня по сентябрь. Такие загрузки обычно осуществляются с помощью популярной утилиты pip, которая плоха тем, что не требует наличия криптографической подписи, к тому же исполняет произвольный код в процессе инсталляции. Исследователи также отметили, что, судя по жалобам пользователей, внедренный злоумышленниками код несовместим с Python 3.x.

Полный список фальшивых Python-пакетов приведен в бюллетене SK-CSIRT. Для проверки их наличия авторы неприятной находки рекомендуют воспользоваться утилитой pip: выполнить команду pip list –format=legacy | egrep ‘^(acqusition|apidev-coop|bzip|crypt|django-server|pwd|setup-tools|telnet|urlib3|urllib) ‘. Если результат содержит хотя бы одно имя, соответствующий пакет следует удалить с помощью pip uninstall <пакет>, а лучше — вручную, отыскав соответствующую папку. После этого можно ставить «чистый» экземпляр; при этом исходники программ, использовавших потенциально опасные пакеты, изменять не нужно.

Заметим, подобные находки в онлайн-хранилищах для разработчиков — не редкость. Так, полтора месяца назад похожий случай произошел с npm, крупнейшим держателем реестра программных кодов на JavaScript. Атаковавшие его злоумышленники тоже использовали тайпсквоттинг и скрипт, собирающий данные пользователей.

Категории: Аналитика, Вредоносные программы