Обсуждение Безопасность JOOMLA

Scaltro

Гуру форума
Регистрация
15 Сен 2007
Сообщения
1.148
Реакции
79
Предлогаю в этой теме обсуждать способы обеспечения безопасности Joomla, кто какие слабости знает и как их устранить выкладывайте сюда если не жалко конечно ;)
 
тема жована-пережована! само ядро Джумлы безопастно на 99% а вот дело какра в левых разширениях как в основном дырки в них находят!
 
Это что получается, если поставить голую Джумлу, то в ней практически нет дыр?
 
  • Заблокирован
  • #4
Перед прочтением статьи. рекомендую ознакомится с Для просмотра ссылки Войди или Зарегистрируйся сообщением.

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

  • register_globals - не надо думать, что это вот такая дыра в пхп, дыра прежде всего в головах у разработчиков, которые не умеют пользоваться средствами языка правильно. Так вот в последнее время (сентябрь 2006) число найденных дыр использующих неглубокие познания девелоперов экспоненциально возросло. Для самой примитивной защиты в файл .htaccess надо добавить строчку "php_value register_globals 0"(или "php_flag register_globals off") (без кавычек) (если вы это сделали, а у вас вывалилась ошибка 500 и вы не знаете что делать, значит вы нихрена не читали фак с самого начала, читайте его полностью)​
  • Рекоменудется прочитать "Руководство по обеспечению безопасости для мамбо" (с тех времен мало что изменилось, так что и для joomla все должно прокатить)​
  • После сохранения конфига дать как можно меньше прав на файл configuration.php, вплоть до 444 (правда потом и вы не сможете перезаписать файл )​
  • На ВСЕ файлы и папки делайте CHMOD 644 и 755 соответственно. Если Joomla нужны будут права для записи/перезаписи, то она скажет об этом сама, подсветив нужные ей папки и файлы КРАСНЫМ цветом с сообщением Недоступно для записи.​

Для работы Joomla (полностью настроенного сайта, когда нужные расширения уже установлены) только у нижеуказанных папок могут быть CHMOD 777:

  • administrator/backups/ - chmod 777 иногда требуется для различных компонентов, делающих бэкап базы Joomla.
  • images/
  • images/banners/ - chmod 777, если записываете сюда баннеры с помощью Joomla
  • images/stories/ -
  • Каталог кэша cache/ - папка для записи кэша
  • Каталог сессий - определено в настройках PHP - ДОЛЖЕН БЫТЬ ДОСТУПЕН ДЛЯ ЗАПИСИ

Защитите папку administrator паролем. В большинстве хостинговых панелей это делается за несколько секунд, а нервы здорово сбережет. Обязательно переименуйте файл htaccess.txt в .htaccess, даже если вы не используете ЧПУ (SEF-урл'ы)

Что такое chmod/чмод и права файлов (777, 664 и т.д. )

* Для просмотра ссылки Войди или Зарегистрируйся
* Для просмотра ссылки Войди или Зарегистрируйся

А если меня взломали как мне проанализировать ситуацию, предотвратить такое в будущем

Прежде всего нужны логи за тот день, в который это предположительно произошло. Понятно, что логи большие и читать каждую строку смысла не имеет, но чаще всего можно найти необходимые строки где произошел взлом по следующим ключевым словам:
mosConfig
http://
wget
perl
_REQUEST

Во-вторых надо проверить вашу текущую версию Joomla, для этого нужно зайти на joomla.org и почитать новости. Если ваша версия устарела - есть повод ее обновить.

В третьих следует составить список установленных компонентов (не входящих в стандартный пакет), и зайти на их официальные сайты в поисках информации об их текущей версии и возможных сообщениях об найденных уязвимостях.

Помимо просмотра логов надо найти то место, где может быть расположен вредоносный код. Лучше всего искать зараженные файлы после того, как скачали на домашний компьютер архив с файлами хостинга. Просто разархивируем его и, например, в проводнике задаем поиск по маске *.* с дополнительным параметром, а именно датой последнего изменения. Если вы примерно знаете, когда был взлом - то легко можете установить примерный период дат. По идее файлы на хостинге вообще не должны меняться (ну пожалуй за исключением вновь установленных расширений, но их-то уж можно будет смело отделить - вы всегда знаете что ставили а что нет). После того как файлы найдены (обычно это не один, а несколько файлов) можно уже смотреть их более внимательно на предмет постороннего кода. И чаще всего он находится в самом начале или конце файла, так как туда проще его вставлять взломщику.

Также может помочь найти файл сканирование архива антивирусной программой.

После выяснения причины уязвимости следует прочитать следующий пункт FAQ.

Что делать в случае обнаружения взлома

Мало его обнаружить и обнаружить почему он произошел. Надо еще правильно выйти из ситуации. Прежде всего делаем бэкап всех файлов и базы. Если есть возможность восстановиться с ранее созданного бэкапа - стоит им воспользоваться. Если такой возможности нет, то стоит залить свежий дистрибутив джумлы, заново настроить configuration.php. [Очень сильно рекомендуется после установки сайта сохранить куда-нибудь хотя бы configuration.php (если нет возможности сделать бэкап всего сайта)(это не касается конкретно взломов, но это надо знать)]. После восстановления файлов джумлы надо (если были найдены уязвимости в каких-то компонентах или взлом был осуществлен через них) обновить файлы компонентов (чаще всего выходят патчи одного-двух файлов).

Теперь надо проверить сайт на работоспособность. Если всё работает, то надо визуально убедиться в отсутствии лишних файлов в основных директориях джумлы и еще раз сделать бэкап.


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

Ниже лежит частично переведенный Для просмотра ссылки Войди или Зарегистрируйся с офф. сайта. Только самое полезное.

Для вашей же безопасности, надо после установки как можно скорее сменить имя админстратора, которое ему дается по умолчанию, т.е. 'admin'. Для этого идем в админку -> Управление пользователями (Пользователи), выбираем себя и меняем имя.

Как разрешить доступ к админке только с определенных IP-адресов

Для этого, если используется веб-сервер apache, надо создать файл .htaccess в папке /administrator/ и написать нечто вроде этого
<Limit GET>
Order Deny, Allow
Deny from all
Allow from 100.100.100.100
</Limit>
Если надо ввести несколько адресов, то это можно сделать разделив их запятой, например так:
100.100.100.100, 100.100.100.105

Где можно включить/выключить параметр RG_EMULATION?

В файле globals.php в строчке
Цифра 1 означает, что он включен, 0 - выключен. Этот параметр (насколько я знаю) предназначен для старых, древних как сама жизнь компонентов, которые до сих пор не знают, что такое register_globals. Возможно, со старыми компонентами и выключенным режимом эмуляции их работа станет невозможной (и не надо тут искать слово "безопасность", хоть девелоперы и говорят о безопасности, но ерунда это всё, один криворукий девелопер ремозитория не означает, что все такие).

Что можно сделать с особо важным файлом configuration.php

Можно вынести его за пределы www-директории (у некоторых она называется public_html). Для этого копируем его за ее пределы, возможно рядом с ней, переименовываем например в "joomla.conf", а в том, что должен быть в корне Joomla пишем нечто вроде этого
<?php
require( dirname( __FILE__ ) . '/../joomla.conf' );
?>
В результате особо-чувствительные данные теперь не находятся в www-директории и хотя бы на чуть-чуть стали более защищенными.

Пример .htaccess директив, от старых мамбо-joomla уязвимостей

Вот пример .htaccess директив, от старых мамбо-joomla уязвимостей, времен каменного века, возможно будет не лишним его использовать, хотя надо еще посмотреть на нагрузку, возможно она возрастет, тогда эти директивы надо отключить. Автор сборника - некто RobS.
########## Начало
#
# Попытка модификации переменных mosConfig* через URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# (сам не понял нафик запрещать base64_encode :), будем верить автору)
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Запрет передачи тэгов <script> в адресе (скорее всего защита от XSS)
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Старая дыра, когда пытались подменить GLOBALS через RG_EMULATION
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Аналогичная дыра, но для _REQUEST
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# И в конце даем на такие запросы ответ 403 (aka Forbidden)
RewriteRule ^(.*)$ index.php [F,L]
#
########## Конец

Как запретить вход в админку на время моего отсутствия

В админке создаем .htaccess и пишем в него "deny from all". В результате никто (даже вы) не сможет туда войти. Бывает очень полезно, если вы знаете, что долго не будете входить туда. А перед тем как захотите войти - просто сотрите этот файл по FTP.

Сообщение "Следующие настройки PHP являются неоптимальными для БЕЗОПАСНОСТИ и их рекомендуется изменить"

После установки Joomla вы входите в админку и видите красными буквами это безобразие.

  • PHP magic_quotes_gpc установлено в `OFF` вместо `ON`
  • PHP register_globals установлено в `ON` вместо `OFF`
  • Параметр Joomla! RG_EMULATION в файле globals.php установлен в `ON` вместо `OFF`

Хочу отметить - что по большой части это безобразие в головах у девелоперов. Если у вас стоят последние версии компонентов, то особо париться не надо. Но надпись напрягает, это правда. Для ее устранения надо либо в коде вырезать эту проверку - вариант для джедаев. Либо настроить пхп так, что бы они не выскакивали.

  • magic_quotes_gpc и register_globals - можно убрать двумя способами.
  • Либо, если вам доступно редактирование php.ini и вы можете иметь php.ini для каждой директории, то ложим этот файл в папку с Joomla и в папку админки. И там исправляем эти два параметра. Для magic_quotes_gpc пишем "magic_quotes_gpc=On" (без кавычек), а для register_globals пишем "register_globals=Off".
  • Если вы это делать не можете, то можно попробовать сменить их в .htaccess. Для этого добавляем (или раскомментируем - для пользователей RE версии) строчку "php_value имя_константы значение". О том как это сделать - внимательно читаем весь текст этой страницы. Обращаю внимание, что такой фокус с .htaccess может сработать только если ваш сервер это веб-сервер Apache, а не IIS и настройки хостинга позволяют менять данные параметры. Если он платный то чаще всего это сделать можно.
  • RG_EMULATION - читайте весь фак полностью.

Что делать, если любой желающий может просмотреть список файлов в любой директории, насколько это опасно

Т.е. если вы например набираете в адресной строке хттп://сайт.ру/components/com_content/ и видите содержимое директории, то это значит, что в вашем сервере настроена выдача листинга директорий. Насколько это безопасно - на самом деле это не так уж и страшно. Хотя в принципе может дать взломщику дополнительные плюсы при изучении вашего сайта. Избежать открытого листинга можно двумя способами:

  • .htaccess или в конфигурации apache создать директиву
  • В каждую директорию положить пустой файл index.html. Тогда если все настроено как обычно, то вместо списка файлов будет выдаваться именно этот файл.
(с)
 
register_globals - не надо думать, что это вот такая дыра в пхп, дыра прежде всего в головах у разработчиков, которые не умеют пользоваться средствами языка правильно. Так вот в последнее время (сентябрь 2006) число найденных дыр использующих неглубокие познания девелоперов экспоненциально возросло. Для самой примитивной защиты в файл .htaccess надо добавить строчку "php_value register_globals 0"(или "php_flag register_globals off") (без кавычек) (если вы это сделали, а у вас вывалилась ошибка 500 и вы не знаете что делать, значит вы нихрена не читали фак с самого начала, читайте его полностью)[/INDENT]

Где начало то и что делать???
 
  • Заблокирован
  • #6
Где начало то и что делать???
соре...

Обеспечение безопасности
Кратко.
Для обеспечения безопасности, естественно, нужно следовать обычным правилам - сложный пароль и т.д.

Кроме этого, нужно установить настройки пхп в соответствии с требованиями системы.(не рекомендованные настройки будут подсвечены красным цветом в админ.панели внизу).

.htaccess

Кроме того, рекомендуется защитить папку администратор с помощью .htaccess (Следует заметить, что администратор сервера может запретить использование .htaccess на вашем сервере, в любом случае лучше обратиться за информацией к адмимистратору.) действие которого распространяется на каталог, в котором он находится, и все покаталоги этого каталога.

Для этого необходимо(сначала делаем на локалке под виндовс) скачать программу htpasswd.exe запускаем и вводим следующую команду
htpasswd -bc .htpasswd [admin_login] [password] - для создания нового файла.
Таким образом доступ к папке administrator будет иметь пользователь с логином [admin_login] и соответствующим паролем.

Для добавления пользователя, имеющего доступ к administrator необходимо выполнить ту же команду только без ключа -ц т.е.:
htpasswd -b .htpasswd [new_user] [new_user_password]
Затем необходимо создать файл .htaccess следующего содержания :
AuthUserFile /физический_путь_к_каталогу/administrator/.htpasswd
AuthName Admin
AuthType Basic
Require valid-user
Затем оба файла необходимо закачать в папку administrator.

Конфигурирование файла .htaccess имеет очень важное значение для защиты сервера.

Так, если вы хотите запретить доступ к папке пользователю с определённым ip-адресом, то в файл необходимо вписать следущие строчки(в файл .htaccess:(
Order Allow,Deny
Deny from 164.1.1.1
Allow from All
так, мы запрещаем пользователю с адресом 195.1.1.1 доступ к папке. Если же мы напишем вместо 164.1.1.1 164.1.1 то запретим доступ к папке для всей сети класса 164.1.1

Определения файла по умолчанию с помощью директивы DirectoryIndex.

Вообще все директивы сервера Apache можно посмотреть Для просмотра ссылки Войди или Зарегистрируйся

Обычно, при доступе в директорию файлом по умолчанию является index.html или index.php

Для переопределения файла добавляем в .htaccess следующие строчки
DirectoryIndex файл_по_умолчанию
При обращении к каталогу Apache попытается найти один из указанных файлов и показать посетителю его содержимое, а если сделать этого не получится, сервер выдаст пользователю список файлов в каталоге.

Для запрета выдачи списка файлов необходимо использовать следующую директиву(в том же файле .htaccess )
(с) Для просмотра ссылки Войди или Зарегистрируйся

Я конечно сомневаюсь, что это уже в предалах темы, т.к. безопасность джумлы и правильная настройка php.ini это разные вещи, но для интересующихся:

У меня где-то была хорошая статья на эту тему, только немогу найти =/
 
Интересные статейки...
А вопрос, конфигурация апач где находится?
 
  • Заблокирован
  • #8
Интересные статейки...
А вопрос, конфигурация апач где находится?
Смотри тут:

Или тут:

Поподробней тут:

И тут:
 
Нет у меня на сервере таких папок :nezn:
Есть только etc, но в ней только папка моего пришитого домена и всё...
Ну да ладно забьём, меня заинтересовал вопрос по поводу htpasswd.exe, я скачал эту прогу, запускаю её, а она быстро закрывается, как быть?
 
  • Заблокирован
  • #10
Нет у меня на сервере таких папок :nezn:
Есть только etc, но в ней только папка моего пришитого домена и всё...
Ну да ладно забьём, меня заинтересовал вопрос по поводу htpasswd.exe, я скачал эту прогу, запускаю её, а она быстро закрывается, как быть?

По поводу конфигов апача, то тебе нужно обратится к хостеру, посмотри у себя на хосте phpinfo и если тебя, что-то не устроит пиши хостеру, что бы менял.
 
Назад
Сверху