Скрипты экспресс аудита безопасности для Linux (ITGC)
Большинство таких корпоративных и многокомпонентных систем как SAP , Oracle DB используют в своей платформе операционную систему базирующийся на Linux . В виду этого к ним обращено такое пристальное внимание со стороны ИТ-аудиторов. Сегодня в статье мы представим вашему вниманию несколько бесплатных инструментов представленных в виде скриптов и использующих штатные механизмы ОС для провидения экспресс аудита конфигурации безопасности.
Ниже описанные системные команды и скрипты применяемые для экспресс аудита опций безопасности систем ОС 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
- #!/bin/bash
- echo
- # passwd –s accountName
- #!/bin/bash
- # ac
- #!/bin/bash
- # ac -d
- #!/bin/bash
- # ac user
- #!/usr/bin/envksh
- last -Fa|awk ‘
- /wtmp begins/ < next; >
- /still logged in/ < next; >
- $0 == reboot < next; >
- NF > 0
- if( NR > 1 )
- printf ( “
” ); - printf ( “ User:t%s
”, $1 ); # user - printf ( “ Start:t%s %s %s %s
”, $3, $4, $5, $6 ); - if( $9 == “down” )
- printf ( “ End:tshutdown
” ); - else
- printf ( “ End:t%s %s %s %s
”, $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
”, t ); - printf ( “Remote Host:t%s
”, h ); - >‘
2. Проверка парольной политики
2.1 Учетные записи с пустым паролем
В ходе аудита, необходимо убедиться, что в системе отсутствуют или заблокированы учетные записи, позволяющие войти в систему без ввода пароля. Это правило можно проверить командой:
2.2 Проверка сложности пароля
В ходе аудита, необходимо проверить настройки сложности пароля, чтобы снизить риск атак на пароль брутфорсом (перебором) или подбором по словарю. Для установки этого правила в системе необходимо использовать подключаемые модули аутентификации (PAM).
Аудитор может проверить соответствующую настройку в файле конфигурации:
2.3 Проверка срока действия пароля
В ходе аудита, необходимо проверить настройку срока истечения действия пароля. Чтобы проверить срок действия пароля необходимо использовать команду change. Эта команда выводит подробную информацию сроке действия пароля, а также о дате его последнего изменения.
Следующая команда служит для просмотра информации о «возрасте» паролей:
Для изменения срока истечения пароля конкретного пользователя можно использовать команды указанные ниже:
#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‘:
для Ubuntu/Debian/Linux Mint: открыть файл ‘/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 login отключен, изменен SSH-порт по умолчанию, удаленный доступ разрешен только для конкретных авторизованных пользователей. Проверяемые настройки находятся в конфигурационном файле SSH:
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.
3.3 Проверка списков доступа в DenyHosts и Fail2ban
В ходе аудита необходимо проверить настройки списков доступа DenyHosts и Fail2ban . Это скрипты, используемые для мониторинга и анализа журналов доступа по SSH и защиты от атак путем брутфорса паролей.
- сохраняет и отслеживает журналы из файла /var/log/secure , отметив, все успешные и неудачные попытки входа, и фильтрует их.
- осуществляет мониторинг неудачных попыток входа
- отправляет по электронной почте уведомление о заблокированных хостах и подозрительных попытках входа
- Сохраняет и отслеживает журналы из файлов /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 – информация, которая регистрируется во время загрузки системы
Для защиты системного загрузчика GRUB, администратору необходимо использовать шифрование пароля в MD5 формате :
После выполнения команды, администратору необходимо открыть файл /boot/grub/menu.lst или /boot/grub/grub.conf и добавить MD5-пароль:
[root@machine~]# vi /boot/grub/menu.lst
[root@machine~]# vi /boot/grub/grub.conf
В ходе аудита, необходимо проверить состояние каталога /boot, поскольку ядро системы и связанные с ним файлы размещены в каталоге /boot. Необходимо убедиться, что к данной директории разрешен доступ только на чтение, что предотвращает несанкционированное изменение важных файлов в системе. Для проверки откройте файл /etc/fstab и проверьте конфигурацию:
#!/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
или
# lsof -i(lsof -ni)
или
# iptraf
Прослушиваемые порты
При помощи команды Netstat, можно просмотреть все открытые порты и связанные с ними команды. Пример скрипта:
# netstat–tulpn
A script for port scanning is:
scan() <
if [[ -z $1 || -z $2 ]]; then
echo “Usage: $0 ”
return
fi
local host=$1
local ports=()
case $2 in
*-*)
IFS=- read start end for ((port=start; port ports+=($port)
done
;;
*,*)
IFS=, read -ra ports ;; *)
ports+=($2) ;;
esac
for port in “$”; 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
В ходе аудита, необходимо проверить, что системы настроены на игнорирование ping и широковещательных запросов. Для этого убедитесь, что в файле “/etc/sysctl.conf” добавлены следующие строки:
# игнорировать ICMP запросы:
net.ipv4.icmp_echo_ignore_all = 1
# игнорировать широковещательные запросы:
net.ipv4.icmp_echo_ignore_broadcasts = 1
# yum updates
# yum check-update
Аудитор должен проверить кому разрешено и запрещено выполнять задания в cron. Доступ к cron контролируется c использованием файлов /etc/cron.allow и /etc/cron.deny.
В ходе аудита важно проверить статус 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 (Linux Basic Security Audit script) — это базовый скрипт аудита конфигурации безопасности Linux-систем. Скрипт должен быть запущен из командной строки с привилегиям root, или в идеале запускаться по расписанию на регулярной основе с помощью планировщика cron для систематической проверки изменений конфигурации.
Целью данного скрипта является экспресс аудит настроек безопасности и выгрузка отчета с описанием возможных параметров, которые могут быть изменены, чтобы обеспечить более высокую степень защищенности. В случае же, если нет каких-либо рекомендаций по какой-то опции, скрипт просто выводит одну строчку с отработкой чека, а итоговое решение всегда остается за администратором. Прежде чем запускать проверку, разработчики настоятельно рекомендуют ознакомиться с руководством и изучить рекомендуемые разделы для получения дополнительной информации.
- уязвимости в настройках учетных записей
- уязвимости в настройках SSH
- уязвимости во временных каталогах и каталогов файловой системы загруженной в оперативную память (например, в /tmp, /var/tmp /dev/)
- разрешения на файлы, состояние системных директорий
- rконфигурацию сервисов DRBD и Hearbeat