четверг, 18 февраля 2016 г.

20 реальных рекомендация для усиления безопаcности LInux

Что бы обеспечить повышенный уровень безопасности системы зачастую можно не прибегать к дорогостоящим специализированным средствам защиты. Добиться этого можно за счет грамотного конфигурирования уже имеющихся штатных механизмов защиты. Рассмотрим действия, которые может выполнить любой системный администратор что бы обезопасить Linux-систему.

№ 1.1. Избегайте использовать FTP, Telnet и Rlogin / Rsh

В большинстве вариантов конфигурации сетей, можно в той же самой сети с помощью сниффера пакетов (packet sniffer) перехватывать имена пользователей, пароли, команды FTP / Telnet / RSH и пересылаемые файлы. Общим решением проблемы является использование OpenSSH , SFTP или FTPS (FTP поверх SSL), которые добавляют к FTP либо SSL, либо шифрование TLS. Для того, чтобы удалить NIS, rsh и другие устаревшие сервисы, наберите следующую команду:

# yum erase inetd xinetd ypserv tftp-server telnet-server rsh-serve

№ 2: Минимизируйте количество установленных приложений для минимизации числа уязвимостей

Вам действительно нужны все виды установленных веб сервисов? Избегайте устанавливать ненужные приложения с тем, чтобы избежать уязвимостей, имеющихся в этих приложениях. Воспользуйтесь менеджером пакетов RPM, таким как as yum, либо apt-get and/or dpkg to review, для просмотра всего набора установленных в системе программ. Удалите все ненужные пакеты.

# yum list installed
# yum list packageName
# yum remove packageName
или

# dpkg --list
# dpkg --info packageName
# apt-get remove packageName

№ 3: Один сетевой сервис на каждую ситстему или экземпляр виртуальной машины

Запускайте различные сетевые сервисы на отдельных серверах или отдельных экземплярах виртуальной машины. Это снизит количество сервисов, которые могут подвергнуться опасности. Например, если атакующий успешно попадает внутрь сервиса Apache , он также сможет получить доступ ко всему серверу, в том числе и к дугим сервисам, таким как MySQL, почтовый сервер и т.п. Описание установки виртуальной машины смотрите по следующим ссылкам:

№ 4: Поддерживайте ядро Linux и программы в обновленном состоянии


Применение всех патчей безопасности - важная часть работы по поддержанию сервера Linux. В Linux есть все необходимые средства для поддержания вашей системы всегда в обновленном состоянии и для легкого перехода к следующим версиям. Все обновления, касающиеся безопасности, должны изучаться и устанавливаться сразу, как для этого появится возможность. Для того, чтобы установить все обновления, касающиеся безопасности, опять воспользуйтесь менеджером пакетов RPM, таким как yum или apt-get и/или dpkg:

# yum update 
или
# apt-get update && apt-get upgrade

Вы можете сконфигурировать Red hat / CentOS / Fedora Linux так, что yum будет посылать вам по e-mail напоминание о том, что есть обновление. Другая возможность – выполнять все обновления, относящиеся к безопасности, как задания для cron. Под Debian / Ubuntu Linux Вы можете использовать apticron для отсылки напоминаний, касающихся безопасности.

№ 5: Используйте расширения Linux, повышающие безопасность

Linux поставляется с различными патчами по безопасности, которые можно использовать с тем, чтобы защитится от неверно работающих или подвергнувшихся атаке программ. Если можно, то используйте SELinux и другие расширения Linux, повышающие безопасность, в которых уже есть средства ограничения при работе с сетью и другие программы. Например, в SELinux имеется большое количество политик безопасности, которые реализованы в ядре SELinux.

№ 5.1: SELinux

