ГлавнаяРегистрацияВход Приветствую Вас Гость | RSS
   
Меню сайта
Разделы новостей
mp3player
Главная » 2007 » Июль » 8 » Уязвимые службы и протоколы (Часть 1)
Уязвимые службы и протоколы (Часть 1)
16:28
© Copyright 2005 Д. Бэндл



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

  • что такое сетевые службы;
  • уязвимые места сетевых служб;
  • что такое серверные приложения.

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

Если в системе функционирует большое количество служб, вы должны учитывать, что каждая их них является потенциальной угрозой безопасности. Любая сетевая служба, включая службы, которые, на первый взгляд, не являются сетевыми, имеет модуль ожидания поступления сообщений через TCP-порт, UDP-порт или RPC-порт. В данной главе я расскажу о некоторых традиционных службах и связанных с ними потенциальных проблемах.

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

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

FTP, порты 21 и 20

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

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

ПРИМЕЧАНИЕ.Протокол - это набор правил, определяющих, каким именно способом осуществляется обмен данными между двумя системами (протокол означает правила). Таким образом, каждая отдельная служба обладает своим собственным коммуникационным протоколом.

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

1. Клиент пересылает запрос на подключение, направленный на порт 21 сервера.

2. Выполняется последовательность действий SYN-ACK, и (если вы используете tcpd) демон tcpd осуществляет возложенные на него функции.

3. Если запрос на подключение не отвергается демоном tcpd, для ответа на этот запрос, поступивший через порт 21, запускается сервер FTP.

4. Клиент и сервер обмениваются информацией и начинают сеанс связи.

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

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

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

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

Прочитав описание работы 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(1) 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 CDUP

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(1) 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

quit

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 nullok

auth required /lib/security/pam_shells.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.

telnet, порт 23

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

Однако насчет telnet не стоит заблуждаться - сервер telnet является наиболее опасным из всех запущенных в системе серверов. Протокол telnet - это широко открытый протокол в том смысле, что любой желающий может использовать его для доступа к системе. Поток данных, передаваемых telnet, прост и незашифрован. Сервер telnet опасен даже в случае, если вы используете его в частной сети. Гораздо более безопасным (и более гибким) является протокол удаленного входа в систему (remote login), на котором основана работа службы ssh (Secure Shell).

Если в вашей системе работает сервер telnet, я настойчиво рекомендую вам остановить его. Если вы желаете понять, кто пытается обнаружить в вашей системе открытые порты telnet (как правило, этим занимаются малоопытные взломщики и дилетанты), вы можете устроить ловушку. Откройте порт 23 с использованием оболочки TCP (о программах категории TCP Wrapper рассказывается в главе 15) и при этом запретите доступ к службе или используйте сетевой фильтр, который позволит вам следить за содержимым пакетов, но при этом отбрасывать их (см. главу 16). Выбор за вами. Как и во многих других системах, в Unix существует несколько способов решить какую-либо проблему. Вы должны подобрать такой, который лучше всего соответствует вашей политике.

СОВЕТ.Утилита dig не описывается в данной книге, однако эта утилита оказывается весьма полезной в случае, если вы хотите следить за IP-адресами, являющимися источниками сообщений. Отдайте команду dig -x <неизвестный_IP-арес> и вы можете узнать владельца этого IP-адреса. Обладая этими сведениями, вы можете составить жалобу, адресованную интернет-провайдеру или владельцу сети. В состав жалобы можно включить содержимое журналов. Возможно, это подействует. Если нет, то вы можете блокировать данный IP-адрес или соответствующую ему подсеть.

smtp, порт 25

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

ПРИМЕЧАНИЕ.Все почтовые программы делятся на три категории. К первой из них относятся серверы SMTP, которые используются для передачи почты между системами. Такие программы называют агентами передачи почты (Mail Transfer Agent, MTA). Ко второй категории относятся почтовые клиенты, которые осуществляют чтение и передачу почты MTA. Такие программы называются почтовыми пользовательскими агентами (Mail User Agent, MUA). Часто для обмена почты между MTA и MUA используются агенты локальной доставки почты (Mail Delivery Agent, MDA). К этой категории относятся такие программы, как procmail и т. п. Приложения MDA получают почту от sendmail и направляют ее в локальный почтовый ящик.

Сервер sendmail - это большая, мощная и популярная программа, поэтому за все время ее существования взломщики обнаружили множество способов ее взлома. К счастью, sendmail позволяет использовать некоторые приемы, повышающие защиту. Например, вы можете создать отдельный процесс для некоторых пользователей, которые, как правило, либо отправляют, либо принимают почту, чтобы ограничить объем повреждений в случае, если сообщение содержит исполняемый код (иначе говоря, "троянского коня" - подробнее о "троянских конях" рассказывается в главе 14).

Многие участники электронных дискуссий в Usenet рекомендуют заменить sendmail другой аналогичной программой. В данной книге я не рекомендую вам делать этого. Несмотря на мощь и сложность, программу sendmail вполне можно использовать с соблюдением должного уровня безопасности. В листинге 12.3 показан протокол почтового соединения.

Категория: Работа с Linux | Просмотров: 667 | Добавил: VVS | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск
Форма входа
Наш опрос
Чего Вам не хватает на сайте?
Всего ответов: 21
Друзья сайта
Статистика
Возраст