Брандмауэры и специальное программное обеспечение



Pdf просмотр
страница40/42
Дата15.02.2017
Размер6.16 Mb.
Просмотров3467
Скачиваний0
ТипАнализ
1   ...   34   35   36   37   38   39   40   41   42
Программа courtney
Программный пакет courtney — это средство наблюдения за сетью, написанное на Perl в лаборатории
Lawrence Livermore Laboratory университета Калифорнии для Департамента энергетики Соединенных
Штатов в 1995 году. Программа courtney появилась на свет почти сразу же после того, как авторы программного пакета SATAN решили предоставить свое творение для публичного использования.
Программа SATAN (Systems Administrator's Tool to Assess Networks — инструмент системных администраторов для оценивания сетей) была первым программным средством, предназначенным для сканирования систем.
После того как программа SATAN стала доступной для всеобщего использования, многочисленные сетевые узлы стали подвергаться частым атакам злоумышленников. Администраторы узлов, оказавшиеся достаточно проницательными для того, чтобы приступить к просмотру журналов в поисках следов сканирования, стали замечать взаимосвязь между сканированием и попытками взлома.

ПРИМЕЧАНИЕ

Многие администраторы, включая автора этой книги, считают, что сканирование портов — это атака.
Единственной целью сканирования портов является обнаружение уязвимых мест системы, а единственной целью
поиска уязвимых мест системы является намерение взломать эту систему. К узлам, с которых осуществляется
сканирование портов, следует проявлять особенное внимание. Адреса этих узлов следует помечать или блокировать.
Сканирование портов должно осуществляться только с разрешения администратора сканируемого узла.
Чтобы запустить пакет courtney, необходимо установить в системе библиотеку libpcap и программу tcpdump. Программа tcpdump входит в стандартный комплект OpenLinux, однако библиотека libpcap там отсутствует. Программа courtney запускает tcpdump и фильтрует вывод этой утилиты при помощи libpcap, сканируя поток в поисках определенных шаблонов. Подробнее о том, как работает courtney, будет рассказано далее.
Программа tcpdump переводит вашу сетевую карту Ethernet в смешанный режим (promiscuous mode), то есть режим прослушивания сети. Такой подход является палкой о двух концах — его можно использовать как во благо, так и для причинения вреда. Благодаря смешанному режиму вы можете читать содержимое всех пакетов, передаваемых через сетевой кабель, вне зависимости от того, адресованы ли эти пакеты вашей системе или нет. Таким образом, если за пределами вашей внутренней сети, в зоне, не защищенной брандмауэром, работают web-сервер, анонимный FTP-сервер, сервер DNS и почтовый сервер, вы можете запустить courtney на любом из них (или вообще на каком-нибудь другом сервере) и наблюдать за атаками, которые направлены против любого из этих серверов.
Однако режим прослушивания сети обладает и недостатками. Карта, работающая в этом режиме, не игнорирует ни одного пакета, передающегося через сеть. Именно так работают злоумышленники, пытающиеся получить доступ к информации, которая им не предназначена. Программа courtney, так как она написана на Perl, может быть легко модифицирована таким образом, чтобы ее можно было использовать для перехвата передаваемых через сеть пользовательских имен и паролей. Из главы 12 вы знаете, что клиент FTP ставит перед пользовательским именем метку USER, а перед паролем — метку
PASS, courtney можно настроить на поиск таких пакетов и пересылку их по определенному почтовому адресу. Существуют и другие неприятные обстоятельства. Операционная система Linux больше не уязвима для атак типа big ping, однако эта атака может оказаться действенной в отношении других платформ, на которых можно запустить courtney. Для одной из таких платформ достаточно принять последний пакет big ping -и в результате ядро этой ОС подвисает. Таким образом, на любое программное обеспечение, переводящее сетевую карту в прослушивающий режим, следует смотреть с подозрением. Такое программное обеспечение следует использовать только на безопасных надежных системах. Безопасной является система, к которой обычные пользователи не подключаются ежедневно. Благодаря этому пользователи не могут воспользоваться той информацией, которую извлекает из сети работающая в прослушивающем режиме сетевая карта. Брандмауэр можно считать безопасной системой, однако переключение его сетевых карт в прослушивающий режим не рекомендуется.
Запустив courtney, обратите внимание на список процессов. То, что вы увидите, будет напоминать содержимое листинга 25.1.
Листинг 25.1. Фрагмент списка процессов (ps axww), в котором показаны courtney и tcpdump pts/1 S 0:00 perl /usr/sbin/courtney pts/1 S 0:03 tcpdump -1 ? (icmp[0] — 8 ) or ? (port sunrpc) or ?
((port (1 or 10 or 100 or 1000 or 5000 or 10000 or 20000 or 30000) or ? (port (6000 or 6001 or 6002 or
6010 or 6011 or 6012)) ) and ? (tcp[13] & 18 = 2) ) or ?
(port (tcpmux or ?? echo or ?? discard or ?? systat or ?? daytime or ?? netstat or ?? charger, or ?? ftp or ?? telnet or ?? smtp or ?? time or ?? whois or ?? domain or?? 70 or ?? 80 or ?? finger or ?? tftp or ?? login or ?? uucp or ?? printer or ?? shell or ?? exec or ?? name or ?? biff or ?? syslog or ?? talk) and ?
(tcp[13] & 18 = 2)
) ?
Таким образом, видно, что courtney фильтрует все потоки данных, которые видит tcpdump, и сравнивает их со списками стандартных служб. Наименования этих служб видны в составе листинга 25.1.
Этот аспект courtney при желании можно модифицировать. Весь код этой программы написан на Perl, поэтому его легко можно изменить. Программа занимает не так уж и много места, однако из соображений экономии я покажу вам лишь наиболее интересные места. Листинг 25.2 показывает часть кода courtney, которую при желании можно модифицировать.

Листинг 25.2. Фрагмент сценария Perl под названием courtney, в котором показаны отслеживаемые службы
@assoc_list =( 'sunrpc',
'icmp',
'ttime1,
'telnet',
'smtp',
'ftp', 'whois',
'domain',
'gopher',
'www',
'finger', 'exec', 'login', 'shell',
'printer',
'uucp', 'tcpmux',
'echo', 'di scard', 'systat'.
'daytime', 'netstat', 'chargen', 'tftp',
'name',
'biff',
'syslog',
'talk',
'portscan',
'xwindows' );

Если какая-либо из перечисленных здесь служб не упомянута в файле /etc/ services, сценарий courtney завершает работу, выведя на экран сообщение об ошибке. Если по какой-либо причине вы удаляете запись о службе из файла /etc/ services, вы либо должны удалить имя этой службы из массива assoc_list, либо вместо имени указать номер порта для данной службы.
Чтобы обнаружить попытку сканирования, программа Courtney сравнивает адреса-источники узлов, подключающихся к различным портам. Для этого Courtney создает список узлов, пытающихся подключаться к портам. Если за определенный промежуток времени осуществляется слишком большое количество попыток соединения со слишком большим количеством разных портов, Courtney делает вывод о том, что система находится под атакой.
По каким признакам Courtney определяет, что количество соединений слишком большое? Для этого используются два фактора: количество портов, к которым подключается один и тот же узел, и количество портов, подключение к которым осуществлено за некоторый период времени. Эти два фактора показаны в листинге 25.3.
Листинг 25.3. Параметры, при помощи которых courtney обнаруживает атаку
$UDATE_INTERVAL =5: # обновлять информацию о сетевой узле
#каждые X минут
$OLD_AGE =7;
# стирать записи об узлах,
#если эти записи старше X минут.
$HIGH_THRESHOLD=15; # тяжелая атака "SATAN"
$LOW_THRESHOLD =9; # нормальная атака "SATAN"
По умолчанию courtney пытается обнаружить узел (адрес-источник), который подключается к более чем девяти службам в течение менее чем семи минут или к более чем 15-ти службам в течение менее чем семи минут. Эти узлы идентифицируются сценарием как узлы, осуществляющие нормальную или тяжелую атаку соответственно.
В системе Linux программа courtney распознает три различных типа сканирования: connect, SYN stealth и FIN stealth. Некоторые из операционных систем не реагируют на эти виды сканирования и даже не видят их (в этом случае courtney не будет их регистрировать). Это связано со способом, который используется ядром для обработки принимаемых пакетов. В системе Linux, в которой используется ядро версии 2.2.x, ядро реагирует на все эти виды сканирования, поэтому courtney будет регистрировать все подобные попытки. Более подробное описание этих типов сканирования содержится в разделе, посвященном программе nmap.
Теперь, когда вы знаете, по каким признакам программа courtney определяет факт нападения на вашу систему, вы можете представить себе, в каких ситуациях courtney не сможет обнаружить действия злоумышленников. Иными словами, вы можете представить себе уязвимые места courtney. Прежде всего, сценарий courtney чувствителен к скорости сканирования. Если сканирование осуществляется в течение нескольких часов (как это бывает при выполнении сканирования одним из способов stealth), более старые записи будут удаляться из таблицы соединений и таким образом, не будут вызывать «тревогу». Например, если атакующий будет проверять шесть портов каждые 15 минут, он сможет без труда избежать обнаружения. Программа courtney не сможет обнаружить злоумышленника также в случае, если он осуществит «сканирование» только одного порта.
Второй недостаток courtney связан с тем, что злоумышленник может изменить адрес-источник отправляемых им пакетов (или использовать для сканирования ftp proxy). В этом случае courtney сообщит вам о попытке сканирования, однако источник атаки будет указан неправильно. Иными словами, вы будете смотреть в одну сторону, в то время как атака будет исходить с другой стороны. Скорее всего, вы блокируете доступ из сети evil.net, в то время как на самом деле сканирование осуществляется из сети archevil.net.
Можно ли преодолеть эти ограничения courtney? Определенно, вы можете менять значения любых присутствующих в исходном коде этой программы переменных, однако при этом вы должны хорошо понимать, к чему это может привести.
Начнем с переменной времени. Наверное, это наиболее безобидная переменная, значение которой вы можете изменить. Как правило, при достаточно быстром сканировании для проверки всех хорошо известных служб достаточно всего нескольких секунд. Несмотря на это, сокращать семиминутный интервал не рекомендуется. Вы можете попробовать увеличить его, однако при этом следует быть осторожным — courtney хранит массивы записей «источник:порт», «прием-ник:порт» и время в оперативной памяти, поэтому при достаточно большой нагрузке на сеть память может быстро заполниться. Не стоит забывать о том, что courtney просматривает весь трафик, передаваемый через сеть, а не только трафик, адресованный локальному узлу. Если вы запускаете courtney в сети, через которую передается большой объем данных, даже если эти данные не адресованы подсети, в которой работает courtney, эта программа все равно будет осуществлять их анализ.
Возможно, при помощи courtney вы сможете обнаружить атаки, исходящие из одной удаленной сети и направленные в другую удаленную сеть. Это может произойти в случае, если связанные с этим пакеты данных передаются через каналы вашей подсети (или переданы в вашу подсеть из-за неправильной настройки маршрутизатора Интернета, к которому вы подключены). Если вы увеличите продолжительность промежутка
времени, возможно, это не даст вам ничего, за исключением излишнего расхода памяти.
Помимо переменной, определяющей промежуток времени, вы можете изменить значения переменных, определяющих количество служб, к которым пытается подключиться некоторый удаленный узел. Вы можете присвоить переменной LOW_THRESHOLD меньшее значение, однако в этом случае courtney может поднять ложную тревогу. Представьте, например, что некто, находящийся вдали от дома, подключается к локальному провайдеру и затем пытается соединиться с сервером, работающим в сети своего офиса. Этот пользователь может копировать файлы через FTP в обоих направлениях, использовать POP для получения почты, его web- браузер по умолчанию может сразу же после запуска подключиться к домашней страничке офисного web- сервера, возможно, пользователь воспользуется telnet или ssh для того, чтобы соединиться с офисной сетью.
Таким образом происходит подключение к пяти различным сетевым службам. Скорее всего, все эти подключения будут выполнены в течение менее чем пяти минут. Если при этом вы уменьшите порог обнаружения попытки сканирования, программа courtney сообщит вам, что данный пользователь пытается сканировать вашу систему, в то время как на самом деле ничего подобного не происходит. Конечно же, вы можете помимо снижения порогов обнаружения сканирования также удалить некоторые из служб из массива
@assoc_list. Если вы хотите наблюдать лишь за одним или двумя портами, к которым не должен подключаться ни один из внешних пользователей, для этой цели лучше использовать tripwire. Если внимательно изучить содержимое массива @assoc_list, можно заметить, что в этом массиве не упоминаются некоторые из стандартных служб, например, РОР2, РОРЗ, ШАР и SSH. Возможно, будет лучше, если вы добавите эти службы в массив, особенно с учетом того, что служба ШАР является чрезвычайно привлекательной целью для взломщиков. Если вы добавляете в массив службу SSH, вы должны добавить ее также и в файл /etc/services вашей системы.
При запуске courtney можно использовать параметры командной строки. Наиболее часто используемым параметром является команда, предписывающая Courtney пересылать оповещения об обнаруженных атаках на некоторый почтовый адрес (обычно root). Именно так по умолчанию настраивается сценарий init К этим параметрам относятся:

-i имя_интерфейса — интерфейс, через который осуществляется прослушивание (если не указан, прослушивание осуществляется через интерфейс по умолчанию);

- -d — включение отладочного режима, то есть режима с выводом дополнительной диагностической информации;

-l — отключение протоколирования syslog (протоколируемые данные пересылаются пользователю);

-s — включение вывода информации на экран; ) -с — отображение сведений о соединениях;

