248 lines
9.8 KiB
Go
Executable file
248 lines
9.8 KiB
Go
Executable file
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()
|
||
}
|