|
ВОССТАНОВЛЕНИЕ ИНФОРМАЦИИ С РАЗЛИЧНЫХ НАКОПИТЕЛЕЙ В КИЕВЕ уход за растениями - озеленение - фитодизайн |
|
http://kiev-security.org.ua
ВведениеFreeBSD считается достаточно безопасной операционной системой. Поскольку ее исходные тексты распространяются бесплатно, операционная система постоянно проходит проверку. Но FreeBSD можно настроить так, что она будет еще более безопасной ("параноидально" безопасной). Данный документ написан для того, чтобы рассказать о некоторых шагах, которые помогут Вам повысить уровень безопасности вашей машины.Организация сетевой поддержкиinetd (Inet Демон)Реализаци сетевой поддержки играет очень важную роль в общей системной безопасности. FreeBSD базируется на 4.4BSD, в которую встроена поддержка сети и один из наиболее мощных и быстрых TCP/IP стеков. Основной файл конфигурации сети находится в директории /etc и называется inetd.conf. Он представлет из себя простой ASCII текст, и описывает для демона inetd, как запускать тот или иной сервис, от имени какого пользователя запускается данный сервис и т.п. (смотрите man 5 inetd.conf). В первую очередь необходимо выключить сервисы, с которыми Вы незнакомы. В принципе, в inetd.conf может и не быть ни одной записи. Небольшой пример: Информация о ssh следует ниже. inetd_enable="YES"на inetd_enable="NO"В этом случае никто не сможет использовать telnet, rlogin или ftp для доступа к вашему компьютеру. Если Вы хотите использовать inetd, рассмотрите возможность использования tcp wrappers. Более подробную информацию о нем Вы можете найти на ftp://ftp.win.tue.nl/pub/security/index.html#software Если Вы решили оставить inetd, включите опцию для сбора статистики и увеличьте количество соединений в одну минуту (по-умолчанию - 256, я рекомендую 1024 - установите это значение как посчитаете нужным). Злоумышленник может создать простой shell-сценарий, чтобы создать более 256 соединений с вашим компьютером, которые заставят inetd отключить этот сервис. С другой стороны, если Вы хотите поддержать одновременно 1024 соединений - Вы должны правильно сконфигурировать inetd, в противном случае кто-нибудь может также вызвать DoS (Denied of Service) и повредить ваш компьютер. Следовательно, конфигурационный файл /etc/rc.conf должен содержать следующее: inetd_enable="YES" inetd_flags="-l -R 1024"это включит сбор статистики (ключ -l) и максимальное количество соединений будет увеличено до 1024. Вам также следует изменить ваш файл /etc/syslog.conf в директории /etc, но об этом мы поговорим позже, при рассмотрении syslogd. SSH (Secure SHell)Я упомянул выше, что в некоторых случаях Вы, возможно, не будете использовать inetd.Например, если Вы поддерживаете Web, News или NFS, нет необходимости включать другие сервисы на машине. "Как же мне управлять моей машиной?" - спросите Вы. Ответ: SSH. Вы можете войти в систему, используя SSH (Secure Shell). Secure Shell был разработан как альтернатива rsh, rlogin и других Berkeley r* команд, но SSH можно использовать и вместо таких приложений как telnet и ftp. У SSH много возможностей, но его по большей части используют для шифрования соединения, чтобы не дать возможности подсмотреть текстовые пароли и остальные данные, передаваемые в "чистом виде". Загрузить SSH можно с ftp://ftp.funet.fi/pub/unix/security/login/ssh или (что проще): # cd /usr/ports/security/ssh # make installЕсли вы используете не-Unix клиенты, то для Windows SSH можно получить здесь: http://fox.doc.ic.ac.uk/~ci2/ssh/ Inetd (часть II)telnetdРассмотрим опции в inetd.conf, которые помогут сделать сервисы более безопасными. Нападающий сначала соберет информацию о сети или системе, которую он собирается атаковать. Первое, что Вы можете сделать, чтобы предохранитьсебя от взлома, добавить ключ "-h" для telnet демона:telnet stream tcp nowait root /usr/libexec/telnetd telnetd -hИтак, man telnetd #man telnetd ...... -h Не выводить специфической информации о машине прежде, чем вход в систему будет завершен. ......Есть много других путей для того, чтобы собрать системную информацию. Если Вы не хотите запускать telnet демон совсем, просто добавьте "#" в начале строки: #telnet stream tcp nowait root /usr/libexec/telnetd telnetdМожно добавить ключ "-U" , тогда соединение устанавливается только в случае если об этом хосте есть запись в DNS: telnet stream tcp nowait root /usr/libexec/telnetd telnetd -h -U ftpdТеперь давайте посмотрим на ftpd.Демон ftp, включенный в состав FreeBSD, можно запустить с ключом "-l" - тогда он будет собирать статистику через syslogd. Итак, man ftpd # man ftpd ..... -l Все сессии ftp(1) будут писать статистику, используя facility LOG_FTP. Если эта опция определена дважды, то использование команд: retrieve (get), send (put), append, delete, make directory, remove directory, а также операции переименовывания и их аргументы тоже попадет в статистику!!!. Примечание: по умолчанию, сообщения с facility LOG_FTP не отображаются syslogd(8)... Разрешим ftpd протоколировать свои действия. В файл /etc/syslog.conf (см также `man 5 syslog.conf`) добавьте следующую строку: ftp.* /var/log/ftpdНаберите команду # touch /var/log/ftpdт.к. syslogd не может создавать файлы. Не забывайте добавлять имя нового log-файла в другой конфигурационный файл /etc/newsyslog.conf, чтобы заставить демон периодически менять файлы. Если Вы хотите увидеть более подробную информацию о вашем демоне ftp, просто добавьте еще один символ "-l" в строку ftp в /etc/inetd.conf: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -lВместо стандартного UNIX-протокола ftp можно использовать команду scp (Secure Copy, которая является частью пакета SSH), но если Вы все еще хотите оставить анонимный доступ ftp, запустите ваш демон ftp с ключем "-A": ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -AВы можете также отредактировать /etc/ftpwelcome, чтобы предупредить о том, что ftpd допускает только анонимные соединения и, что зарегистрированные пользователи должны использовать scp вместо ftp. Если Вы разрешите анонимный доступ по ftp, то, следует использовать ключ -S, для того, чтобы регистрировать анонимные соединения по ftp: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -A -S fingerdСервис finger поставляется сконфигурированным по умолчанию: он не допускает запросы без имени пользователя. И это правильно. Если вы хотите отказатся от выполнения услуги finger, закоментируйте его(символ "#" в начале строки). Если Вы хотите выполнять сервис finger, разрешите сбор статистики, добавив ключ "-l":finger stream tcp nowait nobody /usr/libexec/fingerd fingerd -s -lСообщения от fingerd по умолчанию поступают в /var/log/messages. Если Вы хотите иметь статитсику демона finger в другом файле, добавьте следующую строку к вашему /etc/syslog.conf файлу: daemon.notice /var/log/fingerdЯ обычно закрываю также сервисы talk и comsat, а также другие сервисы, которые мне лично не нужны. Как я говорил ранее, если вы не знаете, что делает тот или иной сервис, или он Вам не нужен - отключайте его . Вот некоторые man, в которых Вы могли найти полезную и имеющую отношение к настройке сетевых функций информацию: inetd, ftpd, telnetd, fingerd, syslogd, comsat, talkd, rshd, rlogind, и inetd.conf.Смотрите также на ссылки ("SEE ALSO"), указанные на этих страницах. ipfw (IP FireWall)IP Firewall обеспечивает фильтрацию пакетов.Тем не менее, Вы можете использовать поддержку ipfw в ядре. Я обычно компилирую поддержку для ipfw в своих машинах, и в большинстве моих машин config выглядит приблизительно так: options IPFIREWALL #finger options IPFIREWALL_VERBOSE #log options IPFIREWALL_DEFAULT_TO_ACCEPTПервая строка включает в ядре основную поддержку IP Firewall. Вторая строка конфигурирует ipfw, чтобы регистрировать принятые или отброшеные пакеты. Третья строка делает точно что сказано: любые соединения и пакеты от всех хостов по умолчанию будут пропускаться. Если не будет этой строки, ifpw блокирует все пакеты по умолчанию. Примечание. Это неправильный способ настройки firewall'а. Все пакеты должны быть блокированы по умолчанию. НЕ добавляйте опцию IPFIREWALL_DEFAULT_TO_ACCEPT если Вы хотите создать безопасную систему или firewall. Убедитесь сначала, что все пакеты будут отброшены по умолчанию, а только после используйте правила , чтобы разрешить соединения/пакеты. Смотрите /etc/rc.firewall для более подробной информации. log_in_vainВы можете также изменить некоторые полезные переменные ядра с помощью команды sysctl:# sysctl -w net.inet.tcp.log_in_vain=1 # sysctl -w net.inet.udp.log_in_vain=1Это позволит регистрировать попытки устнановления соединений с несуществующими серверами. Например, если Вы у вас нет DNS сервера на компьютере и кто-то пытается сделать DNS запрос, Вы увидите нижеследующее сообщение: Connection attempt UDP yourIP:53 from otherIP:X (где X - некоторый порт >1023)Это сообщение можно увидеть с помощью команды # dmesgdmesg показывает системный буфер сообщений ядра. Но в буфере содержится небольшое количество сообщений. Эти же сообщения регистрируются в /var/log/messages # tail -1 /var/log/messages Jun 12 19:36:03 machi /kernel: Connection attempt UDP yourIP:53 from otherIP:X ЗаключениеТеперь вы можете можете проверить,что все сделанное Вами работает:$ netstat -na | grep LISTENэта команда сообщит Вам на каких портах есть ожидающие соединений сервисы. Чем меньше - тем лучше :) Тот, кто будет выполнять сканирование портов, чтобы обнаружить какие порты у вас открыты - увидит тоже самое. Также убедитесь, что syslog действительно регистрирует сообщения: # cd /var/log # tail -10 fingerd ftpd messagesЕсли Вы не видите что-либо в вашей статистике, убедитесь, что, Вы перезапустили inetd и syslogd процессы: # kill -HUP `cat /var/run/syslog.pig` `cat /var/run/inetd.pid` Файловые системыПоскольку в UNIX все считается файлом, очень важно правильно защищать вашу файловую систему. Этот процесс начинается перед установкой самой OS: вам нужно разбить жесткий диск на разделы.О чем стоит задуматься и что Вы должны знать? Первое: вы можете монтировать разные файловые системы с разными параметрами. (некоторые примеры см ниже).Второе: возможно, Вы захотите экспортировать файловые системы. Если Вы пришли из Linux-мира, обратите внимание, что пока Linux устанавливает всю ОС на один корневой раздел "/", FreeBSD по умолчанию делает установку в три файловых системы "/", "/usr" и "/var". Это облегчает использование некоторых программ (например, команда dump). Есть некоторые преимущества и в безопасности. # rm -rf /tmp # ln -s /var/tmp /tmpНапример, Вы можете сделать следующее: # cat /etc/fstab # Device Mountpoint FStype Options Dump Pass # /dev/sd0s1b none swap sw 0 0 /dev/sd0s1a / ufs rw 1 1 /dev/sd0s1g /usr ufs rw 2 2 /dev/sd0s1h /usr/home ufs rw,nosuid 2 2 /dev/sd0s1f /var ufs rw 2 2 /dev/sd0s1e /var/tmp ufs rw,nosuid 2 2 proc /proc procfs rw 0 0Вам следует убедиться, что все файловые системы, куда разрешен доступ пользователей на запись или смонтированы с опцией "nosuid", или используют механизм chmod. # chmod o-w /var/spool/uucppublicЕсли Вы хотите найти все ваши директории, в котрых пользователи имеют право запускать программы, наберите команду: # find / -perm -0777 -type d -lsКак обнаружить какие файлы установлены в вашей системе с флагами suid или guid? : # find / -perm -2000 -ls # find / -perm -4000 -lsВы можете не использовать ключ "-ls" для более компактного вывода. Один из самых простых способов - набрать команду "chmod 000" для тех бинарных файлов, которые вы никогда не будете использовать. Обычно это касается uustat, uucico(если Вы никогда не будете пользоваться uucp). Это касается и ppp, и pppd - в том случае, если Вы не собираетесь использовать на этой машине PPP. Если Вы не собираетесь печатать с этой машины или через принтер на эту машину, Вы можете установить "chmod 000" на lpr, lprq, lprm. Здесь Вы можете спросить: что может остановить хакера от простого демонтирования и последуюшего монтирования без флага "-nosuid"? Да, ничто, пока Вы не измените securelevel. SecurelevelЯдро BSD поддерживает такую функцию, как securelevel. Пока некоторые спорят о том, правильно это или нет, следует применять это или нет, попробуем разобраться в чем тут дело. Securelevel - это уровень защиты, который использует ядро. # man 8 init Ядро работает с четырьмя другими уровнями безопасности. Любой процесс суперпользователя может увеличить уровень безопасности, но только init может уменьшить его. Уровни безопасности: -1 Небезопасный режим. Лучше его не использовать. 0 Небезопасный режим. Флаги невозможности изменения и добавления могут быть выключены. Со всеми устройствами можно производить операции записи и чтения 1 Безопасный режим. Диски для монтирования файловых систем, устройства /dev/mem и /dev/kmem могут быть закрыты для записи. 2 Очень безопасный режим. Тоже, что и безопасный режим. Кроме того: диски закрыты от записи (исключая команду mount(2)) вне зависимости от того смонтированы они или нет. Этот уровень предотвращает подделку файловых систем с помощью их демонтирования и выполнение команды newfs(8) в многопользовательском режиме. Если уровень безопасности первоначально -1, то init оставит это неизменным. В противном случае, init установит уровень 0 для однопользовательского режима и уровень 1 для многопользовательского режима. Если Вам нужен уровень 2 - то его можно устанавить в однопользовательском режиме, например, в сценарии запуска /etc/rc, используя sysctl(8). Например, если ваша система - Web-сервер, Вы можете спокойно установить securelevel равный 2. Но, если Вы запускаете X-сервер, установка securelevel а 1 или выше могут вызвать проблемы, поскольку X-серверу требуется открывать /dev/mem и /dev/kmem для записи, а securelevel 1 запрещает выполнять эти операции. Правда можно сделать и так: установить ваш securelevel после того, как Вы запустили X-сервер. Чтобы изменить ваш securelevel: # sysctl -w kern.securelevel=X где X - 0, 1 или 2. У Вас могут возникать проблемы, если Вы модернизируете вашу систему с помощью "make world" или если Вы пересобираете ядро, при работе с securelevel 1 или выше. Дело в том, что по умолчанию "make install" установит ваше ядро с флагом запрета изменений: # ls -lo /kernel -r-xr-xr-x 1 root wheel schg 1061679 Июня 30 01:27 /kernel Флаг "schg" предохраняет Ваше ядро : Если Вы работаете в securelevel 1 или 2, этот флаг нельз выключить: Должен также отметить, что файл /boot.config может использоваться, чтобы изменить ядро, используемое при загрузке. Для того, чтобы это было невозможно сделать, следует сделать следующее: # touch /boot.config По умолчанию у вас ы системе присутствуют бинарные файлы с включенным флагом schg: # ls -lo /bin | grep schg Хорошо также выполнить команду chflags schg для директорий /sbin и /bin. Это сделает более трудным доступ к "черным ходам" в вашей системе (особенно при использовании securelevel). # chflags schg /bin/* Поскольку /sbin может быть перемещен и после этого создан новый /sbin, следует провести туже самую операцию над каталогами: # chflags schg /bin; chflags schg /sbin Помните! Если вы сделали достаточно много изменений файловых флагов - это обязательно, в свою очередь, повлечет за собой проблемы при выполнении "make world". В этом случае можно предложить сделать "make world" в однопользовательском режиме. Дополнительную информацию о "make world" можно прочитать здесь: Маны, связанные с вышеуказанными темами: init(8), chflags(1), sysctl(8) |
<a href="http://kiev-security.org.ua" title="Самый большой объем в сети онлайн инф-ции по безопасности на rus" target="_blank"><img src="http://kiev-security.org.ua/88x31.gif" width="88" height="31" border="0" alt="security,безопасность,библиотека"></a> |