Библиотека сайта rus-linux.net
Часть II. Безопасность и оптимизация
Глава 3. Общая системная безопасность
Обзор
UNIX-системы настолько безопасны, насколько безопасными их сделает администратор. Чем больше сервисов у Вас установлено, тем больше шансов, что в них будет найдена дыра. Когда Вы инсталлируете Linux, Вы должны устанавливать минимум пакетов, а затем добавлять только необходимые элементы, уменьшая шансы установить приложение с ошибкой, нарушающей его безопасность. В этой главе мы обсудим общие принципы обеспечения безопасности сервера. Также здесь мы опишем ряд возможностей, которые можно использовать для предотвращения вторжения как снаружи, так и изнутри.
Безопасность BIOS, установка пароля на загрузку
Отмените возможность загрузки компьютера с дискеты, установите пароль на доступ к настройкам BIOS. Запрет загрузки с дискет не позволит злоумышленникам загрузить компьютер с дискеты и получить доступ к системе, а установка пароля на доступ к BIOS не позволит включить загрузку с дискеты.
Политика безопасности
Вы не сможете правильно реализовать безопасность системы пока не выясните, что Вы хотите защищать и от кого. Для того, чтобы принимать решения, относящиеся к защите, Вам нужно выработать политику безопасности, список того, что Вы хотите разрешить, а что хотите запретить. Политика также должна определять Ваши ответные действия на нарушения безопасности. Приведенные ниже вопросы должны помочь Вам в выработке стратегии:
- Как Вы определяете конфиденциальную и важную информацию?
- Нужен ли удаленным пользователям доступ к Вашей системе?
- Находится ли на сервере конфиденциальная или важная информация?
- Обеспечивают ли пароли или шифрование достаточную защиту?
- Нужен ли Вам доступ в Интернет?
- Как много доступа Вы хотите разрешить из Интернета?
- Какие действия нужно предпринять в случае нарушения защиты?
Этот список короткий, и Вы при выработке стратегии можете охватить более широкий круг вопросов. Любая политика безопасности базируется на некотором уровне паранойи: решите насколько Вы доверяете людям, как внутри организации, так и снаружи. Стратегия должна балансировать между разрешением пользователям доступа к необходимой им информации и запрещением доступа к определенным видам данных. Точка, где эти линии пересекаются, и определит Вашу стратегию.
Выбор правильного пароля
Исходной точкой Вашего тура в безопасность Linux является пароль. Многие люди используют единственный пароль всю жизнь, доверяя ему защиту всех своих данных. Вопреки популярной вере, не взламываемых паролей не существует. Любой из них поддается либо социальной разработке, либо грубой силе.
Социальная разработка паролей сервера наиболее простой и популярный способ получения доступа к логинам пользователей и серверам. Часто, какое-либо простое действие, наподобие выдачи себя за руководителя или крика о правах человека, приносит очень хорошие результаты, часто давая даже полный доступ к системе.
Неплохой идеей будет еженедельно проверять файл с паролями с помощью программы-взломщика. Это поможет найти пароли, которые легко подбираются, и которые необходимо срочно заменить. Также механизм проверки должен работать и в момент определения паролей, чтобы отклонить заведомо слабый пароль при его начальном задании или переопределении. Строки символов, которые представляют собой простые слова, или находятся в одном регистре, или не содержат цифр и специальных знаков, должны быть отклонены. Я рекомендую использовать следующие правила создания эффективных паролей:
- Пароль должен иметь не менее шести символов в длину и содержать не менее одной цифры или специального знака.
- Он не должен быть банальным: банальный пароль обычно базируется на имени пользователя, фамилии, месте жительства и ряде других персональных данных.
- Он должен иметь ограниченный период действия, требуйте замены пароля через определенный промежуток времени.
- Он должен отменяться и сбрасываться после заданного числа подряд неправильных попыток ввода.
Длина пароля
Минимально допустимая длина пароля, задаваемая по умолчанию в Linux, 5 символов. Это значит, что когда новому пользователю разрешается доступ на сервер, то длина строки, представляющей собой пароль, должна быть минимум 5 букв, цифр или специальных знаков. Кроме того, она должна быть не больше 8 символов. Чтобы нерадивые пользователи не использовали пароли длиной 5 символов, можно увеличить его минимальный размер до 8, отредактировав файл /etc/login.defs.
Редактируйте файл login.defs (vi /etc/login.defs) изменив строку:
PASS_MIN_LEN 5на:
PASS_MIN_LEN 8
Этот файл является конфигурационным для программы login. Здесь Вы можете изменить и другие параметры, чтобы они соответствовали Вашей стратегии защиты (время действия пароля, длина пароля и многое другое).
Логин пользователя root
Логин root является самым привилегированным в UNIX-системах. На него нельзя наложить никакие ограничения по безопасности. Это значит, что система считает, что Вы знаете, что делаете и никаких вопросов задавать не будет. Поэтому очень легко, ошибившись в команде, уничтожить важную системную информацию. При использовании этой учетной записи надо быть максимально осторожным. Из соображений безопасности никогда не подключайтесь к системе как пользователь root, если только Вы абсолютно не уверены в том, что делаете.
Установка таймаута подключения для root
Часто бывает, что администратор войдя в систему под пользователем root забывает выйти, и его сессия остается открытой. Решением этой проблемы может быть переменная TMOUT в BASH, которая определяет время, через которое пользователь автоматически отключается от системы, если он не активен. Она содержит время в секундах до отключения.
Редактируйте файл /etc/profile и добавьте следующую строку сразу после строки с HISTFILESIZE=:
TMOUT=7200
Мы определяем значение для TMOUT равное 2 часам (60*60*2). Следует отметить, что если Вы добавили эту строку в файл /etc/profile, то переменная определяется для любого подключаемого пользователя, а не только для root. Чтобы установить ее для конкретного пользователя измените файл .bashrc в его домашнем каталоге.
Файл /etc/exports
Если Вы экспортируете свои файловые системы с использованием NFS, то необходимо сконфигурировать файл /etc/exports с максимально возможными ограничениями. В нем не следует использовать групповые символы (?, *), нельзя позволять доступ для записи пользователю root и следует монтировать в режиме "только для чтения" все, что только возможно.
Отредактируйте файл /etc/exports, добавив в него:
/dir/to/export host1.mydomain.com (ro,root_squash) /dir/to/export host2.mydomain.com (ro,root_squash)
Где dir/to/export задает каталог для экспортирования, host1.mydomain.com имя машины, с которой разрешается доступ, ro монтирование только для чтения, root_squash не позволять пользователю root доступа с правом на запись.
Чтобы изменения вступили в действие, необходимо выполнить команду:
/usr/sbin/exportfs -a
Замечание. Использование NFS-сервера увеличивает риск нарушения безопасности Вашей системы. Лучше его не использовать.
Отключение доступа к консольным программам
Одной из самых простых и необходимых настроек является блокирование консольно-эквивалентного доступа к программам halt и shutdown. Чтобы это сделать выполните:
[root@deep]# rm -f /etc/security/console.apps/servicename
где servicename имя программы, к которой Вы хотите запретить консольно-эквивалентный доступ. Если Вы не используете xdm, будьте внимательны, не удалите файл xserver, иначе никто, кроме пользователя root, не сможет запустить X-сервер (если Вы всегда используете xdm для запуска X-сервера, и только пользователь root должен запускать X-сервер, то тогда можно подумать об удалении файла xserver). Пример:
[root@deep]# rm -f /etc/security/console.apps/halt [root@deep]# rm -f /etc/security/console.apps/poweroff [root@deep]# rm -f /etc/security/console.apps/reboot [root@deep]# rm -f /etc/security/console.apps/shutdown [root@deep]# rm -f /etc/security/console.apps/xserver (если удалите, то только root сможет запустить X).
В результате будет запрещен консольно-эквивалентный доступ к программам halt, shutdown, reboot и poweroff. Программа xserver используется, если у Вас установлен X Window.
Замечание. Если Вы инсталлировали систему как описано в этой книге, то X Window у Вас не установлен, и файлы, описанные выше, в каталоге /etc/security не появятся, поэтому Вы этот шаг можете пропустить.
Отключение всего консольного доступа
Чтобы блокировать весь консольный доступ, включая программу и файл доступа в каталоге /etc/pam.d, закомментируйте все строки, в которых вызывается pam_console.so. Этот шаг является продолжением предыдущего. Нижеприведенный скрипт сделает это автоматически за Вас. Создайте файл disabling.sh (touch disabling.sh) и внесите в него следующие строки:
# !/bin/sh cd /etc/pam.d for i in * ; do sed '/[^#].*pam_console.so/s/^/#/' < $i > foo && mv foo $i done
Сделайте его исполняемым:
[root@deep]# chmod 700 disabling.sh [root@deep]# ./disabling.sh
Он будет комментировать все строки, ссылающиеся на pam_console.so во всех файлах в каталоге /etc/pam.d. После того, как скрипт выполнит свою работу, удалите его из системы.
Файл /etc/inetd.conf
Inetd называется суперсервером, который запускает другие демоны по запросам из сети. Inetd.conf говорит inetd, какие порты слушать и какие сервисы запускать для каждого порта. Как только Вы подключаете Вашу систему к сети, подумайте, какие сервисы Вам нужны.
Ненужные сервисы надо отключить, а лучше деинсталлировать, чтобы у Вас стало меньше головной боли, а у атакующего меньше шансов найти лазейку в Вашу систему. Просмотрите файл /etc/inetd.conf, и Вы увидите, какие сервисы он предлагает. Закомментируйте строки (# в начале строки) с ненужными сервисами, а затем пошлите процессу inetd сигнал SIGHUP.
Шаг 1.
Измените права доступа к файлу на 600:
[root@deep]# chmod 600 /etc/inetd.conf
Шаг 2.
Удостоверьтесь, что владельцем файла является root:
[root@deep]# stat /etc/inetd.conf File: "/etc/inetd.conf" Size: 2869 Filetype: Regular File Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Device: 8,6 Inode: 18219 Links: 1 Access: Wed Sep 22 16:24:16 1999(00000.00:10:44) Modify: Mon Sep 20 10:22:44 1999(00002.06:12:16) Change: Mon Sep 20 10:22:44 1999(00002.06:12:16)
Шаг 3.
Редактируйте файл inetd.conf (vi /etc/inetd.conf) и отключите следующие сервисы: ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth и т. д. пока Вы не планируете их использовать. Чем меньше сервисов включено, тем меньше риск для системы:
# Чтобы изменения вошли в силу дайте команду killall -HUP inetd #echo stream tcp nowait root internal #echo dgram udp wait root internal #discard stream tcp nowait root internal #discard dgram udp wait root internal #daytime stream tcp nowait root internal #daytime dgram udp wait root internal #chargen stream tcp nowait root internal #chargen dgram udp wait root internal #time stream tcp nowait root internal #time dgram udp wait root internal # # Это стандартные сервисы #ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a #telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd # # Shell, login, exec, comsat и talk являются протоколами BSD. #shell stream tcp nowait root /usr/sbin/tcpd in.rshd #login stream tcp nowait root /usr/sbin/tcpd in.rlogind #exec stream tcp nowait root /usr/sbin/tcpd in.rexecd #comsat dgram udp wait root /usr/sbin/tcpd in.comsat #talk dgram udp wait root /usr/sbin/tcpd in.talkd #ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd #dtalk stream tcp wait nobody /usr/sbin/tcpd in.dtalkd # # Почтовые Pop и imap сервисы #pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d #imap stream tcp nowait root /usr/sbin/tcpd imapd # # Internet UUCP сервис. #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l # # Сервис Tftp предоставляется в первую очередь для удаленной загрузки. # В большинстве случаев, он используется только на "серверах загрузки". # Не удаляйте символы комментариев, если Вы не уверены, что это Вам нужно. #tftp dgram udp wait root /usr/sbin/tcpd in.tftpd #bootps dgram udp wait root /usr/sbin/tcpd bootpd # # Finger, systat и netstat дают информацию внешним пользователям, которая # может быть использована для взлома системы. На многих серверах # некоторые или все из них отключены с целью улучшения безопасности. #finger stream tcp nowait root /usr/sbin/tcpd in.fingerd #cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd #systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx #netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f inet # # Аутентификация #auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -l -e -o
Замечание. Не забудьте послать сигнал SIGHUP процессу inetd (killall -HUP inetd) после редактирования файла /etc/inetd.conf:
[root@deep /root]# killall -HUP inetd
Шаг 4.
Для большего улучшения безопасности, Вы можете сделать файл inetd.conf неизменным, используя команду chattr:
[root@deep]# chattr +i /etc/inetd.conf
Файл с атрибутом i не может быть модифицирован, его нельзя удалить или переименовать, к нему нельзя создать ссылки, и никакие данные не могут быть дописаны в файл. Только суперпользователь может установить или снять этот атрибут. Если Вы захотите модифицировать файл inetd.conf, то дайте следующую команду:
[root@deep]# chattr -i /etc/inetd.conf
TCP_WRAPPERS
По умолчанию Red Hat отвечает на все запросы к имеющимся сервисам. Используя TCP_Wrappers, Вы легко сможете оградить сервер от внешних вторжений когда это нужно. Запретите все хосты, добавив ALL: ALL@ALL, PARANOID в /etc/hosts.deny, и определите список тех, кому доступ разрешен в файле /etc/host.allow: это самая безопасная конфигурация. TCP_Wrappers контролируется двумя файлами. Поиск завершается при первом совпадении.
/etc/hosts.allow /etc/hosts.deny
- Доступ будет разрешен если пара (клиент, демон) найдена в файле /etc/host.allow.
- Доступ будет запрещен если пара (клиент, демон) найдена в файле /etc/host.deny.
- Если пара (клиент, демон) не найдена ни в одном из файлов (/etc/host.allow, /etc/host.deny), то доступ будет разрешен.
Шаг 1.
Редактируйте файл hosts.deny (vi /etc/hosts.deny) добавив следующие строки. По умолчанию доступ запрещен:
# Запрещаем доступ для всех. ALL: ALL@ALL, PARANOID # Соответствует любому компьютеру, чье имя # не соответствует адресу.
Это значит, что доступ ко всем службам со всех компьютеров запрещен, если нет явного разрешения в файле host.allow.
Замечание. Для параметра PARANOID. Если Вы хотите запускать telnet и ftp-сервисы на сервере, то не забудьте добавить адрес клиентской машины и IP-адрес в файл /etc/hosts на сервере, иначе будьте готовы ждать несколько минут, пока DNS lookup не завершится по таймауту, до получения строки login.
Шаг 2.
Отредактируйте файл hosts.allow и добавьте в него, к примеру, следующие строки:
# Список серверов которым разрешен доступ. sshd: 208.164.186.1 gate.openarch.com
Машина с IP-адресом 208.164.186.1 и именем gate.openarch.com является одним из клиентов сервиса sshd.
Шаг 4.
Программа tcpdchk занимается проверкой правильности конфигурационного файла TCP_Wrapper. Она выдает сообщения о потенциальных и реальных проблемах.
После того, как конфигурирование завершено, запустите программу tcpdchk:
[root@deep]# tcpdchk
Замечание. Ошибка может выглядеть следующим образом:
warning: /etc/hosts.allow, line 6: can't verify hostname:
gethostbyname(win.openna.com) failed.
Если Вы получили подобное сообщение, то проверьте Ваш конфигурационный файл DNS-сервера на наличие в нем этого имени компьютера.
Не позволяйте системе выводить файл issue
Если Вы не хотите, чтобы файл issue выводился на экран, когда удаленный пользователь подключается к серверу, измените опцию telnetd в файле /etc/inetd.conf:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
Флаг -h говорит демону не выводить любую системную информацию, ограничиться только запросом login:. Эту возможность необходимо использовать только, когда на сервере запускается демон telnet (вместо него я рекомендую использовать ssh).
Файл /etc/host.conf
Linux использует библиотеку resolver для преобразования IP=адресов в имена машин. Файл /etc/host.conf определяет порядок работы этой библиотеки. Он говорит, какой сервис и в каком порядке использовать для преобразования адресов.
Редактируйте файл host.conf (vi /etc/host.conf) и добавьте следующие строки:
# Вначале использовать lookup через DNS, а затем файл /etc/hosts. order bind,hosts # Мы имеем компьютеры с несколькими IP-адресами. multi on # Осуществлять проверку подмены IP-адресов. nospoof on
Опция order определяет порядок использования сервисов. Для улучшения производительности и повышения безопасности рекомендуется настроить библиотеку определителей так, чтобы вначале использовался DNS, а затем файл /etc/hosts. Конечно, DNS должен быть предварительно настроен.
Опция multi говорит, что компьютеры, описанные в файле /etc/hosts, могут иметь несколько IP-адресов (несколько интерфейсов ethN). Например, шлюз всегда имеет несколько адресов, и у них эта опция должна быть всегда определена в ON.
Опция nospoof: не разрешать подмену адресов. IP-Spoofing это способ атаки при котором удаленный компьютер представляется кем-то, кем он не является. При этом виде нападения удаленный компьютер представляется как законный сервер, а затем использует установленные соединения для взаимодействия с другими компонентами сети. Эта опция должна быть установлена в ON на всех типах серверов.
Файл /etc/securetty
Файл /etc/securetty позволяет Вам определить, с каких TTY-устройств может входить в систему пользователь root. Этот файл читается программой login (/bin/login). Он имеет очень простой формат. В каждой строке перечислены имена tty-устройств, с которых root может входить в систему, а с остальных доступ ему будет запрещен.
Отключите любые tty, которые Вам не нужны, закомментировав их (знак # в начале строки):
tty1 #tty2 #tty3 #tty4 #tty5 #tty6 #tty7 #tty8
В результате root сможет входить в систему только с терминала tty1. С остальных терминалов Вы сможете переключаться на root, используя команду su.
Специальные пользователи
Это очень важно. Выключите все ненужные специальные логины пользователей, которые созданы по умолчанию в Вашей системе (это необходимо проделывать после каждого обновления). Linux использует их для выполнения различных операций, которые Вам скорее всего не нужны. Если Вы не нуждаетесь в каких-либо логинах, то удалите их. Чем больше у Вас заведено пользователей, тем легче проникнуть в систему.
Мы предполагаем, что Вы используете механизм теневых паролей. Если это не так, то установите Shadow password suite это улучшит безопасность сервера. Если Вы следовали нашим инструкциям при инсталляции системы и отметили в разделе "Authentication Configuration" пункт "Enable Shadow Passwords", то в системе активизирован механизм теневых паролей.
Для удаления пользователей используйте команду:
[root@deep]# userdel username
Для удаления группы используйте команду:
[root@deep]# groupdel username
Шаг 1.
Введите следующие команды на терминале для удаления специальных пользователей:
[root@deep]# userdel adm [root@deep]# userdel lp [root@deep]# userdel sync [root@deep]# userdel shutdown [root@deep]# userdel halt [root@deep]# userdel news [root@deep]# userdel uucp [root@deep]# userdel operator [root@deep]# userdel games (удалите если не используете X Window). [root@deep]# userdel gopher [root@deep]# userdel ftp (удалите если не используете анонимный ftp).
Шаг 2.
Удалите ненужные группы пользователей:
[root@deep]# groupdel adm [root@deep]# groupdel lp [root@deep]# groupdel news [root@deep]# groupdel uucp [root@deep]# groupdel games (удалите если не используете X Window). [root@deep]# groupdel dip [root@deep]# groupdel pppusers [root@deep]# groupdel popusers (удалите если не используете POP-сервер). [root@deep]# groupdel slipusers
Шаг 3.
Добавьте необходимых Вам пользователей. Чтобы добавить нового пользователя используйте команду:
[root@deep]# useradd username
Для добавления или изменения пароля для пользователя используйте команду:
[root@deep]# passwd username
Например:
[root@deep]# useradd admin [root@deep]# passwd admin
На экране должен появиться следующий текст:
Changing password for user admin New UNIX password: somepasswd passwd: all authentication tokens updated successfully
Шаг 4.
Бит постоянства может быть использован для предотвращения случайного удаления или переписывания файлов, которые должны быть защищены. Они также могут быть защищены от создания символических ссылок, которые могут быть использованы для атак на файлы /etc/passwd, /etc/shadow, /etc/group или /etc/gshadow.
Для установки бита постоянства на файлы /etc/passwd, /etc/shadow, /etc/group и /etc/gshadow выполните следующие команды:
[root@deep]# chattr +i /etc/passwd [root@deep]# chattr +i /etc/shadow [root@deep]# chattr +i /etc/group [root@deep]# chattr +i /etc/gshadow
Замечание. Если в будущем Вам надо будет добавить новых пользователей или изменить пароли, то снимите бит постоянства с этих файлов. Также снять этот атрибут может потребоваться при инсталляции новых RPM-пакетов, которые автоматически добавляют новых пользователей или новые группы.
Блокирование выполнения команды su root от других пользователей
Если Вы не хотите, чтобы кто-нибудь выполнял команду su root или хотите ограничить пользователей, которые могут пользоваться этой командой, то добавьте следующие две строки в начало файла конфигурации su, расположенного в каталоге /etc/pam.d. Я настоятельно рекомендую ограничить пользователей, которые могут выполнять команду su.
Шаг 1.
Редактируйте файл su (vi /etc/pam.d/su) и добавьте в него две строки:
auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=wheel
После добавления этих строк файл /etc/pam.d/su должен выглядеть так:
#%PAM-1.0 auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=wheel auth required /lib/security/pam_pwdb.so shadow nullok account required /lib/security/pam_pwdb.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_pwdb.so shadow use_authtok nullok session required /lib/security/pam_pwdb.so session optional /lib/security/pam_xauth.so
Который говорит, что только члены группы wheel могут использовать команду su root, и все действия будут регистрироваться. Заметим, что группа wheel является специальным логином, который используется для этой цели. Подобное ограничение пользователей, способных выполнять команду su root совместно с ограничением терминалов, с которых root может входить в систему, существенно увеличит безопасность сервера.
Шаг 2.
После того, как Вы изменили файл /etc/pam.d/su, самое время определить пользователей, которые могут выполнять su root. Например, если Вы хотите чтобы admin был членом группы wheel введите следующую команду:
[root@deep]# usermod -G10 admin
Здесь опцией G определяется список цифровых значений групп, в которые входит пользователь admin. В данном случае группе wheel соответствует 10. Используйте приведенную выше команду для всех пользователей, которым будет разрешено переходить к root.
Замечание. Если Вы не можете выполнить команду su в терминале GNOME, то это потому, что Вы используете неправильный терминал.
Ограничение ресурсов
Файл limits.conf, находящийся в каталоге /etc/securitty, может быть использован для ограничения ресурсов, потребляемых пользователями Вашей системы. Ограничьте ресурсы всем пользователям, чтобы они не смогли осуществить DoS-атаки (количество процессов, объем памяти и т. д.). Эти ограничения будут накладываться на пользователей как только они будут входить в систему. Для примера, ограничьте пользователей так, как это описано здесь.
Шаг 1.
Редактируйте файл limits.conf (vi /etc/security/limits.conf) и добавьте в него следующие строки:
* hard core 0 * hard rss 5000 * hard nproc 20
Он говорит, что необходимо запретить создание core-файлов (core 0), ограничить число процессов не более 20 (nproc 20) и объем используемой памяти не более 5М (rss 5000) для всех пользователей, кроме root. Все вышесказанное относится только к пользователям, которые могут подключаться к системе через login. Символ "*" означает всех пользователей, имеющих доступ на данный сервер.
Шаг 2.
Вы должны отредактировать файл /etc/pam.d/login и добавить в его конец следующие строки:
session required /lib/security/pam_limits.so
После этого файл должен выглядеть так:
#%PAM-1.0 auth required /lib/security/pam_securetty.so auth required /lib/security/pam_pwdb.so shadow nullok auth required /lib/security/pam_nologin.so account required /lib/security/pam_pwdb.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_pwdb.so nullok use_authtok md5 shadow session required /lib/security/pam_pwdb.so session required /lib/security/pam_limits.so #session optional /lib/security/pam_console.so
Больший контроль над монтируемыми файловыми системами
Вы можете получить больший контроль над смонтированными файловыми системами (например, /home и /tmp), используя опции noexec, nodev и nosuid. Они могут быть определены в файле /etc/fstab, который содержит описания каждой монтируемой файловой системой. Для получения большей информации об этих опциях читайте man страницу о mount (8).
Опции, связанные с безопасностью, используемые в /etc/fstab:
Defaults позволяет все (quota, read-write и suid) на этом разделе.
Noquota не использовать квоты пользователей на этом разделе.
nosuid не использовать SUID/SGID-доступ на этом разделе.
nodev нет символьных и специальных устройств на этом разделе.
noexec нет исполняемых программ на этом разделе.
quota пользовательские квоты действуют на этом разделе.
ro позволять доступ только для чтения к этому разделу.
rw позволять доступ на чтение/запись к этому разделу.
suid позволять SUID/SGID-доступ на этом разделе.
Редактируйте файл fstab (vi /etc/fstab) и измените то, что Вам нужно:
/dev/sda11 /tmp ext2 defaults 1 2 /dev/sda6 /home ext2 defaults 1 2
Должны теперь читаться:
/dev/sda11 /tmp ext2 defaults,nosuid,nodev,noexec 1 2 /dev/sda6 /home ext2 defaults,nosuid,nodev 1 2
nodev указывает не интерпретировать символьные и блочный специальные устройства на файловой системе, nosuid предписывает не позволять работать биту смены идентификатора пользователя и идентификатора группы, noexec не позволяет выполнять любые двоичные файлы на файловой системе.
Замечание: для нашего примера, устройство /dev/sda11 представляется как /tmp и dev/sda6 как /home на нашей системе. Конечно, у Вас это будет выглядеть по-другому, в зависимости от того, как разбит диск, и диски какого типа Вы используете (IDE: hda, hdb, hdc и т.д или SCSI: sda, sdb, sdc и т.д.).
Перемещение программы RPM и изменение прав доступа к ней
После того, как Вы проинсталлировали все программы, которые нужны на сервере, хорошей идеей будет переместить программу RPM в безопасное место, например, на флоппи-диск. Если кто-то получит доступ к серверу и решит установить враждебное программное обеспечение, то это у него не получится. Конечно, если в будущем захотите проинсталлировать что-то новое, то Вам потребуется вернуть RPM на место.
Переместите RPM на флоппи-диск:
[root@deep]# mount /dev/fd0 /mnt/floppy [root@deep]# mv /bin/rpm /mnt/floppy [root@deep]# umount /mnt/floppy
Замечание. Никогда не деинсталлируйте RPM полностью.
Также можно изменить права доступа к RPM c 755 на 700. В этом случае никто, кроме пользователя root, не сможет использовать эту программу.
Измените права доступа к файлу /bin/rpm:
[root@deep]# chmod 700 /bin/rpm
Настройка shell
Чтобы сделать легким повторный ввод длинных команд, bash shell может запоминать до 500 команд в файле ~/.bash_history (где ~/ Ваш домашний каталог). Каждый пользователь, который имеет shell-доступ в систему, имеет такой .bash_history файл в своем домашнем каталоге. Уменьшая количество команд, запоминаемых в этом файле, Вы защищаете систему. Когда пользователь случайно ввел в командной строке свой пароль, то он еще долгое время будет хранится в файле .bash_history.
Строки HISTFILESIZE и HISTSIZE в файле /etc/profile определяют количество старых команд, запоминаемых в .bash_history. Для всех пользователей я рекомендую выбрать значения этих переменных поменьше, например, 20.
Редактируйте файл profile (vi /etc/profile) и измените следующие строки:
HISTFILESIZE=20 HISTSIZE=20
В данном случае определено, что будет запоминаться не более 20 старых команд. Теперь, если хакер будет искать пароль в файле .bash_profile, то шансы там его обнаружить сократятся.
Шаг 2.
Администратор должен добавить в файл /etc/skel/.bash_logout строку rm -f $HOME/.bash_history. В результате, каждый раз, когда пользователь выходит из системы, его файл .bash_history будет удаляться. Поэтому хакер не сможет получить к нему доступ, когда пользователь не подключен к серверу. Редактируйте файл .bash_logout (vi /etc/skel/.bash_logout) и добавьте следующую строку:
rm -f $HOME/.bash_history
Замечание. Приведенная выше операция будет действовать только на вновь заводимых пользователей. Для уже существующих необходимо вручную отредактировать их файлы .bash_logout.
Файл /etc/lilo.conf
LILO это универсальный загрузчик для Linux. Он не зависит от файловой системы и может загружать ядро Linux как с гибкого диска, так и с жесткого диска. Кроме того, LILO может служить загрузчиком других операционных систем.
LILO очень важен для Linux, и поэтому мы должны защитить его как можно лучше. Наиболее важным конфигурационным файлом является /etc/lilo.conf. С его помощью Вы можете настраивать и улучшать безопасность LILO и всей системы. Следующие три опции чрезвычайно важны для улучшения безопасности.
- Добавьте: timeout=00
Эта опция контролирует, как долго (в десятых долях секунды) LILO ждет ввода информации от пользователя перед тем, как продолжит загрузку по умолчанию. Одним из требований уровня безопасности C2 является возможность установки интервала, равного 0. Установите эту опцию в 0, если у Вас нет необходимости в различных вариантах загрузки. - Добавьте: restricted
Эта опция ослабляет парольную защиту, так как она требует введение пароля только, если были определены параметры загрузки (например, linux single). Она может использоваться только совместно с опцией "password". Убедитесь, что Вы используете эту опцию с каждым образом. - Добавьте: password=<password>
Это опция требует запроса пароля у пользователя, если он загружает linux в однопользовательском режиме. Пароль является зависимым от регистра. Обязательно проверьте, чтобы файл /etc/lilo.conf мог читать только пользователь root.
Ниже приведена процедура защиты LILO.
Шаг 1.
Измените файл /etc/lilo.conf:
boot=/dev/sda map=/boot/map install=/boot/boot.b prompt timeout=00 Default=linux restricted password=<password> Определите свой пароль! image=/boot/vmlinuz-2.2.12-20 label=linux initrd=/boot/initrd-2.2.12-10.img root=/dev/sda6 read-only
Шаг 2.
Сделайте этот файл доступным для чтения только пользователем root (в файле хранится пароль в незашифрованном виде):
[root@deep]# chmod 600 /etc/lilo.conf
Шаг 3.
Выполните следующую команду, чтобы все изменения вошли в силу:
[root@deep]# /sbin/lilo -v
Шаг 4.
Защитите файл от изменения и удаления установив на него атрибут неизменчивости:
[root@deep]# chattr +i /etc/lilo.conf
Теперь, чтобы внести в /etc/lilo.conf какие-нибудь изменения, этот атрибут надо снять:
[root@deep]# chattr -i /etc/lilo.conf
Запрещение перезагрузки системы по комбинации клавиш Control-Alt-Delete
Если Вы закомментируете строку, описанную ниже, в файле /etc/inittab, то будет отключена возможность использования комбинации клавиш ctrl-alt-del для перезагрузки компьютера. Это чрезвычайно важно, если Вы не можете обеспечить полную физическую безопасность Вашего сервера.
Редактируйте файл inittab (vi /etc/inittab) и измените строку:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
на:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Для того, чтобы система восприняла внесенные изменения, дайте следующую команду:
[root@deep]# /sbin/init q
Физические твердые копии всех важных файлов регистрации
Один из важнейших аспектов защиты это целостность лог-файлов, расположенных в /var/log. Если взломщик преодолел все Ваши оборонительные редуты, то вся Ваша надежда остается на них. Поэтому очень важно продумать методы, которые позволят Вам контролировать целостность лог-файлов. Если на Вашем сервере установлен сервер печати или подобный сервер есть в сети, то можно создавать твердые копии всех, на Ваш взгляд, важных логов. Это легко осуществить, имея принтер с непрерывной подачей бумаги и перенаправляя все сообщения syslog в /dev/lp0. Взломщик может изменить на сервере любые файлы и программы, но он ничего не сможет поделать с бумагой.
Пример:
Регистрация всех telnet, почтовых, ssh-соединений и загрузочных сообщений с Вашего сервера на принтере, подключенном к нему.
Редактируйте файл syslog.conf (vi /etc/syslog.conf) и добавьте в его конец следующую строку:
authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0
Перезагрузите демон syslogd, чтобы изменения вступили в силу:
[root@deep]# /etc/rc.d/init.d/syslog restart
Пример:
Регистрация всех telnet, почтовых, ssh-соединений и загрузочных сообщений с Вашего сервера на принтере удаленного сервера, находящегося в Вашей сети.
Если Вы не имеете принтера в Вашей сети, то можно перенаправлять все syslogd-сообщения на удаленный сервер. Для этого, во-первых, добавьте в файл syslogd.conf вышеприведеднную строку, только замените в ней /dev/lp0 на имя или адрес удаленного сервера. Во-вторых, запустите на удаленном сервере демон syslogd с опцией -r. Используя этот метод, Вы легко можете собирать все логи на одной машине, что существенно облегчает администрирование. Редктируйте файл syslog.conf (vi /etc/syslog.conf) на удаленном сервере (например, на mail.openarch.com) и добавьте в его конец следующую строку:
authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0
По умолчанию, демон syslogd не принимает сообщения от удаленных компьютеров. Для включения этого добавьте опцию -r при запуске syslogd:
Вместо
daemon syslogd -m 0
используйте:
daemon syslogd -r -m 0
Перезапустите демон syslogd, чтобы изменения вступили в силу:
[root@mail]# /etc/rc.d/init.d/syslog restart
Если на удаленном сервере настроен брандмауэр, то необходимо добавить в него следующее правило:
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $SYSLOG_CLIENT \ -d $IPADDR 514 -j ACCEPT
где,
EXTERNAL_INTERFACE="eth0" в файле настроек firewall.
IPADDR="208.164.186.2" в файле настроек firewall.
SYSLOG_CLIENT="208.164.168.0/24" в файле настроек firewall.
Сейчас перезагрузите firewall на удаленном сервере, чтобы сделанные изменения вступили в силу.
Это правило разрешает удаленному серверу принимать сообщения от клиента на порт 514 (порт сервиса syslog). Для получения большей информации о firewall читайте главу 7 "Сетевой брандмауэр".
В заключение, редактируйте файл /etc/syslog.conf Вашего локального сервера, добавив в его конец следующую строку:
authpriv.*;mail.*;local7.*;auth.*;daemon.info @mail
где mail имя удаленного сервера. Теперь, если взломщик сотрет все лог-файлы Вашего сервера, у Вас останутся их копии на другой машине. По ним Вы сможете отследить, кто и какие действия предпринял.
Перезагрузите демон syslog, чтобы изменения вступили в силу:
[root@deep]# /etc/rc.d/init.d/syslog restart
Так же как и на удаленном сервере, Вам надо добавить новое правило для firewall и на локальной машине:
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR 514 \ -d $SYSLOG_SERVER 514 -j ACCEPT
где
EXTERNAL_INTERFACE="eth0" в файле настроек firewall.
IPADDR="208.164.186.1" в файле настроек firewall.
SYSLOG_SERVER="mail.openarch.com" в файле настроек firewall.
Перезагрузите брандмауэр, чтобы изменения вступили в силу:
[root@deep]# /etc/rc.d/init.d/firewall restart
Это правило разрешает прохождение исходящих пакетов к удаленному серверу на порт 514 (порт сервиса syslog).
Для получения большей информации о firewall читайте главу 7 "Сетевой брандмауэр".
Замечание: никогда не используйте в качестве syslog-сервера маршрутизирующие сервера. При использовании программы sysklogd существует множество опций. Для получения более подробной информации читайте man к sysklogd (8), syslog(2), и syslog.conf(5).
Установка прав доступа к скриптам запуска сервисов, расположенных в каталоге /etc/rc.d/init.d.
Установите права доступа к скриптам, которые отвечают за запуск и остановку сервисов:
[root@deep]# chmod -R 700 /etc/rc.d/init.d/*
Только пользователю root позволено читать, записывать и запускать эти скрипты. Я не думаю, что обычным пользователям необходимо знать об их содержании.
Замечание. Если Вы устанавливаете новую программу или обновляете существующую, которая использует инициализационные скрипты System V, расположенные в /etc/rc.d/init.d, то не забудьте проверить и при необходимости изменить права доступа к ним.
Файл /etc/rc.d/rc.local
По умолчанию, когда Вы подключаетесь к Linux-системе, Вам выдается сообщение об имени дистрибутива, его версии, версии ядра и имени сервера. Это совершенно не нужно, так как дает много информации злоумышленнику. Вы должны оставить только запрос "Login:".
Шаг 1.
Чтобы сделать это, закомментируйте следующие строки в файле /etc/rc.d/rc.local:
# Эти строки будут заменять содержимое файла /etc/issue # при каждой перезагрузке. #echo "" > /etc/issue #echo "$R" >> /etc/issue #echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue #cp -f /etc/issue /etc/issue.net #echo >> /etc/issue
Шаг 2.
Удалите файлы issue.net и issue в каталоге /etc:
[root@deep]# rm -f /etc/issue [root@deep]# rm -f /etc/issue.net
Замечание. Файл /etc/issue.net содержит информации, которая выдается всякий раз, когда осуществляется сетевое подключение к серверу (например, через telnet или ssh). Он может быть найден в каталоге /etc, также как и файл issue, содержащий аналогичную информацию для локальных пользователей. Это простые текстовые файлы, и Вы можете их легко настраивать под свои нужды, но при этом необходимо изменить скрипт /etc/rc.d/rc.local, так как он при каждой перезагрузке пересоздает эти файлы.
Биты программ, подчиненных пользователю root
Все программы и файлы на Вашем компьютере с символом s в поле режима доступа имеют включенным бит SUID (-rwsr-xr-x) или SGID (-r-xr-sr-x). Так как эти программы дают особые привилегии пользователям, которые их выполняют, то важно удалить бит s с программ, владельцем которых является root и которым не нужны подобные возможности. Это осуществляется выполнением команды chmod a-s с именем файла в качестве аргумента.
К таким программам относятся:
- Программы, которые никогда не используются.
- Программы, которые должен запускать только root.
- Программы используемые редко и которые могут использоваться через механизм su root.
Мы поместили знак * рядом с программами, для которых бит s должен быть снят. Помните, что для корректной работы системы необходимы некоторые suid-программы.
Для нахождения всех файлов имеющих бит s, владельцами которых является root используйте команду:
[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls \ -lg {} \; *-rwsr-xr-x 1 root root 35168 Sep 22 23:35 /usr/bin/chage *-rwsr-xr-x 1 root root 36756 Sep 22 23:35 /usr/bin/gpasswd *-r-xr-sr-x 1 root tty 6788 Sep 6 18:17 /usr/bin/wall -rwsr-xr-x 1 root root 33152 Aug 16 16:35 /usr/bin/at -rwxr-sr-x 1 root man 34656 Sep 13 20:26 /usr/bin/man -r-s--x--x 1 root root 22312 Sep 25 11:52 /usr/bin/passwd -rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/suidperl -rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/sperl5.00503 -rwxr-sr-x 1 root slocate 24744 Sep 20 10:29 /usr/bin/slocate *-rws--x--x 1 root root 14024 Sep 9 01:01 /usr/bin/chfn *-rws--x--x 1 root root 13768 Sep 9 01:01 /usr/bin/chsh *-rws--x--x 1 root root 5576 Sep 9 01:01 /usr/bin/newgrp *-rwxr-sr-x 1 root tty 8328 Sep 9 01:01 /usr/bin/write -rwsr-xr-x 1 root root 21816 Sep 10 16:03 /usr/bin/crontab *-rwsr-xr-x 1 root root 5896 Nov 23 21:59 /usr/sbin/usernetctl *-rwsr-xr-x 1 root bin 16488 Jul 2 10:21 /usr/sbin/traceroute -rwxr-sr-x 1 root utmp 6096 Sep 13 20:11 /usr/sbin/utempter -rwsr-xr-x 1 root root 14124 Aug 17 22:31 /bin/su *-rwsr-xr-x 1 root root 53620 Sep 13 20:26 /bin/mount *-rwsr-xr-x 1 root root 26700 Sep 13 20:26 /bin/umount *-rwsr-xr-x 1 root root 18228 Sep 10 16:04 /bin/ping *-rwxr-sr-x 1 root root 3860 Nov 23 21:59 /sbin/netreport -r-sr-xr-x 1 root root 26309 Oct 11 20:48 /sbin/pwdb_chkpwd
Для отключения бита s введите следующие команды:
[root@deep]# chmod a-s /usr/bin/chage [root@deep]# chmod a-s /usr/bin/gpasswd [root@deep]# chmod a-s /usr/bin/wall [root@deep]# chmod a-s /usr/bin/chfn [root@deep]# chmod a-s /usr/bin/chsh [root@deep]# chmod a-s /usr/bin/newgrp [root@deep]# chmod a-s /usr/bin/write [root@deep]# chmod a-s /usr/sbin/usernetctl [root@deep]# chmod a-s /usr/sbin/traceroute [root@deep]# chmod a-s /bin/mount [root@deep]# chmod a-s /bin/umount [root@deep]# chmod a-s /bin/ping [root@deep]# chmod a-s /sbin/netreport
Если Вы хотите узнать, что делает каждая из программ используйте руководство man. Например,
[root@deep]# man netreport
Параметры, настраиваемые в ядре
В новой версии Red Hat 6.2 все параметры ядра, доступные через /proc/sys могут быть настроены при запуске. Вы можете использовать для этого новый файл /etc/sysctl.conf. Он читается и загружается каждый раз при загрузке системы. Все изменения в /proc/sys должны осуществляться через /etc/sysctl.conf, так как он загружается раньше rc.local и других пользовательских скриптов. Ниже мы опишем все опции, связанные с сетевой безопасностью, которые Вы должны настроить для Вашего сервера Red Hat 6.1 и Red Hat 6.2.
Предохранение Вашей системы от ответов на ping-запросы
Предохранение Вашей системы от ответов на ping-запросы существенно улучшит сетевую безопасность Вашей системы, так как никто не сможет послать к Вам ping и получить на него ответ. Протокол TCP/IP имеет ряд слабых мест, которые позволяют нападающим использовать в своих целях внешне благоприятные пакеты. Защита сервера от ping может уменьшить эту проблему.
Под Red Hat 6.1
[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера. Невосприимчивость к ping спасет Вас от многих хакеров, потому что они даже не узнают о Вашем существовании. Для восстановления способности отвечать на ping введите следующую команду:
[root@deep /]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Под Red Hat 6.2
Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
# Enable ignoring ping request net.ipv4.icmp_echo_ignore_all = 1
Вы должны перезагрузить сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ]
Предохранение Вашей системы от ответов на широковещательные запросы
Так же как и ping-запросы, необходимо отключить и широковещательные сообщения. Когда IP-пакет отправляется на широковещательный адрес (например, 192.168.1.255), он принимается всеми машинами в сети. Затем все машины отвечают на него ICMP эхо-ответом, в результате может возникнуть перегрузка в сети или полный выход из строя (DoS-атака). Для получения большей информации читайте RFC 2644.
Под Red Hat 6.1
[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
# Enable ignoring broadcasts request net.ipv4.icmp_echo_ignore_broadcasts = 1
Вы должны перезагрузить Ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Протоколы маршрутизации
Маршрутизация и протоколы маршрутизации могут создавать ряд проблем. При IP-маршрутизации от источника сообщений, информация о маршруте хранится в IP-пакете и, согласно RFC 1122, ответ должен возвращаться по тому же маршруту. Если нападающий сможет послать пакет в Вашу сеть, то он сможет перехватывать ответы и заставлять думать Ваш сервер, что обмен данными происходит с доверенным хостом. Я рекомендую блокировать IP-маршрутизацию от источника, чтобы закрыть эту дыру.
Чтобы заблокировать IP-маршрутизацию от источника введите следующую команду:
Под Red Hat 6.1
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do > echo 0 > $f > done
Добавьте эти строки в файл /etc/rc.d/rc.local, чтобы они выполнялись при каждой загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
# Disables IP source routing net.ipv4.conf.all.accept_source_route = 0
Вы должны перезагрузить Ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Замечание. Введенные выше команды будет отключать маршрутизацию от источника для всех интерфейсов (lo, ethN, pppN и т. д.).
Включение защиты от TCP SYN Cookie
SYN Attack относится к классу атак "Отказ в обслуживании", которая отбирает на себя все ресурсы сервера и вызывает его перезагрузку. DoS-атаки (нападения, которые выводят сервер из строя из-за большого трафика к серверу, в результате чего сервер не может ответить на поступающие запросы) легко осуществляются из внутренней сети и Интернета. В ядрах 2.1 появилась опция, которая позволяет защитить компьютер от подобной атаки, но по умолчанию она не включена. Для ее включения сделайте следующее:
Под Red Hat 6.1
[root@deep]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
# Enable TCP SYN Cookie Protection net.ipv4.tcp_syncookies = 1
Вы должны перезагрузить Ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Замечание. Если при выполнении вышеприведенной команды Вы получили сообщение об ошибке, то проверьте, включена ли у Вас в ядре опция TCP syncookies. (IP: TCP syncookie support (not enabled per default) (CONFIG_SYN_COOKIES) [Y/n/?]).
Запрещение приема ICMP redirect-пакетов
Когда хост использует неоптимальный или "умерший" маршрут к адресату, маршрутизатор отправляет ему ICMP redirect-пакет, который информирует о необходимости изменить маршрут. Если атакующий сможет подделать этот пакет, то он сможет изменить таблицу маршрутизации на компьютере и нарушить его защиту, вызвав отправку информации по неправильному маршруту.
Под Red Hat 6.1
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do > echo 0 > $f > done
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
# Disable ICMP Redirect Acceptance net.ipv4.conf.all.accept_redirects = 0
Вы должны перезагрузить Ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Замечание. Введенные выше команды будет отключать прием ICMP redirect-пакетов для всех интерфейсов (lo, ethN, pppN и т. д.).
Включение always-defragging защиты
Эта защиту необходимо включить, если Вы используете Linux-сервер как шлюз с маскарадингом трафика (IP Masquerading).
Под Red Hat 6.1
[root@deep /]# echo 1 > /proc/sys/net/ipv4/ip_always_defrag
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
# Enable always defragging Protection net.ipv4.ip_always_defrag = 1
Вы должны перезагрузить Ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Включение защиты от неправильных сообщениях об ошибках
Эта опция будет предупреждать Вас обо все неправильных сообщениях об ошибке.
Под Red Hat 6.1
[root@deep /]# echo 1>/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
# Enable bad error message Protection net.ipv4.icmp_ignore_bogus_error_responses = 1
Вы должны перезагрузить Ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Включение защиты от IP-spoofing
Защита от IP-spoofing предупреждает Вашу сеть от взаимодействия с ложными источниками сообщений, которые часто используются в DoS-атаках.
Под Red Hat 6.1
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do > echo 1 > $f > done
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
# Enable IP spoofing protection, turn on Source Address Verification net.ipv4.conf.all.rp_filter = 1
Вы должны перезагрузить Ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Фиксирование пакетов с поддельными адресами (spoof), пакетов с маршрутизацией от источника и Redirect-пакетов
Эта защита будет фиксировать все пакеты с поддельными адресами (spoof), пакеты с маршрутизацией от источника и Redirect-пакеты в Ваших лог-файлах.
Под Red Hat 6.1
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/log_martians; do > echo 1 > $f > done
Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
# Log Spoofed Packets, Source Routed Packets, Redirect Packets net.ipv4.conf.all.log_martians = 1
Вы должны перезагрузить Ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Странные или скрытые файлы
Проверьте Вашу систему на наличие странных или скрытых файлов (файлы, которые запускаются периодически и не показываются командой ls), поскольку они могут использоваться для скрытия утилит и информации (программы взлома паролей, парольные файлы из других систем и др.). Обычной методикой в UNIX-системах является расположение скрытых каталогов с необычными именами в пользовательских логинах, например, ".", ".. " (точка точка пробел) или "..^G" (точка точка ctrl-G). Программа find может быть использована для поиска таких программ. Например:
[root@deep]# find / -name ".. " -print -xdev [root@deep]# find / -name ".*" -print -xdev | cat -v
Также часто используются файлы с именами подобными .mail или .xx.
Поиск всех файлов с включенными битами SUID/SGID
SUID и SGID-файлы являются потенциальными источниками нарушения безопасности, потому что дают особые привилегии пользователям, которые их выполняют, и поэтому должны быть внимательно проверены и по возможности отключены.
Любимым трюком взломщиков является exploit SUID root программ, чтобы в дальнейшем использовать их как скрытый вход в систему. Поэтому Вам необходимо находить и внимательно следить за всеми SUID/SGID-программами, чтобы вовремя заметить изменения, внесенные кем-то в них. Используйте следующую команду для поиска всех SUID/SGID-программ на сервере:
[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \ -exec ls -lg {} \;
Замечание. Читайте в этой книге главу 10 "Программное обеспечение обеспечения безопасности (утилиты слежения)", где приведена информация о программе sXid, которая поможет автоматизировать подобные задачи и будет высылать отчеты по электронной почте.
Поиск программ и каталогов, в которые разрешена запись для группы и всех остальных пользователей
Некоторые системные файлы могут предстать как дыра в безопасности, если хакер получит доступ к системе и сможет модифицировать их. Кроме того, дополнительную опасность представляют каталоги полностью открытые для записи. В них нарушитель легко может записывать и удалять файлы. В нормальном состоянии системы существует несколько файлов открытых для записи, включая несколько в каталоге /dev.
Для нахождения файлов и каталогов полностью открытых для записи используйте следующие команды:
[root@deep]# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \; [root@deep]# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \;
Замечание. Для облегчения регулярного поиска и проверки подобных файлов и каталогов можно использовать специализированное программное обеспечение, например, Tripwire. Большую информацию об этом программном продукте можно прочитать в главе 12 "Программы обеспечения безопасности (целостность системы)".
Файлы, не имеющие владельцев
Наличие файлов не имеющих владельцев может указывать на вторжение в систему. Никогда не принимайте подобные файлы. Если Вы нашли файлы и каталоги не имеющие владельцев в Вашей системе, то внимательно проверьте их, и если с ними все в порядке, определите владельца. Иногда Вы можете деинсталлировать некоторые программы, и в результате останутся файлы и каталоги без владельца, в этом случае спокойно удалите их.
Для поиска файлов и каталогов не имеющих владельца используйте команду:
[root@deep]# find / -nouser -o -nogroup
Замечание. Файлы, найденные в каталоге /dev, не считаются неправильными.
Поиск .rhosts-файлов
Файлы .rhosts являются частью постоянной работы системного администратора, так как этим файлам не должно найтись места на Вашей системе. Помните, что нарушителю нужен только один небезопасный логин пользователя, чтобы в будущем получить доступ в Вашу сеть. Вы можете найти файлы .rhosts, используя команду:
[root@deep]# find /home -name .rhosts
Можно использовать задания cron, чтобы регулярно искать, проверять и удалять файлы $HOME/.rhosts. Не забудьте предупредить пользователей о подобной проверке.
Чтобы использовать cron для периодической проверки и отсылки отчетов через электронную почту о наличие всех .rhosts-файлов сделайте следующее: Создайте от пользователя root скрипт find_rhosts_files в каталоге /etc/cron.daily (touch /etc/cron.daily/find_rhosts_files) и внесите в него следующие строки:
#!/bin/sh /usr/bin/find /home -name .rhosts | (cat <<EOF This is an automated report of possible existent ".rhosts" files on the server deep.openarch.com, generated by the find utility command. New detected ".rhosts" files under the "/home" directory include: EOF cat ) | /bin/mail -s "Content of .rhosts file audit report" root
Сделайте этот скрипт исполняемым и проверьте, чтобы пользователем и группой, владеющими этим файлом, были root:
[root@deep]# chmod 755 /etc/cron.daily/find_rhosts_files [root@deep]# chown 0.0 /etc/cron.daily/find_rhosts_files
Каждый день по почте пользователю root будут поступать письма с темой: "Content of .rhosts file audit report", содержащие список найденных файлов .rhosts.
Система была взломана
Если Вы поняли, что Ваша система была взломана, то взаимодействуйте с CERT
Coordination Center или с Вашим представителем в FIRST (Forum of Incident
Response and Security Teams).
Internet Email: cert@cert.org
CERT Hotline: (+1) 412-268-7090
Facsimile: (+1) 412-268-6989
CERT/CC отвечает на личные вопросы 8:00 a.m.-8:00 p.m. EST (GMT -5)/EDT
(GMT -4)) по рабочим дным, в критических ситуациях можно звонить в
выходные и праздничные дни.