Аудит доступа к файлам linux. Жесткая закалка Linux. Подбираем инструменты для комплексного аудита безопасности. Просмотр статистики по всем пользователям

В этом материале мы познакомимся с основными утилитами для Linux hardening. На русском языке это называется как-то вроде «проверка уровня защищенности Linux-систем и оценка корректности конфигов с точки зрения ИБ». Разумеется, мы не только сделаем обзор программ, но и приведем примеры их использования.

Сам себе аудитор, или безопасность собственными силами

Перед администраторами, а уж тем более перед аудиторами ИБ часто встают задачи проверить защищенность большого количества хостов за очень короткое время. И конечно, для решения этих задач в Enterprise-сегменте существуют специализированные инструменты, к примеру такие, как сетевые сканеры безопасности . Уверен, что все они - от open sources движка OpenVAS до коммерческих продуктов типа Nessus или Nexpose - известны нашему читателю. Однако этот софт обычно используется, чтобы искать устаревшее и потому уязвимое ПО и затем запустить патч-менеджмент . К тому же не все сканеры учитывают некоторые специфические особенности встроенных механизмов защиты Linux и других open sources продуктов. Ну и не в последнюю очередь значение имеет цена вопроса, ведь коммерческие продукты в состоянии позволить себе разве что компании, выделяющие под это дело бюджеты.

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

Практические аспекты аудита защищенности

Если посмотреть глазами аудитора, то подход к тестированию можно разделить на два типа.

Первый - это соответствие так называемым compliance-требованиям , здесь проверяется наличие обязательных элементов защиты, прописанных в каком-либо международном стандарте или «best practice». Классический пример - требования PCI DSS для платежных ИТ-систем, SOX404 , NIST-800 series , .

Второй - это сугубо рациональный подход, основанный на вопросе «А что еще можно сделать, чтобы усилить защищенность?». Тут нет обязательных требований - только твои знания, светлая голова и умелые руки. К примеру, это обновление версии ядра и/или пакетов приложений, включение , форсирование , настройка файрвола .

Все, что относится ко второму подходу, принято называть специальным термином Hardening , что еще можно определить как «действия, направленные на усиление уровня исходной защищенности операционной системы (или программы) преимущественно штатными средствами».

Соответствие compliance-требованиям, как правило, проверяют при подготовке к прохождению обязательного аудита типа PCI DSS или другого сертификационного аудита. Мы же больше уделим внимание Hardening-составляющей. Все крупные разработчики предлагают для своих продуктов Hardening Guidelines - руководства, содержащие советы и рекомендации, как усилить защищенность, учитывая штатные механизмы безопасности и специфику софта. Так, подобные руководства есть у Red Hat , Debian , Oracle , Cisco .

INFO

Hardening - это термин из мира ИБ, который обозначает процесс обеспечения безопасности системы (программы) за счет снижения ее уязвимости и, как правило, с использованием только штатных утилит или механизмов защиты.

Sudo apt-get update sudo apt-get install lynis

И для RPM-ориентированных дистрибутивов (предварительно добавив соответствующие репозитории):

Yum install linus -y

Установка на macOS:

$ brew search lynis $ brew install lynis

Чтобы запустить Lynis, достаточно указать хотя бы один ключ. К примеру, для запуска всех имеющихся тестов следует указать ключ -c (check all, проверить все):

# Типовой набор тестов sudo lynis audit system # Полный набор тестов sudo lynis audit system -c # Сканирование удаленного хоста audit system remote







Перед аудитом всегда полезно проверить, доступна ли новая версия Lynis:

Lynis update info && lynis update check

У утилиты Lynis, помимо стандартного, существует еще один режим - непривилегированного запуска :

Lynis audit --pentest

Если же ты хочешь поместить имя аудитора, запустившего тестирование, просто добавь параметр -auditor :

Sudo lynis audit system -c -auditor Daddy

На любом этапе аудита процесс проверки может быть продолжен (Enter) либо принудительно прекращен (Ctrl+C). Результаты выполненных тестов будут писаться в журнал Lynis в /var/log/lynis.log . Учти, что журнал будет перезаписываться при каждом следующем запуске утилиты.