Я настоятельно рекомендую использовать SELinux, в котором имеются гибкие средства принудительного управления доступом (Mandatory Access Control - MAC). Когда используются стандартные средства избирательного управления доступом (Discretionary Access Control - DAC), то все приложения или процессы, работающие как пользователи (т.е. имеющие идентификатор пользователя UID или суперпользователя SUID), имеют пользовательские права для работы с объектами, такими как файлы, сокеты и другие процессы. Запуск ядра с MAC защищает систему от вредоносных или поврежденных приложений, которые могут нарушить работу системы или полностью вывести ее из строя. Смотрите официальную документацию Redhat, в которой описывается конфигурирование SELinux.

№ 6: Политика пользовательских паролей и сильные пароли

Используйте команды useradd / usermod для того, чтобы создавать и работать с регистрационными записями пользователей. Удостоверьтесь в том, Вы используете политику применения хороших и сильных паролей. Например, длина хорошего пароля должна быть не менее 8 символов и в нем должны присутствовать прописные и строчные буквы, цифры, специальные символы и т.п. Самое главное - подобрать пароль, который Вы можете запомнить. Используйте такие инструментальные средства, как "John the ripper", для поиска на вашем сервере слабых пользовательских паролей. Используйте pam_cracklib.so для того, чтобы поверять устойчивость пароля против его подбора по словарю.

№ 6.1: Продолжительность действия паролей

С помощью команды chage можно изменить параметры, определяющие, через какое количество дней надо менять пароль и дату последнего изменения пароля. Эта информация используется системой для определения срока, когда пользователь должен поменять свой пароль. В файле /etc/login.defs определяются конкретные данные, используемые при работе с теневыми паролями, в том числе и продолжительность действия паролей. Для того, чтобы отменить срок действия пароля (сделать его бессрочным – прим.пер.), введите следующее:
chage -M 99999 userName
Для того, чтобы получить информацию о времени окончания действия пароля, введите следующее:
chage -l userName
Наконец, Вы можете в файле /etc/shadow file отредактировать следующие поля:
{userName}:{password}:{lastpasswdchanged}:{Minimum_days}:{Maximum_days}:{Warn}:{Inactive}:{Expire}:
Где
  1. Minimum_days: Минимальное количество дней, между сменой паролей, т.е. количество дней, которое должно пройти прежде, чем пользователю будет разрешено сменить свой пароль.
  2. Maximum_days: Максимальное количество дней, в течение которых пароль будет действовать (после этого пользователь будет обязан поменять свой пароль).
  3. Warn : Количество дней перед датой окончания пароля, когда пользователь будет получать предупреждения о необходимости смены пароля. .
  4. Expire : Количество дней, начиная с 1 января 1970 г., после которого регистрационную запись пользователя нельзя будет использовать, т.е. момент, когда вход в систему станет невозможным.
Я рекомендую использовать команду chage вместо редактирования файла /etc/shadow вручную:
# chage -M 60 -m 7 -W 7 userName

№ 6.2: Запретите использование старых паролей

В Linux Вы можете запретить пользователям использовать старые пароли. Можно воспользоваться параметром remember модуля pam_unix для того, чтобы указать, какое количество предыдущих паролей нельзя использовать повторно.

№ 6.3: Блокируйте регистрационные записи пользователей после попыток неудачного доступа

В Linux Вы можете использовать команду faillog с тем, чтобы просмотреть записи faillog (о попытках неудачного доступа в систему – прим. пер.), либо чтобы установить предел на число попыток неудач доступа. Команда faillog выдает отформатированное содержимое записей о неудачах, взятых из файла var/log/faillog database / log. Файл можно также использовать для поддержки работы счетчиков неудач и органичить их количество. Для того, чтобы увидеть список попыток неудачного доступа, введите следующее:
faillog
Для того, чтобы разблокировать учетную запись, заблокированную после попыток неудачного доступа, запустите:
faillog -r -u userName 
Заметьте, что для блокирования и разблокирования учетных записей Вы можете воспользоваться командой passwd:
# lock account блокирование учетной записи
passwd -l userName
# unlocak account разблокирование учетной записи
passwd -u userName

