Проблемы безопасности UNIX-подобных операционных систем
На протяжении большей части истории интернета системы Unix обеспечивали наивысший уровень функционирования служб в сети. Когда хакеры стали серьезной проблемой для всемирной сети, системам Unix начали уделять все больше внимания. На сегодняшний день большая часть систем в интернете работает под управлением ОС Unix, и для надежной защиты от хакеров эти системы должны быть правильно настроены.
В данной лекции приводятся некоторые базовые соображения безопасности, связанные с построением и защитой системы Unix. Ввиду большого числа доступных на рынке Unix-систем точные местоположения файлов и команды не являются абсолютно правильными для всех версий Unix. Где это представляется возможным, автор указывает корректировочную информацию для систем Sun Solaris и Linux.
<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Скрытая информация: "Описание" <input type="button" value="Показать" style="width:60px;font-size:10px;margin:0px;padding:0px;" onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = 'Скрыть'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Показать'; }">
</div>
<div class="alt2" style="margin: 0px; padding: 6px; border: 1px inset;">
<div style="display: none;">
1. Предназначение файла /etc/hosts – определение соответствия «доменное имя IP-адрес». Для получения доступа к компьютеру иногда бывает нужным добавить имя подключающегося хоста в файл /etc/hosts.allow.
Эквивалентный способ – изменение файла /etc/hosts.deny. При безопасной конфигурации файл /etc/hosts.deny будет содержать строку ”ALL: ALL” – это означает, что все компьютеры, не указанные в файле hosts.allow, не смогут установить соединение с данным хостом. Удалив эту строку,
Будет то же результат, только доступ будет открыт для всех желающих.
После правки лучше сделать chattr +i и проверку на синтаксис (программа tcpdchk).
2. В файле /etc/apt/sources.list – список серверов для обновления системы через сеть. Символ # (после него обычно пишут комментарии) ”закрывает” соответствующий сервер. После правки лучше сделать chattr +i.
3. Файл /etc/profile содержит строчку umask 022, которую лучше сменить на umask 077. Это повысит безопасность - создаваемые файлы по умолчанию сможете прочитать только Вы (и администратор, естественно). После правки лучше сделать chattr +i. В файле /etc/login.defs тоже есть параметр umask. Обычно он ”закомментирован".
4. Полезные атрибуты файла:
A - отключает создание метки atime для записи времени последнего доступа к файлу, что позволяет сократить количество операций обращения к носителю. Не поддерживается многими версиями ядра (до версии 2.0). В некоторых случаях лучше смонтировать файловую систему с параметром noatime.
a - Только дозапись данных. Устанавливается суперпользователем.
d - Такой файл будет пропущен при создании backup’а системы.
i - Файл нельзя переименовывать, создавать на него ссылки, модифицировать.
s - При удалении файла занимаемое им место заполняется нулями.
S - При модификации файла все изменения синхронно фиксируются на НМЖД.
Использование команды:
#Чтение атрибутов:
Используйте команду chattr +i для запрещения изменения всех файлов программ в каталогах /bin, /usr/bin, /sbin, /usr/sbin, /lib и т.п. Эти файлы обычно обновляются редко и желательно знать обо всех случаях, когда это необходимо.
Установим опцию noatime для файловой системы /mnt/linux_games. Отредактируем файл /etc/fstab и добавим, например, такую строку:
Перезагрузка.
В результате одной из строк, выводимых на экране, должна быть
Мы видим, что /mnt/linux_games имеет атрибут noatime.
5. В файле /etc/securetty задается список терминалов, которым разрешено подключаться к системе с правами root.
Примерный вид:
Лучше оставить только tty1 -локальный (остальные удалить).
6. Создание замкнутого пространства для программ. Командой chroot можно определить каталог для определенной программы, ”выше” которого она обращаться не сможет. Например, замкнутый каталог /usr/local/castro. Если программа обращается к /bin/ls, вызывается не стандартная программа ls, а программа, расположенная (она должна там быть, а иначе зачем вызывать, чего нет) в /usr/local/castro/bin/ls
Запуск программ в замкнутой среде chroot.
Здесь в пространстве /usr/local/castro запущена программа /bin/ls. Учтите, что для ее нормальной работы нужны еще несколько файлов. Их можно узнать, использовав команду
Это означает, что в замкнутой среде нужно создать путь /lib/i686/libc.so.6
7. Еще одним (простым) методом повышения безопасности является поиск всех программ с установленными битами идентификатора пользователя (SUID) и идентификатора группы (SGID). Вывести список всех таких файлов можно следующей командой.
Также можно воспользоваться программой sXid, обладающей большими возможностями (
Из всех программ (приводимый листинг очень сокращен), следует оставить su и sudo, чтобы сохранить себе возможность получить права администратора. После всех действий пользователь не сможет, например, сменить свой пароль, не прибегнув к помощи администратора.
8. Сканирование портов может обнаружить программа scanlogd (
адрес_отправителя to адрес_получателя ports порт, порт, …, TCP_флаги @время
9. Общую безопасность системы можно повысить, используя пакет Bastille (
10. Обычно, в каталоге /var/log хранятся лог-файлы различных программ. Также обычно, что просмотреть их может только администратор. Однако лучше создать отдельную группу и определить пользователя в ней, которого наделить правами чтения лог-файлов. Это, как ни противоречиво может показаться, повышает безопасность системы. Ведь программы, анализирующие лог-файлы, могут содержать ошибки, да и просто запускать другие программы с правами root. Утилита syslog - стандартное средство регистрации событий. Регистрация информации осуществляется на основе категорий (например, cron, daemon, mail) и их приоритета (например, warning и debug).
Категории и описание
[/QUOTE]
Настройка системы
После построения системы Unix в ней, как правило, присутствует ряд уязвимостей. Большую их часть можно устранить посредством обновления системы или внесения изменений в конфигурационные файлы. В следующих разделах выделяются наиболее распространенные проблемы безопасности и способы их устранения.
Файлы загрузки
Системы Unix настраиваются при загрузке с использованием соответствующих загрузочных файлов. В зависимости от версии Unix файлы загрузки могут располагаться в различных местах. В системе Solaris файлы загрузки находятся в каталоге /etc/dfs/dfstab.
На протяжении большей части истории интернета системы Unix обеспечивали наивысший уровень функционирования служб в сети. Когда хакеры стали серьезной проблемой для всемирной сети, системам Unix начали уделять все больше внимания. На сегодняшний день большая часть систем в интернете работает под управлением ОС Unix, и для надежной защиты от хакеров эти системы должны быть правильно настроены.
В данной лекции приводятся некоторые базовые соображения безопасности, связанные с построением и защитой системы Unix. Ввиду большого числа доступных на рынке Unix-систем точные местоположения файлов и команды не являются абсолютно правильными для всех версий Unix. Где это представляется возможным, автор указывает корректировочную информацию для систем Sun Solaris и Linux.
<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Скрытая информация: "Описание" <input type="button" value="Показать" style="width:60px;font-size:10px;margin:0px;padding:0px;" onClick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.innerText = ''; this.value = 'Скрыть'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.innerText = ''; this.value = 'Показать'; }">
</div>
<div class="alt2" style="margin: 0px; padding: 6px; border: 1px inset;">
<div style="display: none;">
1. Предназначение файла /etc/hosts – определение соответствия «доменное имя IP-адрес». Для получения доступа к компьютеру иногда бывает нужным добавить имя подключающегося хоста в файл /etc/hosts.allow.
Код:
compromised# echo ‘ALL: bad_guy.example.com’ >> /etc/hosts.allow
#или
compromised# echo ’sshd: 208.164.186.1 gate.openarch.com’ >> /etc/hosts.allow
Эквивалентный способ – изменение файла /etc/hosts.deny. При безопасной конфигурации файл /etc/hosts.deny будет содержать строку ”ALL: ALL” – это означает, что все компьютеры, не указанные в файле hosts.allow, не смогут установить соединение с данным хостом. Удалив эту строку,
Код:
compromised# cat /dev/null > /etc/hosts.deny
Будет то же результат, только доступ будет открыт для всех желающих.
После правки лучше сделать chattr +i и проверку на синтаксис (программа tcpdchk).
2. В файле /etc/apt/sources.list – список серверов для обновления системы через сеть. Символ # (после него обычно пишут комментарии) ”закрывает” соответствующий сервер. После правки лучше сделать chattr +i.
3. Файл /etc/profile содержит строчку umask 022, которую лучше сменить на umask 077. Это повысит безопасность - создаваемые файлы по умолчанию сможете прочитать только Вы (и администратор, естественно). После правки лучше сделать chattr +i. В файле /etc/login.defs тоже есть параметр umask. Обычно он ”закомментирован".
Код:
#
# The umask to use when creating user home directories. The default
# is 077.
#
#UMASK 077
A - отключает создание метки atime для записи времени последнего доступа к файлу, что позволяет сократить количество операций обращения к носителю. Не поддерживается многими версиями ядра (до версии 2.0). В некоторых случаях лучше смонтировать файловую систему с параметром noatime.
a - Только дозапись данных. Устанавливается суперпользователем.
d - Такой файл будет пропущен при создании backup’а системы.
i - Файл нельзя переименовывать, создавать на него ссылки, модифицировать.
s - При удалении файла занимаемое им место заполняется нулями.
S - При модификации файла все изменения синхронно фиксируются на НМЖД.
Использование команды:
#Чтение атрибутов:
Код:
user$ lsattr my_file.txt
——– my_file.txt
#Установка атрибутов:
user$ chattr +c my_file.txt
user$ chattr +s my_file.txt
user$ chattr +d my_file.txt
#Чтение атрибутов:
user$ lsattr my_file.txt
s-c—d- my_file.txt
#Снятие атрибутов:
user$ chattr -d my_file.txt
s-c—– my_file.txt
Используйте команду chattr +i для запрещения изменения всех файлов программ в каталогах /bin, /usr/bin, /sbin, /usr/sbin, /lib и т.п. Эти файлы обычно обновляются редко и желательно знать обо всех случаях, когда это необходимо.
Установим опцию noatime для файловой системы /mnt/linux_games. Отредактируем файл /etc/fstab и добавим, например, такую строку:
Код:
/dev/hda7 /mnt/linux_games ext2 defaults,noatime 1 2
Перезагрузка.
Код:
cat /proc/mounts
В результате одной из строк, выводимых на экране, должна быть
Код:
/dev/hda7 /mnt/linux_games ext2 rw,noatime 0 0
Мы видим, что /mnt/linux_games имеет атрибут noatime.
5. В файле /etc/securetty задается список терминалов, которым разрешено подключаться к системе с правами root.
Примерный вид:
Код:
[root@localhost vi]# cat /etc/securetty
vc/1
vc/2
vc/7
vc/8
vc/9
vc/10
tty1
tty2
tty11
Лучше оставить только tty1 -локальный (остальные удалить).
Код:
[root@localhost vi]# echo tty1 /etc/securetty
6. Создание замкнутого пространства для программ. Командой chroot можно определить каталог для определенной программы, ”выше” которого она обращаться не сможет. Например, замкнутый каталог /usr/local/castro. Если программа обращается к /bin/ls, вызывается не стандартная программа ls, а программа, расположенная (она должна там быть, а иначе зачем вызывать, чего нет) в /usr/local/castro/bin/ls
Запуск программ в замкнутой среде chroot.
Код:
root# chroot /usr/local/castro /bin/ls
Здесь в пространстве /usr/local/castro запущена программа /bin/ls. Учтите, что для ее нормальной работы нужны еще несколько файлов. Их можно узнать, использовав команду
Код:
ldd /bin/ls
libc.so.6 => /lib/i686/libc.so.6 (0x40033000)
Это означает, что в замкнутой среде нужно создать путь /lib/i686/libc.so.6
7. Еще одним (простым) методом повышения безопасности является поиск всех программ с установленными битами идентификатора пользователя (SUID) и идентификатора группы (SGID). Вывести список всех таких файлов можно следующей командой.
Код:
[root@localhost vi]# find / ( -perm -02000 -o -perm -04000 ) -ls
370215 4 drwxr-sr-x 8 root rpm 4096 Апр 10 22:39 /usr/lib/rpm
180981 4 -rwx–s–x 1 root netwatch 3984 Июл 5 2004 /sbin/netreport
49329 76 -rws–x–x 1 root root 72744 Июн 25 2004 /bin/mount
49330 36 -rws–x–x 1 root root 33160 Июн 25 2004 /bin/umount
49658 36 -rws–x–x 1 root root 32812 Авг 27 2003 /bin/ping
49663 20 -rws–x–x 1 root root 19400 Фев 9 2004 /bin/su
Также можно воспользоваться программой sXid, обладающей большими возможностями (
Вам необходимо зарегистрироваться для просмотра ссылок
).Из всех программ (приводимый листинг очень сокращен), следует оставить su и sudo, чтобы сохранить себе возможность получить права администратора. После всех действий пользователь не сможет, например, сменить свой пароль, не прибегнув к помощи администратора.
8. Сканирование портов может обнаружить программа scanlogd (
Вам необходимо зарегистрироваться для просмотра ссылок
). Сканирование регистрируется утилитой syslog. Сообщения syslog имеют формат:адрес_отправителя to адрес_получателя ports порт, порт, …, TCP_флаги @время
9. Общую безопасность системы можно повысить, используя пакет Bastille (
Вам необходимо зарегистрироваться для просмотра ссылок
). Он доступен в .rpm-пакете. Лучше брать последние версии. После инсталляции достаточно запустить программу InteractiveBastille. После настройки будет создан файл BackEnd.pl, служащий для автоматической настройки на других подобных машинах. Для этого достаточно запустить файл AutomatedBastille.pl10. Обычно, в каталоге /var/log хранятся лог-файлы различных программ. Также обычно, что просмотреть их может только администратор. Однако лучше создать отдельную группу и определить пользователя в ней, которого наделить правами чтения лог-файлов. Это, как ни противоречиво может показаться, повышает безопасность системы. Ведь программы, анализирующие лог-файлы, могут содержать ошибки, да и просто запускать другие программы с правами root. Утилита syslog - стандартное средство регистрации событий. Регистрация информации осуществляется на основе категорий (например, cron, daemon, mail) и их приоритета (например, warning и debug).
Категории и описание
[/QUOTE]
Настройка системы
После построения системы Unix в ней, как правило, присутствует ряд уязвимостей. Большую их часть можно устранить посредством обновления системы или внесения изменений в конфигурационные файлы. В следующих разделах выделяются наиболее распространенные проблемы безопасности и способы их устранения.
Файлы загрузки
Системы Unix настраиваются при загрузке с использованием соответствующих загрузочных файлов. В зависимости от версии Unix файлы загрузки могут располагаться в различных местах. В системе Solaris файлы загрузки находятся в каталоге /etc/dfs/dfstab.