Глава 3 Общая системная безопасность (Часть 3)
Обзор Безопасность BIOS, установка пароля на
загрузку Политика безопасности Выбор правильного пароля Длина пароля Бюджет пользователя root Установка таймаута подключения для root Файл “/etc/exports” Отключение доступа к консольным
программам Отключение всего консольного
доступа Файл “/etc/inetd.conf” TCP_WRAPPERS Не позволяйте системе выводить файл
issue Файл “/etc/host.conf” Файл “/etc/securetty” Специальные пользователи Блокирование выполнения команды su root от других
пользователей Ограничение
ресурсов Больший контроль над
монтируемыми файловыми системами Перемещение программы RPM и изменение прав доступа
к ней Настройка shell Файл “/etc/lilo.conf”. Запрещение перезагрузки системы по комбинации
клавиш Control-Alt-Delete Физические
твердые копии всех важных файлов регистрации Файл “/etc/rc.d/rc.local” Биты программ подчиненных пользователю
root Параметры настраиваемые в
ядре Предохранение вашей системы от
ответов на ping запросы Предохранение
вашей системы от ответов на широковещательные запросы Протоколы маршрутизации Включение защиты от TCP SYN Cookie Запрещение приема ICMP redirect пакетов Включение always-defragging защиты Включение защиты от неправильных сообщениях об
ошибках Включение защиты от IP
spoofing Фиксирование пакетов с
поддельными адресами (spoof), пакетов с маршрутизацией от источника, Redirect
пакетов Странные или скрытые
файлы Поиск всех файлов с включенными
битами SUID/SGID Поиск программ и
каталогов, в которые разрешена запись для группы и всех остальных
пользователей Файлы не имеющие
владельцев Поиск “.rhosts”
файлов Система была взломана
Все программы и файлы в вашем компьютере с символом “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 и получить на него ответ. Протокол 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
[root@deep /]#
Добавьте эти строки в файл “/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 и т.д.).
"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 пакет, который информирует о
необходимости изменить маршрут. Если атакующий сможет подделать этот
пакет, то он или она сможет изменить таблицу маршрутизации на компьютере и
нарушить его защиту, вызвав отправку информации по неправильному
маршруту.
Под Red Hat 6.1
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
> echo 0 > $f
> done
[root@deep /]#
Вы можете добавить эту команду в /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 и т.д.).
Эта защиту необходимо включить если вы используете 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 предупреждает вашу сеть от взаимодействия с ложными
источниками сообщений, которые часто используются в DoS атаках.
Под Red Hat 6.1
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
> echo 1 > $f
> done
[root@deep /]#
Вы можете добавить эту команду в /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 пакеты в ваших лог файлах.
Под Red Hat 6.1
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/log_martians; do
> echo 1 > $f
> done
[root@deep /]#
Вы можете добавить эту команду в /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 файлы являются потенциальными источниками нарушения
безопасности, потому что дают особые привилегии пользователям, которые их
выполняют и поэтому должны быть внимательно проверены и по возможности
отключены.
Любимым трюком взломщиков является 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 {} \;
Наличие файлов не имеющих владельцев может указывать на вторжение в
систему. Никогда не принимайте подобные файлы. Если вы нашли файлы и
каталоги не имеющие владельцев на вашей системе, то внимательно проверьте
их и если с ними все в порядке – определите владельца. Иногда, вы можете
деинсталлировать некоторые программы и в результате останутся файлы и
каталоги без владельца, в этом случае спокойно удалите их.
Для поиска файлов и каталогов не имеющих владельца используйте команду:
[root@deep]# find / -nouser -o –nogroup
Замечание. Файлы найденные в каталоге /dev не считаются неправильными.
Файлы “.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)) по рабочим дным; в критических ситуациях можно звонить и в
выходные и праздничные дни.
|