-m адрес — оповещения об обнаруженных атаках пересылаются по электронной почте на указанный адрес;

-h — электронная справка.
Программа courtney зарекомендовала себя как чрезвычайно полезный инструмент, помогающий системным администраторам обнаруживать сетевые атаки. Программа courtney, в частности, позволяет обнаруживать попытки сканирования портов, производимые с использованием таких программных средств, как nmap, NESSUS, SAINT, GtkPortScan, а также многих других средств сканирования, распространяемых в наши дни через Интернет. Однако при использовании courtney вы должны помнить о том, что эту программу можно обмануть. Используйте ее, если вы того хотите, но при этом не забывайте о ее возможностях и ограничениях.
Программа nmap
Первое публично доступное средство сканирования сетей — программа с названием SATAN — было очень популярно и чрезвычайно эффективно при идентификации открытых портов на подключенных к сети системах. Сегодня программа SATAN утратила былую популярность по ряду причин, среди которых сложности при компиляции в среде Linux, а также проблемы получения работающих исполняемых файлов.
На смену SATAN пришли многочисленные аналогичные программные средства, так же как и SATAN, осуществляющие сканирование сетевых систем. Одной из наиболее популярных программ этой категории является программа с именем nmap, написанная человеком по прозвищу Fyodor (fyodor@dhp.com). Эта программа позволяет осуществлять сканирование несколькими разными способами, кроме того, пользователи, у которых возникли вопросы, для решения проблем могут воспользоваться списком рассылки. Web-узел, посвященный программе nmap, располагается по адресу http://www.insecure.org/nmap/.
В данной книге я не собираюсь обсуждать преимущества nmap и сравнивать эту программу с другими популярными в настоящее время средствами сканирования, такими как SAINT (дальнейшее
развитие SATAN), NESSUS, GtkPortScanner и проч. Большинство подобных программ обладают сходными возможностями и выполняют одну и ту же базовую функцию: сканирование сетевых узлов в поисках открытых портов. Чтобы сформировать свое собственное мнение об этих программах, вы можете попробовать каждую из них самостоятельно. Программа nmap является рядовым представителем этой категории программных средств, я выбрал ее из-за того, что эта программа является достаточно простой в использовании.
ВНИМАНИЕ
Программа nmap в состоянии выполнять действия, которые могут привести к деградации производительности
сети (Denial of Service) и нарушению работы жизненно важных серверов вашей сети. По этой причине программу
nmap следует использовать с осторожностью.
Программу nmap можно запускать от лица любого пользователя системы. Если вы установили nmap, но не хотите, чтобы ею мог воспользоваться любой желающий, вы должны настроить разрешения на доступ таким образом, чтобы ограничить доступ к этой программе. Следует учитывать, что некоторые из возможностей программы доступны только в случае, если она запущена от лица пользователя root. Это связано с тем, что программа выполняет запись в «чистый» сокет (raw socket) или формирует свой собственный сетевой пакет. В общем случае в среде Linux подобные действия разрешается выполнять только привилегированным пользователям.
В комплекте nmap присутствует графическая оболочка этой программы с названием xnmap
(разработанная также человеком по прозвищу Foydor), которую могут использовать те, кто не любит работать с командной строкой. Приятной особенностью этой графической оболочки является отображение командной строки nmap, которая будет использована в процессе работы. Автор программы эффективно использует цветовое оформление для того, чтобы отобразить статус пользователя: фоновый цвет диалогового окна становится розовым в случае, если программа запускается на уровне привилегий root, при этом в текстовом окне отображается сообщение о том, что доступны все возможности программы (all options granted); если же программа запускается от лица непривилегированного пользователя, фоновый цвет диалогового окна становится зеленым, а в текстовом окошке выводится сообщение о том, что некоторые из возможностей программы недоступны. Графический интерфейс программы nmap показан на рис. 25.1.
Диалоговое окно xnmap разделено на четыре части: раздел идентификации сетевого узла (Hosts), раздел параметров сканирования (Scan Options), раздел общих параметров (General Options) и раздел текстового вывода (Output). В строке адреса сканируемого узла Host(s) по умолчанию указывается адрес локального сетевого узла 127.0.0.1. В этой строке можно указать список сетевых узлов, идентифицировать которые можно при помощи имени, IP-адреса или диапазона IP-адресов. Диапазон IP-адресов указывается в виде номера сети и сетевой маски, например 123.34.67.00/24. Любое число можно заменить специальным символом звездочки (*), например 123.*.67.00/24. При этом будет выполнено сканирование всех сетей в IP- домене 123, однако в каждой из этих сетей будет сканироваться только подсеть 67. Диапазон адресов можно указывать также в виде начального и конечного значения, например 1-33. Такую форму можно указывать вместо любого из октетов IP-адреса, например 123.1-33.67.00/24. Наконец, интересующие вас численные значения можно указать через запятую, например 123.1,3,7,10.76.00/24. Имейте в виду, что в зависимости от используемой вами командной оболочки вы должны будете для указания символа звездочки использовать esc-последовательность. Вы также можете указать имя сетевого узла и маску.

