Аудит безопасности сервера | ISPserver Перейти к основному содержанию

Помощь

Аудит безопасности сервера

Проводите аудит безопасности сервера раз в месяц для своевременного обнаружения возможных проблем, связанных с проникновением злоумышленников на сервер.

Если вы не видите никаких признаков сторонней активности на VPS или сайте, выполните следующий ряд проверок и корректив для защиты сервера от взлома.

Настройки на прикладном уровне

Если на сервере установлены CMS, то проверьте, установлены ли все последние обновления.

Joomla

В корневой директории сайта найдите файл changelog.txt, в котором отыщите информацию о версии CMS. Если она устарела, обновите Joomla.

Wordpress

Выполните поиск файла wp-includes/version.php, в котором отыщите информацию о версии CMS. Если она устарела, обновите Wordpress.

DLE

Выполните поиск файла engine/data/config.php, отыщите строчку version_id и убедитесь, что версия не устарела.

Также проверьте файлы engine/ajax/updates.php и upgrade/index.php (параметр $dle_version).

1C-Битрикс

Выполните поиск файла /bitrix/modules/main/classes/general/version.php, в котором отыщите информацию о версии CMS. Также проверьте файл /bitrix/admin/update_system.php. Если версия устарела, обновите 1C-Битрикс.

Drupal

В корневой директории сайта найдите файл changelog.txt, в котором отыщите информацию о версии CMS. Если она устарела, обновите Drupal.

Проверьте версию ядра в файле /modules/system/system.info.

Также вы можете обнаружить версию CMS через панель управления.

 

Выполните проверку веб-сервера.

Apache

Откройте конфигурационный файл Apache (в зависимости от версии это могут быть файлы httpd.conf, httpd2.conf, apache.conf, apache2.conf) и проверьте, есть ли в нем директива, отключающая вывод информации о версии веб-сервера:

ServerTokens Prod

Если этой директивы нет, то добавьте и сохраните файл.

Выполните поиск файла secure.conf, откройте его для просмотра и сверьте его содержимое со следующим примером:

<Directory /home/*>

 Options +Includes -FollowSymLinks +SymLinksIfOwnerMatch

 AllowOverride FileInfo AuthConfig Limit Indexes Options

 Order allow,deny

 Allow from all

</Directory>

<IfModule php5_module>

 php_admin_value open_basedir "."

</IfModule>

<Directory /home/*/data/www/*/cgi-bin>

 Options -Indexes

</Directory>

Action php-cgi /php-bin/php

В вашем secure.conf не должно быть существенных отличий от приведенного примера.

Проверьте установленный МРМ командой

apachectl -V

983ed7fe84444c5bad4a20844023eb5e.jpeg

Для более прочной безопасности используйте mpm_itk, если нет острой необходимости в mpm_prefork.

Если вы хотите изменить МРМ, выполните переустановку, предварительно сделав резервные копии конфигурационных файлов. После переустановки проверьте, является ли владельцем сайта и всех его директорий пользователь.

 

Nginx

Откройте конфигурационный файл веб-сервера (nginx.conf), перейдите в секцию http и проверьте, есть ли в ней директивы, которые лимитируют количество подключений с одного IP-адреса:

limit_zone slimits $binary_remote_addr 5m;

limit_conn slimits 10;

или (для последних версий)

limit_conn_zone $binary_remote_addr zone=addr:10m;

limit_conn addr 10;

Если этих директив нет, то добавьте и сохраните файл.

Заблокируйте некоторые агенты пользователя (user agents) для блокировки нежелательного трафика. В секцию http конфигурационного файла Nginx добавьте директиву

if ($http_user_agent ~* LWP::Simple|BBBike|wget|msnbot) {return 403;}

Заблокируйте ссылочный спам (referral spam), добавив в секцию http конфигурационного файла Nginx директиву

if($http_referer ~*(babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) ){return 403;}

 

ISPmanager

В панели управления ISPmanager выполните следующие проверки.

Проверьте, ограничен ли доступ к панели управления по IP-адресу.

Настройте резервное копирование данных, если оно не включено. Мы рекомендуем использовать внешний диск для бэкапа, чтобы исключить потерю данных вместе с архивом.

 

PHP

Откройте конфигурационный файл php.ini и добавьте следующие директивы.

expose_php=Off - выключение передачи информации о версии PHP в HTTP-заголовке;

sql.safe_mode=On - включение SQL safe-mode;

post_max_size=8M - ограничение размера передаваемых методом POST данных;

disable_functions exec, system, passthru, proc_open, shell_exec - отключение некоторых функций в целях безопасности.

 

NTP

В конфигурационный файл NTP (по умолчанию /etc/ntp.conf) добавьте строки, запрещающие рекурсивные запросы:

restrict default kod limited nomodify notrap nopeer noquery

restrict -6 default kod limited nomodify notrap nopeer noquery

restrict 127.0.0.1

restrict -6 ::1

 

Bind

В файл named.conf поместите следующие строки, запрещающие рекурсивные запросы:

allow-recursion {    127.0.0.1;
   82.146.32.0/19;
   78.24.216.0/21;
   92.63.96.0/20;
   62.109.0.0/19;
   188.120.224.0/19;
   149.154.64.0/21;
   37.230.112.0/21;
   94.250.248.0/21;
};

Проверка владельца директории сайта

Проверьте, кому принадлежит основная директория сайта и все ее поддиректории.

В панели инструментов ISPmanager перейдите в раздел “Система” -> “Менеджер файлов” и откройте директорию сайта. Убедитесь, что в столбцах “Владелец” и “Группа” стоит пользователь-владелец сайта. Чтобы изменить эти атрибуты, нажмите кнопку “Атрибуты” на панели инструментов.

b05ed9e9287545029b176b7df6c1a8fa.jpeg

Допустимые имена владельца сайта apache, www, www-data, если вы используете mpm_prefork. Мы рекомендуем использовать mpm_itk для укрепления безопасности.

Если сайт содержит папки общего доступа (например, upload, tmp), то для них допустимо имя владельца 777. Убедитесь, что этот пользователь установлен только на нужные директории, выполнив команду

find ./ -perm 0777

Она отыщет все папки и файлы, владельцем которых является 777.

Настройки на уровне операционной системы

rkhunter

Используйте утилиту rkhunter для выявления потенциальных уязвимостей сервера.

Для установки утилиты используйте команду:

yum install rkhunter - ОС CentOS

apt-get install rkhunter - ОС Debian/Ubuntu

make all install clean -C /usr/ports/security/rkhunter или pkg install rkhunter - ОС FreeBSD

Для обновления базы этой утилиты выполните команды

rkhunter --update

88bf200a71364611b4b0711eeb7dae52.jpeg

rkhunter --propupd

Выполните проверку системы командой

rkhunter -c --cs2

331a91b9891e4dd09023ee958a7289aa.jpeg

В процессе проверки несколько раз вам необходимо нажать клавишу Enter для продолжения. По окончании появится сводная информация о результате проверки.

6cb492ace3d34495b2d93332d9e20c24.jpeg

Результаты проверки помещаются в лог файл /var/log/rkhunter/rkhunter.log, просмотрите его на предмет предупреждений и ошибок.

sysctl

Используйте утилиту sysctl для управления параметрами ядра системы. Откройте конфигурационный файл утилиты /etc/sysctl.conf и внесите следующие строки.

Отключите возможность маршрутизации входящего трафика, поскольку злоумышленник может использовать эту возможность для подмены IP-адресов:

net.ipv4.conf.all.accept_source_route = 0

Отключите ответы на ICMP-запросы по широковещательному каналу - это поможет предотвратить smurf-атаки:

net.ipv4.icmp_echo_ignore_broadcasts = 1

Отключите ведение журнала о неправильных сообщениях об ошибках:

net.ipv4.icmp_ignore_bogus_error_responses = 1

Включите защиту от переполнения памяти:

kernel.exec-shield = 1 (CentOS)

Включите использование памяти ASLR:

kernel.randomize_va_space = 2

Отключите возможность переадресации ICMP-сообщений:

net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.default.accept_redirects = 0

Если вы не используете на сервере VPN или другие специальные приложения, отключите форвардинг:

net.ipv4.conf.all.forwarding = 0

Включите защиту от SYN-флуда - использование SYN cookies:

net.ipv4.tcp_syncookies = 1

Установите количество попыток передачи SYN-ACK пакетов:

net.ipv4.tcp_synack_retries = 3

Установите время, через которое сервер проверяет соединение, если оно давно не используется (по умолчанию это 2 часа):

net.ipv4.tcp_keepalive_time=1800

Установите количество проверок соединения прежде, чем оно будет разорвано:

net.ipv4.tcp_keepalive_probes=3

Установите время пребывания сокета в состоянии FIN-WAIT-2:

net.ipv4.tcp_fin_timeout=30

fstab

Проверьте конфигурационный файл fstab (/etc/fstab), в котором содержится информация о дисках, разделах и устройствах хранения, указывается как они монтируются в систему.

vi /etc/fstab

Обратите внимание, что некорневые разделы должны иметь параметр nodev. Если /tmp примонтирована отдельным разделом, добавьте nodev, noexec, nosuid для этого раздела.

rsyslog

Проверьте системный лог файл /etc/rsyslog.conf.

vi /etc/rsyslog.conf

Обратите внимание на следующие строки, которые должны иметь вид:

58fb6fcf61044f3097c56275926521a3.jpeg

Также убедитесь, что лог файл не пустой, т.е. логирование корректно ведется.

sudo

Проверьте, корректно ли настроена утилита sudo (или su), которая позволяет пользователю запускать некоторые команды и программы с правами суперпользователя root. Настройки этой утилиты находятся в конфигурационном файле /etc/sudoers или /usr/local/etc/sudoers. Откройте его для редактирования

vi /etc/sudoers

Найдите строку, которая прописана по умолчанию и разрешает суперпользователю root запускать любые команды.

207b998700a24330b4ddc502d67a3aa7.jpeg

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

ALL    ALL=/bin/su

или

ALL    ALL=/usr/bin/su

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

%users    ALL=/sbin/mount - группа users сможет использовать  sudo только с командой mount

user    ALL=/sbin/mount - пользователь user сможет использовать  sudo только с командой mount

 

Настройки на сетевом уровне

Проверьте, какие порты на сервере открыты и какие службы их используют, выполнив команду

netstat -tuplnw | awk '{print $4,$NF}' | sort | uniq

a711945362e242808d3c5efb026e450d.jpeg

Например, запись 127.0.0.1:53 748/named означает, что служба named использует 53 порт. Проверьте, что среди работающих служб находятся только необходимые, отключите все остальные.

FTP

Установите диапазон используемых портов для пассивного режима FTP. Для этого откройте для редактирования конфигурационный файл вашего FTP-сервера и добавьте строки:

для vsftpd.conf:  

pasv_min_port=1028

pasv_max_port=1048

для proftpd.conf:

PassivePorts 1028 1048

Без особой необходимости не используйте FTP-протокол, вместо него работайте по SFTP. Если все же необходим FTP, добавьте следующие строки в конфигурационный файл:

для vsftpd.conf:

xferlog_enable=YES  (ведение лог-файла по ftp)

anonymous_enable=NO (запрет подключений анонимных пользователей)

anon_upload_enable=NO

anon_mkdir_write_enable=NO

для proftpd.conf:

в секции <Anonymous ~username>...</Anonymous> удалите все секции <Limit…> и добавьте строки

<Limit LOGIN>

DenyAll

</Limit>

<Limit ALL>

DenyAll

</Limit>

iptables

Проверьте, правильно ли настроен фаервол. Для iptables выполните команду

iptables -nL

Эта команда выводит в командную строку все правила фаервола iptables. Также эти правила можно просмотреть и отредактировать в конфигурационном файле фаервола /etc/sysconfig/iptables - для ОС CentOS,  /etc/network/if-up.d/ispmgrfw - для ОС Debian/Ubuntu.

В правилах фаервола закройте все порты, кроме тех, которые используются работающими на сервере службами. Для этого измените строки

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

на

:INPUT DROP [0:0]

:FORWARD DROP [0:0]

:OUTPUT DROP [0:0]

Чтобы открыть нужные порты добавьте строки вида

-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT

-A INPUT -p udp -m udp --dport 53 -j ACCEPT

-A INPUT -p tcp -m multiport --sports 53,80,25,443,953 -j ACCEPT

где 53 - номер порта который нужно открыть.

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

Правила фаервола можно настраивать из панели управления ISPmanager.

 

SSH

Откройте конфигурационный файл SSH:

vi /etc/ssh/sshd_config

Проверьте, что следующие строки не закоментированы:

Protocol 2 (для использования второй версии протокола)

IgnoreRhosts yes  (не использовать .rhost файл)

HostbasedAuthentication no (не аутентифицировать хост)

PermitRootLogin no (запрет доступа суперпользователя root)

PermitEmptyPasswords no (не использовать пустые пароли)

PermitUserEnvironment no (запрет пользователю устанавливать переменные окружения)

PasswordAuthentication yes (разрешить аутентификацию по паролю)

bfcfcdc2a9274302a8e18652cabd2e3d.jpeg

Включите SFTP, добавив в sshd_config строку:

Subsystem sftp /usr/lib/openssh/sftp-server

Прочие настройки и рекомендации

Почтовая очередь

Проверьте почтовую очередь на предмет переполнения и убедитесь, что среди сообщений нет спама.

Выполните команду mailq и просмотрите список сообщений. Если список очень большой, то выборочно проверьте сообщения, которые могут быть спамом. По идентификатору (например, BD65F10DEE4) определите отправителя письма. Команда

exim -Mvh ID_сообщения

выводит заголовок письма, а команда

exim -Mvb ID_сообщения

даст просмотреть тело сообщения.

Среди заголовков сообщения поле From: содержит отправителя, а X-PHP-Originating-Script - скрипт, которым было отправлено сообщение.

 

Программное обеспечение

Проверьте программное обеспечение сервера на предмет уязвимостей.

ОС CentOS

Выполните команду, которая выводит перечень файлов  установленного программного обеспечения недавно модифицированных:

rpm -qVa - для вывода всех файлов,

rpm -qVa | awk '$2!="c" {print $0}' - для вывода файлов за исключением логов.

b00af18224ca41739fef88c1ff763b64.jpeg

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

S - модифицирован размер файла

M - модифицированы права, установленные по умолчанию

5 - модифицирована контрольная сумма MD5

D - модифицированы major/minor номера для устройства

L - модифицирована символическая ссылка

U - модифицирован владелец файла

G - модифицирована группа

T - модифицирована дата изменения файла (mtime)

c -  конфигурационный файл

d -  файл документации

g - файл, который не включен в пакет

l - файл лицензии

r - README файл

Например, строка S.5....T.  c /etc/httpd/conf/httpd.conf означает, что httpd.conf является конфигурационным файлом, был изменен его размер, контрольная сумма и дата последнего изменения. Поскольку это конфигурационный файл, то эти изменения не вызывают подозрений.

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

stat /usr/sbin/sshd && file /usr/sbin/sshd

где usr/sbin/sshd - путь к файлу.

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

Выполнит команду:

yum --security update

для установки security-update.

ОС Debian

Выполните команды, которые проверяют контрольные суммы MD5 для установленных программ:

# apt-get install debsums
# debsums -c

Выполните следующие команды для проверки security-update:

# echo ‘deb http://security.debian.org wheezy/updates main contrib non-free’ >> /etc/apt/sources.list
# grep security /etc/apt/sources.list > /etc/apt/secsrc.list
# apt-get -s -o Dir::Etc::sourcelist="secsrc.list" -o Dir::Etc::sourceparts="-" upgrade

Для установки  security-update выполните команду:

# apt-get -o Dir::Etc::sourcelist="secsrc.list" -o Dir::Etc::sourceparts="-" upgrade

Проверьте наличие во всех репозиториях сверки gpg, выполнив команды:

# grep -ri gpgcheck /etc/yum.conf
# grep -ri gpgcheck /etc/yum.repos.d/
Убедитесь, что строки имеют вид:

gpgcheck=1
# grep -ri AllowUnauthenticated /etc/apt/

Строк вида

APT::Get::AllowUnauthenticated "true";

быть не должно.

 

Неиспользуемые службы

ОС CentOS

Выполните команду, которая выводит список неиспользуемых служб:

chkconfig --list

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

chkconfig --del service_name

где service_name - имя службы.

 

ОС Debian

Выполните команду, которая выводит список неиспользуемых служб:

sysv-rc-conf

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

sysv-rc-conf off service_name

где service_name - имя службы.

 

 

Назад к категории