Для тестирования на систематической основе в автоматическом режиме можно назначить соответствующее задание в планировщик Cron с помощью ключа -cronjob . В таком случае утилита будет запускаться по заданному шаблону (конфигу) и не будет выводить никаких интерактивных сообщений, вопросов и предупреждений. Все результаты сохранятся в лог. К примеру, вот скрипт запуска утилиты с дефолтным конфигом раз в месяц:

#!/bin/sh AUDITOR="automated" DATE=$(date +%Y%m%d) HOST=$(hostname) LOG_DIR="/var/log/lynis" REPORT="$LOG_DIR/report-${HOST}.${DATE}" DATA="$LOG_DIR/report-data-${HOST}.${DATE}.txt" cd /usr/local/lynis ./lynis -c –auditor "${AUDITOR}" –cronjob > ${REPORT} mv /var/log/lynis-report.dat ${DATA} # End

Сохрани этот скрипт в каталог /etc/cron.monthly/lynis . И не забудь добавить пути для сохранения логов (/usr/local/lynis и /var/log/lynis), иначе возможна некорректная работа.

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

Lynis show commands

Особо любопытные могут глянуть настройки из конфига по умолчанию:

Lynis show settings

Краткий инструктаж по работе с утилитой:

Man lynis

Варианты возможных статусов по результатам проверки ограничиваются следующим списком: NONE, WEAK, DONE, FOUND, NOT_FOUND, OK, WARNING .


Запуск отдельных тестов в Lynis

На практике бывает необходимо провести лишь некоторые тесты. К примеру, если твой сервак выполняет только функции Mail Server или Apache. Для этого мы можем использовать параметр -tests . Синтаксис команды выглядит следующим образом:

Lynis -tests "Test-IDs"

Если тебе сложно разобраться из-за большого количества идентификаторов тестов, то ты можешь использовать групповой параметр -test-category . С помощью данной опции Lynis запускает идентификаторы только тех тестов, которые входят в определенную категорию. Например, мы планируем запустить тесты брандмауэра и ядра:

./lynis -tests-category "firewalls kernel"

Помимо этого, функциональность Lynis расширяют различные плагины , которые можно дописывать самостоятельно, а можно подкладывать новые в существующую директорию.

Предложения по исправлению (Suggestions)

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

Профили

Профили, которые управляют аудитом, определяются в файлах с расширением .prf , расположенных в каталоге /etc/lynis . Профиль по умолчанию называется предсказуемо: default.prf . Разработчики не рекомендуют править его напрямую: любые изменения, которые ты хочешь внести в аудит, лучше добавлять в файл custom.prf , находящийся в том же каталоге.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

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

Если вы не видите никаких признаков сторонней активности на 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, откройте его для просмотра и сверьте его содержимое со следующим примером:

Options +Includes -FollowSymLinks +SymLinksIfOwnerMatch AllowOverride FileInfo AuthConfig Limit Indexes Options Order allow,deny Allow from all php_admin_value open_basedir "." Options -Indexes Action php-cgi /php-bin/php

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

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

Apachectl -V

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

Допустимые имена владельца сайта 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

Rkhunter --propupd

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

Rkhunter -c --cs2

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

Результаты проверки помещаются в лог файл /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

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

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

sudo

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

Vi /etc/sudoers

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

Для того, чтоб наделить всех пользователей привилегией запускать команды от имени 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

Например, запись 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:

в секции ... удалите все секции и добавьте строки

DenyAll DenyAll

iptables

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

Iptables -nL

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

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

:INPUT ACCEPT :FORWARD ACCEPT :OUTPUT ACCEPT на:INPUT DROP :FORWARD DROP :OUTPUT DROP

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

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 (разрешить аутентификацию по паролю)

Включите 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}" - для вывода файлов за исключением логов.

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

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 - имя службы.

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

Эти инструкции подойдут для любого дистрибутива, неважно что вы используете CentOS, Red Hat или Ubuntu, Debian.

1. Шифрование связи

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

Используйте scp, ssh , rsync, или sftp для передачи файлов. Можно также смонтировать удаленную файловую систему в ваш домашний каталог с помощью таких инструментов, как shhfs.

GnuPG позволяет шифровать и подписывать ваши данные с помощью специального личного ключа. Также есть функции для управления ключами и доступа к открытым ключам.

