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

Вид материалаРеферат

Содержание


Использование route
10 Стандартные службы
Что такое службы
Подобный материал:
1   ...   36   37   38   39   40   41   42   43   ...   101

Использование route


С точки зрения безопасности утилита route не представляет особого интереса, однако, как правило, она используется совместно с ifconfig, поэтому здесь я скажу об этой утилите пару слов. По умолчанию route отображает на экране сведения из таблицы маршрутизации с указанием символьных имен, однако в большинстве случаев IP-адреса оказываются более информативными, поэтому чаще совместно с route используется ключ -n.

Destination Gateway Genmask Flags Metric Ref Use Iface

208.143.150.9 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0

127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo

0.0.0.0 208.143.150.9 0.0.0.0 UG 0 0 0 pppO

Наиболее интересной колонкой является колонка Flags, в которой отображается состояние маршрута. Буква U указывает на то, что маршрут активен (Up). Буква Н указывает на сетевой узел (Host), а буква G — на шлюз (Gateway). Реже в этой колонке можно видеть буквы R, D и М, они обозначают «восстановленный» (Reinstate), «динамический» (Dynamic) и «модифицированный» (Modified) соответственно. Изредка в этой колонке можно увидеть символ восклицательного знака «!», который означает «отказ» (Reject). Это вовсе не означает, что на маршруте установлен брандмауэр. Символом восклицательного знака обозначается маршрут, через который не проходят пакеты. Таким образом, если вы посылаете пакеты с локального узла узлу или сети, напротив которых стоит символ воcклицательного знака, вы получите сообщение о том, что маршрут неактивен (Down). Однако это не означает, что по этому маршруту пакеты не могут передаваться в обратном направлении. Вы сможете принимать оттуда поступающие к вам пакеты UDP. По маршруту нельзя переправлять исходящие пакеты UDP, а также нельзя создать соединение TCP.

Заключение


В данной главе я очень коротко рассказал о сетях и некоторых аспектах сетевой безопасности. Вы узнали о том, как именно системы взаимодействуют друг с другом. Вы также узнали немного об утилите ifconfig и о параметрах, связанных с безопасностью.

10

Стандартные службы


В данной главе рассматриваются следующие вопросы:

  • что такое службы;
  • - утилита netstat.



Службы являются фундаментальной составляющей сетевой рабочей среды. Если бы не было служб, на любом компьютере можно было бы запускать не более одной программы, к которой клиенты могли бы подключаться через сеть по одному за один раз. Работа служб основана на концепции портов — специальной добавки к IP-адресу, позволяющей более точно идентифицировать метод взаимодействия клиента с сервером. Большинство пользователей знакомы с портами лишь поверхностно, так как при работе с сетью в большинстве случаев достаточно указать лишь имя или IP-адрес узла, а номер порта можно не указывать. Происходит это потому, что при подключении клиентов к серверам почти всегда используются номера портов по умолчанию. Таким образом, пользователь может не беспокоиться о выборе подходящего порта — необходимый порт выбирается автоматически. Однако знание о том, что такое порты и что такое службы, чрезвычайно важно для понимания основных концепций сетевой безопасности.

Что такое службы


Представьте себе некоторую организацию, размещенную в одном большом здании. Пусть эта организация обладает единым телефонным номером, специально предназначенным для обслуживания входящих звонков. Данный телефонный номер способен обслуживать множество поступающих звонков одновременно. Внутри организации поддерживается множество внутренних добавочных телефонных номеров — все они распределены между сотрудниками организации в индивидуальном порядке. Когда кто-нибудь звонит по единому телефонному номеру этой организации, голос автоответчика предлагает сообщить внутренний добавочный номер. После того как звонящий указывает этот внутренний номер, он автоматически соединяется с соответствующим сотрудником организации или с секретарем (если же введенный добавочный номер оказывается некорректным, автоматический автоответчик сообщает звонящему, что введенный им добавочный номер некорректен). Клиентское программное обеспечение работает приблизительно также. Общий единый телефонный номер организации подобен IP-адресу серверного компьютера, а внутренний добавочный номер — это номер порта. На сервере может работать множество серверных программ, каждой из которых соответствует свой собственный порт. Когда вы соединяетесь с сервером по указанному вами IP-адресу (или с использованием доменного имени, что почти одно и то же), ваша клиентская программа сообщает серверу номер порта, с которым она хотела бы соединиться. Номер порта по умолчанию хранится внутри клиентской программы, поэтому пользователю не приходится вводить его самостоятельно. Именно по этой причине многие пользователи и не подозревают о существовании портов.

