Проверяем защищенность Linux
Для проверки защищенности Linux советуем использовать Lynis.
Lynis надежно проверяет соответствие системы рекомендациям CIS. Этот инструмент также применим в пентестировании, но в данной статье мы рассмотрим его как средство для проверки безопасности Linux. Помимо Linux, Lynis работает также на операционных системах AIX, FreeBSD, HP-UX, Mac OS, NetBSD, OpenBSD, Solaris и даже Raspberry Pi.
Для установки Lynis, выполните команду:
root@debian:~/# sudo apt-get install lynis
▪ Использование Lynis для проверки защищенности Linux
Ознакомитесь с основными параметрами Lynis:
✔️--auditor "имя" — присвоить аудиту имя.
✔️--checkall -c — начать проверку.
✔️--check-update — проверить актуальностьLynis.
✔️--cronjob — запустить Lynis как cronjob (включает -c -Q).
✔️--help — отобразить справку.
✔️--nocolors — не использовать цвета.
✔️--pentest — выполнить тестирование на проникновение (без привилегий).
✔️--quick — не ждать ввода данных пользователем, за исключением ошибок.
✔️--quiet — показать только предупреждения (включает —quick, но не ждет).
✔️--reverse-colors — использовать другую цветовую схему для светлого фона.
✔️--version — проверить версию программы (и выйти).
Затем запустите Lynis с помощью команды sudo. Чтобы запустить аудит, вы должны иметь права на запись в /tmp (временные файлы).
root@debian:~/# sudo lynis audit system
...
Lynis security scan details:
Hardening index : 84 [############## ]
Tests performed : 260
Plugins enabled : 1
Components:
- Firewall [V]
- Malware scanner [V]
Scan mode:
Normal [V] Forensics [ ] Integration [ ] Pentest [ ]
Lynis modules:
- Compliance status [?]
- Security audit [V]
- Vulnerability scan [V]
Files:
- Test and debug information : /var/log/lynis.log
- Report data : /var/log/lynis-report.dat
▪ Использование профилей Lynis
Lynis позволяет использовать профили, чтобы иметь набор предопределенных параметров для каждой операционной системы.
Если вы не укажете профиль --profile имя_профиля, будет использоваться профиль по умолчанию (default.prf). Рекомендуется скопировать файл default.prf и настроить его под свои нужды.
Как быстро проверить Linux сервер на предмет взлома
Если есть подозрение на взлом, то предлагаем следующий алгоритм действий.
Выявляем вторжения
Snort — один из любимейших инструментов админов и главный фигурант всех руководств по безопасности.
Snort можно и не конфигурировать:
$ sudo apt-get install snort
$ snort -D
Стандартных настроек Snort более чем достаточно для защиты типовых сетевых сервисов. Нужно только время от времени просматривать лог. А в нем можно обнаружить строки типа этих:
[**] [1:2329:6] MS-SQL probe response overflow attempt [**]
[Classification: Attempted User Privilege Gain] [Priority: 1]
[Xref => [url]http://www.securityfocus.com/bid/9407][/url]
Кто-то пытался вызвать переполнение буфера в MySQL. Тут сразу есть и ссылочка на страницу с детальным описанием проблемы.
Анализируем логи
Рекомендуем использовать Logwatch.
https://www.8host.com/blog/ustanovka-i-ispolzovanie-log-analizatora-logwatch/ - инструкция по настройке.
Ищем странные установки патчей, программ, загрузки файлов и т.д.
Если находим, то ищем откуда это пришло.
Смотрим IP SSH-соединений
Смотрим в логах, чтобы все SSH-соединения был со своих IP. Если нет, то меняем пароль.
Сканируем порты.
Далее сканируем хост на предмет подозрительных открытых портов. Сделать это можно, например, с другой юниксовой машины с помощью утилиты nmap:
[root@myhost ~]# nmap -P0 123.123.123.123
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2011-01-23 11:47 MSK
Interesting ports on myhost.myprovider.net (123.123.123.123):
Not shown: 1679 filtered ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
53/tcp open domain
80/tcp open http
106/tcp open pop3pw
110/tcp open pop3
111/tcp open rpcbind
135/tcp filtered msrpc
136/tcp filtered profile
137/tcp filtered netbios-ns
138/tcp filtered netbios-dgm
139/tcp filtered netbios-ssn
143/tcp open imap
443/tcp open https
445/tcp filtered microsoft-ds
465/tcp open smtps
620/tcp open unknown
993/tcp open imaps
995/tcp open pop3s
3306/tcp open mysql
8443/tcp open https-alt
Отыскиваем все подозрительные порты и смотрим, кто их слушает.
[root@myhost ~]# netstat -anp | grep LISTEN | grep 620
tcp 0 0 0.0.0.0:620 0.0.0.0:* LISTEN 1710/rpc.statd
Если что-то не так, то блочим.
Проверяем файл с ключами и паролями
Проверяем фолдер /root/.ssh
[root@myhost ~]# dir /root/.ssh
authorized_keys_
Там не должно быть новых файлов с ключами.
проверить файл /etc/passwd. В нём не должно быть пользователей с uid=0, кроме root:
[root@myhost ~]# cat /etc/passwd | more
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
…
Проверка хоста на установленные руткиты
Финальным аккордом являлась проверка хоста на установленные руткиты. Для этого можно использовать бесплатную утилиту rkhunter. Скачиваем архив с последней версией, распаковываем его и запускаем инсталлер. Далее делаем его обновление и запускаем проверку:
[root@myhost ~]# ./installer.sh --install --layout /usr/local
[root@myhost ~]# /usr/local/bin/rkhunter –-update
[root@myhost ~]# /usr/local/bin/rkhunter –-check
Rkhunter в начале проверят важные системные файлы, затем ищет руткиты. После происходит проверка на различные vulnerabilities. В конце программа проверяет версии популярных продуктов, таких как Apache, OpenSSH и т.п. на предмет последних версий.
Результаты своей работы rkhunter выдает в консоль, а также формирует консолидированный лог /var/log/rkhunter.log. Можно запускать данный антируткит каждый день по крону и получать отчет о сканировании по электронной почте.
Советы по обеспечению безопасности Linux
Ключи вместо паролей SSH
Брутфорс или утечка паролей — стандартный вектор атаки, так что аутентификацию по паролям в SSH (Secure Shell) лучше отключить, а вместо неё использовать аутентификацию по ключам.
Есть разные программы для реализации протокола SSH, такие как lsh и Dropbear, но самой популярной является OpenSSH.
Ограничение попыток доступа
Сервис Fail2Ban анализирует логи на сервере и подсчитывает количество попыток доступа с каждого IP-адреса. В настройках указаны правила, сколько попыток доступа разрешено за определённый интервал — после чего данный IP-адрес блокируется на заданный отрезок времени. Например, разрешаем 5 неудачных попыток аутентификации по SSH в промежуток 2 часа, после чего блокируем данный IP-адрес на 12 часов.
Шифрование информации
Шифрование — это единственное абсолютное средство защиты на сегодняшний день.
Рекомендуем шифровать домашний каталог и своп. Настроить шифрование просто, достаточно установить инструменты ecrypts:
$ sudo apt-get install ecryptfs-utils
И, собственно, включить шифрование:
$ sudo ecryptfs-setup-swap
$ ecryptfs-setup-private
Далее достаточно ввести свой пароль, используемый для логина, и перезайти в систему. Первая команда зашифрует и перемонтирует своп, изменив нужные строки в /etc/fstab. Вторая — создаст каталоги ~/.Private и ~/Private, в которых будут храниться зашифрованные и расшифрованные файлы соответственно. При входе в систему будет срабатывать PAM-модуль pam_ecryptfs.so, который смонтирует первый каталог на второй с прозрачным шифрованием данных. После размонтирования ~/Private окажется пуст, а ~/.Private будет содержать все файлы в зашифрованном виде.
Настраиваем Firewall
Устраняем угрозы извне. Для этого используем ipkungfu. Что это такое? Это скрипт, который произведет за нас всю грязную работу по конфигурированию брандмауэра, без необходимости составлять километровые списки правил.
Устанавливаем:
$ sudo apt-get install ipkungfu
Правим конфиг:
$ sudo vi /etc/ipkungfu/ipkungfu.conf
# Локальная сеть, если есть — пишем адрес сети вместе с маской, нет — пишем loopback-адрес
LOCAL_NET="127.0.0.1"
# Наша машина не является шлюзом
GATEWAY=0
# Закрываем нужные порты
FORBIDDEN_PORTS="135 137 139"
# Блокируем пинги, 90% киддисов отвалится на этом этапе
BLOCK_PINGS=1
# Дропаем подозрительные пакеты (разного рода флуд)
SUSPECT="DROP"
# Дропаем «неправильные» пакеты (некоторые типы DoS)
KNOWN_BAD="DROP"
# Сканирование портов? В трэш!
PORT_SCAN="DROP"
Для включения ipkungfu открываем файл /etc/default/ipkungfu и меняем строку IPKFSTART = 0 на IPKFSTART = 1. Запускаем:
$ sudo ipkungfu
Дополнительно внесем правки в /etc/sysctl.conf:
$ sudo vi /etc/systcl.conf
# Дропаем ICMP-редиректы (против атак типа MITM)
net.ipv4.conf.all.accept_redirects=0
net.ipv6.conf.all.accept_redirects=0
# Включаем механизм TCP syncookies
net.ipv4.tcp_syncookies=1
# Различные твики (защита от спуфинга, увеличение очереди «полуоткрытых» TCP-соединений и так далее)
net.ipv4.tcp_timestamps=0
net.ipv4.conf.all.rp_filter=1
net.ipv4.tcp_max_syn_backlog=1280
kernel.core_uses_pid=1
Активируем изменения:
$ sudo sysctl -p
Настроить среду предзагрузки до установки Linux
Позаботиться о безопасности системы нужно ещё перед установкой Linux. Вот набор рекомендаций для настройки компьютера, которые стоит учесть и выполнить до установки операционной системы:
- Загрузка в режиме UEFI (не legacy BIOS – о нем подраздел ниже)
- Установить пароль на настройку UEFI
- Активировать режим SecureBoot
- Установить пароль на уровне UEFI для загрузки системы
Выбрать подходящий дистрибутив Linux
Скорее всего, вы выберете популярные дистрибутивы — Fedora, Ubuntu, Arch, Debian, или другие близкие ответвления. В любом случае, вам нужно учитывать обязательное наличие этих функций:
- Поддержка принудительного (MAC) и ролевого контроля доступа (RBAC): SELinux/AppArmor/GrSecurity
- Публикация бюллетеней безопасности
- Регулярный выпуск обновлений безопасности
- Криптографическая верификация пакетов
- Поддержка UEFI и SecureBoot
- Поддержка полного нативного шифрования диска
Рекомендации по установке дистрибутивов
Все дистрибутивы отличаются, но существуют моменты, на которые обязательно стоит обратить внимание и выполнить:
- Использовать полное шифрование диска (LUKS) с надёжной ключевой фразой
- Процесс подкачки страниц должен быть зашифрован
- Установить пароль для редактирования boot-загрузчика
- Надёжный пароль на root-доступ
- Использовать аккаунт без привилегий, относящийся к группе администраторов
- Установить для пользователя надёжный пароль, отличный от пароля на root
Добавление пользователя с ограниченными правами
Мы не рекомендуем подключаться к серверу от имени пользователя root — он имеет права на выполнение любых команд, даже критических для системы. Поэтому лучше создать пользователя с ограниченными правами и работать через него.
Смена портов на нестандартные
Хорошая защита от взлома – изменить стандартный ключевой порт. Все неиспользуемые порты надо закрыть (найти их можно через утилиту nmap, а закрыть с помощью iptables).
Если вы хотите получить полноценный IT-аудит с разбором состояния вашей инфраструктуры и нашими рекомендациями, то запишитесь на бесплатную диагностическую встречу по ссылке https://ininsys.ru/audit-it-infrastruktury/.