Fugu - это графический инструмент для передачи файлов по протоколу SFTP. SFTP очень похож на FTP, но вся сессия здесь зашифрована. Это значит что никакие пароли или команды не передаются в открытом виде. А поэтому такие передачи менее уязвимы для третьих сторон. Также можно использовать FileZilla, это кроссплатформенный FTP клиент с поддержкой работы FTS через SSH / TLS и SSH File Transfer Protocol (SFTP).

OpenVPN - эффективный и легкий VPN клиент с поддержкой шифрования по SSH.

2. Постарайтесь не использовать FTP, Telnet, Rlogin и RSH

В большинстве сетей имена пользователей, пароли от FTP, Telnet, RSH команд могут быть перехвачены кем-либо из той же самой сети с помощью анализатора пакетов. Общее решение этой проблемы заключается в использовании OpenSSH, SFTP или SFTP, который добавляет SSL или TLS к обычному FTP. Выполните такую команду чтобы удалить NIS, RSH и другие устаревшие службы:

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

3. Уменьшите количество программного обеспечения

Вам действительно нужны все установленные веб-службы? Не следует устанавливать ненужное программное обеспечение, чтобы избежать уязвимостей в этих программах. Используйте свой пакетный менеджер чтобы посмотреть установленные программы и удалить все ненужные:

yum list installed
$ yum list пакет
$ yum remove пакет

dpkg --list
$ dpkg --info пакет
$ apt-get remove пакет

4. Одна машина - одна служба

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

5. Держите ядро Linux и ПО в актуальном состоянии

Применение патчей безопасности это очень важная часть того чтобы поддерживать безопасность сервера Linux. Операционная система предоставляет все инструменты для поддержания системы в актуальном состоянии, и обновления до новых версий. Все обновления безопасности должны применяться как можно скорее. Здесь тоже нужно использовать ваш менеджер пакетов. Например:

Или для систем основанных на Debian:

sudo apt update && sudo apt upgrade

Вы можете настроить Red Hat или Fedora для отправки вам уведомления на Email о доступности новых обновлений безопасности. Также вы можете настроить автоматическое обновление через cron, или же вы можете использовать aptcron в Debian для уведомления о необходимости обновить систему.

6. Используйте расширения безопасности в Linux

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

SELinux предоставляет различные политики безопасности для ядра Linux. Здесь есть возможность контролировать доступ к любым ресурсам системы с помощью ролей. К тому или иному ресурсу может получить доступ только программа, роль которой позволяет это делать и даже права суперпользователя не имеют значения. SELinux намного увеличивает безопасность системы Linux, поскольку даже root здесь считается обычным пользователем. Подробнее о описано в отдельной статье.

7. Учетные записи пользователей и надежные пароли

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

8. Время от времени изменяйте пароли

Команда change позволяет указать количество дней до даты принудительной смены пароля. Эта информация используется системой для определения момента, когда пользователь должен его изменить. Эти настройки находятся в /etc/login.defs. Чтобы отключить старение пароля введите следующую команду:

change -l имя_пользователя

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

Также вы можете все настроить вручную, в файле /etc/shadow:

{пользователь}: {пароль}: {последнее_изменение}: {максимум_дней}: {минимум_дней}: {Предупреждение}: {деактивировать}: {строк_годности}:

  • Минимум дней - минимальный интервал между сменами паролей, то есть насколько часто пользователь может менять пароль.
  • Максимум дней - сколько дней будет годен пароль, по истечении этого срока пользователь будет вынужден поменять пароль.
  • Предупреждение - количество дней после которых пользователь будет предупрежден, что ему нужно сменить пароль.
  • Строк_годности - количество дней с первого января 1970 когда аккаунт будет полностью отключен.

chage -M 60 -m 7 -W 7 имя_пользователя

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

9. Блокируйте аккаунты после неудачных попыток входа

В операционной системе Linux вы можете использовать команду faillog, чтобы посмотреть неудачные попытки входа пользователей. Также с помощью нее вы можете установить лимит неудачных попыток входа. Вся информация о неудачных попытках входа хранится в файле /var/log/faillog. Чтобы ее посмотреть наберите:

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

faillog -r -u пользователь

Также вы можете вручную блокировать или разблокировать аккаунты с помощью команды passwd. Чтобы заблокировать используйте:

