Xakep #305. Многошаговые SQL-инъекции
В репозитории Python Package Index (PyPI) обнаружен вредоносный пакет, который использует Unicode, чтобы избежать обнаружения и развернуть на зараженной машине малварь для кражи данных.
Угрозу обнаружили специалисты ИБ-компании Phylum. По их данным, вредоносное поведение пакета onyxproxy реализовано в скрипте setup.py, который содержит тысячи, казалось бы, легитимных строк кода. Вредонос использует комбинацию различных шрифтов Unicode, сочетание полужирного и курсива, чтобы обойти автоматические проверки и защитные средства, которые обнаруживают потенциально вредоносные функции, основываясь на сопоставлении строк.
Хотя визуально эти уловки выглядят не так критично, это имеет огромное значение для интерпретаторов Python, которые анализируют и распознают такие символы как принципиально разные. Например, Unicode имеет пять вариантов буквы «n» и 19 вариантов буквы «s» для использования в разных языках, математике и так далее. Так, идентификатор «self» имеет 122 740 (19x19x20x17) способов представления в Unicode. В итоге появляется возможность создавать идентификаторы, которые кажутся идентичными, однако выполняют разные функции.
Так, создатели onyxproxy использовали идентификаторы «__import__», «subprocess» и «CryptUnprotectData», которые имеют огромное количество вариантов, а значит, легко преодолеваю средства защиты на основе сопоставления строк.
В данном случае все это использовалось для кражи конфиденциальных данных и токенов аутентификации у разработчиков.
«Тот, у кого автор скопировал этот обфусцированный код, был достаточно умен, чтобы знать, как использовать интерпретатор Python для создания нового типа запутанного кода, такого, который можно читать, но он не раскрывает слишком много о том, что пытается похитить», — резюмируют эксперты.
Исследователи говорят, что в настоящее время пакет уже недоступен на PyPI, так как был удален с платформы. Однако с момента публикации (15 марта 2023 года) он успел набрать 183 загрузки.