ЛЕКЦИОННОННЫЙ МАТЕРИАЛ ПО ДИСЦИПЛИНЕ "ЗАЩИТА ИНФОРМАЦИИ"
В лекции рассмотрены вопросы безопасности в ОС
Unix, настройка данной ОС, управление пользователями и системой, поиск
вторжений в данную ОС.
На
протяжении большей части истории интернета системы Unix обеспечивали наивысший
уровень функционирования служб в сети. Когда хакеры стали серьезной проблемой
для всемирной сети, системам Unix начали уделять все больше внимания. На
сегодняшний день большая часть систем в интернете работает под управлением ОС
Unix, и для надежной защиты от хакеров эти системы должны быть правильно
настроены.
В данной
лекции приводятся некоторые базовые соображения безопасности, связанные с
построением и защитой системы Unix. Ввиду большого числа доступных на рынке
Unix-систем точные местоположения файлов и команды не являются абсолютно
правильными для всех версий Unix. Где это представляется возможным, автор
указывает корректировочную информацию для систем Sun Solaris и Linux.
Настройка
системы
После
построения системы Unix в ней, как правило, присутствует ряд уязвимостей.
Большую их часть можно устранить посредством обновления системы или внесения
изменений в конфигурационные файлы. В следующих разделах выделяются наиболее
распространенные проблемы безопасности и способы их устранения.
Файлы
загрузки
Системы
Unix настраиваются при загрузке с использованием соответствующих загрузочных
файлов. В зависимости от версии Unix файлы загрузки могут располагаться в
различных местах. В системе Solaris файлы загрузки находятся в каталоге /etc/rc2.d, в системе Linux - в каталоге /etc/rc.d/rc2.d.
В различных версиях Unix файлы могут располагаться в различных местах, это
расположение действительно для Red Hat.
В файлах
загрузки запускается ряд служб. Некоторые из них (сеть, монтировка файловых
систем и журнал запуска) необходимы для функционирования системы, и ничто не
должно препятствовать их работе. Другие службы не являются столь критичными и
запускаются в зависимости от того, каким образом используется система. Чтобы
предотвратить запуск службы, просто измените имя файла. Убедитесь, что новое
имя файла не начинается с буквы S или K. Рекомендуется размещать в качестве
первого символа точку (<.>) в имени файла (это скрывает файл от
просмотра, поэтому его нельзя будет перепутать с функционирующим файлом). Если
служба не понадобится в будущем, файл можно удалить.
Службы,
обычно запускаемые при помощи файлов загрузки, включают в себя следующие
сервисы:
Inetd;
NFS;
NTP;
Routed;
RPC;
Sendmail;
Web servers.
Необходимо
обязательно просмотреть файлы загрузки и определить, не запускаются ли
необязательные службы (в следующем разделе рассказывается о том, как выявлять
необязательные службы).
Совет
Начните с
перечня служб, необходимых для предполагаемого использования системы. После
выявления этого перечня отключите все остальные службы.
Службы,
работу которых следует разрешить
Набор
служб, выбранных для систем Unix, зависит от того, каким образом они будут
использоваться. Некоторые из этих служб будут запускаться с помощью файлов
загрузки; ряд служб контролируется через сервис inetd
и настраивается в файле /etc/inetd.conf.
Приведенный ниже текст представляет собой часть файла inetd.conf
системы Solaris. Строки, начинающиеся с символа решетки <#> -
комментарии.
#ident
"@(#)inetd.conf 1.27 96/09/24 SMI"
/*SVr4.0
1.5 */
# Ftp
and telnet are standard Internet services.
ftp
stream tcp nowait root
/usr/sbin/in.ftpd
in.ftpd
#telnet
stream tcp nowait root /usr/sbin/in.telnetd
in.telnetd
#
#
Shell, login, exec, comsat and talk are BSD
protocols.
#shell
stream tcp nowait root
/usr/sbin/in.rshd
in.rshd
#login
stream tcp nowait root /usr/sbin/in.rlogind
in.rlogind
#exec
stream tcp nowait root
/usr/sbin/in.rexecd
in.rexecd
#comsat
dgram udp wait root
/usr/sbin/in.comsat
in.comsat
#talk dgram udp
wait root
/usr/sbin/in.talkd
in.talkd
#
#
Solstice system and network administration class agent server
#100232/10
tli rpc/udp
wait root /usr/sbin/sadmind sadmind
Файл inetd.conf не только контролирует службы типа FTP и telnet, но и некоторые службы RPC. Файл inetd.conf
необходимо очень внимательно проверять на предмет того, что в нем
сконфигурированы только необходимые службы. После правильной настройки файла
необходимо перезапустить службу inetd посредством
следующей команды:
#kill -HUP
<номер процесса inetd>
Команда
-HUP вызывает повторное считывание службой inetd ее
конфигурационного файла.
Многие
службы, настраиваемые по умолчанию на системах Unix, необходимо отключить. Ниже
приведен перечень этих служб.
Chargen rexd Systat
Discard Routed Tftp
Echo Rquotad Uucp
Finger Rusersd Walld
netstat sprayd
Кроме
того, можно отключить службы Daytime, Time и SNMPD,
если они не используются. Служба Time может использоваться некоторыми системами
синхронизации, а служба SNMPD - для управления системой.
Как видно
из приведенного выше фрагмента содержимого файла inetd.conf,
службы telnet и FTP, как правило, настроены на
рабочее состояние. Эти два протокола позволяют передавать идентификаторы
пользователей и пароли через сеть в открытом виде. Возможно использование
шифрующих версий этих протоколов для защиты паролей. При работе через telnet рекомендуется использовать Secure Shell (SSH).
Некоторые версии SSH входят в программу Secure Copy
(SCP) для передачи файлов.
Сетевая
файловая система
Внутри
организации может потребоваться использование файловой си стемы
Network File System (NFS). Если это не так, отключите NFS на лю бой системе, на которой не требуется ее использование.
NFS предназна чена для
монтирования файловой системы с одной системы на другую. Если NFS настроена
неправильно, то велика вероятность того, что кто то
получит доступ к секретным файлам. Чтобы правильно настроить NFS, следует
соответствующим образом изменить файл /etc/dfs/dfstab.
Примечание
Неблагоразумно разрешать экспорт файловых систем во
внешнюю среду из рассматриваемой организации.
Системы
DMZ
Системы
Unix, используемые в DMZ как веб-серверы, почтовые серверы или серверы DNS,
должны настраиваться еще более тщательно с точки зрения безопасности, чем
системы, используемые исключительно внутри сети. Такие системы, как правило, не
требуют использования служб RPC и NFS. Эти две службы можно удалить посредством
внесения изменений в файлы загрузки.
Серверы и
рабочие станции
В
некоторых организациях операционная система Unix используется как на серверах,
так и на рабочих станциях. При использовании на рабочей станции система обычно
настраивается на функционирование системы X Window
System. На системах Solaris в этом случае используется программа ToolTalk (RPC-программа, предназначенная для связи между
приложениями).
Эти службы
не нужны на серверах, а службы DNS и routed не
требуются на рабочих станциях. Необходимо разработать руководство по настройке
серверов и руководство для настройки рабочих станций, если система Unix
используется описанным выше образом.
Примечание
Программа ToolTalk контролируется посредством inetd.conf
на системах Solaris. Чтобы отключить эту программу, необходимо закомментировать
следующую строку:
100083/1 tli rpc/tcp
wait root /usr/dt/bin/rpc.ttdbserverd/usr/dt/bin/rpc.ttdbserverd.
Использование
программ TCP Wrappers
Программы
TCP Wrappers (доступны по адресу ftp://ftp.porcupine.org/pub/security)
используются для обеспечения дополнительного уровня защиты в случае применения
служб telnet или FTP. Как видно из названия,
программы TCP Wrappers (wrap
- оболочка) создают "оболочку" для служб telnet
и FTP с целью обеспечения дополнительного контроля доступа и ведения журналов.
Для использования программы TCP Wrappers необходимо
настроить файл inetd.conf так, чтобы строки telnet и FTP выглядели следующим образом:
ftp
stream tcp nowait root /usr/local/bin/tcpd /usr/sbin/in.ftpd
telnet
stream tcp nowait root /usr/local/bin/tcpd /usr/sbin/in.telnetd
Эти строки
вызывают запуск TCP Wrappers (tcpd)
службой inetd, когда кто-либо пытается установить с
системой сеанс связи через telnet или FTP.
Примечание
TCP Wrappers можно использовать и для других служб, таких как
POP и IMAP. Нужно просто внести соответствующие изменения в строки
конфигурации, представленные выше.
TCP Wrappers можно настроить на блокировку или разрешение
определенным узлам или сетям доступа к службам telnet
и FTP. Файлы, используемые для этих действий по настройке, -
это файлы /etc/hosts.allow
и /etc/hosts.deny.
Синтаксис для работы с этими файлами выглядит следующим образом:
<имя
программы-оболочки>:
<ip-адрес>/<маска сети>
Следующие
файлы представляют собой примеры файлов конфигурации TCP Wrapper.
hosts.allow:
#Allow
telnets from my internal network (10.1.1.x)
in.telnet: 10.1.1.0/255.255.255.0
#Allow
ftp from the world
in.ftpd: 0.0.0.0/0.0.0.0
hosts.deny:
#Deny
telnets from anywhere else
in.telnetd: 0.0.0.0/0.0.0.0
Файл hosts.allow оценивается в первую
очередь, после чего обрабатывается файл hosts.deny.
Следовательно, можно сначала настроить все системы, которым разрешено работать
с различными службами, после чего запретить все остальное в файле hosts.deny. Кроме того, следует
внести изменение в настройку журнала, чтобы разрешить TCP Wrappers
заносить данные в журнал системы. Это изменение описано в разделе "Файлы
журнала" далее в лекции.
Файлы
конфигурации системы
Существует
ряд изменений, которые можно внести в файлы конфигурации системы Unix, чтобы
увеличить общий уровень безопасности системы. Это могут быть как
предупреждающие сообщения, так и защита от переполнения буфера на некоторых
системах. Любые изменения должны вноситься в конфигурацию в соответствии с
политикой безопасности организации.
Внимание!
Имейте в
виду, что в различных версиях систем Unix файлы конфигурации располагаются в
различных местах. Обратитесь к руководствам или инструкциям конкретной
используемой версии Unix, чтобы удостовериться в корректности вносимых
изменений в отношении рассматриваемой версии системы.
Сообщения
Приветственные
сообщения могут использоваться для заявления о правах собственности перед
входом пользователя в систему. Сообщение должно быть написано на языке,
разрешенном для использования юридическим отделом организации.
Приветственное
сообщение хранится в /etc/motd
(сокр. от "message of the day" - сообщение дня).
Однако это сообщение отображается не перед входом пользователя в систему, а
после него. Большинство уведомлений, связанных с юридическими вопросами,
необходимо отображать перед входом пользователя в систему.
Чтобы
сообщение отображалось перед входом пользователя в систему, используйте
следующий способ. В ОС Solaris предварительное уведомление хранится в каталоге /etc/default/telnetd.
Можно создать сообщения входа для FTP посредством редактирования файла /etc/default/ftpd.
Для создания сообщения добавьте в файл строку, аналогичную следующей:
BANNER="\n\n<EnterYourLegalMessageHere\n\n"
Параметр \n
означает новую строку. Поэкспериментируйте с символами новой строки, чтобы
сообщение приняло нужный вам вид.
В системах
Linux для сообщений telnet используются два файла: /etc/issue и /etc/issue.net.
Файл issue применяется для терминалов, подключенных
напрямую, а issue.net используется в том случае, когда кто-либо устанавливает
по сети соединение через telnet с рассматриваемой
системой. К сожалению, только на изменении этих файлов создание сообщения не
закончится, так как они создаются заново при каждой загрузке системы. Однако
можно изменить сценарий загрузки, создающий эти файлы.
Файлы
создаются в сценарии загрузки /etc/rc.d/rc.local. Чтобы
предотвратить автоматическое создание /etc/issue и /etc/issue.net,
закомментируйте следующие строки /etc/rc.d/rc.local:
# This
will overwrite /etc/issue at every boot. So, make any
changes you
# want to make to /etc/issue here or
you will lose them when you reboot.
echo
"" > /etc/issue
echo
"$R" > /etc/issue
echo
"Kernel $(uname -r) on $a $SMP$(uname -m)" >> /etc/issue
После
этого можно изменить /etc/issue
и /etc/issue.net, введя в них соответствующий текст с
заявлением о правах.
Настройки
паролей
Существует
три этапа процедуры управления паролями в системе Unix.
Настройка
требований к паролям.
Запрет на
вход без пароля.
Указание
требований к содержимому паролей.
Настройка
требований к паролю. В
системах Unix требования к возрасту паролей и их длине устанавливаются
посредством изменения файла конфигурации. В системе Solaris этим файлом
является /etc/default/passwd. Файл содержит приведенные ниже строки, которые
следует редактировать для соответствия политике безопасности организации.
#ident "@(#)passwd.dfl 1.3 92/07/14
SMI"
MAXWEEKS=7
MINWEEKS=1
PASSLENGTH=8
Внимание!
Будьте
внимательны при указании значений максимального и минимального срока действия
паролей, так как система воспринимает вводимые значения как количество недель,
а не дней.
Вопрос к
эксперту
Вопрос. Где системный администратор может узнать о том,
как следует настроить систему?
Ответ. Определение требований к конфигурации систем
всегда начинается с политики безопасности организации. В каждой организации
должны быть разработаны процедуры конфигурации, специфичные для конкретной
используемой системы; при этом необходимо руководствоваться политикой
безопасности. Эти процедуры должны определять, каким образом следует
настраивать систему с использованием конкретной операционной системы, чтобы
обеспечить соответствие ОС требованиям политики безопасности.
В системах
Linux требования к паролям находятся в файле /etc/login.defs. Следующие строки файла /etc/login.defs представляют собой настраиваемые параметры:
#
Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS
45
PASS_MIN_DAYS
1
PASS_MIN_LEN
8
PASS_WARN_AGE
7
Внимание!
Имейте в
виду, что в системах Linux минимальные и максимальные значения возраста паролей
указываются в днях.
Linux
также позволяет предупреждать пользователей о том, что до окончания срока
действия пароля осталось несколько дней.
Запрет на
вход без пароля.
Программы rlogin, rsh и rexec позволяют пользователям осуществлять вход в систему с
определенных систем без указания пароля вручную. Этого делать не рекомендуется,
так как злоумышленник, проникший в одну из систем, может таким образом получить
доступ к остальным компьютерам. Помимо удаления служб rlogin,
rsh и rexec из /etc/inetd.conf следует
удостовериться в том, что файл /etc/host.equiv и любые файлы .rhost, имеющиеся в системе, найдены и удалены. Не
забудьте также проверить домашние каталоги всех пользователей.
Указание
требований к содержимому паролей. Запрет пользователям на выбор ненадежных паролей является одним из
наилучших способов повышения уровня безопасности системы. К сожалению, до
недавнего времени в системах Unix существовало несколько простых способов это
сделать. Программы типа passwd+ и npasswd
имеются для Linux, но не для Solaris. Обе эти программы позволяют указывать
требования к надежности паролей и вынуждают пользователей выбирать пароли,
соответствующие установленным правилам.
С выходом
Solaris 2.6 и более поздних реализаций Linux появилось более совершенное
средство отслеживания надежности паролей пользователей - это
Pluggable Authentication Modules (PAM). Более подробная информация о PAM и о том,
как создать фильтры паролей, находится по адресу http://www.sun.com/solaris/pam/;
для системы Linux - по адресу ftp://ftp.kernel.org/pub/linux/libs/pam/index.html.
Примечание
Некоторые
версии Unix, в особенности HPUX, поставляются с настройками по умолчанию
надежности паролей для обеспечения безопасности. В них указывается набор
блокировок для учетных записей на случай слишком большого числа неудачных
попыток входа в систему.
Контроль
доступа к файлам
В системе
Unix доступ к файлам контролируется посредством набора разрешений. Для
владельца файла, группы, которой принадлежит файл, и для всех остальных лиц
можно присваивать привилегии чтения, записи и выполнения. Файловые разрешения
изменяются посредством команды chmod. Как правило, не
рекомендуется разрешать пользователям создавать файлы, доступные для чтения или
записи для любых лиц. Такие файлы могут считываться или записываться любым
пользователем системы. Если злоумышленник получит доступ к идентификатору
пользователя, он сможет считать или изменить любые из таких файлов.
Так как
достаточно трудно убедить всех пользователей в необходимости изменять
разрешения доступа к файлу при его создании, разумно создать механизм,
используемый по умолчанию, предназначенный для настройки соответствующих
разрешений при автоматическом создании файла. Это можно осуществить с помощью
параметра unmask. В системах Solaris этот параметр
располагается в файле /etc/default/login, в системах Linux - в /etc/profile. Команда выполняется следующим образом:
unmask 077
Цифры,
указываемые после команды, определяют разрешения, которые не будут присвоены по
умолчанию вновь создаваемому файлу. Первая цифра определяет разрешения
относительно владельца файла, вторая цифра указывает разрешения для группы, а
третья - для всех остальных пользователей. В случае, рассмотренном выше, все
новые файлы присваивают разрешения чтения, записи и выполнения владельцу того
или иного файла, а группе и всем остальным пользователям не предоставляется
никаких разрешений.
Разрешения
определяются числами следующим образом:
4 -
Разрешение на чтение
2 -
Разрешение на запись
1 -
Разрешение на выполнение
Следовательно,
если требуется разрешить группе иметь по умолчанию разрешение на чтение, но
запретить запись и выполнение, нужно указать команду unmask
037. Если требуется запретить группе запись, следует указать команду unmask 027.
Доступ
через корневую учетную запись
Как
правило, рекомендуется ограничивать прямой доступ с использованием корневой
учетной записи. При таком подходе даже администраторам необходимо сначала
выполнить вход систему с использованием их аутентификационных
данных, и только после этого с помощью команды su
получить доступ к корневой учетной записи. Это также обеспечивает создание
записей в журнале, отображающих, какие идентификаторы пользователей
использовались для получения доступа к корневой учетной записи. В качестве
альтернативы вместо команды su можно использовать
команду sudo. Команда sudo
обеспечивает дополнительные возможности по ведению журналов, заключающиеся в
фиксировании команд, выполняемых пользователями, работающими в корневой учетной
записи.
Существует
возможность ограничить вход под корневой учетной записью таким образом, чтобы
его можно было осуществлять только из консоли Solaris или Linux. В системе
Solaris следует изменить файл /etc/default/login и убедиться в том,
что следующая строка не закомментирована:
# If
CONSOLE is set, root can only login on that device.
#
Comment this line out to allow remote login by root.
#
CONSOLE=/dev/console
Посредством
этого система разрешит прямой вход в корневую учетную запись только через
консоль. В системе Linux можно реализовать аналогичную конфигурацию, редактируя
файл /etc/securetty. Этот
файл представляет собой список TTY, которые используются для входа в корневую
учетную запись. Содержимым этого файла должно быть /dev/tty1.
Если для управления системой используется последовательный канал связи, файл
должен содержать /dev/ttyS0. Сетевые TTY - это, как правило, /dev/ttyp1 и
выше.
Если
требуется контролировать корневой доступ к системе, рекомендуется осуществлять
контроль корневого доступа к FTP. Файл /etc/ftpusers и в системах Solaris, и в системах Linux
представляет перечень учетных записей, которым не разрешено осуществлять доступ
к системе через FTP. Убедитесь, что в данном списке присутствует корневая
учетная запись.
Защита от
переполнения буфера
Переполнение
буфера - одна из наиболее серьезных опасностей, угрожающих системе. Solaris
предоставляет способ предотвращения выполнения команд вне стека при проявлении
атак на переполнение буфера (см. лекцию 3 для получения более подробной
информации о переполнении буфера). Для этого необходимо добавить следующие
строки в файл /etc/system:
set noexec_user_stack=1
set noexec_user_stack_log=1
Первая
строка предотвращает выполнение команд вне стека, а вторая - заносит в журнал
данные о произведенных попытках.
Внимание!
Существует
ряд программ, которым требуется выполнять команды вне стека. Если внести
описанное изменение, то при работе этих программ возникнут сбои. Убедитесь, что
данная команда протестирована, прежде чем применять ее на системах.
Существует
несколько других проектов, предназначенных для повышения уровня защиты стека
Linux. Один из них расположен по адресу http://www.openwall.com/linux/.
Отключение
неиспользуемых учетных записей
В Unix
создается набор учетных записей, необходимых для различных целей (например,
владение некоторыми определенными файлами), которые никогда не используются для
входа в систему. Такими учетными записями являются sys,
uucp, nuucp и listen. Для каждой учетной записи следует изменить их
записи в файле /etc/shadow,
чтобы предотвратить успешный вход в систему с их помощью:
root:XDbBEEYtgskmk:10960:0:99999:7:::
bin:*LK*:10960:0:99999:7:::
daemon:*LK*:10960:0:99999:7:::
adm:*LK*:10960:0:99999:7:::
lp:*LK*:10960:0:99999:7:::
sync:*LK*:10960:0:99999:7:::
shutdown:*LK*:10960:0:99999:7:::
halt:*LK*:10960:0:99999:7:::
mail:*LK*:10960:0:99999:7:::
news:*LK*:10960:0:99999:7:::
uucp:*LK*:10960:0:99999:7:::
operator:*LK*:10960:0:99999:7:::
games:*LK*:10960:0:99999:7:::
gopher:*LK*:10960:0:99999:7:::
ftp:*LK*:10960:0:99999:7:::
nobody:*LK*:10960:0:99999:7:::
Второе
поле в каждой строке представляет собой поле пароля. В случае с обычными
пользовательскими учетными записями здесь располагается зашифрованный пароль.
Для учетных записей, вход посредством которых запрещен, второе поле должно
содержать какие-либо данные с символом "*". Символ "*" не
соответствует ни одному реальному паролю и, таким образом, не может быть угадан
или взломан. Посредством размещения в поле пароля соответствующих символов,
таких как "LK", можно явным образом сообщать о том, что данная
учетная запись заблокирована.
Обновления
Для
исправления ошибок и устранения уязвимостей для Unix выпускаются обновления и
"заплатки" аналогично тому, как это делается для операционных систем
семейства Windows. Обновления должны устанавливаться регулярно, чтобы
минимизировать число уязвимостей. Различные поставщики систем Unix выпускают
средства, помогающие в управлении обновлениями. Компания Sun предлагает
программу Solaris Sunsolve Patch
Manager, а Red Hat имеет онлайн-систему обновления в интернете (http://www.redhat.com/apps/support/errata/).
Примечание
При
загрузке обновлений для систем Solaris имейте в виду, что Sun размещает многие
обновления в кластере обновлений. Однако кластер обновлений может не содержать
некоторых обновлений безопасности. Может понадобиться загрузить их в отдельном
порядке и установить вручную.
Вопросы
для самопроверки
Файлы
загрузки в системе Linux расположены в __________.
Чтобы
предотвратить вход в в
систему без пароля, необходимо удалить из системы файлы __________ и
__________.
Управление
пользователями
Как в
случае с любой операционной системой, управление сообществом пользователей
является очень важным процессом для поддержки общей безопасности системы. В
организации должна присутствовать специальная процедура управления
пользователями, предусматривающая в деталях все действия, которые необходимо
выполнить, чтобы предоставить сотруднику доступ к системе (см. в лекции 6). В процедуре должны быть
определены шаги, которые следует предпринимать, когда сотрудник увольняется из
компании.
Следующие
разделы данной лекции содержат некоторые подробные рекомендации по управлению
пользователями в системах Unix. Имейте в виду, что существует множество
вариаций систем Unix. Средства, используемые для управления пользователями,
различны для каждого поставщика и версии операционной системы.
Добавление
пользователей в систему
В большей
части версий Unix имеются утилиты для добавления пользователей в систему. Здесь
ключевыми задачами являются следующие.
Добавление
имени пользователя в файл паролей.
Присвоение
соответствующего идентификатора пользователя.
Присвоение
соответствующего группового идентификатора.
Определение
соответствующей оболочки для входа в систему (некоторые пользователи могут
вовсе не иметь какой-либо оболочки).
Добавление
имени пользователя в теневой файл.
Указание
соответствующего начального пароля.
Определение
соответствующего псевдонима электронной почты.
Создание
домашнего каталога пользователя
Примечание
Большая
часть систем содержит утилиты по добавлению пользователей для обеспечения
автоматического выполнения этой задачи. В Linux для этого предназначена
программа adduser. В системе Solaris эта утилита
называется useradd.
Добавление имени пользователя в файл паролей
Файл /etc/passwd содержит перечень всех
имен пользователей, принадлежащих пользователям системы. Каждый пользователь
должен иметь уникальное имя, состоящее из восьми или менее символов. Для каждой
записи в файле паролей должно быть определено реальное лицо, ответственное за
учетную запись. Данную информацию можно добавить в поле GECOS (пятое поле в
каждой строке).
Присвоение
соответствующего идентификационного номера пользователя
Каждому
имени пользователя необходимо присвоить соответствующий идентификатор
пользователя (UID). UID должен быть уникальным в рамках всей системы. Как
правило, идентификатор пользователя должны быть больше 100. Он ни в коем случае
не должен быть равен 0, так как это идентификатор корневой учетной записи.
Внимание!
Система
использует UID для идентификации владельцев файлов в системе и, таким образом,
не рекомендуется даже повторное использование UID.
Присвоение соответствующего группового
идентификатора
Каждый
пользователь должен иметь главную группу. Присвойте этот номер имени
пользователя в файле /etc/passwd.
Обычные пользователи не должны быть членами группы "wheel",
так как она используется в административных целях.
Определение соответствующей оболочки для входа в
систему
Интерактивным
пользователям необходимо предоставить оболочку для входа в систему. Как
правило, это оболочки ksh, csh
или bash. Пользователям, которые не будут
осуществлять вход в систему, нужно предоставить программу, не являющуюся
оболочкой. Например, если имеются пользователи, которые только проверяют
электронную почту через POP или IMAP, им можно разрешить изменять свои пароли в
интерактивном режиме. В данном случае существует возможность определить
оболочку, указав в качестве нее /bin/passwd. При каждом подключении пользователей к системе
через telnet им будет предоставляться возможность
изменить пароль. По завершении этой операции пользователь будет выходить из
системы.
Добавление
имени пользователя в файл shadow
Пароли не
должны храниться в файле /etc/passwd,
так как этот файл доступен для чтения всем пользователям, и с его помощью
злоумышленник может осуществить взлом пароля. Пароли должны храниться в файле /etc/shadow. Следовательно, имя
пользователя должно быть добавлено и в файл /etc/shadow.
Присвоение соответствующего начального пароля
После
создания учетной записи следует установить начальный пароль. Большая часть
утилит, используемая для добавления пользователей в системы, предлагает сделать
это автоматически. В противном случае нужно войти в систему как пользователь и
выполнить команду passwd. После этого появится
предложение указать пароль для учетной записи. Начальные пароли должны быть
сложными для угадывания, и рекомендуется не использовать один и тот же
начальный пароль для всех учетных записей. Если используется один и тот же
начальный пароль, атакующий может использовать новые учетные записи, прежде чем
у легального пользователя появится возможность войти в систему и изменить
пароль.
Определение
соответствующего псевдонима электронной почты
При
создании пользователя он автоматически получает адрес электронной почты <имя_пользователя@host. Если пользователь хочет иметь другой
адрес электронной почты, такой как имя.фамилия@host,
то этот адрес можно присвоить посредством псевдонима электронной почты. Чтобы
добавить псевдоним, измените файл /etc/aliases. Формат этого файла таков:
Alias: username
После
создания псевдонима необходимо запустить программу newaliases,
чтобы создать файл alias.db.
Создание
домашнего каталога для пользователя
Каждый
пользователь должен иметь свой собственный домашний каталог. Этот каталог
определяется в файле /etc/passwd.
После создания каталога в соответствующем месте в системе (как правило, это
каталог /home или /export),
владельцем каталога назначается пользователь командой chown
следующим образом:
chown<username><directory name>
Удаление пользователей из системы
Когда
сотрудник увольняется из компании или переводится на другую работу, так что его
учетная запись становится ненужной, необходимо выполнить соответствующую
процедуру по управлению пользователями. В системе Unix все файлы пользователей
принадлежат UID пользователя. Следовательно, если пользовательский UID повторно
используется для новой учетной записи, эта новая учетная запись будет
предусматривать владение всеми файлами старого пользователя.
Изначально,
если пользователю больше не требуется учетная запись, ее следует заблокировать.
Это можно сделать посредством замены пароля пользователя в файле /etc/shadow символами
<*LK*>. По прошествии определенного числа дней (как правило, 30 дней),
файлы пользователя могут быть удалены. Время, отведенное менеджеру пользователя
на копирование или удаление файлов пользователя, требуемых организации, равно
30 дням.
Управление системой
Управление
системой Unix (относительно вопросов безопасности) заключается в ведении
журнала и отслеживании системы на наличие признаков подозрительной активности.
Системы Unix предоставляют достаточное количество информации о том, что
происходит в системе, а также набор средств, которые могут использоваться для
выявления подозрительной активности.
Аудит системы
В
большинстве случаев ведение системных журналов является стандартной процедурой,
выполняемой в большинстве версий Unix, и в них заносится достаточный объем
данных, связанных с безопасностью системы. В некоторых ситуациях требуется
проведение дополнительного аудита. В Solaris для этого предусмотрен модуль
Basic Security Module (BSM). BSM не включен в Solaris
по умолчанию. Необходимость в дополнительных возможностях здесь определяется
пользователем.
Чтобы
включить BSM, выполните сценарий /etc/security/bsmconv. При этом
запустится фоновая программа аудита, но перезагрузка системы не потребуется.
Файл /etc/security/audit_control используется для определения конфигурации
аудита. Полная информация по этому файлу находится в инструкции к ОС (man audit_control), однако для
начала рекомендуется использовать следующую конфигурацию:
#identify the location of the audit file directory
dir: <directory>
#identify the file system free space percentage when a
warning should occur
minfree: 20
#flags
for what to audit. This example audits login, administrative
#functions
and failed file reads, writes, and attribute changes
flags: lo,ad,-fm
#This
set of flags tells the system to also audit login and administrative
#events
that cannot be attributed to a user
naflags: lo,ad
Как только
файл будет настроен, начнут создаваться записи аудита. Для закрытия текущего
файла записи аудита и открытия нового файла используется команда audit -n. Команда praudit <имя
файла аудита> предназначена для просмотра содержимого файла аудита.
Внимание!
BSM
увеличивает общую нагрузку на систему и используется, только если уровень
защиты системы того требует.
Файлы журналов
Большая
часть систем Unix обеспечивает довольно широкие возможности по ведению журналов
в программе syslog. Syslog - это фоновая программа, выполняющаяся и фиксирующая данные
журнала согласно настройке. Syslog настраивается
через файл /etc/syslog.conf.
Следует заметить, файлы журналов должны просматриваться только корневым
пользователем, и никто не должен иметь возможности их изменять.
Большая
часть файлов syslog.conf направляет сообщения
журналов в /var/log/messages или /var/adm/log/messages.
Правильно написанный syslog.conf должен содержать
следующую команду конфигурации:
auth.info
/var/log/auth.log
С помощью
этой команды Unix собирает информацию о попытках входа, попытках выполнения
команды su, перезагрузке системы и других событиях,
так или иначе связанных с безопасностью системы. Данная команда также позволяет
программам TCP Wrappers заносить информацию в файл
auth.log. Обязательно создайте файл /var/log/auth.log для фиксирования этой информации:
#touch /var/log/auth.log
#chown root /var/log/auth.log
#chmod 600 /var/log/auth.log
В Solaris
при создании файла /var/adm/loginlog можно фиксировать неудачные попытки входа в
систему. Создайте файл следующим образом:
#touch /var/adm/loginlog
#chmod 600 /var/adm/loginlog
#chown root /var/adm/loginlog
#chgrp sys /var/adm/loginlog
Убедитесь,
что /var предоставлено достаточное количество
свободного пространства для ведения файлов журнала. Если /var
расположен в том же разделе, что и /, корневая файловая система переполнится
при сильном увеличении файлов журнала. Рекомендуется размещать каталог /var в другой файловой системе.
Скрытые файлы
Скрытые
файлы представляют собой потенциальную проблему для систем Unix. Любой файл,
начинающийся с точки (<.>), не отображается при выполнении стандартной
команды ls. Однако при использовании команды ls -a отобразятся все скрытые файлы. Хакеры научились
использовать скрытые файлы для маскировки своих действий. Злоумышленник может
просто скрыть свои файлы в скрытом каталоге. В других ситуациях хакеры могут
скрывать файлы в каталогах, которые трудно обнаружить администратору. Например,
если назвать каталог <...>, то он может остаться незамеченным. Добавление
пробела после третьей точки (<...>) делает каталог труднодоступным, если
не знать о наличии пробела. Чтобы отобразить все скрытые файлы и каталоги,
имеющиеся в системе, выполните следующую команду:
#find / -name '.*' -ls
Использование
-ls вместо -print позволяет
вывести более подробный список расположения файла. Следует периодически
выполнять эту команду и проверять любые новые скрытые файлы.
Файлы SUID и SGID
Файлы, для
которых разрешены полномочия Set UID (SUID) или Set Group ID (SGID), могут изменять идентификатор своего
активного пользователя или группы в процессе выполнения. Некоторым файлам
требуется такая возможность для выполнения своей работы, однако это должен быть
ограниченный набор файлов, и ни один из них не должен находиться в домашних
каталогах пользователей. Чтобы найти все файлы SUID и SGID, выполните следующие
команды:
#find / -type
f -perm -04000 -ls
#find / -type
f -perm -02000 -ls
При
построении системы необходимо выполнить данные команды и сохранить результаты
их выполнения. Периодически следует выполнять эти команды и сопоставлять
результаты с исходным списком. Любые обнаруженные изменения необходимо
исследовать.
Файлы, доступные для записи все пользователям
Файлы,
общедоступные для записи, являются еще одной потенциальной ошибкой в
конфигурации системы Unix. Такие файлы позволяют злоумышленнику создать
сценарий, который при выполнении будет использовать уязвимость. Если файлы SUID
и SGID доступны для записи всем пользователям, у атакующего появляется
возможность создать для самого себя самые обширные привилегии. Чтобы выявить
все файлы, общедоступные для записи, выполните следующую команду:
#find / -perm -2 -type f -ls
Следует
периодически выполнять эту команду, чтобы находить все общедоступные для записи
файлы, имеющиеся в системе.
Поиск признаков подозрительной активности
Мы уже описали некоторые признаки, которые
необходимо отслеживать в системе и которые могут означать проявление угрозы или
проникновение в систему (скрытые файлы, файлы SUID и SGID и общедоступные для
записи файлы). Существует несколько других способов проверки системы Unix на
наличие подозрительной активности.
Смешанный
режим
Интерфейс
находится в смешанном режиме, когда в системе работает сниффер
(сетевой анализатор пакетов). Сниффер переводит
интерфейс в смешанный режим; при этом происходит фиксирование всей информации,
проходящей через канал связи. Если при работе интерфейса в данном режиме
выполнить команда ifconfig -a, то появится сообщение
о том, что интерфейс находится в состоянии PROMISC (признак того, что работает
анализатор пакетов). Если сниффер запущен не
администратором системы, необходимо провести исследование причин этих
обстоятельств.
Примечание
Solaris не
выдает соответствующего отчета о том, что интерфейс находится в смешанном
режиме. Причиной этому является ошибка в программном обеспечении ядра. Чтобы
корректным образом проверить, находится ли интерфейс Solaris в смешанном
режиме, необходимо использовать команду ifstatus,
доступную по адресу ftp://ftp.cerias.purdue.edu/pub/tools/unix/sysutils/iftatus/.
netstat
Программа netstat используется для выяснения того, какие сетевые
соединения находятся в активном состоянии в системе Unix. Команду следует
использовать следующим образом: netstat -an. Аргумент "n" сообщает netstat
о том, что обработка IP-адресов не требуется.
Как видно
из результирующих данных, любая строка, содержащая слово "LISTEN",
означает, что имеется программа, прослушивающая этот порт. Прослушиваться
должны только сконфигурированные администратором порты. Если в системе
присутствует прослушиваемый порт, который не конфигурировался администратором,
систему необходимо проверить и выяснить, почему порт открыт.
Адреса,
отображаемые в столбце локальных адресов, заканчиваются номером локального
порта (число после столбца). Этот номер порта используется для определения
того, является ли соединение входящим или исходящим. Например, если номер
локального порта 23, то это входящее подключение к демону telnet.
Если номер локального порта равен 1035, а номер внешнего порта - 23, то это
исходящее соединение telnet.
lsof
Одна из
проблем, связанных с программой netstat, заключается
в том, что данная команда не сообщает, какой процесс поддерживает открытое
состояние порта. Поиск процесса, связанного с определенным портом, может стать
очень трудной задачей. Однако существует программа под названием lsof (http://ftp.cerias.purdue.edu/pub/tools/unix/sysutil/Isof/),
которая предоставляет такую информацию. Сразу после установки программы
выполните команду lsof -i, как показано ниже:
Как видно
из результатов выполнения программы, lsof выводит
перечень всех открытых портов с указанием того, какие процессы поддерживают
открытое состояние портов. Убедитесь, что вам известно, какие функции выполняет
каждый процесс, и почему открыт соответствующий ему порт.
Примечание
lsof заменяет номер порта в
столбце справа именем порта, если оно присутствует в файле /etc/services.
ps
Администратор
также должен изучать результаты выполнения команды ps.
Эта программа выводит все активные процессы, имеющиеся в системе, что
необходимо при поиске снифферов, так как сниффер может не отображаться в lsof
или в netstat. В большинстве систем выполнение
команды ps -ef выводит
перечень процессов в системе. В тех версиях Unix, где эта команда не работает,
следует выполнить команду ps -aux.
Результаты выполнения данной команды показаны ниже:
Следует
периодически проверять список процессов, работающих в системе. Если
обнаруживается что-либо незнакомое, то необходимо выяснить, что это такое.
Измененные
файлы
Когда
злоумышленник успешно проникает в систему, он может попытаться изменить
системные файлы для обеспечения продолжительного доступа к системе. Файлы,
передаваемые в систему, обычно называются "rootkit",
так как позволяют злоумышленнику осуществить доступ через корневую (root) учетную запись. В дополнение к таким программам, как снифферы, rootkit может содержать
двоичные замещения для следующих файлов:
ftpd passwd
inetd ps
login ssh
netstat telnetd
Как
правило, любой исполняемый файл, который может тем или иным образом помочь
злоумышленнику поддерживать доступ, является кандидатом на замещение. Наилучший
способ определить, был ли файл заменен - использовать криптографическую
контрольную сумму. Лучше всего создавать контрольные суммы всех системных
файлов при построении системы, после чего обновлять их при установке системных
обновлений. Необходимо хранить контрольные суммы на безопасной системе, чтобы
злоумышленник не мог изменить контрольные суммы при изменении файлов.
Если
имеются подозрения нелегального проникновения в систему, пересчитайте
контрольные суммы и сопоставьте их с исходными. Если они совпадают, то файлы
изменены не были. Если же контрольные суммы различны, рассматриваемому файлу
доверять не следует; его необходимо заменить оригиналом с установочного
носителя.
Совет
По адресу http://www.chkrootkit.org/
можно найти утилиту, которая помогает в проверке наличия в системе rootkit-ов.
Аудит
системы Unix
Этот
проект покажет пути проверки систему Unix на ошибки в конфигурации или на
наличие неизвестных процессов и учетных записей.
Шаг за
шагом
Начните с
системы Unix, к которой у вас имеется административный доступ (то есть у вас
имеется пароль к корневой учетной записи этой системы) и на которой можно
вносить изменения, не затрагивая рабочие приложения.
Найдите
файлы загрузки и определите, какие приложения запускаются при загрузке системы.
Выявите приложения, которые являются необходимыми для системы, и отключите все
остальные.
Просмотрите
файл inetd.conf и определите, какие службы включены.
Определите службы, необходимые для системы, и отключите все остальные. Не
забудьте выполнить команду kill -HUP для процесса inetd, чтобы перезапустить его с использованием новой
конфигурации.
Определите,
используется ли в системе NFS. Внесите соответствующие изменения в файл dfstab.
Если
система использует telnet или FTP, загрузите TCP Wrappers и установите программу в системе. Настройте TCP Wrappers на разрешение доступа только к telnet
и FTP, согласно требованиям системы.
Найдите
файл приветственного сообщения. Определите, используется ли корректное
приветственное сообщение. Если это не так, разместите в системе корректное
приветственное сообщение.
Выясните,
настроены ли в системе требуемые ограничения на пароли согласно политике
безопасности организации. Если это не так, внесите соответствующие настройки.
Определите,
настроен ли в системе должным образом параметр umask
по умолчанию. Если это не так, настройте umask
соответствующим образом.
Определите
требования для входа через корневую учетную запись. Если администраторам
требуется осуществлять вход сначала с использованием их собственного
идентификатора (ID), настройте соответствующим образом конфигурацию системы.
Проверьте
систему на наличие неиспользуемых учетных записей. Все подобные учетные записи
должны быть заблокированы.
Установите
в системе соответствующие обновления.
Проверьте
систему на некорректные пользовательские идентификаторы. В особенности следует
искать учетные записи с UID, значение которого равно 0.
Убедитесь
в том, что в системе ведется журнал подозрительной активности, и что файл syslog.conf настроен соответствующим образом.
Произведите
в системе поиск скрытых файлов. Если будут найдены необычные скрытые файлы,
исследуйте их, чтобы убедиться, что в систему никто не проник.
Произведите
поиск файлов SUID и SGID. Если будут обнаружены такие файлы, расположенные в
каталогах пользователей, исследуйте их, чтобы убедиться, что в систему никто не
проник.
Произведите
поиск файлов, общедоступных для записи. Если будут найдены такие файлы, либо
устраните проблему посредством изменения разрешений (сначала выясните, для чего
эти файлы используются), либо обратите на них внимание владельца.
Проверьте
сетевые интерфейсы на наличие любых неправильных настроек.
Проверьте
систему на предмет прослушиваемых (активных) портов. Если обнаружится
какое-либо несоответствие, найдите процесс, использующий порт, и определите,
должен ли данный процесс работать в системе.
Проверьте
таблицу процессов в системе и определите, выполняются ли какие-либо
несоответствующие процессы.
Выводы
В
зависимости от параметров проверяемой системы аудит может отнять некоторое
время. Кроме того, может потребоваться помощь различных пользователей системы.
Как вы увидите, гораздо легче сначала настроить систему корректным образом и
затем поддерживать ее, чем осуществлять аудит системы и устранять проблемы.
Контрольные
вопросы
При
отключении службы, запускаемой автоматически, что необходимо сделать в файле
загрузки?
Где
находится файл конфигурации для inetd?
Как
отключить службу для inetd?
Какие
функции выполняет TCP Wrappers после установки?
Почему не
следует размещать сообщение входа в /etc/motd?
Почему в
системе Linux необходимо размещать сообщение в /etc/issue и /etc/issue.net?
Каким
образом настройки возраста паролей в системе Solaris отличаются от аналогичных
настроек в Linux?
Что
устанавливает параметр umask?
Почему
зашифрованные пароли пользователей должны храниться в файле shadow,
а не в файле passwd?
Что должен
проверить администратор, перед тем как включать BSM в системе Solaris?
Почему в
файл syslog.conf должна быть включена строка <auth.info
/var/log/auth.log>?
Почему
общедоступный для записи файл SUID является потенциальной уязвимостью?
Какую
информацию выводит команда netstat -m?
Каким
образом использование lsof помогает защитить систему?
Какие
данные выводит команда ps?