passwd -l пользователь

А для разблокировки:

passwd -u пользователь

Также желательно проверить есть ли в системе аккаунты с пустыми паролями. Для этого выполните:

awk -F: "($2 == "") {print}" /etc/shadow

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

awk -F: "($3 == "0") {print}" /etc/passwd

Должна быть только одна строка:

root:x:0:0:root:/root:/bin/bash

Если есть и другие - удалите их. Пользователи, а особенно их слабые пароли - одна из самых уязвимых вещей, которая может нарушить безопасность в linux.

10. Отключите вход для суперпользователя

Чтобы сохранить безопасность системы linux никогда не используйте вход от имени root пользователя. Вы можете воспользоваться sudo, чтобы получить необходимые полномочия и запустить нужную команду от имени суперпользователя. Эта команда позволяет не разглашать пароль суперпользователя другим админам, а также содержит инструменты мониторинга, ограничения и отслеживания действий.

11. Физическая безопасность сервера

Безопасность сервера Linux должна включать физическую безопасность. Вы должны ограничить физический доступ к консоли сервера. Настройте BIOS так, чтобы не поддерживалась загрузка с внешних носителей, таких как DVD, CD, USB. Также установите пароль на BIOS и загрузчик GRUB, чтобы защитить их параметры.

12. Отключите ненужные сервисы

Отключите все неиспользуемые сервисы и демоны. Также не забудьте удалить эти сервисы из автозагрузки. Вы можете посмотреть список всех активных сервисов в системах Red Hat командой:

chkconfig --list | grep "3:on"

Для отключения сервиса используйте:

service сервис stop
$ chkconfig сервис off

Найдите все открытые программами порты:

То же самое можно сделать с помощью сканера nmap:

nmap -sT -O localhost

Используйте iptables, чтобы закрыть все порты, которые не должны быть доступны из сети. Или остановите ненужные сервисы как описано выше.

13. Удалите Х сервер

Х сервер на серверном компьютере - вещь совсем необязательная. Вам не нужно запускать графическое окружение на выделенном Apache или Email сервере. Удалите это программное обеспечение для увеличения безопасности и производительности.

14. Настройте Iptables

iptables - это программа пространства пользователя для настройки встроенного в ядро фаервола Netfilter. Он позволяет фильтровать весь трафик и разрешать только определенные виды трафика. Также используйте TCPWrappers - ACL систему для фильтрации доступа в интернет. Вы можете предотвратить множество типов DOS атак с помощью iptables. Сетевая безопасность в Linux это очень важный момент общей безопасности системы.

15. Настройте ядро

В файле /etc/sysctl.conf хранятся настройки ядра, которые загружаются и применяются во время запуска системы.

Включить защиту от переполнения буфера execshield:

kernel.exec-shield=1
kernel.randomize_va_space=1

Включить защиту от подделывания IP:

net.ipv4.conf.all.rp_filter=1

Отключить перенаправление IP адресов:

net.ipv4.conf.all.accept_source_route=0

Игнорировать широковещательные запросы:

net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1

Логгировать все подделанные пакеты:

net.ipv4.conf.all.log_martians = 1

16. Разбейте жесткий диск на разделы

Разделение жесткого диска на разделы в зависимости от назначения файлов улучшает безопасность ос Linux. Рекомендуется делать отдельные разделы для таких директорий:

  • /home
  • /var и /var/tmp

Сделайте отдельные разделы для корневых директорий Apache и FTP серверов. Откройте файл /etc/fstab и выставьте специальные опции для нужных разделов:

  • noexec - не выполнять любые программы или исполняемые файлы на этом разделе, разрешены только скрипты
  • nodev - не разрешать символические или специальные устройства на этом разделе.
  • nosuid - не разрешать SUID / SGID доступ для программ из этого раздела.

17. Используйте ограничение дискового пространства

Ограничивайте доступное дисковое пространство для пользователей. Для этого создайте дисковую квоту в /etc/fstab, перемонтируйте файловые системы и создайте базу данных дисковых квот. Это повысит безопасность в Linux.

18. Отключите IPv6

