бэкдоры в плагинах и темах WordPress (опять)

И снова я столкнулся с ситуацией, когда пользователь на своем сайте загрузил плагин из непонятного источника, который принес много проблем. Этот код выполнял сканирование чужих сайтов и нагружал слабый хостинг. Код оказался неизвестным ни одному из антивирусов, я проверял его на virustotal, и подобное будет происходить и далее. Как найти подобные закладки? Прежде всего, если вы не знаете PHP то вы их врядли найдете, но если есть хоть немного опыта то шанс есть.

Надо лишь знать методы, используемые для таких целей. Зачастую этот код имеет детектируемые антивирусами сигнатуры и его пытаются зашифровать, например в base64, так что следует присмотреться к методам типа base64_decode, что именно они декодируют, если эта мешанина зашита прямо в код, и особенно потом запускается при помощи чего то типа eval( то это очень вероятно плохой код. Полный список того что искать и к чему присмотреть я составил далее:

Что искать в PHP-файлах

1. Функции, выполняющие произвольный код или команды

Эти функции позволяют запускать код или системные команды, что часто используется в закладках:
  • eval( — выполняет произвольный PHP-код.
  • system( — выполняет системные команды.
  • exec( — запускает внешние команды.
  • passthru( — выполняет команды и возвращает вывод.
  • shell_exec( — выполняет команды через shell.
  • popen( — открывает процесс для выполнения команды.

2. Динамическое включение файлов

Закладки могут загружать вредоносный код через динамическое включение файлов на основе пользовательского ввода:
  • include $_GET или require $_GET — включение файлов через GET-параметры.
  • include $_POST или require $_POST — то же, но через POST-данные.
  • include_once или require_once с динамическими путями (например, include $_REQUEST[‘file’]).

3. Работа с файлами

Функции, которые создают или изменяют файлы, могут использоваться для внедрения вредоносного кода:
  • fopen( — открывает файл для записи.
  • file_put_contents( — записывает данные в файл.
  • fwrite( — пишет в файл.
  • move_uploaded_file( — перемещает загруженные файлы, что может быть использовано для загрузки закладок.

4. Сетевые функции

Эти функции могут указывать на связь с внешними серверами для передачи данных или получения команд:
  • curl_init( — инициализирует запросы через cURL.
  • fsockopen( — открывает сокетное соединение.
  • socket_create( — создаёт сетевой сокет.

5. Обфускация и декодирование

Злоумышленники часто скрывают код с помощью кодирования:
  • base64_decode( — декодирует данные, закодированные в base64.
  • gzinflate( — распаковывает сжатые данные.
  • str_rot13( — простое шифрование для обфускации.
  • preg_replace( с флагом /e — устаревший модификатор, позволяющий выполнять код (до PHP 5.5).

6. Фоновые процессы и автоматический запуск

Эти функции могут использоваться для скрытого выполнения кода:
  • register_shutdown_function( — выполняет код при завершении скрипта.
  • pcntl_fork( — создаёт фоновый процесс.
  • ignore_user_abort( — продолжает выполнение скрипта после отключения пользователя.

7. Подозрительные переменные и комментарии

  • Переменные с именами вроде $cmd, $shell, $password, $admin могут быть частью закладки.
  • Комментарии, содержащие слова вроде backdoor, exploit, hack, могут быть подсказкой.

8. Нестандартные функции

Редко используемые функции, которые могут быть задействованы в закладках:
  • assert( — выполняет код как выражение.
  • create_function( — создаёт анонимные функции (устарело в PHP 7.2).
  • call_user_func( — вызывает функции динамически.

9. Общие паттерны

  • Использование $_GET, $_POST, $_REQUEST в сочетании с функциями выполнения кода или включения файлов (например, eval($_GET[‘code’])).
  • Длинные закодированные строки (например, большие куски base64-кода).
  • Ключевые слова вроде password, admin, shell, exploit в коде.

Как искать

1. Ручной поиск

  • Откройте PHP-файлы в текстовом редакторе или IDE (например, VSCode, Sublime Text).
  • Можно использовать например Totall Commander, у него есть поиск по директории (Инструменты->Поиск файлов), там ставим только *.php и вбиваем чуть ниже искомые строки.
  • Используйте функцию поиска (Ctrl+F) для проверки каждого из перечисленных паттернов.
  • Обратите внимание на недавно изменённые файлы или файлы в подозрительных местах (например, /uploads/).

2. Использование командной строки

Команда grep в Linux/macOS позволяет быстро искать строки в файлах. Примеры:
Поиск eval(:
grep -r "eval(" /путь/к/вашим/php/файлам

3. Автоматизированные инструменты

  • Используйте сканеры кода, такие как RIPS, PHPStan или SonarQube, для автоматического обнаружения подозрительных конструкций.
  • Если это WordPress, попробуйте WPScan или плагины вроде Wordfence.
  • Проверьте файлы с помощью антивирусов для веб-приложений.
Обфускация: Если вы находите закодированные строки (например, длинные base64), попробуйте декодировать их вручную, чтобы понять их содержимое. Но при нахождении такого и без декодирования можно сказать что вероятность что это плохой код очень высока.

Оставьте комментарий

Ваш адрес email не будет опубликован.