Linux Security HOWTO: Безопасность сети

Next Previous Contents

## 8. Безопасность сети

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

Существует большое количество хороших инструментов для поддержки безопасности сети, и все больше и больше из них поставляются с дистрибутивами Linux.

## 8.1 Пакетные ищейки (Packet Sniffers)

Одним из наиболее общих методов, которые взломщики могут использовать для получения доступа к многим машинам в вашей сети, является применение пакетного ищейки с уже взломаных машины. Этот "ищейка" просто слушает Ethernet порт на предмет наличия "Password", "Login" или "su" в потоке пакетов и записывает в журнал всю информацию, идущую следом. В такой способ взломщик получает пароли систем, которые он даже и не пробовал пока взламывать. Очень уязвимы к этому виду атаки не зашифрованные пароли, которые передаются простым текстом.

Пример: на компьютере А была взломана система безопасности. Взломщик инстралировал ищейку. Ищейка записал процесс регистрации администратора с компьютера В на компьютер Б. Таким образом он получил персональный пароль системного администратора для регистрации на Б. Затем для решения своих задач администратор набирает "su". Таким образом взломщик получает администраторский пароль компьютера Б. Позже администратор разрешает кому-то запустить telnet из его счета на компьютер Г в другой сети. Теперь взломщик знает пароль/счет на компьютере Г.

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

Использование ssh или других методов шифрования паролей срывает подобные атаки. Для POP счетов мешают проведению таких атак пакеты подобные APOP. (Обычная pop регистрация беззащитна от подобных атак, поскольку как и все остальное пароли по сети передаются открытым текстом.)

## 8.2 Системные сервисы и tcp_wrappers

Как только вы подключаете вашу Linux систему к ЛЮБОЙ сети, вам сразу же нужно решить, какие сервисы предоставлять. Сервисы, которые вы не будете предоставлять, должны быть выключены, чтобы у вас было меньше вещей, о которых вам нужно беспокоиться, и взломщику будет меньше мест для выискивания дыр.

Существует много способов выключить сервисы в Linux. Вы можете посмотреть в файле /etc/inetd.conf, какие сервисы у вас предоставляются через inetd. Чтобы выключить все, что вам ненужно, просто закоментируйте соответствующие строчки, а затем пошлите вашему inetd SIGHUP (прим. перев. killall -HUP inetd).

Вы также можете удалить (или закомментрировать) соответствующие сервисы в файле /etc/services. Это означает, что локальный клиент также не сможет использовать эти сервисы (например, если вы удалите ftp, а затем попробуете сделать ftp связь с этой машины на удаленный компьютер, вы получите ошибку типа "неизвестный сервис"). Обычно не стоит удалять сервисы, если это не приносит дополнительного повышения уровня безопасности. Если локальный пользователь хочет использовать ftp в том случае, когда вы его уже закомментировали, он может создать своего собственного клиента, который будет использовать общий ftp порт и отлично работать.

Вот некоторые из сервисов, которые вам нужно оставить включенными:

- ftp
- telnet
- mail, такие как pop-3 или imap
- identd
- time

Если вы знаете, что вы не собираетесь использовать какие-то пакеты, лучше их полностью удалить. В дистрибутиве RedHat полностью удаляет пакет команда rpm -e. В Debian подобные вещи делает dpkg.

Дополнительно вам действительно лучше в файле /etc/inetd.conf выключить rsh/rlogin/rcp, включая login (используется rlogin), shell (используется rcp) и exec (используется rsh). Эти протоколы чрезвычайно небезопасны и часто были в прошлом причиной взломов.

Вы должны также проверить ваши /etc/rc.d/rcN.d, где N стартовые уровни вашей системы, на предмет наличия сервисов в этих каталогах, которые вам не нужны. Файлы в /etc/rc.d/rcN.d фактически являются символьными ссылками на файлы в каталоге /etc/rc.d/init.d. Переименование файлов в каталоге init.d выключит все символьные ссылки в /etc/rc.d/rcN.d. Если вы хотите выключить сервис только в определенном стартовом уровне, то переименуйте соответствующий файл, чтобы он начинался с маленькой буквы "s"?, а не с большой как надо (скажем S45dhcpd).