Протокол интернета нового поколения IPv6 в будущем заменит уже используемый IPv4. Но на данный момент нет инструментов, позволяющих проверить безопасность сети на основе IPv6. Многие дистрибутивы Linux разрешают использование протокола IPv6 по умолчанию. Хакеры могут отправлять нежелательный трафик и администраторы не смогут его отследить. Так что если эта служба вам не нужна отключите ее.

19. Отключите неиспользуемые SUID и SGID бинарники

Все исполняемые файлы, для которых включен флаг SUID или SGID потенциально опасны. Этот флаг означает, что программа будет выполняться с правами суперпользователя. А это означает, что если в программе есть какая-нибудь уязвимость или баг, то локальный или удаленный пользователь сможет использовать этот файл. Найдите все такие файлы с помощью следующей команды:

find / -perm +4000

Найти файлы с установленным SGID флагом:

find / -perm +2000

Или скомбинируем все это в одной команде:

find / \(-perm -4000 -o -perm -2000 \) -print
$ find / -path -prune -o -type f -perm +6000 -ls

Вам придется подробно изучить каждый найденный файл, чтобы понять насколько нужен тот или иной файл.

20. Общедоступные файлы

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

find /dir -xdev -type d \(-perm -0002 -a ! -perm -1000 \) -print

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

Также желательно найти все файлы не принадлежащие никому:

find /dir -xdev \(-nouser -o -nogroup \) -print

21. Используйте централизованную систему аутентификации

Без централизованной системы аутентификации пользовательские данные становятся противоречивыми, что может привести к устареванию учетных данных, и забыванию аккаунтов, которые должны были бы быть уже давно удалены. Централизованная служба позволит поддерживать контроль над учетными записями и аутентификационными данными пользователей на разных системах Linux и Unix. Вы можете синхронизировать данные аутентификации между серверами. Но не используйте службу NIS, лучше посмотрите в сторону Open DAP.

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

22. Логирование и аудит

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

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

Наблюдайте за системой с помощью службы auditd. Программа записывает на диск все события аудита которые вас интересуют. Все настройки аудита хранятся в файле /etc/audit.rules при запуске системы сервис прочитывает все правила из этого файла. Вы можете его открыть и настроить все как нужно или же воспользоваться отдельной утилитой - auditctl. Можно настроить такие моменты:

  • События запуска и выключения системы
  • Дата и время события
  • Пользовательские события (например доступ к определенному файлу)
  • Тип события (редактирование, доступ, удаление, запись, обновление и т д)
  • Удачность или сбой при выполнении события
  • Запись событий изменения настроек сети
  • Запись изменения пользователей и групп
  • Мониторинг изменений файлов

23. Защитите OpenSSH сервер

Разрешите только использование протокола 2:

Запретите вход от имени суперпользователя:

24. Установите IDS

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

Хорошая практика - развернуть подобное программное обеспечение, перед тем как система станет доступной из интернета. Вы можете установить AIDE, это HIDS (Host based IDS) которая может контролировать все аспекты внутреннего устройства вашей системы.

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

25. Защитите ваши файлы и каталоги

В Linux есть отличные средства защиты от несанкционированного доступа к файлам. Однако разрешения установленные Linux и файловой системой ничего не значат, когда у злоумышленника есть физический доступ к компьютеру и он может просто подключить жесткий диск компьютера к другой системе, чтобы скопировать ваши данные. Но вы можете легко защитить свои файлы с помощью шифрования:

  • Для шифрования и расшифровки файла по паролю используйте GPG
  • Также можно защищать файлы с помощью OpenSSL
  • Шифрование каталогов выполняется с помощью ecryptfs
  • TrueCrypt - свободный инструмент для шифрования дисков в Windows и Linux

Выводы

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

Большинство таких корпоративных и многокомпонентных систем как SAP , Oracle DB используют в своей платформе операционную систему базирующийся на Linux . В виду этого к ним обращено такое пристальное внимание со стороны ИТ-аудиторов. Сегодня в статье мы представим вашему вниманию несколько бесплатных инструментов представленных в виде скриптов и использующих штатные механизмы ОС для провидения экспресс аудита конфигурации безопасности.

Ниже описанные системные команды и скрипты применяемые для экспресс аудита опций безопасности систем ОС Linux базируются на рекомендациях по проверке защищенности опубликованными сообществом ISACA в руководстве UNIX/LINUX Operating System Security Audit/Assurance Program .

