Сайти

Бекдори у плагінах і темах WordPress (знову)

Знову зіткнувся із ситуацією, коли користувач завантажив на свій сайт плагін із невідомого джерела, який спричинив чимало проблем. Код сканував чужі сайти й навантажував слабкий хостинг. Жоден антивірус не розпізнав цей код — я перевіряв його на VirusTotal, і подібне траплятиметься й надалі. Як знаходити такі закладки? Якщо ви не знаєте PHP, навряд чи зможете їх виявити, але навіть невеликий досвід дає шанс.

Потрібно знати прийоми, які для цього використовують. Часто такий код має сигнатури, які виявляють антивіруси, тому його намагаються зашифрувати, наприклад у base64. Варто звернути увагу на функції на кшталт base64_decode і перевірити, що саме вони декодують. Якщо ця суміш зашита безпосередньо в код і запускається, наприклад, через eval(, це дуже ймовірно шкідливий код. Нижче зібрав повний список того, що варто шукати.

Що шукати у PHP-файлах

1. Функції для виконання довільного коду або команд

Такі функції запускають код або системні команди й часто трапляються у закладках:

  • eval( — виконує довільний PHP-код.
  • system( — виконує системні команди.
  • exec( — запускає зовнішні команди.
  • passthru( — виконує команди й повертає вивід.
  • shell_exec( — виконує команди через оболонку.
  • 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).
  • Можна скористатися, наприклад, Total Commander: відкрийте пошук у каталозі (Інструменти → Пошук файлів), задайте маску *.php і введіть потрібні рядки.
  • Скористайтеся пошуком (Ctrl+F), щоб перевірити кожен із наведених шаблонів.
  • Зверніть увагу на нещодавно змінені файли або файли в підозрілих місцях, наприклад /uploads/.

2. Командний рядок

Команда grep у Linux/macOS дає змогу швидко шукати рядки у файлах. Наприклад, щоб знайти eval(:

grep -r "eval(" /path/to/your/php/files

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

  • Використовуйте аналізатори коду, як-от RIPS, PHPStan або SonarQube, щоб автоматично виявляти підозрілі конструкції.
  • Для WordPress спробуйте WPScan або плагіни на кшталт Wordfence.
  • Перевірте файли антивірусами для вебзастосунків.

Обфускація: якщо знаходите закодовані рядки (наприклад, довгі фрагменти base64), спробуйте декодувати їх вручну, щоб зрозуміти вміст. Але навіть без декодування наявність такого фрагмента може свідчити про високу ймовірність шкідливого коду.

Залишити коментар

Вашу електронну адресу не буде оприлюднено. Обов’язкові поля позначено *