Итак, для того чтобы установить соединение с сервером, необходимо указать IP-адрес этого сервера и порт, через который будет установлено соединение. Как правило, эти параметры указываются в формате: IP-адрес:Порт. Каждая из серверных программ настроена на использование определенного порта по умолчанию. Клиентская программа, предназначенная для взаимодействия с определенной серверной программой, хранит внутри себя номер порта по умолчанию для связи с серверной программой. Клиент пытается подключиться к серверу с использованием порта по умолчанию, и если сервер поддерживает подключение через указанный порт, начинается начальная стадия взаимодействия. На этой стадии сервер может потребовать от клиента аутентификации. Если клиент не может аутентифи-цировать себя или аутентифицирует себя неправильно, сервер может разорвать соединение. Однако следует учитывать то, что выполнение аутентификации без установки соединения невозможно. Иными словами, на момент выполнения аутентификации соединение между клиентом и сервером уже установлено.

Благодаря механизму портов вы можете запустить на одном серверном компьютере несколько серверных приложений (служб). Каждому из этих приложений будет соответствовать отдельный порт. Например, вы можете запустить FTP, telnet, HTTP и т. п. в одно и то же время. Если бы портов не было, на каждом компьютере можно было бы запустить только одну службу.

На рис. 10.1 графически показана работа этого механизма.

Когда вы хотите получить от компании какую-либо информацию, вы звоните в компанию. Используя рассмотренную аналогию, вы указываете добавочный телефонный номер отдела, с которым вы хотите связаться. Если вы хотите обсудить покупку продукта, вы соединяетесь с отделом продаж, но не с отделом технического обслуживания. Однако если у вас есть вопрос, связанный с техническим обслуживанием, вы звоните в отдел технического обслуживания, но не в отдел продаж. Каждое подразделение организации выполняет определенную функцию. Сотрудники одного отдела компании могут вообще ничего не знать о каком-либо другом отделе. Возможно, в разговоре по телефону сотрудники разных отделов будут использовать разный жаргон. Та же самая концепция действует и в отношении разных серверных приложений, однако в случае серверных приложений жаргоном является протокол, при помощи которого происходит обмен данными с клиентом.



В отношении компьютеров происходит то же самое. Вы сидите перед компьютером (который выполняет функции клиента), запускаете web-браузер и вводите имя компании, от которой вы хотите получить некоторую информацию. Предположим, вы ввели www.calderasystems.com. Клиент начинает поиск адреса web-узла компании Caldera Systems. В данном случае это будет IP-адрес. Когда IP-адрес обнаружен, браузер пытается установить связь с этим сетевым узлом. Для этого необходимо указать порт, через который будет установлена связь. Известно, что по умолчанию любой web-сервер использует порт 80. Это значение по умолчанию используется всеми серверами Web, так как служба WWW является общеизвестной службой (Well Known Service, WKS) и, как для любой другой общеизвестной службы, ей поставлен в соответствие конкретный стандартный номер порта. Для упрощения процедуры подключения номер порта 80 хранится внутри программы web-браузера и используется по умолчанию, поэтому вам не потребуется вводить его вручную. Вы также не сможете использовать web-клиент (то есть браузер) для соединения с сервером telnet или почтовым сервером, так как эти серверы используют совершенно другой протокол и совершенно другой набор правил коммуникации. Таким образом, коммуникация между web-клиентом и сервером telnet невозможна (позже будет показано, что это утверждение не совсем истинно). Это все равно, как если бы вы соединились с отделом продаж и попытались бы с помощью сотрудников этого отдела решить возникшую у вас техническую проблему. Подобный обмен данными вряд ли был бы полезным для вас.

Теперь, должно быть, вы понимаете, что порт является столь же важной частью коммуникационного процесса, как и IP-адрес. Давайте заглянем внутрь файла /etc/ services, в котором перечислены некоторые общеизвестные службы:

# SNetBSD: services,v 1.18 1996/03/26 00:07:58 mrg Exp $
#
  • Network services, Internet style
    #
  • Note that it is presently the policy of IANA to assign a single well-known
  • port number for both TCP and UDP; hence, most entries here have two entries
  • even if the protocol doesn't support UDP operations.
  • Updated from RFC 1340, "Assigned Numbers" (July 1992). Not all ports
  • are included, only the more common ones.
    #

# from: @(#)services 5.8 (Berkeley) 5/9/91
#

tcpmux 1/tcp # TCP port service multiplexer

echo 7/tcp

echo 7/udp

discard 9/tcp sink null

discard 9/udp sink null

systat 11/tcp users

daytime 13/tcp

daytime 13/udp

netstat 15/tcp

qotd 17/tcp quote

msp 18/tcp # message send protocol

msp 18/udp # message send protocol

chargen 19/tcp ttytst source

chargen 19/udp ttytst source

ftp-data 20/tcp # default ftp data port

ftp 21/tcp

ssh 22/tcp

ssh 22/udp

telnet 23/tcp

# 24 - private
smtp 25/tcp mail

