Недавно обнаруженный на платформе для разработчиков PyPI вредоносный пакет использовал Юникод в качестве метода обфускации, чтобы избежать обнаружения при краже и удалении учётных данных и прочей конфиденциальной информации со взломанных устройств разработчиков.
Вредоносный пакет под названием “onyxproxy” использует комбинацию различных шрифтов Юникода в своём программном коде, чтобы обойти автоматические проверки и средства защиты, которые идентифицируют потенциально вредоносные функции пакетов на основе сопоставления строк.
Об обнаружении “onyxproxy” рассказалиспециалисты по кибербезопасности компании Phylum. Вредоносный пакет уже удалён с платформы PyPI, однако с момента его публикации на платформе вредоносный пакет набрал 183 загрузки.
Юникод (Unicode) – это стандарт кодирования символов, который используется для представления текста на различных языках и в различных компьютерных системах. Он включает в себя огромное количество символов из различных языков и культур, включая буквы, числа, знаки препинания, символы валют, иероглифы, математические операторы и многое другое. Юникод позволяет единообразно отображать текст в разных системах и программных приложениях, что обеспечивает универсальность и совместимость текстовых данных.
Пакет “onyxproxy” содержал внутри себя пакет “setup.py” с тысячами подозрительных строк кода, в которых как раз используется смесь символов из Юникода. И хотя текст в этих строках, помимо отличающихся шрифтов, выглядел практически нормально при визуальном осмотре, интерпретаторы Python, которые анализируют и распознают эти символы, определили их как абсолютно иные.
Компания Phylum объяснила, что Юникод имеет 5 вариантов написания для буквы “n” и аж 19 вариантов для буквы “s” при использовании в разных языках, математике и т.д. Например, идентификатор “self” имеет 122740 способов (19x19x20x17) быть представленным в Юникоде.
Поддержка использования символов Юникода в Python позволяет программистам создавать визуально схожие идентификаторы, но указывающие на разные функции. В случае с “onyxproxy” авторы вредоноса использовали идентификаторы “import”, “subprocess” и “CryptUnprotectData”, которые были больше по размеру, чем обычно, и имели огромное количество вариантов, позволяющих легко обойти средства защиты на основе сопоставления строк.
При помощи Юникода в Python можно легко скрыть совпадения вредоносных строк, делая код визуально безобидным, но от этого не менее опасным. В данном случае злоумышленники использовали Юникод для незаметного похищения конфиденциальных данных и токенов аутентификации у разработчиков.
Хотя этот метод обфускации не особенно сложен, его использование в дикой природе (ITW) вызывает беспокойство и может указывать на то, что поддержкой Юникода в Python уже давно злоупотребляют в подобных целях.
Риски, связанные с использование Юникода в Python, ранее широко обсуждались в IT-сообществе. Многие исследователи и разработчики были уверены, что поддержка Юникода сделает язык более уязвимым.
Так как злоупотребление поддержкой Юникода теперь официально доказано, специалистам безопасности придётся знатно “поломать голову”, чтобы придумать надёжные механизмы обнаружения нового типа угроз.