Если у вас rc файлы в стиле BSD, вам нужно проверить /etc/rc* для обнаружения ненужных программ.

Большинство дистрибутивов Linux поставляется с tcp_wrapper, которые "заворачивают" все ваши tcp сервисы. tcp_wrapper (tcpd) вызывается из inetd, а не является отдельным сервером. tcpd затем проверяет компьютер, который запрашивает сервис, и либо запускает реальный сервер либо запрещает доступ от этого компьютера. tcpd позволяет вам ограничить доступ к вашим tcp сервисам. Вы можете создать /etc/hosts.allow и добавить в него только те машины, которым нужно иметь доступ к сервисам на вашем компьютере.

Если вы являетесь домашним пользователем с коммутируемым доступом, то мы рекомендуем вам запретить доступ всем (deny ALL). tcpd также протоколирует все неудачные попытки доступа к сервисам, так что это позволят отследить возможные атаки. Если вы добавляете новые сервисы, вы обязательно должны сконфигурировать их, чтобы использовать основываясь на tcp_wrappers. Например, обыкновенный dial-up пользователь может запретить доступ к своему компьютеру извне, и в то же время иметь возможность забирать почту и путешествовать в интернете. Чтобы это сделать, вам нужно добавить к файлу /etc/hosts.allow:

ALL: 127.

И конечно же /etc/hosts.deny должен содержать:

ALL: ALL

что запретит внешние соединения к вашей машине, позволяя тем не менее вам изнутри соединяться с серверами в Интернете.

## 8.3 Проверьте вашу DNS информацию

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

## 8.4 identd

identd маленькая программка, которой обычно оканчивается ваш inetd. Она записывает информацию о том, какой пользователь запускает какой tcp сервис, а затем выдает отчет тому, кто запрашивает.

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

Тогда зачем же нужно вам ее запускать? Потому что она помогает ВАМ являясь еще одним инструментом отслеживания ситуации. Если ваш identd не взломан, тогда вы знаете, что он выдает удаленным компьютерам имена пользователей или uid пользователей, используя tcp сервисы. Если администратор удаленной системы придет к вам и скажет, что такой-то пользователь так-то пытался проникнуть в его систему, вы легко можете предпринять действия против такого пользователя. Если вы не включили identd, вам нужно просмотреть много протоколов, чтобы узнать, кто был в то время, и вообще потратить много времени, чтобы вычислить пользователя.

identd, который поставляется с большинством дистрибутивов, намного более настраиваем, нежели многие думают. Вы можете закрыть identd для определенных пользователей (можно создать файл .noident), вы можете протоколировать все запросы к identd (я рекомендую это), вы можете даже заставить identd возвращать uid вместо имени пользователя, или даже NO-USER.

## 8.5 SATAN , ISS и другие сетевые сканеры

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

SATAN (Инструмент администратора безопасности для анализа сетей) является сканером портов с web интерфейсом. Он может быть полезен для выполнения легкой, средней или тщательной проверки машины или сети машин. Неплохо иметь SATAN и сканировать вашу систему или сеть, и сразу же устранять обнаруженные им проблемы. Убедитесь, что ваша копия SATAN из sun-site или известного FTP или Web сервера. Были троянские копии SATAN, которые распространялись по Сети. http://www.trouble.org/~zen/satan/satan.html

ISS (Сканер безопасности интернета) является также сканером портов. Он быстрее чем SATAN, и таким образом может быть лучше для больших сетей. Однако SATAN предоставляет больше информации.

Abacus-Sentry является коммерческим сканером портов с www.psionic.com. Для получения большей информации сходите на их домашнюю web страничку http://www.psionic.com

Обнаружение сканеров портов

