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

Скрипты экспресс аудита безопасности для Linux (ITGC)
Большинство таких корпоративных  и многокомпонентных систем как SAP, Oracle DB используют в своей платформе операционную систему базирующийся на Linux. В виду этого к ним обращено такое пристальное внимание со стороны ИТ-аудиторов. Сегодня в статье мы представим вашему вниманию несколько бесплатных инструментов представленных в виде скриптов и использующих штатные механизмы ОС для провидения экспресс аудита конфигурации  безопасности.

Ниже описанные системные команды и скрипты применяемые для экспресс аудита опций безопасности систем ОС Linux базируются на рекомендациях по проверке защищенности  опубликованными сообществом ISACA в руководстве UNIX/LINUX Operating System Security Audit/Assurance Program .
1.Проверка учетных записей

1.1 Вывести список всех пользователей
Список пользователей хранится в файле /etc/passwdfile. Для получения списка пользователей можно использовать следующий скрипт:

  1. bin/bash
  2. # userslistinthesystem.sh
  3. # count and Lists existing “real” users in the system.
  4. echo
  5. echo “[*] Existing users (sorted alphabetically):”
  6. echo
  7. grep ‘/bin/bash’ /etc/passwd | grep -v ‘root’ | cut -f1
  8. -d’:’ | sort
  9. echo
  10. echo -n “[*] Number of real users found: “
  11. grep ‘/bin/bash’ /etc/passwd | grep -v ‘root’ | wc -l
  12. echo
1.2 Вывести список заблокированных учетных записей
В ходе аудита, необходимо проверить список заблокированных и разблокированных пользователей (accountName). Для этого подойдет следующая команда:
  1. #!/bin/bash
  2. echo
  3. # passwd –s accountName
1.3 Просмотр статистики по всем пользователям
  • Аудитор должен убедиться, что команда ac включена в системе, для обзора деятельности пользователей:
    1. #!/bin/bash
    2. # ac
    Для просмотра активности сеанса подключения пользователя с итогами за каждый день используйте команду:
    1. #!/bin/bash
    2. # ac -d
    Для вывода информации, об активности сеанса (в часах) подключения пользователя «user»:
    1. #!/bin/bash
    2. # ac user
    1.4  Просмотр активности пользователей
    Системные приложения psacct или acct работают в фоновом режиме и отслеживают активность каждого пользователя в системе, а также потребляемые им ресурсы. Для проверки активности пользователей  в системе запустите следующий скрипт:
    1. #!/usr/bin/envksh
    2. last -Fa|awk ‘
    3. /wtmp begins/ { next; }
    4. /still logged in/ { next; }
    5. $0 == reboot { next; }
    6. NF >  0 {
    7. if( NR > 1 )
    8. printf ( “
      ” );
    9. printf ( “ User:t%s
      ”, $1 ); # user
    10. printf ( “ Start:t%s %s %s %s
      ”, $3, $4, $5, $6 );
    11. if( $9 == “down” )
    12. printf ( “ End:tshutdown
      ” );
    13. else
    14. printf ( “ End:t%s %s %s %s
      ”, $9, $10, $11, $12 );
    15. if( substr ( $NF, 1, 1 ) == “(“ )
    16. {
    17. t = $NF;
    18. h = “localhost”;
    19. }
    20. else
    21. {
    22. t = $(NF-1);
    23. h = $NF;
    24. }
    25. gsub( “[()]”, “”, t );
    26. printf ( “ Time On:t%s
      ”, t );
    27. printf ( “Remote Host:t%s
      ”, h );
    28. }‘
  • 2. Проверка парольной политики

    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
    и т.п.

    Скрипт довольно большой, поэтому мы не стали его помещать на страницу.
    Его можно скачать на официальной странице
    ITGC audit control Linux script скрипт тест проверка аудит контроль ИТ test
    Alt text
    Комментарии для сайта Cackle

    Иван Пискунов

    Персональный блог Ивана Пискунова о безопасности, реверс инжениринге и ИТ-менеджменте. Аналитика, новости, обзоры, события