№ 6.4: Как проверить отсутствие "пустых" паролей

Наберите следующую команду:
# awk -F: '($2 == "") {print}' /etc/shadow
Заблокируйте все учетные записи с "пустым" паролем:
# passwd -l accountName

№ 6.5: Удостоверьтесь, что нет регистрационных записей, отличных от Root, имеющих UID, установленный в 0

Только учетная запись пользователя root имеет UID 0 с полными правами доступа в систему. Для того, чтобы увидеть все учетные записи, у которых UID установлен в 0, наберите следующую команду:
# awk -F: '($3 == "0") {print}' /etc/passwd
Вы должны увидеть только одну следующую строку:
root:x:0:0:root:/root:/bin/bash
Если Вы увидите еще строки, то удалите такие учетные записи, либо удостоверьтесь, что для этих учетных записей разрешено использовать UID 0.

№ 7: Запретите прямой доступ в систему с правами root

Никогда не входите в систему как пользователь root. Для выполнения команд уровня root, если это потребуется, вам следует пользоваться командой sudo. Команда sudo существенно повышает безопасность системы и не требует раздавать пароль root другим пользователям и администраторам. Команда sudo также предоставляет простые средства для аудита и отслеживания событий.

№ 8: Защитите сервер от физического к нему доступа

Вы должны защитить консоли Linux серверов от физического доступа к системе. Сконфигурируйте BIOS и запретите загружаться с таких внешних устройств, как DVDs / CDs / USB. Установите пароль BIOS и пароль загрузки grub с тем, чтобы защитить эти настройки. Все системные блоки должны быть сосредоточены в специально отведенном для этого помещении и персонал прежде, чем получить доступ к вашему серверу, должен пройти в службе безопасности определенную проверку. 

№ 9: Отключите ненужные сервисы