# 26 - unassigned

time 37/tcp timserver

time 37/udp timserver

rlp 39/udp resource # resource location

nameserver 42/tcp name # IEN 116

whois 43/tcp nicname

domain 53/tcp nameserver # name-domain server

domain 53/udp nameserver

mtp 57/tcp # deprecated

bootps 67/tcp # BOOTP server

bootps 67/udp

bootpc 68/tcp # BOOTP client

bootpc 68/udp

tftp 69/udp

gopher 70/tcp # Internet Gopher

gopher 70/udp

finger 79/tcp

www 80/tcp http # WorldWideWeb HTTP

www 80/udp # HyperText Transfer Protocol

link 87/tcp ttylink

kerberos 88/tcp krb5 # Kerberos v5

kerberos 88/udp

# 100 - reserved

hostnames 101/tcp hostname # usually from sri-nic

rtelnet 107/tcp # Remote Telnet

rtelnet 107/udp

pop2 109/tcp pop-2 postoffice # POP version 2

pop2 109/udp

рорЗ 110/tcp pop-3 # POP version 3

рорЗ 110/udp

sunrpc 111/tcp

sunrpc 111/udp

auth 113/tcp authentication tap ident

sftp 115/tcp

uucp-path 117/tcp

nntp 119/tcp readnews untp # USENET News Transfer Protocol

ntp 123/tcp

ntp 123/udp # Network Time Protocol

netbios-ns 137/tcp # NETBIOS Name Service

netbios-ns 137/udp

netbios-dgm 138/tcp # NETBIOS Datagram Service

netbios-dgm 138/udp

netbios-ssn 139/tcp # NETBIOS session service

netbios-ssn 139/udp

imap2 143/tcp imap # Interim Mail Access Proto v2

imap2 143/udp

snmp 161/udp # Simple Net Mgmt Proto

snmp-trap 162/udp snmptrap # Traps for SNMP

xdmcp 177/tcp # X Display Mgr. Control Proto

xdmcp 177/udp

bgp 179/tcp # Border Gateway Proto.

bgp 179/udp

irc 194/tcp # Internet Relay Chat

irc 194/udp

at-rtmp 201/tcp # AppleTalk routing

at-rtmp 201/udp

at-nbp 202/tcp # AppleTalk name binding

at-nbp 202/udp

at-echo 204/tcp # AppleTalk echo

at -echo 204/udp

at-zis 206/tcp # AppleTalk zone information

at-zis 206/udp

z3950 210/tcp wais # NISO 239.50 database

z3950 210/udp wais

wais ipx 213/tcp # IPX

ipx 213/udp

imap3 220/tcp # Interactive Mail Access

imap3 220/udp # Protocol v3

#

# UNIX specific services

#

exec 512/tcp

biff 512/udp comsat

login 513/tcp

who 513/udp whod

shell 514/tcp cmd # no passwords used

syslog 514/udp

printer 515/tcp spooler # line printer spooler

talk 517/udp

ntalk 518/udp

route 520/udp router routed # RIP

timed 525/udp timeserver

tempo 526/tcp newdate

courier 530/tcp rpc

conference 531/tcp chat

# temporary entry (not officially registered by the Samba Team!)
swat 901/tcp # Samba Web Administration Tool

#

# AppleTalk OOP entries (OOP: Datagram Delivery Protocol)
#

rtmp 1/ddp # Routing Table Maintenance Protocol

nbp 2/ddp # Name Binding Protocol

echo 4/ddp # AppleTalk Echo Protocol

zip 6/ddp # Zone Information Protocol

Чтобы не загромождать книгу, я несколько сократил файл services. Вы должны использовать файл services, который входит в состав используемого вами комплекта поставки Linux. Наиболее свежий перечень общеизвестных служб содержится в документе RFC 1340, однако в будущем этот документ наверняка будет заменен более новой версией.


ССЫЛКА

На прилагаемом к книге компакт-диске в подкаталоге col/security размещается программа под названием rfc, которую можно использовать для того, чтобы найти наиболее свежую версию интересующего вас документа RFC.

Вы можете добавлять в файл services новые службы и новые уникальные номера портов, однако при этом не следует добавлять в этот файл службы, которые уже в нем существуют. Например, вы можете захотеть использовать для службы www порт 8080, однако если вы добавите соответствующую запись в конец файла services, ничего не изменится, так как служба www уже связана с портом 80. Когда система Linux ищет соответствие между именем службы и номером порта, она просматривает этот файл с самого начала в направлении к концу и использует самую первую подходящую запись. Все последующие записи, содержащие подходящее имя службы, игнорируются.


ВНИМАНИЕ

Не следует удалять записи о WKS (Well Known Services) из файла /etc/services. Если вы удалите или закомментируете какую-либо строку, программы, нуждающиеся в соответствующей службе, не смогут к ней обратиться.

Удаление WKS из файла /etc/services — тоже плохая идея. Файл sercices содержит важную информацию о соответствии имен и портов служб, и многие программы и утилиты обращаются к этому файлу. Если вы измените имя или номер порта WKS, вы можете нарушить работоспособность соответствующих служб. Однако вы можете добавлять новые службы и ставить им в соответствие не использующиеся номера портов. Во-первых, благодаря этому утилиты наподобие netstat смогут преобразовывать номера портов в символьные имена служб, а во-вторых, некоторые службы не могут работать в случае, если в файле /etc/services не будет соответствующей записи.

Относительно служб следует сделать важное замечание: в операционной среде Linux все порты с номерами ниже 1024 рассматриваются как привилегированные. Только учетная запись root (UID 0) может выполнить связывание служб с этими портами. Любые неиспользуемые порты с номерами выше 1024 могут использоваться кем угодно. Вообще некоторые «неофициальные» общеизвестные порты есть и в диапазоне выше 1024. Такие порты используются по всеобщему соглашению, а не в рамках жестко заданного стандарта, определенного в RFC, поэтому официальный документ RFC не содержит сведений об этих портах. Одним из таких портов является порт 8080, который часто используется в качестве пользовательского порта web-сервера. Существует также несколько исключений из данного правила. Например, протокол X, тот самый, который используется для функционирования графического интерфейса GUI вашей системы, использует порты с номерами 6000-6010. Это происходит потому, что протокол X не является защищенным, и поэтому для него нет необходимости выделять один из портов из диапазона 0-1024.

Всего доступно для использования 65 536 портов. Номера портов выше 65 535 использовать не следует. Это связано с тем, что для портов существует такая же проблема «зацикливания», как и для идентификаторов UID. Иными словами, для хранения номера порта используется 16 бит. В переменной размером 16 бит можно хранить число от 0 до 65 535. Если вы попытаетесь записать в эту переменную число большее, чем 65 535, то на самом деле в нее запишется число из начала диапазона номеров портов. Например, при попытке записать в переменную число 65 700 на самом деле в переменную запишется число, равное разнице: 65 700 минус 65 536, то есть 164, а это номер из диапазона привилегированных портов. Конечно же, для осуществления подобного обхода системы защиты требуется модификация исполняемого кода системы, однако это известный трюк, который иногда срабатывает.


ПРИМЕЧАНИЕ

Раз мы заговорили об атаках, хочу рассказать вам о том, что некоторые номера портов используются взломщиками в качестве «ключевых слов», или «маркеров». Например, очень часто приходится сталкиваться с портами 31337 или 31173 или какими-либо подобными комбинациями. Попробуйте заменить в этих числах цифру 3 на букву «е», цифру 1 на букву «I» или «i», а цифру 7 на букву «t». Вы увидите вариацию слова «elite» — элита. Если вы обнаружите, что ваша система открыла один из этих портов для обслуживания удаленных клиентов, можете быть уверены в том, что ваша система подверглась атаке и оказалась взломанной.

Некоторые читатели могут подумать, что 65 000 портов — это чрезмерно много. Однако на самом деле это не так. Вспомним описание формирования соединения TCP на основе последовательности SYN-ACK. Клиент обращается к серверу с запросом, сервер сообщает ему случайно выбранный номер порта с номером выше 1024, через который информация будет пересылаться обратно клиенту. Более подробно об этом рассказывается в следующем разделе «Утилита netstat». Таким образом, каждое соединение TCP на самом деле использует два порта. Например, если вы имеете дело с 30-ю одновременными подключениями к службе www вашей системы, фактически в системе будет задействован 31 порт: 30 из них будут случайно выбранными портами с номерами выше 1024, а один — порт 80, назначенный службе www по умолчанию. Именно благодаря случайно выбранным портам и порядковым номерам пакетов система получает возможность отслеживать 30 соединений в одно и то же время и обеспечивать их раздельное функционирование. Если вы видите в этом уязвимое место, значит, вы начинаете думать как взломщик — именно так, ставя себя на их место, и следует бороться со злоумышленниками.

Идентифицировать адреса IP и порты, используемые для соединения между двумя системами, — это не такая уж и сложная задача, однако чтобы получить возможность «вставить» себя между двумя системами, взломщик должен угадать код последовательности. Для большинства систем Unix это чрезвычайно сложная задача. Однако некоторые системы для генерации изначального порядкового номера пакета используют функцию, основанную на времени. В этом случае подобрать нужный порядковый номер существенно проще. Атаки такого характера называют man in the middle (человек между). К счастью, реализовать подобное на практике удается далеко не каждому, поэтому среднестатистический дилетант с замашками компьютерного хакера на подобное, скорее всего, не способен.