rubric/modules/infosecmodules/infosec_hardening.go

248 lines
9.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package infosecmodules
import (
"rubric/utils"
)
var HardeningModule = Module{
Key: "hardening",
Aliases: []string{"h", "harden", "ужесточение"},
Title: "Linux Hardening",
Description: "Усиление безопасности Linux: SSH, пакеты, аудит, CIS Benchmarks",
Run: showHardening,
}
func showHardening() {
utils.Header("InfoSec — Linux Hardening")
utils.Section("Принципы усиления безопасности")
utils.Code(`1. Минимизация поверхности атаки — отключить всё лишнее
2. Минимальные привилегии — только нужные права
3. Принцип fail-secure — при сбое → закрытое состояние
4. Аудит и логирование — знать что происходит
5. Обновления — патчи уязвимостей
CIS Benchmarks — детальные руководства по hardening
https://www.cisecurity.org/cis-benchmarks/
Уровни: Level 1 (базовый), Level 2 (продвинутый)
Инструменты проверки:
Lynis — аудит безопасности Linux
OpenSCAP — соответствие стандартам (RHEL)
CIS-CAT — CIS Benchmarks scanner`)
utils.Section("SSH Hardening")
utils.Code(`# /etc/ssh/sshd_config:
# Основное:
Port 2222 # нестандартный порт (защита от автосканов)
PermitRootLogin no # запретить вход root
PasswordAuthentication no # только ключи
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# Ограничения:
AllowUsers alice bob # белый список пользователей
AllowGroups sshusers # или группа
MaxAuthTries 3 # попытки аутентификации
LoginGraceTime 30 # секунд на вход
MaxStartups 3:50:10 # ограничить параллельные подключения
ClientAliveInterval 300 # keepalive каждые 5 минут
ClientAliveCountMax 2 # 2 попытки
# Протокол:
Protocol 2 # только SSHv2
HostKeyAlgorithms ssh-ed25519,ecdsa-sha2-nistp521,rsa-sha2-512
KexAlgorithms curve25519-sha256,diffie-hellman-group-exchange-sha256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com
# Дополнительно:
X11Forwarding no
AllowTcpForwarding no # запретить туннели (если не нужны)
Banner /etc/ssh/banner.txt # показать предупреждение при входе
LogLevel VERBOSE
# Применить:
sshd -t # проверить конфиг
systemctl restart sshd`)
utils.Section("Усиление системы")
utils.Code(`# Обновления:
apt update && apt upgrade -y && apt autoremove -y # Debian
dnf update -y && dnf autoremove -y # RHEL
# Автоматические обновления безопасности:
apt install unattended-upgrades
dpkg-reconfigure unattended-upgrades
# Удалить ненужные пакеты:
apt list --installed | grep -v "essential\|required"
dnf list installed
# Удалить неиспользуемые: apt remove telnet rsh ftp ...
# Отключить ненужные сервисы:
systemctl list-units --type=service --state=active
systemctl disable --now cups avahi-daemon bluetooth
# Временная зона и NTP:
timedatectl set-timezone UTC
timedatectl set-ntp true`)
utils.Section("Сетевое усиление")
utils.Code(`# /etc/sysctl.d/99-hardening.conf:
# Защита от спуфинга:
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Запретить ICMP redirect:
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Запретить source routing:
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# SYN cookies (защита от SYN flood):
net.ipv4.tcp_syncookies = 1
# Не отвечать на broadcast ping:
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Игнорировать bogus ICMP:
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Логировать martian пакеты:
net.ipv4.conf.all.log_martians = 1
# Запретить IP forwarding (если не роутер):
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
# Применить:
sysctl -p /etc/sysctl.d/99-hardening.conf`)
utils.Section("Усиление паролей и аутентификации")
utils.Code(`# PAM — Pluggable Authentication Modules
# /etc/security/pwquality.conf:
minlen = 14 # минимальная длина
minclass = 4 # классы символов (upper, lower, digit, other)
maxrepeat = 3 # не более 3 одинаковых подряд
dcredit = -1 # хотя бы 1 цифра
ucredit = -1 # хотя бы 1 заглавная
lcredit = -1 # хотя бы 1 строчная
ocredit = -1 # хотя бы 1 спецсимвол
# /etc/security/faillock.conf (блокировка после неудач):
deny = 5 # блокировать после 5 неудачных попыток
unlock_time = 900 # разблокировать через 15 минут
# /etc/login.defs:
PASS_MAX_DAYS 90 # смена пароля каждые 90 дней
PASS_MIN_DAYS 7 # не менять чаще раза в 7 дней
PASS_WARN_AGE 14 # предупреждать за 14 дней
# Применить политику к существующему пользователю:
chage -M 90 -W 14 alice
chage -l alice # просмотр`)
utils.Section("Аудит — auditd")
utils.Code(`auditd — система аудита Linux ядра.
Логирует системные вызовы, доступ к файлам, изменения конфигурации.
# Установка:
apt install auditd
systemctl enable --now auditd
# /etc/audit/rules.d/audit.rules:
# Мониторинг изменений аутентификационных файлов:
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
# Мониторинг входов в систему:
-w /var/log/faillog -p wa -k logins
-w /var/log/lastlog -p wa -k logins
# Мониторинг команд с привилегиями:
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands
# Мониторинг сетевых соединений:
-a always,exit -F arch=b64 -S connect -k network_connect
# Применить правила без перезапуска:
augenrules --load
# Просмотр логов:
ausearch -k identity -ts recent # события за последнее время
ausearch -k root_commands -ui 0 # команды root
aureport --auth # отчёт по аутентификации
aureport --summary # общий отчёт
aureport --failed # только ошибки`)
utils.Section("Защита файловой системы")
utils.Code(`# /etc/fstab — безопасные опции монтирования:
/dev/sda1 / ext4 defaults 0 1
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0
tmpfs /var/tmp tmpfs defaults,noexec,nosuid,nodev 0 0
/dev/sda3 /home ext4 defaults,noexec,nosuid,nodev 0 2
/dev/sda4 /var ext4 defaults,nosuid,nodev 0 2
# noexec — нельзя запускать файлы
# nosuid — SUID биты игнорируются
# nodev — устройства игнорируются
# Поиск файлов с SUID/SGID:
find / -perm /4000 -type f 2>/dev/null # SUID
find / -perm /2000 -type f 2>/dev/null # SGID
# Проверить нужны ли они, убрать ненужные:
chmod u-s /usr/bin/unnecessary
# Файлы без владельца (orphaned):
find / -nouser -o -nogroup 2>/dev/null
# Разрешения на критичные файлы:
chmod 600 /etc/shadow
chmod 644 /etc/passwd
chmod 440 /etc/sudoers
chmod 700 /root
# AIDE — мониторинг целостности файлов:
apt install aide
aide --init
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# Проверка (запускать регулярно):
aide --check`)
utils.Section("Lynis — аудит безопасности")
utils.Code(`Lynis — инструмент аудита безопасности Linux.
Проверяет более 300 параметров, даёт рекомендации.
# Установка:
apt install lynis
# или из репозитория (актуальная версия):
git clone https://github.com/CISOfy/lynis
cd lynis && ./lynis audit system
# Запуск:
lynis audit system # полный аудит системы
lynis audit system --quick # быстрый
lynis audit system --pentest # более агрессивные проверки
lynis show tests # список всех тестов
# Результаты:
# /var/log/lynis.log — детальный лог
# /var/log/lynis-report.dat — машиночитаемый отчёт
# Hardening Index: 0-100 (выше = лучше)
# OpenSCAP (RHEL):
dnf install scap-security-guide openscap-scanner
# Проверка по CIS Benchmark:
oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_cis \
--results results.xml \
/usr/share/xml/scap/ssg/content/ssg-rhel9-ds.xml`)
utils.Footer()
}