Опасные пробелы

Несколько дней назад я написала в блоге о предназначенном для платформы osCommerce PHP/JavaScript-зловреде, в котором для обфускации вредоносного кода применен новый интересный прием. Так получилось, что чуть позже я наткнулась на еще более «продвинутый» образец PHP-инфектора, также в связи с уязвимым решением для электронной коммерции.

Мой коллега из польского офиса нашей компании попросил меня помочь с обнаружением вредоносного ПО, от которого пострадал интернет-магазин его друга. HTML-страница магазина при открытии ее в браузере содержала ссылку на скрипт jquery.js в генерируемом случайным образом домене третьего уровня в бесплатном домене cx.cc. При этом в исходных файлах на сервере этой ссылки и в помине нет. Поставить диагноз оказалось несложно: данный фрагмент кода добавляется динамически каким-то зараженным PHP-скриптом.

Мы просмотрели все PHP-файлы на сервере и были удивлены: на первый взгляд, ничего подозрительного в них не было. Однако, памятуя о зловреде div_colors, я принялась изучать код строку за строкой. В конце концов мое внимание привлекла небольшая функция в начале одного из основных PHP-файлов.

Код выглядит вполне невинно благодаря нескольким уровням обфускации. Первый (и весьма затейливый) уровень состоит в том, что код функции весь как будто состоит из одних комментариев. Если же присмотреться, окажется, что все теги комментариев расположены неправильно: они открываются в конце каждой строки и закрываются в начале следующей. Обнаружить это проще, если использовать подсвечивание синтаксиса. Второе, что сбивает с толку, — это описание функции, которое, вместе с использованными в коде именами, наводит на мысль, что функция связана с какими-то библиотеками.

А теперь самое интересное: как же на самом деле устроена эта функция? В этом не так-то просто разобраться. Ключ — в понимании того, что на самом деле находится между скобками в определении переменной $session_key. «Ничего» — ответ неверный ;-). Сразу не разберешь, но там не одни только пробелы: они перемежаются со знаками табуляции. Это хорошо видно, если включить в редакторе отображение служебных символов.

Функция разбивает этот коктейль из пробелов на фрагменты по 8 символов, а затем в каждом фрагменте заменяет все знаки табуляции единицами, а пробелы нулями. В результате получается двоичное число, которое затем преобразуется в десятеричное и отображается как символ ASCII… Ничего не скажешь, изобретательно, г-н вирусописатель!

В результате выполнения PHP-файла, содержащего эту CoreLibrariesHandler() функцию, в конец HTML-файлов дописывается вредоносная ссылка:

Этот скрипт перенаправляет пользователя к другому скрипту, тот к третьему — и так далее, но конечная цель этих переадресаций, судя по всему, уже отсутствует в интернете. Интересно, что конечный URL-адрес здесь тот же, что и в случае зловреда div_colors. Это привело нас к выводу, что у div_colors и CoreLibraries один и тот же источник.

Сигнатура этого PHP-скрипта добавлена в наши базы под именем Trojan.PHP.Injecter.c.

PS после того, как этот пост был опубликован на английском языке на нашем сайте Securelist.com, один из читателей отметил, что подобная техника использования «пробелов» была описана в одном из докладов на конференции DEFCON 16 в 2008 году. Презентацию этого доклада можно посмотреть здесь [PDF 116 Кб].

Публикации на схожие темы

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *