Превентивная защита DLE от взлома

12
S
На сайте с 06.08.2010
Offline
22
2598

Как правило все уязвимости используют не достаточное фильтрование входных данных, или ошибки связанные к примеру с неправильной обработкой ббкодов в личных сообщениях, в каментах итп. Почти всегда шела льют через аватарку (как клеют рассказывать не буду) а далее используя ту или иную уязвимость выполняют аватарку, или переносят файл в какую либо диру, а чаще тупо сносят .htacces. Так же часто используя уязвимость добираються до записи к конфигу а он инклудиться и исполняется без проблем. Объединяет все уязвимости одно - запросы.

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

Вот принцип работы фильтра (у меня он работает как класс "антивирус" и более громоздкий):

//1. фун-я поиска вредных слов
function searchBadWord($arrData) {
$arrSearch = explode(',', "select,union,where,char,from,exec,eval,base64_decode,',`,[,],{,}"); // стоп слова
$countIn = 0;
foreach ($arrData as $val) {
$val = strtolower($val);
foreach ($arrSearch as $badWord) {
$countIn +=substr_count($val, $badWord);
}
}
if ($countIn == 0){
return false;
} else {
return true;
}
}
//упаковка и отсылка всех нужных данных нам на мыло
function sendAlert(){
mail('admin@site.my', " HACK!", " | REQUEST: ".json_encode( $_REQUEST)." | SERVER: ".json_encode( $_SERVER)." | COOKIE: ".json_encode( $_COOKIE));
}
//проверяем два массива с данными и если есть стоп слова просто шлём уведомление
if(searchBadWord($_REQUEST) OR searchBadWord($_COOKIE)){
sendAlert();
//die( "Hacking attempt!" ); // но лучше не включать пока не убедитесь в правильной работе всего сайта
}

Этот код нужно аккуратно включить на всех точках входа: index.php, admin.php, во всех файлах engine/ajax/ В зависимости от модуля аджакса, или админки возможно некоторые стоп слова будут часто мешать - с умом пофиксить этот вопрос.

Вреда от кода как минимум не будет - максимум что он будет спамить вам нада и не надо. Ну а дальше уже думать и допиливать в нужных местах стоп слова. С ходу именно этим кодом можно ловить дыры, ну и закрывать их. Прошу отметить - код хоть и рабочий но только для примера. Нужен программист разбирающийся в дле чтобы правильно его и надёжно установить.

Хостер отключил след. функции:

eval(), assert() - выполняет переданный ей параметр как php код.

passthru(), exec(), system(), shell_exec(), proc_open( ) -функции выполнения команд или работы с процессами. Отсутствие проверки входных данных могут дать взломщику возможность выполнять команды.

Вопрос таким методом решён был жёстка - сайты с такой защитой на разных версиях двигов от 8,5 до 9,8 уже как пол года не ломаются, хоть и явно вражеские запросы с улыбкой читаю на почте.

Касательно мелких доработок хотел был ещё отметить:

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

- engine/classes/mysqli.class.php и engine/classes/mysql.class.php в них есть блок вывода ошибки базы - палится на старых версиях много чего полезного хацкеру - echo ' ... ' ; закоментить, ну или как сделал я проверку для админа + маил на почту о проблеме.

- ненужные модули нужно почистить - к примеру мне на сайте ненужны каменты и рейтинг новостей - всё сношу из папки emgine/modules/ и emgine/ajax/

- admin.php он по хорошему должен переименован быть + должна стоять жёсткая проверка на id админов. У меня так и подавно лежит ложный admin.php в придачу)

Статью написал на скорую руку если что то непонятно отвечу. Мнение DLE любителей тоже интересно :)

F
На сайте с 12.03.2007
Offline
85
#1

А $_FILES не нужно проверять?

Как начать тренироваться (http://max-body.ru/quick_start.html), Бодибилдинг форум (http://fatal-energy.com/). Обменяюсь/куплю ссылками со статей (или статьями) с сайтами бодибилдинг/фитнес тематики.
TF-Studio
На сайте с 17.08.2010
Offline
334
#2

Залив картинки с шеллом - пройдет.

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
S
На сайте с 06.08.2010
Offline
22
#3
TF-Studio:
Залив картинки с шеллом - пройдет.

Можно попробовать картинку потрашить на предмет пхп кода, или накладывать её на подложку ... нада попробовать.

TF-Studio
На сайте с 17.08.2010
Offline
334
#4

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

Ваша защита будет иметь фейковые срабатывания, при включенном ЧПУ.

siv1987
На сайте с 02.04.2009
Offline
427
#5

С проверкой $_REQUEST будут куда больше фейковых срабатываний.

S
На сайте с 06.08.2010
Offline
22
#6
TF-Studio:
На хабре статья есть хорошая, там популярно написано какие действия надо произвести, чтобы все было ок.
Ваша защита будет иметь фейковые срабатывания, при включенном ЧПУ.

На счёт чпу позвольте не согласиться.

RewriteRule ^([0-9]+)-(.*).html(/?)+$ index.php?newsid=$1&seourl=$2 [L] в seourl содержится на транс лите название статьи, в котором я полностью согласен могут быть вхождения. Я не стал описывать полностью весь файл который фильтрует запросы а лишь рассказал принцип. Исключений которые нужно обработать аккуратнее у меня получилось не больше 6 включая мой сторонний модуль для дле.

Читал статьи на хабре на эту тему. Все что я видел для DLE, не давали ответа на вопрос который мучает вэбмастера: "КАК ОНИ ЭТО ДЕЛАЮТ!?".

SG
На сайте с 22.03.2013
Offline
7
#7
sanchosmavrody:
не давали ответа на вопрос который мучает вэбмастера: "КАК ОНИ ЭТО ДЕЛАЮТ!?".

Ну отловите вы sql inj и дальше что? Сайты на dle ломают тысячами на автомате. Или ваша цель именно запросы сохранять? Так логи для этого есть.

S
На сайте с 06.08.2010
Offline
22
#8
setka_gs:
... Так логи для этого есть.

Именно в логах и долго ковыряться. Вот буквально вчера на один из сайтов пришло мне три письма - три запроса:

1. залогенился 2. залил аватарку 3. отправил сам себе сообщение с инклудом аватарки юзая старый баг с ббкодами в личке. Дырка давно закрыта, но решил ещё и добавить стоп слово include.

Хотя возможно вы и правы я велосипед изобретаю, но ИМХО если мне так удобней почему я не прав?))

SG
На сайте с 22.03.2013
Offline
7
#9
sanchosmavrody:
но ИМХО если мне так удобней почему я не прав?))

Я не говорю что вы правы или не правы, этот аспект мне не интересен. Как бы на мой взгляд...основной минус. Насколько я понял фильтруются все запросы, на сколько возрастет нагрузка на сервер? к примеру на vds висят 10 dle, 1 000 000 запросов в сутки... сколько писем реально обработать если кто нить устроит флуд union запросами в 1000 потоков... даже не знаю. Я уж не говорю о том что обычный хостинг просто отрубит такой сайт за спам самого себя.

[Удален]
#10

От флуда избавляются уже на стороне сервера. :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий