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

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

Содержание


FTP, порты 21 и 20
Связывание с портом
ССЫЛКА Более подробное обсуждение брандмауэров и маскировки IP содержится в главах 16 и 18 соответственно.
Подобный материал:
1   ...   40   41   42   43   44   45   46   47   ...   101

Заключение


В данной главе рассказывается о том, каким образом Linux обеспечивает работу большого количества служб и при этом не расходуется значительный объем системных ресурсов. Используя метадемон Интернета (inetd), вы можете организовать эффективное функционирование в системе нескольких небольших и быстрых служб. Вы также узнали, каким образом при помощи файла inetd.conf настраивается поведение всех этих служб и метадемона inetd.

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

12Уязвимые службы и протоколы


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

- что такое сетевые службы;

- уязвимые места сетевых служб;

- что такое серверные приложения.

После завершения установки любого комплекта поставки Linux сразу же после самой первой загрузки системы по умолчанию в ней будет функционировать набор служб (см. раздел, посвященный утилите netstat в главе 10). Состав запущенных в системе служб определяется многими факторами, например, набором пакетов, выбранных вами для установки. В большинстве случаев, если вы указываете программе установки установить в системе некоторую службу, скорее всего, после загрузки системы по умолчанию эта служба будет функционировать с использованием конфигурации по умолчанию. Таково стандартное поведение большинства дистрибутивов Linux. Комплект поставки Debian позволяет настраивать некоторые из устанавливаемых служб в процессе установки, однако далеко не все. Таким образом, если вы устанавливаете в системе некоторую службу, будьте готовы к тому, что по умолчанию она будет запущена. Вы должны позаботиться о том, чтобы эта служба была должным образом настроена. Если вы не намерены предоставлять какую-либо службу в распоряжение пользователей, удалите соответствующий пакет из системы. Если в системе функционирует большое количество служб, вы должны учитывать, что каждая их них является потенциальной угрозой безопасности. Любая сетевая служба, включая службы, которые, на первый взгляд, не являются сетевыми, имеет модуль ожидания поступления сообщений через TCP-порт, UDP-порт или RPC-порт. В данной главе я расскажу о некоторых традиционных службах и связанных с ними потенциальных проблемах.


СОВЕТ

Нарушить систему защиты через сеть можно только через доступные службы. Службы, которые не функционируют в системе, не могут быть использованы для взлома. Если вы видите, что в вашей системе работает некоторая служба и вы не можете сказать, зачем она нужна, отключите ее или сделайте доступной только для локального сетевого узла localhost (более подробно об этом рассказывается в главе 16). Этим вы существенно снизите риск.


Службы, связанные с портами, номера которых меньше 1024, считаются привилегированными. Это означает, что связать службу с портом, номер которого меньше 1024, можно только на уровне привилегий root. Иными словами, любая служба, использующая любой порт с номером меньшим 1024, работает от имени пользователя root. Если вы не предпримете должных мер безопасности, защита вашей системы может оказаться нарушенной. Порты с номерами больше 1024 могут использоваться на любом уровне привилегий, однако их можно использовать и на уровне привилегий root. To есть даже если служба связана с портом, номер которого больше 1024, это не означает, что она абсолютно безопасна. В данной главе все же мы будем рассматривать только те службы, которые связаны с привилегированными портами.

FTP, порты 21 и 20


Протокол FTP (File Transfer Protocol) используется для обмена файлами между двумя компьютерами. Сервер FTP не обязательно постоянно находится в активном состоянии. Ожидание поступления запроса через TCP-порт с номером 21 осуществляется демоном inetd, и серверное приложение FTP запускается тогда, когда в этом возникает необходимость (то есть когда к системе пытается подключиться клиент FTP). Если вы используете tcpd, выполняются действия, связанные с tcpd, и если клиент не блокируется, он будет подключен к серверу FTP и ему будет передано приглашение на вход в систему.

Часто когда говорят об FTP, имеют в виду клиентское или серверное приложение, обеспечивающее выполнение связанных с FTP функций на одной или на другой стороне. Но на самом деле FTP — это протокол. Следует отметить, что любое серверное приложение, будь то ftp, telnet и т. п., использует свой собственный протокол обмена данными.


ПРИМЕЧАНИЕ

Протокол — это набор правил, определяющих, каким именно способом осуществляется обмен данными между двумя системами (протокол означает правила). Таким образом, каждая отдельная служба обладает своим собственным коммуникационным протоколом.

По сравнению с большинством других серверов сервер FTP функционирует необычно. Вдобавок к стандартному соединению через порт 21 этот сервер открывает дополнительное соединение, но только тогда, когда в этом возникает необходимость. Вся процедура выполняется следующим образом.
  • Клиент пересылает запрос на подключение, направленный на порт 21 сервера.
  • Выполняется последовательность действий SYN-ACK, и (если вы используете
    tcpd) демон tcpd осуществляет возложенные на него функции.
  • Если запрос на подключение не отвергается демоном tcpd, для ответа на этот
    запрос, поступивший через порт 21, запускается сервер FTP.
  • Клиент и сервер обмениваются информацией и начинают сеанс связи.


Активный сеанс FTP (называемый «активным» только для того, чтобы отличить его от «пассивного» сеанса) предусматривает использование порта 21 (с последующим переключением на случайно выбранный порт с номером большим 1024 для продолжения соединения) для пересылки между клиентом и сервером данных, связанных с подключением, а также команд. Но как только клиент отправляет серверу запрос на получение информации (перечень файлов в каталоге или содержимое некоторого файла), открывается еще один канал. Для этой цели используется порт данных FTP (ftp-data) — порт с номером 20. Сервер подключается к клиенту через порт 20 (соединение продолжается через случайно выбранный порт с номером большим 1024) и приступает к пересылке клиенту запрошенных им данных. Состояние передачи пересылается через порт 21.

Связывание с портом

В этой и во многих других книгах, посвященных функционированию сетей, часто употребляется выражение: «служба связана с портом» (service binds a port). Это означает, что программа, осуществляющая обслуживание запросов, создает соединение с этим портом. Для этой цели создается сокет, и программа ожидает поступления через этот сокет данных из сети. Для каждого порта в системе может быть создан только один сокет. Таким образом, две разных программы (или два экземпляра одной и той же программы) не могут быть связаны с одним и тем же портом. Однако одна программа может обслуживать одновременно несколько подключений к одному и тому же сокету. Для этого создаются дочерние процессы, каждому из которых передается очередное соединение. Таким образом, с портом связан только один процесс, который является родительским, а дочерние процессы занимаются обслуживанием запросов. Некоторые из служб связываются одновременно с несколькими портами (например Apache).

Если вы пытаетесь запустить еще один экземпляр уже работающей программы или другую программу, которая связывается с некоторым портом, с которым уже работает одно из функционирующих в системе приложений, система выведет сообщение об ошибке, извещающее вас о том, что порт уже связан. Один и тот же порт можно связать для передачи данных по протоколу TCP, равно как и по протоколу UDP в одно и то же время. Как правило, связывание портов выполняется для того, чтобы обеспечить доступ клиентов к работающим на сервере службам, однако некоторые порты связываются злоумышленниками как метки, указывающие на то, что система взломана. Полный перечень портов, используемых программами типа «троянский конь», а также портов-меток содержится на web-странице vits.com/nyheter9902.phpl.

Прочитав описание работы FTP, многие читатели, должно быть, скажут: «Ах вот почему при использовании клиента ftp напрямую у меня возникают проблемы и для скачивания файлов по протоколу FTP я вынужден использовать Netscape». Очень многие брандмауэры, и в особенности программное обеспечение, выполняющее маскировку адресного пространства IP (например, система Network Address Translation, NAT), разрешают устанавливать исходящие соединения через порты с номерами меньшими 1024, однако при этом запрещают устанавливать входящие соединения через эти порты. Что же происходит? Находясь под защитой брандмауэра (или в сети, использующей NAT), вы отправляете внешнему серверу FTP запрос на получение некоторого файла. Запрос является исходящим и направлен в порт 21 сервера, поэтому он беспрепятственно проходит через брандмауэр. После этого ваша система (клиент ftp) начинает ждать входящего соединения через порт 20. Сервер FTP пытается вступить с вами в контакт через порт 20, однако брандмауэр блокирует это соединение (оно является входящим и направлено в один из привилегированных портов). Если же вы работаете в сети NAT, то внешний сервер FTP просто не знает вашего внутреннего IP-адреса и поэтому отправляет запрос на подключение через порт 20 вашему брандмауэру NAT. А брандмауэр NAT просто не знает, кому на самом деле адресован этот запрос. Известно только, что сам брандмауэр не запрашивал соединения, и поэтому поступающие пакеты отбрасываются.


ССЫЛКА

Более подробное обсуждение брандмауэров и маскировки IP содержится в главах 16 и 18 соответственно.

Для передачи файлов по протоколу FTP браузер Netscape использует режим передачи, называемый пассивным. При этом, вместо того чтобы открыть дополнительный канал связи с клиентом, сервер пассивно ожидает, пока клиент (в нашем случае Netscape) начнет получать данные через порт 21. Этого же самого можно достичь, воспользовавшись входящей в комплект OpenLinux программой под названием pftp (passive ftp — пассивный ftp). Некоторые клиенты FTP поддерживают пассивный режим работы, который инициируется специальной командой.

Чтобы вы могли лучше представить себе этот процесс, воспользуемся клиентом telnet для подключения к серверу ftp и выполнения нескольких команд. По умолчанию клиент telnet использует порт 23, однако его можно настроить на подключение к порту 21 сервера. Взгляните на листинг 12.1, вы можете попробовать сделать то же самое самостоятельно.

Листинг 12.1. Соединение с сервером FTP при помощи клиента telnet

[david@volcan david]$ telnet chiriqui 21

Trying 192.168.0.2...

Connected to chiriqui.pananix.com.

Escape character is ']'.

220 chiriqui.pananix.com FTP server (Version wu-2.5.0(l) Tue Jul 27 18:42:33 MDT 1999)

ready. user david

331 Password required for david.

pass mypasswd

230 User david logged in.

help

214-The following commands are recognized (* =>'s unimplemented).

USER PORT STOR MSAM* RNTO NLST MKD COUP

PASS PASV APPE MRSQ* ABOR SITE XMKD XCUP

ACCT* TYPE MLFL* MRCP* DELE SYST RMD STOU

SMNT* STRU MAIL* ALLO CWD STAT XRMD SIZE

REIN* MODE MSND* REST XCWD HELP PWD MDTM

QUIT RETR MSOM* RNFR LIST NOOP XPWD 214 Direct comments to root@localhost. pasv

227 Entering Passive Mode (192,168,0,2.214,43) stat 211-chiriqui.pananix.com FTP server status:

Version wu-2.5.0(l) Tue Jul 27 18:42:33 MDT 1999

Connected to volcan.pananix.com (192.168.0.1)

Logged in as david

TYPE: ASCII, FORM: Nonprint: STRUcture: File; transfer MODE: Stream

in Passive mode (192,168,0,2,214,43) 0 data bytes received in 0 files 0 data bytes transmitted in 0 files 0 data bytes total in 0 files 45 traffic bytes received in 0 transfers 1113 traffic bytes transmitted in 0 transfers 1208 traffic bytes total in 0 transfers 211 End of status

221-You have transferred 0 bytes in 0 files.

221-Total traffic for this session was 1319 bytes in 0 transfers.

221-Thank you for using the FTP service on chiriqui.pananix.com.

221 Goodbye.

Connection closed by foreign host.


Проанализировав данное соединение, вы можете обнаружить, что в его рамках происходит множество интересных вещей. В первой строке инициируется сеанс telnet, однако вместо порта по умолчанию 23 используется порт 21. В самом начале соединения сервер сообщает клиенту некоторую информацию о себе самом. Благодаря этому вы можете получить информацию о типе сервера и номере версии, которая используется на удаленной системе. В нашем случае на удаленном узле с именем chiriqui используется разработанный в университете Вашингтона (Washington University) сервер wu-ftp версии 2.5.0(1), сборка которого была выполнена вечером 27 июля 1999 года в шесть часов сорок две минуты. Эта информация является чрезвычайно важной. Некоторые версии сервера wu-ftp содержат в себе ошибки, о которых давно известно множеству людей. В более поздних версиях этого сервера все эти ошибки устранены, однако если вы не выполнили своевременного обновления вашего сервера, злоумышленник может воспользоваться одной из этих ошибок и тем или иным образом взломать систему. Если вы поищете соответствующую информацию на разнообразных хакерских сайтах, вы сможете быстро узнать подробнее о данной версии сервера и ее уязвимых местах. Зачастую на подобных сайтах можно обнаружить даже программы, которые позволяют взломать систему, используя для этого описанные уязвимые места.

В следующих нескольких строках упоминается пользователь david. Как правило, клиент ftp просит вас ввести имя пользователя во время процесса подключения. Так как для подключения к FTP-серверу вы используете клиента telnet, а не ftp, вы должны самостоятельно передать серверу регистрационное имя. Далее следует напоминание о том, что вы должны ввести пароль. На следующей строке «pass mypasswd» этот пароль вводится и передается серверу. Обратите внимание, что пароль отображается на экране в том виде, в каком он показан в листинге, то есть в виде обычного текста. В отличие от telnet, клиент ftp блокирует отображение пароля. Для этой цели код клиента выполняет системный вызов, отключающий отображение символов на экране (как будто выполняется команда stty -echo). После того как пользователь введет пароль и нажмет на Enter, пароль пересыла-ется серверу, и выполняется системный вызов, аналогичный команде stty echo, который вновь включает отображение информации на экране.

Текст, приведенный в листинге, в точности соответствует той информации, которая передается через сетевой кабель в процессе обмена данными. Команды, которые вы набираете на клавиатуре, и текст, возвращаемый сервером, передаются через сеть именно так, как это показано в листинге. Иными словами, если во время сеанса FTP вы запустите утилиту tcpdump, вы сможете обнаружить среди сетевого трафика в точности этот же текст. Легко себе представить, насколько уязвима ваша система перед злоумышленником, который запустит утилиту tcpdump внутри вашей сети. Благодаря этому он получит возможность прочитать пароль доступа к FTP-серверу. На самом деле, если маршрутизатор, при помощи которого ваша сеть соединяется с другими сетями, пропускает внутрь вашей сети пакеты из других сетей (такие пакеты, которые на самом деле не предназначены для компьютеров вашей сети), используя tcpdump, вы сможете наблюдать, как через локальный для вас сегмент сети передается достаточно большое количество пар «имя_пользователя/пароль».

Вернемся к изучению листинга. По команде help сервер сообщает клиенту перечень поддерживаемых им команд. Для использования некоторых из них требуются дополнительные аргументы. Возможно, для выполнения той или иной команды нужно некоторое взаимодействие с клиентом, которое вы не в состоянии обеспечить. В конце листинга клиент получает статистическую информацию, а затем завершает сеанс FTP.


ПРИМЕЧАНИЕ

Если вы используете клиент telnet для подключения к серверу, не являющемуся сервером telnet, и при этом обнаруживаете, что вы не знаете что делать дальше — приглашение на ввод команды не появляется, — нажмите комбинацию клавиш Ctrl+] (как рекомендует подсказка «Escape charaster is ']'»). При этом вы получите доступ к приглашению telnet, в котором можете набрать quit для того, чтобы завершить рабочий сеанс.

