Давайте с вами подумаем кто такой хакер? Хакер — это не взломщик! Люди часто путают эти понятия. Хакер — это прежде всего человек с нестандартным мышлением, и в этом его сила, если можно так сказать.
Чтобы успешно противостоять хакеру, нужно также научится нестандартно мыслить. Как говорится, клин клином вышибают.
Сегодня я предложу вам очень необычный способ защитится от атак типа php include. Подходит он конечно далеко не всем. И если чесно защищает он не от самой атаки, а от ее обнаружения. Заинтриговал?
Как ищется инклуд…
Давайте сначала разберемся как именно взломщик пытается обнаружить уязвимость.
Выглядит это следующим образом. Злоумышленник модифицирует все входящие параметры по очереди, предполагая что данные этих параметров попадают в функцию инклуда. Ну или если по-простому пытается «приинклудить» файлы. И для того чтобы определить есть ли уязвимость или нет, ему необходимо приинклудить какой нибудь файл на целевой системе (приикнулдилось — уязвимость есть, нет — уязвимости нет).
Естественно если злоумышленник действует извне, то он не знает структуру расположения каталогов и файлов, и не может приинклудить любой файл, так как не будет знать пути к нему. Но бывают такие файлы, которые всегда существуют в системе, и к которым есть всегда права на чтение. Для Linux — это /etc/passwd, а для Windows — пусть будет C:\boot.ini. Но впрочем Windows нас мало интересует, поэтому дальше мы будем говорить про passwd
/etc/passwd
Наверное вы натыкались в своих логах на больше количество записей вида:
?action=../etc/passwd%00
?action=../../etc/passwd%00
?action=../../../etc/passwd%00
?action=../../../../etc/passwd%00
?action=../../../../../etc/passwd%00
?do=../etc/passwd%00
?do=../../etc/passwd%00
?do=../../../etc/passwd%00
?do=../../../../etc/passwd%00
?do=../../../../../etc/passwd%00
?id=../etc/passwd%00
?id=../../etc/passwd%00
?id=../../../etc/passwd%00
?id=../../../../etc/passwd%00
?id=../../../../../etc/passwd%00
Если да — то знайте, у вас пытались найти php include (ну или возможность чтения произвольных файлов, но нас сейчас это не интересует). Так вот, если один из ваших параметров не обрабатывается должным образом и попадает в функцию include(), то тогда бы файл /etc/passwd приинклудился, содержимое бы его интерпретировалось как php скрипт, и так как он не содержит тегов php кода, он бы вывелся в браузер в неизменном виде. Это бы и послужило бы взломщику «маркером» наличия уязвимости.
К чему я это пишу, к тому что при поисках инклудов, злоумышленник обязательно (гарантирую что в 90% случаев) будет пытаться приинклудить файл /etc/passwd.
Защищайтесь, сударь!
Наверное вы сейчас подумали: «Он что, хочет предложить обычный WAF и фильтровать пакеты по наличию /etc/passwd в них?». Нет. Это стандартный способ. Это пример того как мыслит обычный человек.
Давайте проявим немного фантазии. Почему бы нам просто не добавить немножко php кода в содержимое файла passwd? И если вдруг у злоумышленника получится его приинклудить, то наш php код выполнится. (Считаете бредом? — загляните в заключение)
Так как мы знаем, что единственный кто догадается инклудить этот файл — взломщик, то наш php код должен его банить, и для того чтобы нашу систему не взломали дальше, блокировать уязвимый файл, и желательно уведомлять о проишествии администратора.
Но как же добавить php код в /etc/passwd ведь его синтаксис жестко регламентирован? У каждого пользователя есть поле «comment» — описание пользователя, туда можно вписать все что угодно (за исключением двоеточия, разумеется). Поэтому берем и добавляем пользователя в систему с нужным нам комментарием. После этого /etc/passwd будет содержать вот такую строчку
root:x:0:0:Superuser:/:
daemon:*:1:5::/:/sbin/sh
bin:*:2:2::/usr/bin:/sbin/sh
sys:*:3:3::/:
adm:*:4:4::/var/adm:/sbin/sh
securityuser:*:1001:1001:<?php include(«[ваш секурити скрипт]»); ?>:/:
Ну а в подключаемом скрипте уже выполняем нужные вам действия — баним пользователя, блокируем обращение, уведомляем администратора.
В итоге у нас получилась своебразная ловушка, которая сможет защитить ваш сайт от взлома.
Заключение
Да, я вполне отдаю себе отчет, что все написанное выше похоже на бред. И прекрасно понимаю, что никто это на практике использовать не будет. Но писал я не для этого. Писал я для того чтобы показать пример нестандартного подхода в области защиты.
Спасибо за внимание =)
Оригинальная борьба не с причиной, а со следствием.
Ну впрочем это я и написал в самом начале)
Интересный вариант, спасибо! :)
С каких пор «хакер» пишется с двумя «к»? Вы, видимо, в школе изучали немецкий.!? В английском языке буквы «ck» образуют звук «к», поэтому на транслите слово пишется как «хакер».
Гм… да нет изучал английский. Почему то в памяти и интуитивно отложилось такое вот написание. Хотя, сейчас вот глянул другие записи, и заметил что где то я писал с одной «к», где то с двумя.
Вобще не очень люблю тех кто цепляется к орфографии, но Вам спасибо что обратили на это мое внимание, буду исправлятся =)
Держите хакера!
Удержите ли?)