Брандмауэры и специальное программное обеспечение 8 Часть 4
Вид материала | Реферат |
СодержаниеИспользование route 10 Стандартные службы Что такое службы |
- Муниципальное общеобразовательное учреждение средняя общеобразовательная школа №12, 174.77kb.
- Управление экономикой и создание экономических информационных систем Изучив данную, 148.93kb.
- Программное обеспечение ЭВМ, 209.59kb.
- Программное обеспечение вычислительной системы, 824.71kb.
- Учебная программа (Syllabus) Дисциплина: Интерфейсы компьютерных систем (iks 3304), 321.31kb.
- Реферат по Информационной безопасности Тема: «Антивирусы», 711.1kb.
- Пк программный комплекс; по программное обеспечение; ппо прикладное программное обеспечение, 208.41kb.
- Лекция 4 Обеспечивающие подсистемы асу. Математическое, программное, лингвистическое,, 59.3kb.
- Математическое и программное обеспечение систем оперативной оценки характеристик сложных, 247.51kb.
- Учебная программа (Syllabus) Дисциплина «Инструментальные средства разработки программ», 374.12kb.
Использование 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 (человек между). К счастью, реализовать подобное на практике удается далеко не каждому, поэтому среднестатистический дилетант с замашками компьютерного хакера на подобное, скорее всего, не способен.