По умолчанию анонимный доступ к FTP-серверу обеспечивается в случае, если для подключения используется имя пользователя anonymous или ftp. Пользователь anonymous — это синоним ftp. Если клиент получил возможность анонимного доступа, система делает для него корнем файловой системы домашний каталог ftp. Таким образом, пользователь как бы попадает в тюрьму. Иными словами, он не может перемещаться в какие-либо другие каталоги, отличающиеся от домашнего каталога ftp. Вся система для него выглядит как домашний каталог ftp. Пользователь не может переместиться выше по иерархии каталогов файловой системы. Символические ссылки, указывающие в другие части системы, не работают. Однако для того, чтобы обеспечить корректную работу, данная «тюрьма» должна обладать всем тем, чем обладает корень системы (более подробно об этом рассказывается в главе 14). Такая тюрьма обозначается английским термином change root jail (тюрьма с измененным корнем). Некоторые службы используют подобную тюрьму для того, чтобы ограничить возможности подключающихся к ним клиентов и уменьшить повреждения, которые могут быть нанесены взломщиком.

Если в одной системе вы запустите несколько (некоторую комбинацию) доступных для внешних клиентов служб, в системе безопасности могут возникнуть пробелы, которые не свойственны каждой из запускаемых вами служб по отдельности. В частности, если к одной и той же системе вы организуете доступ по протоколам FTP и HTTP, у вас может возникнуть проблема. Один из известных способов взлома предусматривает закачивание в систему некоторого файла, к которому в дальнейшем происходит обращение через HTTP-сервер (предполагается, что он неправильно настроен), такой как Apache. Организация как анонимного, так и пользовательского FTP-доступа также сомнительна с точки зрения безопасноети, если только система не является выделенным FTP-сервером и не используется для работы каких-либо других служб. В главе 3 обсуждается приемлемая конфигурация разрешений на доступ к каталогу входящих файлов FTP. Чтобы решить проблему, лучше всего использовать две различные системы — одна будет предназначена для FTP-доступа, а вторая — для HTTP-доступа. Вы можете также настроить HTTP так, чтобы разрешить клиентам только получать файлы, однако при этом ни один из клиентов не сможет использовать HTTP для передачи данных на сервер.

Чтобы снизить риск взлома, необходимо проверить параметры, заданные с использованием файла/ect/pam.d/ftp. Содержимое файла/ect/pam.d/ftp, используемое в OpenLinux по умолчанию, показано в листинге 12.2.

Листинг 12.2. Содержимое файла /ect/pam.d/ftp по умолчанию

auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/

ftpusers onerr=succeed

auth required /lib/security/pam_pwdb.so shadow null ok

auth required /Iib/security/pam_she11s.so

account required /lib/security/pam_pwdb.so session required /lib/security/pam_pwdb.so

Первая строка предписывает произвести поиск в файле /etc/ftpusers (на это указывает параметр file=/etc/ftpusers). Файл содержит имена пользователей (item=user), и этим пользователям запрещен доступ к системе (sense=deny). Если файл не существует или пользовательское имя в нем не указано, пользователь сможет получить доступ.

Вторая строка указывает на то, что требуется соответствие пары «имя_поль-зователя/пароль» (допускается использование пустых паролей — null). Третья строка проверяет, является ли командная оболочка пользователя одной из командных оболочек, перечисленных в файле /etc/shells. Последние две строки составлены так, как объяснено в главе 1.