Большинство таких корпоративных и многокомпонентных систем, таких как SAP, Oracle DB, используют на своей платформе операционную систему на базе Linux. В связи с этим они привлекли к себе пристальное внимание со стороны IT-аудиторов.
Сегодня в статье мы представим вашему вниманию несколько бесплатных инструментов, представленных в виде скриптов и использующих стандартные механизмы ОС для проведения экспресс-аудита конфигурации безопасности.
Опсанные ниже системные команды и сценарии, используемые для быстрого управления параметрами безопасности в системах Linux, основаны на рекомендациях по проверке безопасности, опубликованных сообществом ISACA в руководстве UNIX-LINUX-Operating-System-Security-Audit-Assurance-Program.
Проверка учетных записей
1.1 Вывести список всех пользователей
Список пользователей хранится в файле /etc/passwdfile. Для получения списка пользователей можно использовать следующий скрипт:
#!/bin/bash
# userslistinthesystem.sh
# count and Lists existing “real” users in the system.
echo
echo “[*] Existing users (sorted alphabetically):”
echo
grep ‘/bin/bash’ /etc/passwd | grep -v ‘root’ | cut -f1
-d’:’ | sort
echo
echo -n “[*] Number of real users found: “
grep ‘/bin/bash’ /etc/passwd | grep -v ‘root’ | wc -l
echo
1.2 Вывести список заблокированных учетных записей
В ходе аудита, необходимо проверить список заблокированных и разблокированных пользователей (accountName). Для этого подойдет следующая команда:
#!/bin/bash
echo
# passwd –s accountName
1.3 Просмотр статистики по всем пользователям
Аудитор должен убедиться, что команда ac включена в системе, для обзора деятельности пользователей:
#!/bin/bash
# ac
Для просмотра активности сеанса подключения пользователя с итогами за каждый день используйте команду:
#!/bin/bash
# ac -d
Для вывода информации и, об активности сеанса (в часах) подключения пользователя «user»:
#!/bin/bash
# ac user
1.4 Просмотр активности пользователей
Приложения в системе psacct или acct работают в фоновом режиме и отслеживают активность каждого пользователя в системе, а также потребляемые ими ресурсы. Чтобы проверить активность пользователя в системе, запустите следующий скрипт:
#!/usr/bin/envksh
last -Fa|awk ‘
/wtmp begins/ { next; }
/still logged in/ { next; }
$0 == reboot { next; }
NF > 0 {
if( NR > 1 )
printf( “\n” );
printf( “ User:\t%s\n”, $1 ); # user
printf( “ Start:\t%s %s %s %s\n”, $3, $4, $5, $6 );
if( $9 == “down” )
printf( “ End:\tshutdown\n” );
else
printf( “ End:\t%s %s %s %s\n”, $9, $10, $11, $12 );
if( substr( $NF, 1, 1 ) == “(“ )
{
t = $NF;
h = “localhost”;
}
else
{
t = $(NF-1);
h = $NF;
}
gsub( “[()]”, “”, t );
printf( “ Time On:\t%s\n”, t );
printf( “Remote Host:\t%s\n”, h );
}‘
Проверка парольной политики
2.1 Учетные записи с пустым паролем
В ходе аудита, необходимо убедиться, что в системе отсутствуют или заблокированы учетные записи, позволяющие войти в систему без ввода пароля. Это правило можно проверить командой:
# cat /etc/shadow | awk -F: ($2==””){print $1}’
2.2 Проверка сложности пароля
В ходе аудита, необходимо проверить настройки сложности пароля, чтобы снизить риск атак на пароль брутфорсом (перебором) или подбором по словарю. Для установки этого правила в системе необходимо использовать подключаемые модули аутентификации (PAM).
Аудитор может проверить соответствующую настройку в файле конфигурации:
# vi /etc/pam.d/system-auth
2.3 Проверка срока действия пароля
Во время аудита необходимо проверить настройку срока действия пароля. Используйте команду изменения, чтобы проверить срок действия пароля. Эта команда отображает подробную информацию о дате истечения срока действия пароля и дате его последнего изменения.
Следующая команда отображает информацию о «возрасте» паролей:
#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 отключена, порт 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 формате:
[root@machine~]# grub-md5-crypt
После выполнения команды, администратору необходимо открыть файл /boot/grub/menu.lst или /boot/grub/grub.conf и добавить MD5-пароль:
[root@machine~]# vi /boot/grub/menu.lst
или
[root@machine~]# vi /boot/grub/grub.conf
Вновь созданный MD5-пароль может быть добавлен в конфигурационный файл GRUB.
5.2 Защита загрузочной директории /BOOT
Во время аудита необходимо проверить состояние каталога / boot, так как ядро системы и связанные с ним файлы находятся в каталоге / boot. Вы должны убедиться, что этому каталогу разрешен доступ только для чтения, чтобы предотвратить несанкционированные изменения важных системных файлов. Для проверки откройте файл / etc / fstab и проверьте конфигурацию:
# vi /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
или
# iptraf
Прослушиваемые порты
При помощи команды Netstat, можно просмотреть все открытые порты и связанные с ними команды. Пример скрипта:
# netstat–tulpn
A script for port scanning is:
scan() {
if [[ -z $1 || -z $2 ]]; then
echo “Usage: $0 <host><port, ports, or port-range>”
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) — это базовый сценарий для проверки конфигурации безопасности Linux. Сценарий следует запускать из командной строки с привилегиями root или, в идеале, запускать на регулярной основе с использованием планировщика cron для систематической проверки изменений конфигурации.
Целью данного скрипта является экспресс аудит настроек безопасности и выгрузка отчета с описанием возможных параметров, которые могут быть изменены, чтобы обеспечить более высокую степень защищенности. В случае же, если нет каких-либо рекомендаций по какой-то опции, скрипт просто выводит одну строчку с отработкой чека, а итоговое решение всегда остается за администратором. Прежде чем запускать проверку, разработчики настоятельно рекомендуют ознакомиться с руководством и изучить рекомендуемые разделы для получения дополнительной информации.
Скрипт довольно большой, поэтому мы не стали его помещать на страницу. Его можно скачать на официальной странице
Помните, что следование этим рекомендациям не всегда является хорошей идеей, поскольку в некоторых случаях они могут причинить неудобства. Как и в случае любого изменения системы, вам необходимо понимать последствия любых изменений, которые вы вносите, прежде чем их вносить.