Указав в графе Host(s) интересующие вас сетевые узлы, вы можете щелкнуть на кнопке Scan для того, чтобы инициировать сканирование. Помните, что в некоторых случаях сканирование может потребовать достаточно много времени. Если вы хотите остановить процесс сканирования, достаточно будет еще раз щелкнуть на кнопке Scan.
Параметры сканирования nmap
Программа nmap позволяет осуществлять сканирование девятью разными способами. Шесть из них перечислены в разделе Scan Options диалогового окна xnmap. Вариант connect() обеспечивает сканирование самым обычным способом. В этом случае программа nmap подключается к целевому узлу так, как будто для этого используется клиент telnet. При этом формируется соединение TCP, поэтому такое сканирование является сканированием TCP. Попытку сканирования, осуществляемую подобным образом, можно обнаружить даже самыми примитивными средствами обнаружения сканирования.
Способ сканирования SYN stealth работает несколько иначе. Вспомним последовательность создания соединения TCP: клиент посылает пакет по адресу узел: порт. В этом пакете установлен бит SYN. Целевой узел в ответ посылает клиенту пакет, в котором установлены биты SYN и АСК. Клиент отвечает на этот пакет, и процедура создания соединения успешно завершается. Однако в нашем случае вместо того, чтобы ответить на пакет SYN-ACK, программа nmap отправляет целевому узлу пакет с установленным битом
RST, при этом соединение немедленно разрывается. Если соединение не было создано, значит, попытку сканирования нельзя обнаружить. Почти. На самом деле подобные попытки сканирования могут быть обнаружены с использованием утилит courtney и Synlogger.
При сканировании способом Ping Sweep программа nmap отправляет целевому узлу запрос ping и ожидает поступления ответа. Если целевая система блокирует запросы ping при помощи IPChains или
NetFilter, программа nmap думает, что целевой узел не работает или отсутствует в сети. Следует учесть, что некоторые из методов сканирования, поддерживаемые программой nmap, предусматривают предварительную отправку целевому узлу запроса ping для того, чтобы убедиться, что целевой узел находится в рабочем состоянии. То есть в начале сканирования при помощи запросов ping программа nmap проверяет работоспособность узла и только после этого отправляет ему сканирующие запросы TCP. Как несложно догадаться, если запросы ping блокируются целевой системой, целевой узел не будет отвечать на запросы ping и программа nmap не будет выполнять его сканирование. Позже я расскажу о том, как можно сканировать узлы, блокирующие ping-запросы.
Способ сканирования UDP Port Scan работает несколько иначе. Вместо того чтобы пытаться установить соединение TCP, программа nmap пытается проверить наличие открытого порта UDP, для этого в этот порт посылается пакет UDP нулевой длины. Если сервер ожидает поступления пакетов через этот порт, он примет пакет, и ничего больше не произойдет. Если же сервер не ожидает поступления каких-либо данных через этот порт, целевой узел отправляет клиенту пакет RST (reset). Этот пакет сообщает клиенту, что необходимо разорвать соединение, так как данный порт не является открытым.