1.Проверка учетных записей

1.1 Вывести список всех пользователей
Список пользователей хранится в файле /etc/passwdfile. Для получения списка пользователей можно использовать следующий скрипт:

  1. bin/bash
  2. # userslistinthesystem.sh
  3. # count and Lists existing “real” users in the system.
  4. echo “[*] Existing users (sorted alphabetically):”
  5. grep ‘/bin/bash’ /etc/passwd | grep -v ‘root’ | cut -f1
  6. -d’:’ | sort
  7. echo -n “[*] Number of real users found: “
  8. grep ‘/bin/bash’ /etc/passwd | grep -v ‘root’ | wc -l
1.2 Вывести список заблокированных учетных записей
В ходе аудита, необходимо проверить список заблокированных и разблокированных пользователей (accountName ). Для этого подойдет следующая команда:
  1. #!/bin/bash
  2. # passwd –s accountName

1.3 Просмотр статистики по всем пользователям

  • Аудитор должен убедиться, что команда ac включена в системе, для обзора деятельности пользователей:
    1. #!/bin/bash
    Для просмотра активности сеанса подключения пользователя с итогами за каждый день используйте команду:
    1. #!/bin/bash
    2. # ac -d
    Для вывода информации, об активности сеанса (в часах) подключения пользователя «user» :
    1. #!/bin/bash
    2. # ac user
    1.4 Просмотр активности пользователей
    Системные приложения psacct или acct работают в фоновом режиме и отслеживают активность каждого пользователя в системе, а также потребляемые им ресурсы. Для проверки активности пользователей в системе запустите следующий скрипт:
    1. #!/usr/bin/envksh
    2. last -Fa|awk ‘
    3. /wtmp begins/ { next; }
    4. /still logged in/ { next; }
    5. $0 == reboot { next; }
    6. NF > 0 {
    7. if(NR > 1)
    8. printf (“
      ”);
    9. printf (“ User:t%s
      ”, $1); # user
    10. printf (“ Start:t%s %s %s %s
      ”, $3, $4, $5, $6);
    11. if($9 == “down”)
    12. printf (“ End:tshutdown
      ”);
    13. printf (“ End:t%s %s %s %s
      ”, $9, $10, $11, $12);
    14. if(substr ($NF, 1, 1) == “(“)
    15. t = $NF;
    16. h = “localhost”;
    17. t = $(NF-1);
    18. h = $NF;
    19. gsub(“[()]”, “”, t);
    20. printf (“ Time On:t%s
      ”, t);
    21. printf (“Remote Host:t%s
      ”, h);
  • 2. Проверка парольной политики

    2.1 Учетные записи с пустым паролем
    В ходе аудита, необходимо убедиться, что в системе отсутствуют или заблокированы учетные записи, позволяющие войти в систему без ввода пароля. Это правило можно проверить командой:

    # cat /etc/shadow | awk -F: ($2==””){print $1}’

    2.2 Проверка сложности пароля
    В ходе аудита, необходимо проверить настройки сложности пароля, чтобы снизить риск атак на пароль брутфорсом (перебором) или подбором по словарю. Для установки этого правила в системе необходимо использовать подключаемые модули аутентификации (PAM).
    Аудитор может проверить соответствующую настройку в файле конфигурации:

    # vi /etc/pam.d/system-auth

    2.3 Проверка срока действия пароля

    В ходе аудита, необходимо проверить настройку срока истечения действия пароля. Чтобы проверить срок действия пароля необходимо использовать команду change. Эта команда выводит подробную информацию сроке действия пароля, а также о дате его последнего изменения.
    Следующая команда служит для просмотра информации о «возрасте» паролей:

    #chage -l username

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

    #chage -M 60 username
    #chage -M 60 -m 7 -W 7 userName

    Параметры (для установки срока действия пароля):
    -M – максимальный срок действия в днях.
    -m – минимальный срок действия в днях.
    -W – настройка предупреждения в днях.

    2.4 Использование повторяющихся паролей
    Настройки авторизации в систему должны соответствовать парольной политике. Файл содержащий историю паролей находится в /etc/security/opasswd. Для проверки необходимо выполнить следующие шаги:

    для RHEL: открыть файл ‘/etc/pam.d/system-auth‘:

    # vi /etc/pam.d/system-auth

    для Ubuntu/Debian/Linux Mint: открыть файл ‘/etc/pam.d/common-password‘:

    # vi /etc/pam.d/common-password

    Добавить следующую строку раздел ‘auth’:

    auth sufficient pam_unix.so likeauthnullok

    Для запрета использовать последние шесть паролей добавьте следующую строку:

    Password sufficient pam_unix.so nullokuse_authtok md5 shadow remember=6

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

    3. Настройки защищенного подключения
    Протоколы удаленного подключения к системе Telnet и Rlogin весьма стары и уязвимы, из-за передачи пароля по сети в незашифрованном виде. Для уделенного и безопасного подключения должен использоваться защищенный протокол Secure Shell (SSH). Аудитору так же необходимо убедиться, что опция root login отключен, изменен SSH-порт по умолчанию, удаленный доступ разрешен только для конкретных авторизованных пользователей. Проверяемые настройки находятся в конфигурационном файле SSH:

    1. # vi /etc/ssh/sshd_config

    3.1 Вход в систему от имени суперпользователя (root login)

    В ходе аудита, аудитор должен проверить запрет удаленного входа в систему с правами суперпользователя root.

    # PermitRootLogin = yes
    3.2 Проверка служебного аккаунта SSH login

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

    Check your sshd_config settings (/etc/ssh/sshd_config) are correct one last time.

    # PermitRootLogin without-password

    # RSAAuthentication = yes

    # PubkeyAuthentication = yes

    3.3 Проверка списков доступа в DenyHosts и Fail2ban
    В ходе аудита необходимо проверить настройки списков доступа DenyHosts и Fail2ban . Это скрипты, используемые для мониторинга и анализа журналов доступа по SSH и защиты от атак путем брутфорса паролей.

    Особенности DenyHosts:

    • сохраняет и отслеживает журналы из файла /var/log/secure , отметив, все успешные и неудачные попытки входа, и фильтрует их.
    • осуществляет мониторинг неудачных попыток входа
    • отправляет по электронной почте уведомление о заблокированных хостах и подозрительных попытках входа
    Особенности Fail2ban:
    • Сохраняет и отслеживает журналы из файлов /var/log/secure и /var/log/auth.log , /var/log/pwdfail
    • высоко настраиваемый и многопоточный
    • следит за файлами журналов на регулярной основе

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

    4.1 Журналы событий в Linux:

    /var/log/auth.log – журнал системы авторизации (логины и механизм проверки подлинности).
    /var/log/dpkg.log – журнал установки/удаления пакетов с использованием dpkg.
    /var/log/yum.log – журнал установки/удаления пакетов с использованием yum.
    /var/log/faillog – журнал неудачных попыток входа в систему и их предельного числа для каждой учётной записи.
    /var/log/kern.log – журнал ядра, (подробный лог сообщений от ядра Linux).
    /var/log/maillog или /var/log/mail.log – журнал почтового сервера.
    /var/log/wtmp – журнал входа в систему (время регистрации и продолжительность работы всех пользователей системы).
    /var/run/utmp – сведения о пользователях, зарегистрированных в системе в настоящее время.
    /var/log/lastlog – записи о предыдущих входах в систему.
    /var/log/boot – информация, которая регистрируется во время загрузки системы

    5. Защита системных файлов

    5.1 Защита загрузчика GRUB

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

    # grub-md5-crypt

    После выполнения команды, администратору необходимо открыть файл /boot/grub/menu.lst или /boot/grub/grub.conf и добавить MD5-пароль:

    # vi /boot/grub/menu.lst

    # vi /boot/grub/grub.conf

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

    5.2 Защита загрузочной директории /BOOT

    В ходе аудита, необходимо проверить состояние каталога /boot, поскольку ядро системы и связанные с ним файлы размещены в каталоге /boot. Необходимо убедиться, что к данной директории разрешен доступ только на чтение, что предотвращает несанкционированное изменение важных файлов в системе. Для проверки откройте файл /etc/fstab и проверьте конфигурацию:

    В файле должна присутствовать строка:

    LABEL=/boot /boot ext2 defaults,ro 1 2

    5.3 Проверка открытых портов и активных соединений

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

    #!/bin/bash
    if (($(ps -ef | grep -v grep | grep $service | wc -l) > 0))
    then
    echo “$service is running!!!”
    else
    /etc/init.d/$service start
    Fi

    Просмотр сетевых соединений

    # netstat -anop
    или
    # lsof -i(lsof -ni)
    или
    # iptraf

    Прослушиваемые порты
    При помощи команды Netstat, можно просмотреть все открытые порты и связанные с ними команды. Пример скрипта:

    # netstat–tulpn
    A script for port scanning is:
    scan() {
    if [[ -z $1 || -z $2 ]]; then
    echo “Usage: $0
    return
    fi
    local host=$1
    local ports=()
    case $2 in
    *-*)
    IFS=- read start end <<< “$2”
    for ((port=start; port <= end; port++)); do
    ports+=($port)
    done
    ;;
    *,*)
    IFS=, read -ra ports <<< “$2”
    ;; *)
    ports+=($2) ;;
    esac
    for port in “${ports[@]}”; do
    alarm 1 “echo >/dev/tcp/$host/$port” &&
    echo “port $port is open” ||
    echo “port $port is closed”
    done
    }

    Межсетевой экран iptables

    В ходе аудита, необходимо проверить конфигурацию брандмауэра Linux для предотвращения несанкционированного доступа. Для контроля трафика, в iptables должны быть созданы правила, которые будут фильтровать входящие, исходящие и пересылаемые пакеты с учетом IP адреса и номера TCP/UDP порта.

    # iptables -n -L -v --line-numbers

    ICMP/broadcast запросы

    В ходе аудита, необходимо проверить, что системы настроены на игнорирование ping и широковещательных запросов. Для этого убедитесь, что в файле “/etc/sysctl.conf” добавлены следующие строки:

    # игнорировать ICMP запросы:
    net.ipv4.icmp_echo_ignore_all = 1
    # игнорировать широковещательные запросы:
    net.ipv4.icmp_echo_ignore_broadcasts = 1

    5.4 Проверка установленных обновлений

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

    # yum updates
    # yum check-update

    6. Проверка автоматически выполняемых заданий CRON

    Аудитор должен проверить кому разрешено и запрещено выполнять задания в cron. Доступ к cron контролируется c использованием файлов /etc/cron.allow и /etc/cron.deny.

    # echo ALL >>/etc/cron.deny

    7. Проверка форсированного режима безопасности SELINUX

    В ходе аудита важно проверить статус SELinux . Данный механизм должен быть включен в системе.
    Существует три режима SELinux :

    • Enforcing: политика SELinux включена принудительно. SELinux запрещает доступ, основываясь на правилах политики SELinux.
    • Permissive: политика SELinux не принудительна. SELinux не запрещает доступ, но запреты журнлируются как действия, которые были бы запрещены, если переключить политику в принудительный режим.
    • Disabled: SELinux отключен. Используются только дискретные правила DAC.

    В ходе аудита, можно использовать следующий сценарий, чтобы проверить состояние SELinux или использовать команды system-configselinux, getenforce или sestatus:

    ENABLED=`cat /selinux/enforce`
    if [ “$ENABLED” == 1 ]; then
    echo “SELinux is enabled, disable? (yes/no):”
    read disable
    if [ $disable == “yes” ]; then
    echo “disabling selinux”
    setenforce 0
    fi
    fi

    Скрипт LBSA для проверки основных опций безопасности

    LBSA (Linux Basic Security Audit script) - это базовый скрипт аудита конфигурации безопасности Linux-систем. Скрипт должен быть запущен из командной строки с привилегиям root, или в идеале запускаться по расписанию на регулярной основе с помощью планировщика cron для систематической проверки изменений конфигурации.

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

    В настоящее редакции (Version 1.0.49), скрипт сканирует следующий опции:

    • уязвимости в настройках учетных записей
    • уязвимости в настройках SSH
    • уязвимости во временных каталогах и каталогов файловой системы загруженной в оперативную память (например, в /tmp, /var/tmp /dev/)
    • разрешения на файлы, состояние системных директорий
    • rконфигурацию сервисов DRBD и Hearbeat

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

    Похожие публикации