Security

Cкрипты проверки безопасности Linux

Большинство таких корпоративных и многокомпонентных систем, таких как 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 для систематической проверки изменений конфигурации.

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

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

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

 

 

 

 

 

 

 

Click to rate this post!
[Total: 0 Average: 0]
faza

Recent Posts

Лучший адаптер беспроводной сети для взлома Wi-Fi

Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…

4 месяца ago

Как пользоваться инструментом FFmpeg

Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…

5 месяцев ago

Как создать собственный VPN-сервис

Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…

5 месяцев ago

ChatGPT против HIX Chat: какой чат-бот с искусственным интеллектом лучше?

С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…

5 месяцев ago

Разведка по Wi-Fi и GPS с помощью Sparrow-wifi

Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…

5 месяцев ago

Как обнаружить угрозы в памяти

Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…

5 месяцев ago