Скрипты экспресс аудита безопасности для Linux

Скрипты экспресс аудита безопасности для Linux

https://t.me/w2hack

Большинство таких корпоративных и многокомпонентных систем как SAPOracle 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

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 Проверка срока действия пароля

В ходе аудита, необходимо проверить настройку срока истечения действия пароля. Чтобы проверить срок действия пароля необходимо использовать команду change. Эта команда выводит подробную информацию сроке действия пароля, а также о дате его последнего изменения.

Следующая команда служит для просмотра информации о «возрасте» паролей:

#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 login отключен, изменен 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 

или 

# lsof -i(lsof -ni) 

или

# 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 Basic Security Audit script) - это базовый скрипт аудита конфигурации безопасности Linux-систем. Скрипт должен быть запущен из командной строки с привилегиям root, или в идеале запускаться по расписанию на регулярной основе с помощью планировщика cron для систематической проверки изменений конфигурации.

Целью данного скрипта является экспресс аудит настроек безопасности и выгрузка отчета с описанием возможных параметров, которые могут быть изменены, чтобы обеспечить более высокую степень защищенности. В случае же, если нет каких-либо рекомендаций по какой-то опции, скрипт просто выводит одну строчку с отработкой чека, а итоговое решение всегда остается за администратором. Прежде чем запускать проверку, разработчики настоятельно рекомендуют ознакомиться с руководством и изучить рекомендуемые разделы для получения дополнительной информации.

В настоящее редакции (Version 1.0.49), скрипт сканирует следующий опции:

  • уязвимости в настройках учетных записей 
  • уязвимости в настройках SSH
  • уязвимости во временных каталогах и каталогов файловой системы загруженной в оперативную память (например, в /tmp, /var/tmp /dev/)
  • разрешения на файлы, состояние системных директорий
  • rконфигурацию сервисов DRBD и Hearbeat

и т.п.

Скрипт довольно большой, поэтому мы не стали его помещать на страницу. Его можно скачать на официальной странице

Всем спасибо!