Скрипт on-off механизмов защиты по Red-Book для ALSE1.6

oko

New member
Сообщения
511
#1
Набросал простенький скрипт для включения/отключения механизмов защиты, определенных для Astra Linux Special Edition 1.6 согласно Red-Book...
В идеале для АС с высокими требованиями безопасности включать нужно все, но безопасность - дело индивидуальное, ага...
Фактический состав механизмов, доступных для активации/отключения, можно посмотреть в тексте скрипта непосредственно...
Скрипт нужен больше как памятка и средство упрощения действий по настройке, на большее не претендует. Знатоки BASH могут поправить и оптимизировать текст скрипта - не обижусь :)
#!/bin/bash
answer_astra_control () {
echo -n "Включить $1? "
while read response; do
case $response in
[yY][eE][sS]|[yY])
$2 enable
echo "$1 - активировано" && echo ""
break
;;
[nN][oO]|[nN])
$2 disable
echo "$1 - отключено" && echo ""
break
;;
*)
echo -n "Пожалуйста, введите Yes или No: "
esac
done
}

answer_def () {
echo -n "$1"
while read response; do
case $response in
[yY][eE][sS]|[yY])
echo "$2" && echo ""
break
;;
[nN][oO]|[nN])
echo "$3" && echo ""
break
;;
*)
echo -n "Пожалуйста, введите Yes или No: "
esac
done
}


echo "Запуск скрипта активации/отключения механизмов Astra Linux SE 1.6 согласно Red-Book, 2020 г."
echo ""

answer_def "Начать настройку встроенных механизмов защиты Astra Linux SE 1.6? " "" "Завершение работы скрипта управления..."
case $response in
[nN][oO]|[nN])
exit 0
;;
*)
esac

answer_def "Запретить создание дампа ядра? " "запрет создания дампа ядра - активировано" "запрет создания дампа ядра - отключено"
sed -i "/fs\.suid_dumpable/d" /etc/sysctl.conf
case $response in
[nN][oO]|[nN])
echo "fs.suid_dumpable = 2" >> /etc/sysctl.conf
;;
[yY][eE][sS]|[yY])
echo "fs.suid_dumpable = 0" >> /etc/sysctl.conf
;;
*)
esac

answer_def "Включить рандомизацию адресного пространства ядра ОС (защита от атак на переполнение буфера)? " "рандомизация адресного пространства - активировано" "рандомизация адресного пространства - отключено"
sed -i "/kernel\.randomize_va_space/d" /etc/sysctl.conf
case $response in
[nN][oO]|[nN])
echo "kernel.randomize_va_space = 0" >> /etc/sysctl.conf
;;
[yY][eE][sS]|[yY])
echo "kernel.randomize_va_space = 2" >> /etc/sysctl.conf
;;
*)
esac

answer_def "Запретить управление ядром ОС командами SysRQ? " "запрет управления ядром командами SysRQ - активировано" "запрет управления ядром командами SysRQ - отключено"
sed -i "/kernel\.sysrq/d" /etc/sysctl.conf
case $response in
[nN][oO]|[nN])
echo "kernel.sysrq = 1" >> /etc/sysctl.conf
;;
[yY][eE][sS]|[yY])
echo "kernel.sysrq = 0" >> /etc/sysctl.conf
;;
*)
esac

answer_def "Запретить прохождение сетевого трафика между сетевыми интерфейсами (режим сетевого шлюза)? " "запрет прохождения сетевого трафика - активировано" "запрет прохождения сетевого трафика - отключено"
sed -i "/net\.ipv4\.ip_forward/d" /etc/sysctl.conf
case $response in
[nN][oO]|[nN])
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
;;
[yY][eE][sS]|[yY])
echo "net.ipv4.ip_forward = 0" >> /etc/sysctl.conf
;;
*)
esac

answer_def "Запретить ICMP-перенаправления? " "запрет ICMP-перенаправлений - активировано" "запрет ICMP-перенаправлений - отключено"
sed -i "/net\.ipv4\.conf\.all\.send_redirects/d" /etc/sysctl.conf
sed -i "/net\.ipv4\.conf\.default\.send_redirects/d" /etc/sysctl.conf
case $response in
[nN][oO]|[nN])
echo "net.ipv4.conf.all.send_redirects = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.send_redirects = 1" >> /etc/sysctl.conf
;;
[yY][eE][sS]|[yY])
echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.send_redirects = 1" >> /etc/sysctl.conf
;;
*)
esac

answer_def "Запретить использование протокола IPv6? " "запрет IPv6 - активировано" "запрет IPv6 - отключено"
sed -i "/net\.ipv6\.conf\.all\.disable_ipv6/d" /etc/sysctl.conf
sed -i "/net\.ipv6\.conf\.default\.disable_ipv6/d" /etc/sysctl.conf
sed -i "/net\.ipv6\.conf\.lo\.disable_ipv6/d" /etc/sysctl.conf
case $response in
[nN][oO]|[nN])
echo "net.ipv6.conf.all.disable_ipv6 = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 0" >> /etc/sysctl.conf
;;
[yY][eE][sS]|[yY])
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
;;
*)
esac