Существуют некоторые инструменты, которые призваны предупредить вас об работающих SATAN, ISS и других сканирующих программах. Однако используя tcp_wrapper, регулярно проверяя ваши протоколы, вы и сами заметите такие попытки. Даже при наименьших установках SATAN оставляет следы присутствия в журналах системы, оборудованной RedHat.

## 8.6 Sendmail, qmail и MTA

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

Если вы используете sendmail, очень важно иметь самую последнюю версию. Sendmail имеет очень длинную историю развития безопасности. Всегда используйте только последнюю версию. http://www.sendmail.org

Если вы устали модернизировать ваш sendmail каждую неделю, вы можете решить перейти на qmail. qmail изначально разрабатывали подразумевая безопасность. Он быстрый, стабильный и безопасный. http://www.qmail.org

## 8.7 "Отказ в предоставлении сервиса"

Атака "Отказ в предоставлении сервиса" состоит в том, что взломщик пытается искусственно загрузить некоторые сервисы настолько, чтобы они не могли отвечать на законные запросы или запрещали доступ к вашей машине законным пользователям.

В последние годы количество атак данного типа очень сильно возросло. Некоторые из наиболее популярных и свежих перечислены ниже. Имейте ввиду, что все время обнаруживаются новые, так что здесь приведены только примеры. Для получения последней информации читайте списки рассылки Linux security и bugtraq, а также архивы.

- SYN Flooding - SYN flooding является сетевой атакой "отказ в предоставлении доступа". Он использует преимущества "лазейки" (loophole) в методе создания TCP соединения. Последние версии ядер Linux (2.0.30 и выше) имеют несколько конфигурационных настроек для предотвращения SYN Flooding атак. Смотрите раздел "Безопасность ядра" для более детальной информации о настройках.

- Ошибка "F00F" в процессорах Pentium - Было обнаружено, что данная серия ассемблерного кода, посланная настоящему процессору Intel Pentium, перегружает машину. Это действует на все компьютеры с процессорами Pentium (не клонами, не Pentium Pro или PII), не зависимо от операционной системы на этом компьютере. Ядра Linux выше 2.0.32 содержат код, отслеживающий эту ошибку и не позволяющий перегружать вашу машину. Ядро 2.0.33 имеет улучшенный вариант решения этой ошибки, поэтому более рекомендуем нежели 2.0.32. Если у вас Pentium, лучше вам модернизироваться сейчас.

- Ping Flooding - Ping flooding является простой грубой реализацией атаки "отказ в предоставлении сервиса". Взломщик посылает "поток" ICMP пакетов вашему компьютеру. Если это происходит с машины с большей полосой пропускания нежели имеет ваш компьютер, то ваша машина будет лишена возможности посылать что-либо в сеть. При вариации этой атаки, называемой "smurfing", посылается на определенный сервер поток ICMP пакетов с обратным IP адресом вашей машины, таким образом атакующих тяжелее обнаружить. Более детальная информация о "smurf" атаках представлена на http://www.quadrunner.com/~chuegen/smurf.txt

  Если вы подверглись атаке типа ping flood, то для обнаружения машины, с которой пришли пакеты (или откуда они появляются), используйте инструмент типа tcpdump, и затем обратитесь с этой информацией к вашему провайдеру. Ping flood легко можно остановить на уровне маршрутизатора или используя щит (firewall).

- Ping o' Death - Атака Ping o' Death возникла в результате того, что поступающие пакеты ICMP ECHO REQUEST могут быть больше нежели может вместить структура данных ядра, которая сохраняет эту информацию. Из-за приема единичного большого (65,510 байт) "ping" пакета многие системы зависали или даже ломались, поэтому эта проблема быстро обрела название "Ping o' Death." Вообще-то эта ошибка давно уже исправлена, так что не о чём беспокоится.

- Teardrop / New Tear - Это одна из недавних еще атак основана на ошибке, присутствующей в коде фрагментации IP в Linux и Windwos платформах. Она исправлена в ядре 2.0.33 и не требует включения какой-либо дополнительной опции во время компиляции ядра. Так что Linux очевидно больше не подвержен атаке "newtear".

