Любой современный активно развивающийся веб-проект со временем
обрастает новыми сценариями, новыми каталогами, а также другими ресурсами.
Порой, это происходит настолько быстро, что администрация сайта в спешке
забывает (не успевает) проставить права доступа к некоторым каталогам и
ресурсам, видимо считая, что не стоит тратить своё драгоценное время на такие
мелочи, т.к. эти ресурсы вряд ли кто-нибудь, когда-нибудь обнаружит. Но при
определённом стечении обстоятельств, опытный взломщик всё же может добраться до
этой информации. Каким образом? Читайте в данной статье ;)
Продолжая тему защиты конфиденциальных данных на вашем сайте от
злоумышленников в этот раз я расскажу о аналитическом способе, применяемом
последними, для обнаружения такой информации.
Но сначала хочу предупредить вас, что вся информация
представленная в данной статье служит чисто в ознакомительных целях. Для того,
чтобы администраторы веб-серверов, а также веб-мастера имели возможность
обезопасить себя от описанных здесь ошибок. Автор не несёт никакой
ответственности за её применение в противозаконных целях.
Сбор информации о сайте
Итак, для того, чтобы попытаться найти какие-либо
конфиденциальные данные на сайте, злоумышленнику прежде всего необходимо
проанализировать его структуру (ПО веб-сервера, его версия, общедоступные адреса
ресурсов, хранящихся на нём и т.д.). А для того, чтобы провести хоть какой-то
анализ, нужны хоть какие-то сведения. Верно? В зависимости от того, сколько на
самом деле изначально знает злоумышленник о системе, методы сбора информации и
последующего анализа могут различаться. Мы же будем рассматривать вариант, когда
последний изначально обладает минимальным объёмом информации о анализируемом
объекте. Т.е. он знает, что перед ним веб-сайт, но не знает ни ПО установленного
на нём, ни версии, ни того, что на нём находится.
В этом случае, сбор информации начинается с просмотра всех
доступных данных выдаваемых веб-сервером. Некоторые методы сбора информации
приведены ниже.
Сканеры безопасности
Пожалуй самым популярным методом сбора информации является
сканирование сервера с помощью специальных программных средств, которые так и
называются - сканеры безопасности.
Существуют различные типы сканеров, одни предназначены для
обнаружения открытых портов сервера и программ использующих их, другие ищут
известные уязвимые веб-сценарии, а третьи производят более полный аудит
безопасности системы.
Но к счастью для системных администраторов, любой современный
firewall умеет автоматически распознавать попытки такой деятельности и
соответствующим образом блокировать их. Поэтому в этой статье я не буду
заострять ваше внимание на данном методе.
Содержимое HTML документов
Этот способ заключается в банальном просмотре содержимого HTML
документов выдаваемых сайтом (View Source). Ведь даже там можно обнаружить
множество интересных вещей ;)
Пример 1 - ищем в формах:
<FORM NAME="authF" ACTION="/includes/login.php" METHOD="post">
<INPUT TYPE="text" NAME="username" VALUE="">
<INPUT TYPE="password" NAME="passwd" VALUE="">
<INPUT TYPE="submit" VALUE="Вход">
</FORM>
Комментарии:
Злоумышленник узнает о существовании скрипта login.php, а также о каталоге
includes. Плюс, у него могут появиться некоторые предположения относительно
названий атрибутов в таблицах в БД (теперь бы только найти, куда внедрить SQL ;)
Пример 2 - ищем адреса ресурсов
<IMG SRC="/secret/simple/logo.gif">
Комментарии:
Узнаём о существовании каталога secret и подкаталога simple в нём (быть может,
доступ к одному из них открыт и в нём есть что-то полезное ;)
Пример 3 - сообщения об ошибках
Warning: fopen(/home/www/passwd.dat) [function.fopen]: failed
to open stream: Permission denied in /home/www/user.php on line 345
Комментарии:
Из сообщений об ошибках можно узнать очень много о структуре чужой системы. В
данном случае, мы узнали о существовании файла passwd.dat в веб- пространстве
(интересно, что в нём может находиться? ;)
П.С: Нередко взломщик умышленно вызывает сценарии, передавая им
некорректные параметры, для того, чтобы последние выдавали такие сообщения.
Служебные файлы
Пример - robots.txt
User-Agent: *
Disallow: /cgi-bin/
Disallow: /admin/
Комментарии:
Взломщик узнаёт о существовании каталогов cgi-bin и admin на сайте.
Это были лишь самые известные методы сбора данных о чужом
веб-сайте. Перечисление их всех выходит за рамки этой статьи. Да и вообще
сомневаюсь, что это возможно сделать.
Анализ полученных данных
Как говорится в одном старом анекдоте - вероятность того, что на
улице встретишь слона составляет 50% =) Так и тут, вероятность того, что
злоумышленник соберёт или не соберёт достаточный объём информации о веб-сайте
зависит в основном от квалификации веб-мастера и изобретательности хакера. Автор
искренне надеется, что вы относитесь к тем веб-мастерам у которых "шиш" что
найдёшь. Однако, как показывает практика, второй случай встречается чаще (как
это не печально).
Итак, после того, как злоумышленник располагает некоторой
информацией о сайте-жертве он пытается получить ещё больше, анализируя её.
Конечно же, если в процессе сбора он совершенно случайно натыкается на
действующий пароль администратора системы в каком-нибудь завалявшемся на сервере
файле, то анализировать тут практически нечего - всё и так ясно. Но гораздо
чаще, хакеру приходится делать предположения основываясь на известные данные,
проверять свои гипотезы и так далее. Узнавая всё больше и больше о веб-сайте и
стиле мышления (если можно так выразится) его создателей. В результате он может
получить недостающие данные, т.е. ту самую вожделенную конфиденциальную
информацию. Разумеется, ни о какой универсальной формуле или схеме говорить
здесь не приходится. Однако, простенький примерчик я всё-таки приведу:
Имеется некий веб-сайт. На нём обнаружен сценарий user.php,
который выдаёт следующее сообщение об ошибке:
Warning: Failed opening '/home/www/user.inc' for inclusion (include_path='')
in /home/www/user.inc on line 28
Значит на сайте в корневом каталоге существует файл с
подпрограммами - user.inc. А т.к. его расширение "inc", а не "php", то вполне
возможно, что веб-сервер выдаст его содержимое, а не как задумывал программист,
выполнит этот файл как сценарий. После этого, злоумышленнику удаётся просмотреть
содержимое данного файла из которого, помимо всего прочего, он узнаёт о
существовании скрипта admin.php. Взломщик также обращает внимание, на то, что
веб-мастер любит называть прилагаемые PHP модули, как и сами сценарии, только с
расширением inc, которое, в свою очередь, администратор забыл сделать
исполняемым для PHP (бывают же такие совпадения ;) И соответственно, пытается
скачать файл admin.inc. Что ему на этот раз и удаётся. В файле он находит пароль
администратора. А в последствии обнаруживается, что этот пароль годен и для
доступа на сервер через FTP.
Итог - сайт взломан. Администратор горюет (смотрит логи), хакер
ликует (пьёт пиво).
Ошибки веб-мастера и администратора в данном случае:
- Администратор забыл отключить отладочный режим (debug mode) в PHP;
- В некоторых учебниках по PHP даются примеры, где прилагаемые файлы имеют
расширение inc. Если давать такие расширения прилагаемым файлам, то
необходимо "привязывать" их к соответствующему интерпретатору, иначе это
дело становится весьма рискованным (вы же не хотите, чтобы ваши сценарии
могли читать посторонние). Намного безопаснее давать модулям двойное
расширение следующего вида - "inc.<оригинальное расширение>" (в данном
случае - "inc.php");
- Администратор использует одинаковые пароли к нескольким сервисам на
сервере (для доступа к FTP и БД).
Подведём итоги
В этот раз я намерено пропустил колонку "Решение проблемы", так
как универсальной панацеи от всех возможных недугов не существует. Тем не менее,
настоятельно рекомендую всем веб-мастерам и сисадминам ещё раз проверить, что и
как хранится на вашем сайте, верно ли проставлены права доступа к файлам,
имеется ли возможность просмотра содержимого каталогов, отключён ли режим
отладки у PHP и т.д. и т.п. Словом, насколько сложно злоумышленнику добраться до
ваших сокровенных данных ;) Можете даже на время встать на его место и
попробовать взломать СВОЮ собственную систему (ещё раз повторяю, только СВОЮ И
НЕ ЧЬЮ ДРУГУЮ, т.к. взлом чужого сайта - дело противозаконное). И помните - не
бывает абсолютной защиты, бывает лишь максимально возможная!