declare -a arrtext
declare -a arrcmd
arrtext[0]="Мандатный Контроль Целостности"
arrcmd[0]="astra-mic-control"
arrtext[1]="механизм блокировки консоли для пользователей, не входящих в группу astra-console"
arrcmd[1]="astra-console-lock"
arrtext[2]="обязательный запрос пароля при использовании sudo"
arrcmd[2]="astra-sudo-control"
arrtext[3]="механизм блокировки любых интерпретаторов кроме BASH для пользователей кроме root"
arrcmd[3]="astra-interpreters-lock"
arrtext[4]="механизм блокировки интерпретатора BASH для пользователей кроме root"
arrcmd[4]="astra-bash-lock"
arrtext[5]="механизм очистки SWAP"
arrcmd[5]="astra-swapwiper-control"
arrtext[6]="механизм очистки удаляемых файлов и данных"
arrcmd[6]="astra-secdel-control"
arrtext[7]="запрет установки исполняемого бита (chmod +x)"
arrcmd[7]="astra-nochmodx-lock"
arrtext[8]="механизм блокировки макросов"
arrcmd[8]="astra-macros-lock"
arrtext[9]="механизм блокировки трассировки ptrace"
arrcmd[9]="astra-ptrace-lock"
arrtext[10]="механизм блокировки одновременной работы пользователей в разных уровнях конфиденциальности"
arrcmd[10]="astra-sumac-lock"
arrtext[11]="системные ограничения ulimits"
arrcmd[11]="astra-ulimits-control"
arrtext[12]="механизм блокировки выключения/перезагрузки для пользователей кроме root"
arrcmd[12]="astra-shutdown-lock"
arrtext[13]="механизм блокировки системных команд для пользователей кроме root"
arrcmd[13]="astra-commands-lock"
arrtext[14]="межсетевой экран UFW"
arrcmd[14]="astra-ufw-control"
arrtext[15]="запрет монтирования МНИ непривилегированными пользователями"
arrcmd[15]="astra-mount-lock"
arrtext[16]="механизм блокировки клавиш SysRq для всех пользователей"
arrcmd[16]="astra-sysrq-lock"
arrtext[17]="режим работы файловой системы <только чтение>"
arrcmd[17]="astra-overlay"
for ((index=0; index<${#arrtext[@]}; index++))
do
answer_astra_control "${arrtext[$index]}" "${arrcmd[$index]}"
done

echo "ВНИМАНИЕ: при активации ЗПС исполнение любых ELF-файлов без цифровой подписи будет заблокировано!"
answer_def "Включить механизм Замкнутой Программной Среды? " "механизм ЗПС - активировано" "механизм ЗПС - отключено"
case $response in
nN][oO]|[nN])
echo -e "DIGSIG_ELF_MODE=0\nDIGSIG_XATTR_MODE=0\nDIGSIG_IGNORE_XATTR_KEYS=0\nDIGSIG_IGNORE_GOST2001=0" > /etc/digsig/digsig_initramfs.conf
;;
[yY][eE][sS]|[yY])
echo -e "DIGSIG_ELF_MODE=1\nDIGSIG_XATTR_MODE=1\nDIGSIG_IGNORE_XATTR_KEYS=0\nDIGSIG_IGNORE_GOST2001=0" > /etc/digsig/digsig_initramfs.conf
;;
*)
esac
update-initramfs -u -k all

echo "Настройка механизмов защиты завершена. Требуется перезагрузить операционную систему..."
exit 0

За рамками данного скрипта (по понятным причинам) остались:
  • разбивка диска при установке ОС и по использование защитного преобразования диска;
  • выбор ядра Hardened по умолчанию;
  • отключение вывода меню загрузчика GRUB;
  • тонкая настройка межсетевого экрана UFW или netfilter/iptables;
  • установка актуальных обновлений безопасности и выполнение методических рекомендаций согласно этим обновлениям;
  • режим "только чтение" для файловой системы ОС;
  • тонкая настройка мандатных меток и уровней;
  • настройка afick для автоматического контроля целостности;
  • настройка разграничения доступа к машинным носителям информации;
  • настройка дисковых квот в /etc/fstab;
  • настройка режима КИОСК;
  • настройка используемых или отключение неиспользуемых systemd-служб.
Запуск скрипта:
  1. создаем файл в том же /usr/bin или домашней директории пользователя-администратора;
  2. даем права на запуск (sudo chmod +x путь-к-файлу-скрипта);
  3. запускаем от лица пользователя-администратора при 0 мандатном уровне, 0 мандатной метке и с Высоким контролем целостности (sudo путь-к-файлу-скрипта);
  4. последовательно отвечаем на вопросы Y, y, yes, Yes или N, n, no, No;
  5. не прерываем работу скрипта до полного окончания настройки.