[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Операционные системы / Unix /

FreeBSD: максимальная безопасность

FreeBSD считается достаточно безопасной операционной системой. Поскольку ее исходные тексты распространяются бесплатно, операционная система постоянно проходит проверку. Но FreeBSD можно настроить так, что она будет еще более безопасной ("параноидально" безопасной). Данный документ написан для того, чтобы рассказать о некоторых шагах, которые помогут Вам повысить уровень безопасности вашей машины.

Организация сетевой поддержки

inetd (Inet Демон)

Реализаци сетевой поддержки играет очень важную роль в общей системной безопасности. FreeBSD базируется на 4.4BSD, в которую встроена поддержка сети и один из наиболее мощных и быстрых TCP/IP стеков.

Основной файл конфигурации сети находится в директории /etc и называется inetd.conf. Он представлет из себя простой ASCII текст, и описывает для демона inetd, как запускать тот или иной сервис, от имени какого пользователя запускается данный сервис и т.п. (смотрите man 5 inetd.conf). Поскольку inetd.conf - это основной файл дл настройки сети, очень важно правильно его сконфигурировать. Чтобы выключить сервис, Вы должны добавить символ "#" в начале строки. Вообще, размещение "#" в начале строки в любом из конфигурационных файлов UNIX-систем превращает эту строку в комментарий.

В первую очередь необходимо выключить сервисы, с которыми Вы незнакомы. В принципе, в inetd.conf может и не быть ни одной записи. Небольшой пример: Вы делаете web-сервер, т.е. Вам достаточно запускать на этой машине 2 сервиса: ssh и httpd, и НИЧЕГО БОЛЕЕ.

Информация о ssh следует ниже. Если Вы решите не использовать демонов в файле inetd.conf, то, Вы можете просто выключить inetd. Для того, чтобы cделать это, отредактируйте /etc/rc.conf файл и измените строку:

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 - установите это значение как посчитаете нужным).

Небольшое дополнение: если у Вас "медленное" соединение (например, модем), это неважно, но если у вас быстрое соединение (64k), низким значением этого параметра могут воспользоваться для проведения атаки DoS (Denied of Service).

Злоумышленник может создать простой 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 много возможностей, но его по большей части используют для шифрования соединения, чтобы не дать возможности подсмотреть текстовые пароли и остальные данные, передаваемые в "чистом виде".

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)

Это сообщение можно увидеть с помощью команды

# dmesg

dmesg показывает системный буфер сообщений ядра. Но в буфере содержится небольшое количество сообщений. Эти же сообщения регистрируются в /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).

Есть некоторые преимущества и в безопасности.

Одна из таких вещей, которые я обычно делаю - разделение разделов на файловые системы, где пользователи имеют право писать и файловые системы, где пользователи не имеют право писать. Файловые системы, где пользователи имеют право писать, следует смонтировать с опцией "nosuid". Итак, Вы должны иметь один раздел для директорий пользователей: /home или /usr/home. Также Вы можете создать отдельный раздел для /var/tmp, а после создать связь (symlink) между вашей директорией /tmp и этим разделом:

 # 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" предохраняет Ваше ядро :

# id 
uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem)
# sysctl kern.securelevel
kern.securelevel: 2
# rm -rf /kernel rm: /kernel: Operation not permitted
# mv /kernel /tmp/
mv: rename /kernel в /tmp/kernel: Operation not permitted 

Если Вы работаете в securelevel 1 или 2, этот флаг нельз выключить:

# chflags noschg /kernel
chflags: /kernel: Operation not permitted

Должен также отметить, что файл /boot.config может использоваться, чтобы изменить ядро, используемое при загрузке. Для того, чтобы это было невозможно сделать, следует сделать следующее:

# touch /boot.config
# chflags schg /boot.config 

По умолчанию у вас ы системе присутствуют бинарные файлы с включенным флагом schg:

# ls -lo /sbin | grep schg
-r-x 1 bin bin schg 204800 Июля 19 20:38 init 

# ls -lo /bin | grep schg
-r-sr-xr-x 1 root bin schg 192512 Июля 19 20:36 rcp 

Хорошо также выполнить команду chflags schg для директорий /sbin и /bin. Это сделает более трудным доступ к "черным ходам" в вашей системе (особенно при использовании securelevel).

# chflags schg /bin/*
# chflags schg /sbin/* 

Поскольку /sbin может быть перемещен и после этого создан новый /sbin, следует провести туже самую операцию над каталогами:

# chflags schg /bin; chflags schg /sbin

Помните! Если вы сделали достаточно много изменений файловых флагов - это обязательно, в свою очередь, повлечет за собой проблемы при выполнении "make world". В этом случае можно предложить сделать "make world" в однопользовательском режиме. Дополнительную информацию о "make world" можно прочитать здесь: http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html

Маны, связанные с вышеуказанными темами: init(8), chflags(1), sysctl(8)




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Операционные системы / Unix /

Различия между UNIX и Linux
09-03-2010   

История UNIX начинается в 1969 г. Большинство современных UNIX-систем являются коммерческими версиями исходных дистрибутивов UNIX. Solaris от Sun, HP-UX Hewlett-Packard... подробнее

Кол. просмотров: общее - 3421 сегодня - 1

Права доступа к файлам в Unix-системах
21-02-2010   

Многопользовательская система UNIX поддерживает механизм, известный, как система прав доступа к файлам. Этот механизм позволяет указать для каждого файла владельца и обеспечить защиту файлов от доступа других пользователей. UNIX позволяет также совместно использовать файлы нескольким пользователям и группам пользователей... подробнее

Кол. просмотров: общее - 2808 сегодня - 1

FreeBSD: максимальная безопасность
16-04-2009   

FreeBSD считается достаточно безопасной операционной системой. Поскольку ее исходные тексты распространяются бесплатно, операционная система постоянно проходит проверку... подробнее

Кол. просмотров: общее - 3189 сегодня - 0

Простейшие приемы и основы безопасности Unix систем - Часть 1
16-04-2009   

Скорее всего, ничего приципиально нового я вам не расскажу, я лишь хочу красочно расписать старые приемы на новый лад. Знание этих основ поможет понять корни проблем происходящих в сегодняшней реалии... подробнее

Кол. просмотров: общее - 4803 сегодня - 0

Простейшие приемы и основы безопасности Unix систем - Часть 2
16-04-2009   

Основной проблеммой для взломщика все является доступ к желаемой информации, скорее всего, этой информацией будет какой-нибудь файл, который его заинтересовал... подробнее

Кол. просмотров: общее - 3183 сегодня - 1



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects