21.02.2006
Любой современный активно развивающийся веб-проект со временем обрастает новыми сценариями, новыми каталогами, а также другими ресурсами. Порой, это происходит настолько быстро, что администрация сайта в спешке забывает (не успевает) проставить права доступа к некоторым каталогам и ресурсам, видимо считая, что не стоит тратить своё драгоценное время на такие мелочи, т.к. эти ресурсы вряд ли кто-нибудь, когда-нибудь обнаружит. Но при определённом стечении обстоятельств, опытный взломщик всё же может добраться до этой информации. Каким образом? Читайте в данной статье.
Продолжая тему защиты конфиденциальных данных на вашем сайте от злоумышленников в этот раз я расскажу о аналитическом способе, применяемом последними, для обнаружения такой информации.
Но сначала хочу предупредить вас, что вся информация представленная в данной статье служит чисто в ознакомительных целях. Для того, чтобы администраторы веб-серверов, а также веб-мастера имели возможность обезопасить себя от описанных здесь ошибок. Автор не несёт никакой ответственности за её применение в противозаконных целях.
Сбор информации о сайте
Итак, для того, чтобы попытаться найти какие-либо конфиденциальные данные на сайте, злоумышленнику прежде всего необходимо проанализировать его структуру (ПО веб-сервера, его версия, общедоступные адреса ресурсов, хранящихся на нём и т.д.). А для того, чтобы провести хоть какой-то анализ, нужны хоть какие-то сведения. Верно? В зависимости от того, сколько на самом деле изначально знает злоумышленник о системе, методы сбора информации и последующего анализа могут различаться. Мы же будем рассматривать вариант, когда последний изначально обладает минимальным объёмом информации о анализируемом объекте. Т.е. он знает, что перед ним веб-сайт, но не знает ни ПО установленного на нём, ни версии, ни того, что на нём находится.
В этом случае, сбор информации начинается с просмотра всех доступных данных выдаваемых веб-сервером. Некоторые методы сбора информации приведены ниже.
Сканеры безопасности
Пожалуй самым популярным методом сбора информации является сканирование сервера с помощью специальных программных средств, которые так и называются – сканеры безопасности.
Существуют различные типы сканеров, одни предназначены для обнаружения открытых портов сервера и программ использующих их, другие ищут известные уязвимые веб-сценарии, а третьи производят более полный аудит безопасности системы.
Но к счастью для системных администраторов, любой современный firewall умеет автоматически распознавать попытки такой деятельности и соответствующим образом блокировать их. Поэтому в этой статье я не буду заострять ваше внимание на данном методе.
Содержимое HTML документов
Этот способ заключается в банальном просмотре содержимого HTML документов выдаваемых сайтом (View Source). Ведь даже там можно обнаружить множество интересных вещей.
Пример 1 – ищем в формах:
Комментарии: Злоумышленник узнает о существовании скрипта login.php, а также о каталоге includes. Плюс, у него могут появиться некоторые предположения относительно названий атрибутов в таблицах в БД (теперь бы только найти, куда внедрить SQL)
Пример 2 – ищем адреса ресурсов
Комментарии: Узнаём о существовании каталога 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 и т.д. и т.п. Словом, насколько сложно злоумышленнику добраться до ваших сокровенных данных. Можете даже на время встать на его место и попробовать взломать СВОЮ собственную систему (ещё раз повторяю, только СВОЮ И НЕ ЧЬЮ ДРУГУЮ, т.к. взлом чужого сайта - дело противозаконное). И помните – не бывает абсолютной защиты, бывает лишь максимально возможная!
|
04:06:16, 13:13 .:|:. Написал: Виталий
25:03:16, 15:47 .:|:. Написал: Владимир
15:03:16, 16:45 .:|:. Написал: Tina
12:01:16, 12:46 .:|:. Написал: Биба
08:01:16, 13:30 .:|:. Написал: Имя не указано
29:11:15, 10:58 .:|:. Написал: Дима
29:11:15, 10:53 .:|:. Написал: Дима
24:01:14, 16:29 .:|:. Написал: svyatik_killer04
03:12:13, 02:36 .:|:. Написал: рахман
26:11:13, 20:29 .:|:. Написал: данила
30:09:13, 10:53 .:|:. Написал: Имя не указано
15:07:13, 23:13 .:|:. Написал: Piton_kraft
10:07:13, 13:11 .:|:. Написал: Имя не указано
30:04:13, 14:36 .:|:. Написал: джамбулат
21:04:13, 00:16 .:|:. Написал: Имя не указано
17:12:12, 19:35 .:|:. Написал: grafs4ik
09:12:12, 23:38 .:|:. Написал: sky
19:11:12, 05:34 .:|:. Написал: толян
28:10:12, 21:52 .:|:. Написал: дима
23:08:12, 14:40 .:|:. Написал: Водолей
02:07:12, 17:56 .:|:. Написал: xakso
11:02:12, 16:54 .:|:. Написал: NETDTHC
17:12:11, 19:34 .:|:. Написал: =)
13:12:11, 21:08 .:|:. Написал: DengEr
29:11:11, 20:49 .:|:. Написал: Noname
12:08:11, 13:16 .:|:. Написал: Глеб
02:08:11, 19:58 .:|:. Написал: :)
10:07:11, 11:08 .:|:. Написал: цкуепып
27:05:11, 22:38 .:|:. Написал: Саша
15:04:11, 19:53 .:|:. Написал: Имя не указано
09:03:11, 15:08 .:|:. Написал: I{ o $_38
14:02:11, 15:47 .:|:. Написал: Дрон
11:02:11, 13:42 .:|:. Написал: Арман
21:12:10, 21:11 .:|:. Написал: Натка
15:11:10, 23:36 .:|:. Написал: neo
06:10:10, 01:08 .:|:. Написал: Сергей
13:09:10, 00:24 .:|:. Написал: Имя не указано
22:11:08, 00:16 .:|:. Написал: Orlan_1
19:09:08, 14:17 .:|:. Написал: albert
|