WEb практикум. Web'cepbep
Скачать 4.76 Mb.
|
Исследование Допустим, что у вас на примете есть сервер или компьютер, который нужно взломать или протестировать на защищенность от взлома. С чего нужно начинать? Что сделать в первую очередь? Четкой последовательности действий нет. Взлом — это творческий процесс, а значит, и подходить к нему надо с этой точки зрения. Нет определенных правил, и нельзя все подвести под один шаблон. Самое первое, с чего начинается взлом или тест ОС на уязвимость, — сканирование портов. Для чего? А для того, чтобы узнать, какие службы (в Linux это демоны) установлены в системе. Каждый открытый порт — это программа, установленная на сервере, к которой можно подключиться и выполнить определенные действия. Например, на 21-м порту работает служба FTP. Если вы сможете к ней подключиться, то вам станет доступной возможность скачивания и загрузки файлов. Но это только если вы будете обладать соответствующими правами на удаленном сервере. Сначала следует просканировать первые 1024 порта. Среди них очень много стандартных служб типа FTP, HTTP, Telnet и т. д. Открытый порт — это дверь с замочком для входа на сервер. Чем больше таких дверей, тем больше вероятность, что какой-то засов не выдержит натиска и откроется, поэтому на сервере должно быть запущено только то, что необходимо. Будет лучше, если вы установите на сервер только те программы, которые реально будут использоваться. Все остальное лучше не запускать, запрещать, а лучше вообще не устанавливать, чтобы хакер не смог самостоятельно их запустить и использовать. У хорошего администратора открыты только самые необходимые порты. Например, если это web-сервер, не предоставляющий доступ к электронной почте, то нет смысла держать почтовые службы. Должен быть открыт только 80-й порт, на котором как раз и работает web-сервер. Все остальные порты должны быть не просто закрыты сетевым экраном, а лучше, если соответствующие службы совсем не будут установлены. Распространенная ошибка: установлю на всякий случай все, просто не буду запускать или прикрою сетевым экраном. Это очень серьезная ошибка, которую я часто вижу у программистов. Им лень тонко настраивать нужные сервисы, им лень смотреть что именно нужно, а что нет. Хочется просто чтобы все работало и скорей приступить к программированию. Если хакер проникнет на вашу систему, то он запустит остановленную службу или приоткроет сетевой экран, чтобы воспользоваться уже запущенной. Я об этом говорю уже очень давно, и то, что Microsoft движется в этом направлении, свидетельствует о том, что я верно мыслю. Понимаю, что это не я подсказал сотрудникам Microsoft, что не нужно устанавливать лишнее, но это говорит о том, что задумываюсь об этом не только я. Сначала IIS (Internet Information Server) стал устанавливаться на компьютеры в минимальной конфигурации. Теперь и MS Windows Server устанавливается в минимальной конфигурации, а вы можете добавлять потом только нужные вам роли и только нужные вам программы. Хороший сканер портов определяет не только номер открытого порта работающего на удаленной системе сервиса, но и показывает название работающей на нем службы. Жаль, но очень часто показывают не настоящее название, а только имя возможного сервера. Так, для 80-го порта будет показано "http". Если сканер не показывает имен служб, то в ОС Windows их можно посмотреть в файлах protocol и services из каталога C:\WINDOWS\system32\drivers\etc. Просто откройте их в Блокноте или любой другой программе просмотра текстовых файлов. В результате вы увидите что- то похожее на следующий список:
Файл имеет следующую структуру: <служба> <номер порта>/<протокол> [псевдонимы...] [#< комментарий>] Но не забывайте, что это только описание стандарта, который легко нарушить. Администратор без проблем может запустить web-сервер не на 80-м порту, а на 21-м, и сканер портов напишет нам, что это FTP-сервер. Остановитесь и посмотрите сейчас файл services. Здесь описаны наиболее распространенные на данный момент службы и порты, на которых они работают. Если вы еще не знакомы с этими номерами, то следует хотя бы что-то из этого оставить в памяти, чтобы знать потом, что искать на атакуемой системе. Я рекомендую обратить внимание и запомнить, что на портах 1433 и 1434 протоколов TCP и UDP работает Microsoft SQL Server и Microsoft SQL Monitor. На порту 1512 работают WINS (Microsoft Windows Internet Name Service, служба имен интернета для сетей Windows), которая далеко не без изъяна. Я весь файл приводить не буду, потому что он большой, а вы и без меня сможете в любой момент его посмотреть. Но существуют программы, которые не доверяют стандарту и проверяют полученную информацию самостоятельно. Как это определить? Есть несколько способов: по строке приветствия, которая возвращается при подключении к порту. Большая часть служб при подключении возвращает сообщение, которое содержит название и версию службы. Позже мы еще будем говорить о том, что это сообщение может быть подделано; по ответу на подключение или по ответу на команду. Например, подключившись к 80-му порту, можно попробовать отправить серверу HTTP-команду, и если сервер ответит корректно, то перед нами именно web-сервер. Если мы увидим ошибку, то нас пытаются обмануть; ♦ службы в ответ на подключения присылают разные пакеты. У некоторых пакетов есть достаточно уникальные метки, по которым мы можем с большой вероятностью сказать, что перед нами определенный сервис. После того как мы определили состояние первых 1024 портов, можно начинать сканировать порты свыше этого. Здесь стандартные службы встречаются редко. Зачем же тогда сканировать? А вдруг кто-то до вас уже побывал на этом месте и оставил открытую дверку или установил на сервер троянскую программу. Большинство троянских программ держит открытыми порты свыше 1024, поэтому если вы администратор и нашли открытый порт в этом диапазоне, необходимо сразу насторожиться. Ну а если вы взломщик, то нужно узнать имя троянской программы и найти для нее клиентскую часть, чтобы воспользоваться ею для управления чужой машиной. Среди служб, использующих порты выше 1024, встречаются и некоторые коммерческие, например СУБД (система управления базами данных). Дело в том, что номера из первой тысячи уже давно распределены и использовать какой-то из этого диапазона достаточно проблематично, поэтому современные службы эксплуатируют весь диапазон номеров до 65 535. Нередко можно увидеть даже web-службы, которые работают на порту 8080. По умолчанию используется 80-й порт, но когда по каким-то причинам его не получается задействовать, это число удваивают до 8080. Первые 1024 порта в ОС Linux обладают еще одним очень важным свойством: запустить службу, работающую на таком порту, может только пользователь с правами администратора (для UNIX-систем это пользователь с правами root). Таким образом система гарантирует, что службы, работающие на портах ниже 1024, запущены администратором. Они являются наиболее критичными с точки зрения безопасности сервера, поэтому рядовые пользователи не должны иметь права их запускать. Если после сканирования вы нашли программу, через которую можно получить полный доступ к серверу, то на этом взлом может закончиться. Жаль, что такое происходит очень и очень редко, и чаще всего нужно затратить намного больше усилий. Хорошо было во времена появления троянской программы Back Orifice, когда один хакер заражал компьютер пользователя, а другой без проблем мог воспользоваться уже готовым взломом. В настоящее время по интернету гуляет слишком большое количество троянских программ, которые используют разные порты и чаще всего даже позволяют настраивать номер порта, на котором они будут работать. А если серверная часть программы защищена паролем, то воспользоваться чужим трудом будет проблематично. С другой стороны, в современном мире большинство компьютеров оснащены сетевым экраном, который может не позволить воспользоваться даже работающей троянской программой. Сетевые экраны — мощное средство в мире обороны и серьезное препятствие для взломщика. Определение типа операционной системы Сканирование — это всего лишь начальный этап, который дает немного информации для размышления. Ведь мы рассматриваем безопасность web-серверов, а значит, нас больше всего интересует 80-й порт. Тогда зачем нам нужно сканировать остальные? Это поможет узнать, какая ОС установлена на сервере. Ведь если на сервере работает MS SQL Server, то там, скорее всего, стоит Windows. Желательно иметь сведения о версии, но это удается выяснить не всегда, да и на первых порах изучения системы можно обойтись без конкретизации. Главное — иметь четкое представление об используемой платформе: Windows, Linux, BSD, Mac OS или др. От этого зависит очень многое: какие программы могут быть установлены на сервере; какие команды можно выполнять; где находится информация о пользователях и их паролях; где может быть установлена ОС (в какой папке или в каком разделе); какие существуют уязвимости для данной ОС. Как определяется тип ОС? Для этого есть несколько способов. Помимо работающих на удаленной системе сервисах, о типе системы мы можем судить: по реализации протокола TCP/IP. Это низкоуровневый метод, который работает на уровне пакетов, передаваемых от клиента к серверу. В различных ОС по- разному организован стек протоколов. В основном этот вывод расплывчатый: Windows или Linux. Точную версию таким образом узнать невозможно, потому что в Windows 8 и 10 реализация протокола практически не менялась. В таком случае будет сложно определить разницу. Даже если программа определила, что на сервере установлен Linux, то какой именно дистрибутив, сказать будет сложно. И поэтому такая информация — это только часть необходимых данных для взлома; по ответам служб. Допустим, что на сервере жертвы есть анонимный доступ по FTP. Вам нужно всего лишь присоединиться к нему и посмотреть сообщение при входе в систему. По умолчанию в качестве приглашения используется надпись типа: "Добро пожаловать на сервер FreeBSD4.0, версия FTP-клиента Х.ХХХ". Если вы такое увидели, то еще рано радоваться, так как неизвестно, правда это или нет. Хороший администратор изменяет строку приветствия, чтобы не упрощать взломщику жизнь. Могут не просто изменить, но и вводить в заблуждение, когда на Windows-сервере появится приглашение, например Linux. В этом случае злоумышленник безуспешно потратит очень много времени в попытках взломать Windows, стараясь использовать ошибки Linux. Поэтому не очень доверяйте надписям и старайтесь их перепроверить другими способами; ♦ по социальной инженерии. Если вычислить адрес администратора или какого- то работника компании, то можно отправить ему на почту пресс-релиз о якобы найденной уязвимости в ОС и сделать ссылку на описание уязвимости для разных версий. Дальше просто смотрим, если кто-то кликнул по одной из ссылок и по какой именно. Чтобы вас не обманули, обязательно обращайте внимание на используемые на сервере службы. Например, в Linux, скорее всего, не будут работать web-страницы, созданные по технологии ASP. Такие вещи подделывают редко, хотя это и возможно — достаточно использовать расширение asp для хранения PHP-сценариев и перенаправлять их интерпретатору PHP. Таким образом хакер увидит, что на сервере работают файлы ASP, но реально это будут PHP-сценарии. Определение имен работающих служб Определение типа ОС — это только начальный этап. После этого переходим к определению имен служб, которые работают на сервере. Если открыт 80-й порт, то необходимо узнать, какой установлен web-сервер: Apache или IIS. От используемой службы и ее версии зависит, как ее можно взламывать. Например, некоторые версии определенных служб могут содержать одну ошибку, а другие версии — другую ошибку. А бывают даже случаи, когда ошибок вообще нет. Хотя нет, таких случаев практически не бывает. Ошибки, скорее всего, есть, просто их еще никто не нашел, и нужно поискать или подождать, когда найдут другие. Иногда хакеры определяют версию ОС или установленных служб по наличию ошибок. Например, если web-сервер IIS версии 5.0 содержал определенную ошибку при получении слишком большого пакета, то можно попытаться отправить такой пакет, и если в ответ мы получим ошибку, то перед нами именно IIS 5.0. Вроде бы все хорошо и метод определения достаточно точный, но не совсем. Дело в том, что наличие ошибки может зависеть и от конфигурации ОС или самой службы. Известная вам ошибка может проявляться только при определенных условиях, и если ошибка не проявилась, то, возможно, не соблюдены необходимые условия (см. разд. 1.3.4). Защищающая сторона должна дать противнику как можно меньше информации, чтобы у него было меньше возможности взломать сервер. Да, прятать нужно не только название ОС, но и названия служб. Например, если подделать Apache под IIS, то хакер будет пытаться взломать не тот web-сервер, используя не те программы, что усложнит его задачу. Задача хакера — четко определить, что же он взламывает. Без этого производить в дальнейшем какие-либо действия будет сложно, потому что он даже не будет знать, какие команды ему доступны после вторжения на чужую территорию, где искать системные файлы и пароли, а также какие исполняемые файлы нужно загружать на сервер. В случае с web-серверами должен работать как минимум web-сервер, который чаще всего откликается на портах 80, 443 или 8080. Чтобы проверить, нужно сначала узнать реальный IP-адрес сайта, с которому мы можем подключиться. Самый простой способ узнать IP — выполнить ping с флагом -f: ping -f flenov.ru В результате вы должны увидеть что-то типа: flenov.ru [162.241.30.65] with 32 bytes of data: Reply from 162.241.30.65: bytes=32 time=164ms TTL=48 Для некоторых настроек ping может не работать. В таких случаях можно выполнить команду nslookup c параметром class=A и указанием домена: nslookup class=A flenov.ru S e rve r: UnKnown Address: 162.241.30.65 Итак, мы нашли IP-адрес 162.241.30.65. Почему именно IPv4 адрес? В принципе можно работать и с 6-й версией, просто из личного опыта могу сказать, что про 4-ю версию проще найти информацию в Google. Сейчас почти все сайты имеют адрес 4-й и 6-й версии, и хотя нам уже давно обещали переход на 6-ю, это произойдет еще не скоро, они оба будут сосуществовать вместе. Теперь надо узнать чуть больше информации про этот адрес. Вбиваем в Google этот адрес или воспользуемся следующей ссылкой: https://ipgeolocation.io/browse/ip/ 162.241.30.65. В результате вы должны увидеть что-то похожее на рис 1.1.
|