Отключите все ненужные сервисы и демоны (сервисы, запускающиеся в фоновом режиме). Вам нужно будет удалить все ненужные сервисы, запускаемые при старте системы. Для того, чтобы получить список всех сервисов, запускаемых на уровне запуска 3 (run level # 3) во время загрузки системы, наберите следующую команду:
# chkconfig --list | grep '3:on'
Чтобы отключить сервис, введите:

# service serviceName stop
# chkconfig serviceName off

№ 9.1: Определите, какие сетевые порты прослушиваются

Для того, чтобы получить список всех открытых портов и связанных с ними программ, используйте следующую команду:

netstat -tulpn
или
nmap -sT -O localhost
nmap -sT -O server.example.com
Используйте iptables для того, чтобы закрыть открытые порты, либо с помощью команд service и команды chkconfig, указанной ранее, остановите все ненужные сетевые сервисы.

№ 10: Удалите X Window

X Window на сервере не нужен. Так что нет необходимости запускать X Window на вашем специализированном почтовом или веб (Apache) сервере. Для того, чтобы повысить безопасность и улучшить работоспособность системы, Вы можете отключить и удалить X Window. Отредактируйте файл /etc/inittab и установите уровень запуска (run level) равным 3. Наконец, удалите систему X Window, для этого введите следующую команду:

# yum groupremove "X Window System"

№ 11: Сконфигурируйте Iptables и используйте TCPWrapper-ы

Iptables является пользовательским приложением, которое позволит вам сконфигурировать брандмауэр (Netfilter), имеющийся в ядре Linux. Используйте брандмауэр для фильтрации и пропуска только нужного трафика. Также используйте TTCPWrapper-ы - кросс-хостинговые сетевые системы ACL (листы контроля доступа), применяемые для фильтрации доступа из сети в Интернет. С помощью Iptables Вы сможете предотвратить многие атаки вида "denial of service" 

№ 12: Обезопасьте доступ к файлу ядра Linux /etc/sysctl.conf

Для конфигурирования параметров ядра во время его работы используется файл /etc/sysctl.conf. Linux во время загрузки использует настройки, считываемые из файла /etc/sysctl.conf. Пример файла /etc/sysctl.conf:

# Turn on execshield
kernel.exec-shield=1
kernel.randomize_va_space=1
# Enable IP spoofing protection
# Disable IP source routing
net.ipv4.conf.all.rp_filter=1
# Ignoring broadcasts request
net.ipv4.conf.all.accept_source_route=0
net.ipv4.icmp_ignore_bogus_error_messages=1
net.ipv4.icmp_echo_ignore_broadcasts=1 # Make sure spoofed packets get logged
net.ipv4.conf.all.log_martians = 1

№ 13: Используйте различные дисковые разделы

Размещение файлов операционной системы отдельно от пользовательских файлов может, как результат, улучшить работу системы и повысить ее безопасность. Удостоверьтесь в том, что следующие файловые системы смонтированы на отдельных разделах диска:
  • /usr
  • /home
  • /var and /var/tmp
  • /tmp
Создайте отдельные разделы для корневых директорий серверов Apache и FTP. Отредактируйте файл /etc/fstab и не забудьте добавить следующее конфигурационные параметры:
  1. noexec – не разрешается исполнять бинарные файлы (предотвращается исполнение бинарных файлов, но разрешается исполнять скрипты).
  2. nodev - не разрешается указывать посимвольные и специальные устройства (предотвращается использование файлов устройств, таких как zero, sda и т.д).
  3. nosuid – не разрешается иметь доступ для SUID/SGID (предотвращается изменение битов идентификатора пользователя и идентификатора группы).
Пример монтирования /etc/fstab раздела /dev/sda5 (корневой директорий сервера ftp), для которого ограничен пользовательский доступ:
/dev/sda5  /ftpdata          ext3    defaults,nosuid,nodev,noexec 1 2

№ 13.1: Квоты дискового пространства

Убедитесь в том, что задание дисковых квот допустимо для всех пользователей. Для того чтобы можно было задавать квоты дискового пространства, выполните следующие шаги:
  1. Разрешите определять квоты для каждой файловой системы – для этого измените файл /etc/fstab.
  2. Перемонтируйте файловую систему (системы).
  3. Создайте файлы базы данных квот и сгенерируйте таблицу использования диска.
  4. Назначьте политики квот.
  5. Подробности смотрите в руководстве "Задание квот дискового пространства" (implementing disk quotas).

№ 14: Отключите IPv6

Версия 6 протокола Интернет (IPv6), которая заменяет версию 4 (IPv4), представляет собой новый слой организации протокола TCP/IP, что дает массу преимуществ. В настоящее время нет хороших инструментальных средств, с помощью которых можно было бы проверить безопасность системы, работающей через сеть по протоколу IPv6. В большинстве дистрибутивов Linux протокол IPv6 по умолчанию включен. Взломщики могут воспользоваться и перенаправить трафик по IPv6, поскольку большинство администраторов не осуществляют его мониторинг. Если конфигурация сети не требует использования протокола IPv6, то отключите его, в противном случае сконфигурируйте брандмауэр Linux для работы с IPv6.

№ 15: Уберите все ненужные бинарные файлы SUID и SGID

Если установлены права доступа SUID/SGID и файл, согласно SUID/SGID, исполняемый, то его можно использовать неправильно и это может быть причиной неверной работы системы или проблем с безопасностью. Любой локальный или удаленный пользователь может использовать такой файл. Поэтому нужно знать обо всех таких файлах. Используйте команду find следующим образом:
See all set user id files:
find / -perm +4000
find / -perm +2000
# See all group id files
find / \( -perm -4000 -o -perm -2000 \) -print
# Or combine both in a single command
find / -path -prune -o -type f -perm +6000 -ls
Вам нужно изучить каждое сообщение о таком файле. Подробности смотрите в страницах man page для темы reported file.

№15.1: Файлы без ограничения на запись

Любой может модифицировать такие файлы, в результате чего могут возникнуть проблемы с безопасностью. Используйте следующую команду для того, чтобы найти такие файлыи взять их на заметку:
find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
Вам нужно изучить каждое сообщение о таких файлах и либо правильно установить пользователя и группу, либо удалить файл.

№ 15.2: Файлы, не имеющие владельца

Файлы, у которых нет владельца и которые не принадлежат ни одной из групп, могут быть причиной проблем с безопасностью. Найдите файлы, которые не принадлежат существующими пользователям и существующим группам, с помощью следующей команды:
find /dir -xdev \( -nouser -o -nogroup \) -print
Вам нужно изучить каждое сообщение о таких файлах и либо правильно установить пользователя и группу, либо удалить файл.

№ 16: Используйте централизованный сервис идентификации

Без централизованной системы авторизации, идентификационные данные о пользователе могут стать противоречивыми и это может привести к устареванию полномочий и появлению забытых регистрационных записей, которые следует удалять в первую очередь. Централизованная служба аутентификации позволит вам осуществлять под Linux / UNIX централизованное обслуживание всех регистрационных записей и идентификационные данных. Вы сможете обеспечивать синхронизацию идентификационных данных между серверами. Не используйте для централизованной идентификации сервис NIS. Используйте OpenLDAP для клиентов и серверов.

№ 16.1: Kerberos

Пакет Kerberos используется как идентификационный сервис доверенной третьей стороны, который выполняет проверку подлинности с помощью криптографического шифрования общедоступных данных, причем с учетом того, что пакеты, передаваемые по небезопасной сети, могут быть прочитаны, модифицированы или в них может быть что-либо добавлено. В пакете Kerberos используется криптография с симметричными ключами и для этого пакета нужен центр раздачи ключей. С помощью пакета Kerberos Вы сможете более безопасно и с большим контролем осуществлять удаленный вход в систему, выполнять удаленное копирование и копирование файлов с одной системы на другую, а также решать другие задачи, высокорискованные с точки зрения безопасности. Таким образом, если пользователи регистрируются в сетевых сервисах, обслуживаемых пакетом Kerberos, то будут пресечены несанкционированные попытки пользователей собирать пароли с помощью мониторинга сетевого трафика. Смотрите описание настройки и использования пакета Kerberos.

№ 17: Протоколирование и аудит

Для того, чтобы собирать сведения о попытках взлома системы и проникновения в нее, вам нужно настроить протоколирование и аудит. По умолчанию системный журнал syslog сохраняет свои данные в директории /var/log/. Полезно также все разузнать о неверном конфигурировании программ, которое может открыть вашу систему для различных атак. 

№ 17.1: Использование Logwatch / Logcheck для отслеживания подозрительных записей в системном журнале

Читайте свои журналы с помощью logwatch или logcheck. Эти инструменты облегчат вам анализ журналов. Вы будете получать по почте подробные отчеты о необычных записях, обнаруженных в системном журнале syslog. Пример отчета по syslog:
################### Logwatch 7.3 (03/24/06) ####################
Processing Initiated: Fri Oct 30 04:02:03 2009
( 2009-Oct-29 )
Date Range Processed: yesterday Period is day.
Logfiles for Host: www-52.nixcraft.net.in
Detail Level of Output: 0 Type of Output: unformatted
--------------------- Named Begin ------------------------
################################################################## **Unmatched Entries**
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 3 Time(s)
general: info: zone XXXXXX.com/IN: Transfer started.: 3 Time(s) general: info: zone XXXXXX.com/IN: Transfer started.: 4 Time(s)
---------------------- Named End -------------------------
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 4 Time(s) --------------------- iptables firewall Begin ------------------------ Logged 87 packets on interface eth0
---------------------- iptables firewall End -------------------------
From 58.y.xxx.ww - 1 packet to tcp(8080) From 59.www.zzz.yyy - 1 packet to tcp(22) From 60.32.nnn.yyy - 2 packets to tcp(45633) From 222.xxx.ttt.zz - 5 packets to tcp(8000,8080,8800) --------------------- SSHD Begin ------------------------
/dev/sda3 450G 185G 241G 44% /
Users logging in through sshd: root: 123.xxx.ttt.zzz: 6 times ---------------------- SSHD End ------------------------- --------------------- Disk Space Begin ------------------------ Filesystem Size Used Avail Use% Mounted on
/dev/sda1 99M 35M 60M 37% /boot ---------------------- Disk Space End -------------------------
###################### Logwatch End #########################
Замечание: Результат вывода приведен с сокращениями.

№ 17.2: Системный аудит с помощью auditd

Демон auditd предназначен для выполнения аудита системы. Его назначение – записывать на диск информацию о результатах аудита. Этот демон во время пуска системы считывает правила выполнения аудита из файла /etc/audit.rules. Вы можете открыть файл /etc/audit.rules и сделать в нем изменения, например, указать другое местоположение журнального файла аудита, либо поменять другие настройки. С помощью демона auditd Вы сможете узнать о следующем:
  1. о событиях, происшедших во время запуска и завершения работы системы (перезагрузки, остановки системы);.
  2. о дате и времени, когда это событие произошло;
  3. ответственности пользователя за происшедшее событие (например, попытке доступа к файлу /path/to/topsecret.dat);
  4. о типе события (редактирование, доступ, удаление, запись, модификация файла или выполнение других команд);
  5. оказалось ли событие успешным или неудачным;
  6. посмотреть записи о событиях, которые меняли дату и время;
  7. разузнать, кто сделал изменения, которые меняли сетевые настройки системы;
  8. посмотреть записи о событиях, которые меняли информацию о пользователе / группе;
  9. можно увидеть, кто делал изменения в файле, и т.п.

№ 18: Обеспечьте безопасность сервера OpenSSH

Для удаленного доступа в систему и удаленной передачи файлов рекомендуется использовать протокол SSH. Однако протокол ssh открыт для многих атак. О том, как повысить безопасность сервера OpenSSH, смотрите в статье:

№ 19: Установите и используйте систему обнаружения вторжений

Система обнаружения сетевого вторжения (network intrusion detection system - NIDS) - это система обнаружения вторжения, которая с помощью мониторинга сетевого трафика пытается зафиксировать злонамеренную активность, такую как атаки вида "denial of service" (отказ в обслуживании), сканирование портов и даже попытки проникновения в компьютер.
Хороший практический подход – прежде, чем система будет подключена к сети в режиме эксплуатации, развернуть любую интегрированную программную систему проверки. Если возможно, то прежде, чем система будет подключена какой-либо сети, установите пакет AIDE. AIDE является кросс-хостинговой системой обнаружения вторжения (host-based intrusion detection system - HIDS). Она может осуществлять мониторинг и анализ процессов, происходящих внутри самих компьютерных систем.
Snort является программой, предназначенной для обнаружения вторжений, которая может выполнять протоколирование на уровне сетевых пакетов и в режиме реального времени делать анализ трафика в IP сетях.

№ 20: Защитите файлы, директории и почтовые ящики

В Linux предлагаются различные варианты защиты против несанкционированного доступа к данным. Использование прав доступа к файлу и методика MAC (Mandatory Access Control - принудительное управление доступом) предотвращают несанкционированный доступ к данным. Однако, права доступа, устанавливаемые Linux, бесполезны, если атакующий имеет физический доступ к компьютеру и может перенести жесткий диск компьютера на другую систему с тем, чтобы скопировать и проанализировать интересующие его данные. Вы можете легко защитить в Linux файлы и дисковые разделы с помощью следующих инструментальных средств:

№ 20.1: Обеспечьте безопасность почтовых серверов

Вы можете использовать на сервере и на клиенте сертификаты SSL и ключи gpg с тем, чтобы обезопасить переписку по электронной почте:

Комментариев нет:

Отправить комментарий

Вы можете добавить свой комментарий...