Защищаем свой сайт DLE от кулхацкеров
Преамбула:
Нажми для просмотра
Написать эту статью меня поддёрнул вчерашний инцедент, короче хакнули один из моих сайтов. Залили шел, вставили ссылок в шаблоны и подключили вредоносный код в шаблон. Сайт просто утонул и гугл с яндексом на него "обиделись", посещуха упала в 10 раз. Мне конечно стало обидно и я решил разобраться с вопросом защиты своего сайта и заодно поделиться своим опытом.
Итак, хакнули у меня сайт на DLE 8.5, я решил попробовать поискать причины и методы взлома сайта. Для того чтобы понять как защищаться, надо сначала узнать как сайты ломают. Поэтому я полез на хацкерские ресурсы, покурил много мануалов и даже наткнулся на статьи в которых описывалось как что делать, что полностью совпадало с тем что мне сделали. Итак, для начала я вам в кратце расскажу что обычно делают взломщики, если это интересно - читайте материалы под спойлером, т.к. в целом темы защиты не касается.
Как обычно ломают сайты:
Нажми для просмотра
Всем известно что DLE скрипт самый распространенный и поэтому его постоянно проверяют на уязвимости всякие кулхацкеры и некоторым удается найти дыры о которых они молчат. Большинство же "школьных" кулхацкеров пользуются материалами которые есть в паблике, а именно они заливают Шелл (shell). Для этого обычно нужны права админа которые можно получить каким то хитрым способом, который я не нашел. Дальше в админке они заходят в настройки сайта и в меню загрузки файлов добавляют расширение php и загружают через стандартный аплоадер php файлы (а именно шел). Через него они уже могут свободно оперировать файлами вашего движка и базой. Ну естественно теперь они получают полную свободу действий. На этом собственно я пока и закончу мой мини файк о том как ломают.
Вот пример одного из старых шелов:
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 100 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
|
Обзор уязвимостей DataLife Engine:
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 100 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
|
Осмыслив выше описанное я понял что для наибольшего противодействия заливке шела нужно закрыть доступ к возможности выполнения скриптов в папке аплоад, для этого в корень папки upload нужно вложить файл:
.htaccess с содержимым:
Код:
<FilesMatch ".*">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "\.(jpg|gif|png|xml)$|^$">
Order deny,allow
Allow from all
</FilesMatch>
Этим действием мы перекрываем возможность выполнять или обращаться к файлам с расширениями отличными от jpg|gif|png|xml. Оставляю для доступа форматы картинок и xml карту сайта. На всякий случай наставлю на сам файл
.htaccess права CHMOD 444, чтобы их было нельзя изменить скриптом или еще как (или отредактировать файл) , а только из под FTP.
Дальше, подобный файл стоит затолкать в папку с шаблонами, только внести в него дополнительно tpl, css, html.
Если у Вас
DLE 9.х и старше, то на папку
upload обязательно поставьте права CHMOD 0777, это автоматически запрещает выполнение php скриптов в данной папке на уровне самого скрипта.
Допустим мы не дадим теперь залить им шел, но они могут вставить в код шаблона какой нить левый скрипт или навтыкать ссылок через редактор шаблонов дижка. Лично я не фанат этого редактора и редактирую все шаблоны всегда из под FTP, поэтому попрощаться с этим редактором мне не страшно и я просто беру и ставлю на все tpl файлы шаблона права CHMOD 444, этим самым я запрещаю редактировать файлы шаблона абсолютно всем и из скрипта уже ничего не сделать. Так, эту дырочку мы тоже залотали.
Что еще может сделать взломщик ? забрать базу данных. Он зайдет в менеджер управления базой данных, сделает бэкап базы и сольет ее, если версия вашего DLE ниже чем 9.0. Что делать ? да все просто, нужно в папке
backup разместить
.htaccess с содержимым:
Код:
Order Deny,Allow
Deny from all
Все, бэкапы можно сливать только из под FTP.
Защита файла админпанели:
Идем дальше, что еще стоит защитить. Стоит спрятать панель администратора, переименуйте файл
admin.php во что нибудь еще и укажите в настройках системы новое имя файла
admin.php. Сохраняемся, панель админа перепрятали.
Так же если у Вас статический IP, то можно сделать ход конем и отсечь доступ к панели всем кто захочет в нее прорваться, для этого в конец корневого файла
.htaccess прописываем:
<Files "
admin.php">
Order Deny,Allow
Deny from all
Allow from 95.106.70.220
</Files>
Где
admin.php - имя файла админки, а 95.106.70.220 - Ваш IP. В этом случае в адмику зайдет только владелец IP 95.106.70.220, остальные получат 500-ую ошибку сервера.
Если у Вас динамический IP адрес, то страшного ничего нет. Заходим по ссылке
http://2ip.ru/whois/ и смотрим информацию о своем IP, в самом конце находим строку типа: route: 95.106.0.0/17 , это диапазон динамических IP адресов которые есть у Вашего провайдера. нужно скопировать этот диапазон и поставить его вместо статического IP, например вот так:
<Files "
admin.php">
Order Deny,Allow
Deny from all
Allow from 95.106.0.0/17
</Files>
Теперь в админку можно зайти с IP адресов Вашего провайдера, тут шанс взлома резко падает )
Запрет запуска любых левых скриптов (повышаем надежность защиты):
Открываем корневой .htaccess и дописываем в него строчки:
Код:
<FilesMatch ".(php|h|c)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "(index.php|go.php|ajax.php|download.php)$|^$">
Order deny,allow
Allow from all
</FilesMatch>
Что это делает. Эта секция запрещает вызов любых скриптов кроме index.php, go.php, ajax.php и download.php, которых достаточно для работы Вашего сайта. Если Вы заметили что какой то элемент сайта отвалился - то тупо подключите его в эту секцию, например чтобы работала админка - допишите |admin.php в конец, получится вот так:
Код:
<FilesMatch "(index.php|go.php|ajax.php|download.php|admin.php)$|^$">
Order deny,allow
Allow from all
</FilesMatch>
Туда же можно включить скрипт вылова голосования vote.php, я думаю что дальше все понятно. Таким макаром если будет залит какой либо скрипт, его не смогут выполнить. Вот такая вот политика партии.
+++++++++++++++
Так же сидел и думал, а если все же этим товарищам удастся попасть в админку и каким нить чудным способом залить мне шел или что то испортить. Для того чтобы залить шел, им нужно будет разрешить к загрузке тип файлов и добавить php. Я подумал и придумал. Короче говоря я выставляю все настройки в Основных настройках системы так как мне надо и я понимаю что изменю теперь тут может что нить раз в 100 лет, т.к. я обычно настройки не меняю. Теперь я перекрываю кислород злоумышленикам, а именно. Я иду в папку engine/data/ и ставлю на файл
config.php и
dbconfig.php права 444, по рекомендациям защиты скрипта я выставляю на саму папку
data права 765 (это
взял тут). Все, теперь настройки системы из адмнки менять нельзя, и соотвественно тип файлов php добавить не получится.
Дальше, на счет шаблонов. Ставить шаблоны надо только проверенные и проверять их самому перед установкой. Об этом я подробно расписывал в статьте:
Проверка шаблонов перед их использованием и видео уроке
Чистка шаблонов от внешних ссылок и скриптов на примере шаблона DLE.
Дальше, после того как вы переименуете файл админки - зайдите в Антивирус скрипта, сделайте тестирование, там долен быть показан новый файл админки как неизвестный системе файл. Вам предлагается сделать новый снимок -
НИКОГА НЕ ДЕЛАЙТЕ ЭТОГО. Почему ? Потому что Вы можете контролировать изменения в ФС, а именно. Если к примеру кулхацкерам все же удастся залить вам шел, то зайдя в антивирус вы его найдете как неизвестный системе файл. А если злоумышленик зальет шел и решит его скрыть от вас сделав новый снимок системы - то он скроет и свой шел и ваш новый файл админки и при очередном сканировании если вы не видите свой файл админки как неизвестный файл - значит что кто то делал снимок и стоит начать копать скрипт.
Полезные советы:
1. После того как вы закончили работать с ftp - обязательно выключайте аккаунт ftp или удаляйте его, если нельзя выключить - это дополнительная защита.
2. Выбирайте нормальных хостеров, из слов одного хакера с сайта античат, он залил шел на сайт через саппорт хостера, дав хостеру всего 10 WMZ. Так что ШКОЛОХОСТ - это не наш выбор.
Автор инструкции: Serberg
Статья написана только из собственных соображений и обобщения полученной по взлому информации. Если найдете недочеты - пишите. Если помог Вам - жми спасибку.
При копировании статьи - ссылка на оригинал обязательна.
Писал долго и нудно, а перед этим много читал. Я думаю ее заслужил )