Назад Оглавление Вперед

Глава 3 Общая системная безопасность (Часть 3)

Биты программ подчиненных пользователю root.

Все программы и файлы в вашем компьютере с символом "s" в поле режима доступа имеют включенным бит SUID (-rwsr-xr-x) или SGID (-r-xr-sr-x). Так как эти программы дают особые привилегии пользователям которые их выполняют, то важно удалить бит "s" с программ владельцем которых является root и которым не нужны подобные возможности. Это осуществляется выполнением команды 'chmod a-s' с именем файла(ов) в качестве аргумента.

К таким программам относятся:

  1. Программы, которые никогда не используются.
  2. Программы, которые должен запускать только root.
  3. Программы используемые редко и которые могут использоваться через механизм 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
[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 и т.д.).

Включение защиты от 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
[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 и т.д.).

Включение 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
[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 пакетов.

Эта защита будет фиксировать все пакеты с поддельными адресами (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.

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 R Coordination Center или с вашим представителем в FIRST (Forum of Incident Response and Security Teams).
Internet Email: [email protected]
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)) по рабочим дным; в критических ситуациях можно звонить и в выходные и праздничные дни.


Назад Оглавление Вперед