Вы можете найти большинство из исследованного кода и детальное описание найденных ошибок на http://www.rootshell.com используя их поисковую систему.

## 8.8 Безопасность NFS (сетевой файловой системы)

NFS является очень широко используемым протоколом совместного использования файлов. Он позволяет серверам запуская nfsd и mountd "экспортировать" целые файловые системы для других машин со встроенной в ядро поддержкой nfs (или поддержки некоторых других клиентов, если это не Linux машины). Mountd ведет журнал примонтированых файловых систем в /etc/mtab и может выдать их по команде showmount.

Многие сервера используют NFS для предоставления пользователям домашних каталогов, так что не имеет значения на какой из машин в кластере пользователи регистрируются, они сразу получают все свои файлы.

Существуют довольно небольшие возможности реализации безопасности в экспортируемых файловых системах. Вы можете с помощью nfsd приравнять администратора удаленной системы к пользователю nobody (т.е. с минимальными правами) на вашей системе, запрещая ему тем самым полный доступ к экспортируемым файлам. Однако, поскольку конкретные пользователи имеют полный доступ к их собственным файлам (или по крайней мере с одинаковым uid), то удаленный администратор может зарегистрироваться или сделать su к их счетам, и таким образом получить доступ к их файлам. Это только небольшое препятствие для взломщика, чтобы получить доступ для монтирования вашей удаленной файловой системы.

Если вы вынуждены использовать NFS, то прежде всего убедитесь, что вы экспортируете только тем машинам, которым это действительно нужно. Никогда не экспортируйте полностью ваш root каталог, экспортируйте только те каталоги, которые необходимо.

Для более детальной информации смотрите NFS HOWTO: NFS HOWTO

## 8.9 NIS (сетевой информационный сервис) (бывший YP)

Сетевой информационный сервис (бывший YP - желтые страницы) заключается в распространении информации группе машин. NIS мастер (сервер) хранит информационные таблицы и конвертирует их файлы карт NIS. Затем эти карты передаются по сети, позволяя NIS клиентам (компьютерам) получать имя счета, пароль, домашний каталог и информацию shell (фактически всю информацию стандартного файла /etc/passwd). Это позволяет пользователю изменить пароль за один раз на всех машинах в NIS домене, где он имеет счет.

NIS совсем небезопасен. Он никогда и не предполагался быть таким. Он предполагался быть удобным и полезным. Любой, кто может угадать имя вашего NIS домена (где-либо в сети) может получить копию вашего файла passwd, а затем использовать "crack" и "john the ripper" для взламывания паролей ваших пользователей. Также можно обманывать NIS и проводить другие подобные трюки. Если вы вынуждены использовать NIS, помните об опасностях связанных с ним.

Существует намного более безопасный преемник NIS, называемый NIS+. Обратитесь к NIS HOWTO за более детальной информацией: http://sunsite.unc.edu/mdw/HOWTO/NIS-HOWTO.html

## 8.10 Щит (firewall)

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

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

Щит является очень полезным и важным инструментом в обеспечении безопасности вашей сети. Важно понять, что вы не должны забывать о безопасности только из-за того, что у вас есть щит, и не заботиться о безопасности машин за щитом. Это будет фатальной ошибкой. Советуем заглянуть в очень хороший Firewall-HOWTO для более детального ознакомления с реализацией щита в Linux. http://sunsite.unc.edu/mdw/HOWTO/Firewall-HOWTO.html

Информацию по этому вопросу можно также найти в IP-Masquerade mini-howto: http://sunsite.unc.edu/mdw/HOWTO/mini/IP-Masquerade.html

Детальную информацию по ipfwadm (инструменту, который позволяет вам изменять установки вашего щита), можно найти на его домашней странице : http://www.xos.nl/linux/ipfwadm/

Next Previous Contents