При использовании метода FIN Stealth программа nmap формирует специальный пакет, который в нормальных условиях используется клиентом для того, чтобы сигнализировать о разрыве соединения TCP.
Помните состояния TCP-соединения, отображаемые утилитой netstat? Передача или получение пакета FIN переключает соединение из состояния FIN_WAIT в состояние FIN_WAIT1 или FIN_WAIT2. Пакет FIN обычно посылается при завершении TCP-соединения для того, чтобы сигнализировать о его разрыве. Но если на момент приема этого пакета никакого соединения не существует? Если сервер ожидает поступления пакетов через данный порт, тогда он просто отбрасывает данный пакет, предполагая, что пакет был неправильно передан или произошла какая-либо другая ошибка. Однако если данный порт закрыт (в системе отсутствует серверная программа, ожидающая поступления данных через этот порт), целевая система отправит клиенту пакет RST.
Последний вариант сканирования, предлагаемый диалоговым окном xnmap, называется Bounce Scan
(сканирование с отражением). Этот способ позволяет использовать дыру (и очень большую дыру) в системе безопасности FTP-серверов, используя их в качестве proxy. Таким образом, данный вариант было бы точнее назвать FTP Proxy Scan. К счастью, FTP-сервер, входящий в комплект поставки Caldera
OpenLinux, блокирует захват привилегированных портов. Однако если вас мучает любопытство, вы можете попробовать сканировать адрес 127.0.0.1/24 и указать в графе адреса Bounce Scan адрес наподобие
127.1.1.1.
Из шести вариантов сканирования, предлагаемых в диалоговом окне xnmap, только два — connect() и
Ping Sweep — могут быть выполнены обычными, непривилегированными пользователями.
Помимо шести способов сканирования, предлагаемых xnmap, существуют еще три, которые можно инициировать из командной строки nmap. Два из них являются разновидностями сканирования FIN stealth.
Первый из этих двух способов называется Christmas Tree Scan (сканирование рождественской елки). Он подразумевает, что помимо бита FIN в сканирующем пакете устанавливаются еще два бита: URG и PUSH.
Второй способ называется Null Scan — в сканирующем пакете сбрасываются все биты.
Последним методом сканирования, поддерживаемым программой nmap, является RPC Scan — специализированный способ сканирования, позволяющий искать открытые порты RPC. Этот метод можно использовать совместно с другими способами сканирования.


Поделитесь с Вашими друзьями:
1   ...   34   35   36   37   38   39   40   41   42


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал