Аудит доступу до файлів linux. Жорстка загартування Linux. Підбираємо інструменти для комплексного аудиту безпеки. Запуск окремих тестів у Lynis

Більшість таких корпоративних та багатокомпонентних систем як 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 “[*] Existing users (sorted alphabetically):”
  5. grep '/bin/bash' /etc/passwd | grep -v 'root' | cut -f1
  6. -d’:’ | sort
  7. echo -n “[*] Кількість реальних користувачів містить: “
  8. grep '/bin/bash' /etc/passwd | grep -v 'root' | wc -l
1.2 Вивести список заблокованих облікових записів
Під час аудиту необхідно перевірити список заблокованих та розблокованих користувачів ( accountName ). Для цього підійде наступна команда:
  1. #!/bin/bash
  2. # passwd –s accountName

1.3 Перегляд статистики всім користувачам

  • Аудитор має переконатися, що команда ac включена в систему, для огляду діяльності користувачів:
    1. #!/bin/bash
    Для перегляду активності сеансу підключення користувача з підсумками кожного дня використовуйте команду:
    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. printf (“End:t%s %s %s %s
      ”, $9, $10, $11, $12);
    14. if(substr ($NF, 1, 1) == “(“)
    15. t = $ NF;
    16. h = "localhost";
    17. t = $ (NF-1);
    18. h = $ NF;
    19. gsub(“[()]”, “”, t);
    20. printf (“ Time On:t%s
      ”, t);
    21. printf (“Remote Host:t%s
      ”, h);
  • 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) є коротким одним останнім часом.

    # 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 форматі :

    # grub-md5-crypt

    Після виконання команди адміністратору необхідно відкрити файл /boot/grub/menu.lst або /boot/grub/grub.conf та додати MD5-пароль:

    # vi /boot/grub/menu.lst

    # vi /boot/grub/grub.conf

    Новостворений MD5-пароль може бути доданий до конфігураційного файлу GRUB.

    5.2 Захист завантажувальної директорії /BOOT

    Під час аудиту необхідно перевірити стан каталогу /boot, оскільки ядро ​​системи та пов'язані з ним файли розміщені в каталозі /boot. Необхідно переконатися, що до цієї директорії дозволено доступ тільки на читання, що запобігає несанкціонованій зміні важливих файлів у системі. Для перевірки відкрийте файл /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
    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 контролюється з використанням файлів /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

    Скрипт досить великий, тому ми не стали його поміщати на сторінку.

    Проводьте аудит безпеки сервера раз на місяць для своєчасного виявлення можливих проблем, пов'язаних із проникненням зловмисників на сервер.

    Якщо ви не бачите жодних ознак сторонньої активності на VPS або на сайті, виконайте наступний ряд перевірок і коректив для захисту сервера від злому.

    Налаштування на прикладному рівні

    Якщо на сервері встановлено CMS, перевірте, чи інстальовано всі останні оновлення.

    Joomla

    У кореневій директорії сайту знайдіть файл changelog.txt, у якому знайдіть інформацію про версію CMS. Якщо вона застаріла, оновіть Joomla.

    Wordpress

    Виконайте пошук файлу wp-includes/version.php, в якому знайдіть інформацію про версію CMS. Якщо вона застаріла, оновіть Wordpress.

    DLE

    Виконайте пошук файлу engine/data/config.php, знайдіть рядок version_id і переконайтеся, що версія не застаріла.

    Також перевірте файли engine/ajax/updates.php та upgrade/index.php (параметр $dle_version).

    1C-Бітрікс

    Виконайте пошук файлу /bitrix/modules/main/classes/general/version.php, в якому знайдіть інформацію про версію CMS. Також перевірте файл /bitrix/admin/update_system.php. Якщо версія застаріла, оновіть 1C-Бітрікс.

    Drupal

    У кореневій директорії сайту знайдіть файл changelog.txt, у якому знайдіть інформацію про версію CMS. Якщо вона застаріла, оновіть Drupal.

    Перевірте версію ядра у файлі /modules/system/system.info.

    Також ви можете знайти версію CMS через панель керування.

    Виконайте перевірку веб-сервера.

    Apache

    Відкрийте конфігураційний файл Apache (залежно від версії це можуть бути файли httpd.conf, httpd2.conf, apache.conf, apache2.conf) і перевірте, чи є в ньому директива, яка вимикає виведення інформації про версію веб-сервера:

    ServerTokens Prod

    Якщо цієї директиви немає, то додайте та збережіть файл.

    Виконайте пошук файлу secure.conf, відкрийте його для перегляду та звірте його вміст з наступним прикладом:

    Options +Includes -FollowSymLinks +SymLinksIfOwnerMatch AllowOverride FileInfo AuthConfig Limit Indexes Options Order allow,deny Allow from all php_admin_value open_basedir "." Options -Indexes Action php-cgi /php-bin/php

    У secure.conf не повинно бути суттєвих відмінностей від наведеного прикладу.

    Перевірте встановлений МРМ командою

    Apachectl-V

    Для більш міцної безпеки використовуйте mpm_itk, якщо немає необхідності в mpm_prefork.

    Якщо ви бажаєте змінити МРМ, виконайте повторну інсталяцію, попередньо створивши резервні копії конфігураційних файлів. Після переустановки перевірте, чи є власником сайту та всіх його директорій користувач.

    Nginx

    Відкрийте конфігураційний файл веб-сервера (nginx.conf), перейдіть у секцію http і перевірте, чи є в ній директиви, які лімітують кількість підключень з однієї IP-адреси:

    Limit_zone slimits $binary_remote_addr 5m; limit_conn slimits 10; або (для останніх версій) limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn addr 10;

    Якщо цих директив немає, додайте та збережіть файл.

    Заблокуйте деякі агенти користувача (User Agents) для блокування небажаного трафіку. У розділ http конфігураційного файлу Nginx додайте директиву

    If ($http_user_agent ~* LWP::Simple|BBBike|wget|msnbot) (return 403;)

    Заблокуйте посилання спам (referral spam), додавши в секцію http конфігураційного файлу Nginx директиву

    If($http_referer ~*(babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen))(return 403;)

    ISPmanager

    На панелі керування ISPmanager виконайте такі перевірки.

    Перевірте, чи доступний панель керування за IP-адресою.

    Налаштуйте резервне копіювання даних, якщо воно не увімкнено. Ми рекомендуємо використовувати зовнішній диск для бекапу, щоб унеможливити втрату даних разом з архівом.

    PHP

    Відкрийте конфігураційний файл php.ini та додайте наступні директиви.

    Expose_php=Off - вимкнення передачі інформації про версію PHP у HTTP-заголовку; sql.safe_mode = On - включення SQL safe-mode; post_max_size=8M - обмеження розміру даних, що передаються методом POST; disable_functions exec, system, passthru, proc_open, shell_exec - відключення деяких функцій з метою безпеки.

    NTP

    До конфігураційного файлу NTP (за замовчуванням /etc/ntp.conf) додайте рядки, які забороняють рекурсивні запити:

    127.0.0.1 127.0.0.1 127.0.0.1 127.0.0.1 Restrict -6::1

    Bind

    У файлі named.conf помістіть наступні рядки, які забороняють рекурсивні запити:

    Allow-recursion (127.0.0.1; 82.146.32.0/19; 78.24.216.0/21; 92.63.96.0/20; 62.109.0.0/19; 188.120.224.0/19; 188.120.224.0/19; 12.0/21; 94.250.248.0/21;);

    Перевірка власника директорії сайту

    Перевірте, кому належить основна директорія сайту та всі її піддиректорії.

    У панелі інструментів ISPmanager перейдіть до розділу "Система" -> "Менеджер файлів" і відкрийте директорію сайту. Переконайтеся, що у стовпцях "Власник" та "Група" стоїть користувач-власник сайту. Щоб змінити ці атрибути, натисніть кнопку “Атрибути” на панелі інструментів.

    Допустимі імена власника сайту apache, www, www-data, якщо ви використовуєте mpm_prefork. Ми рекомендуємо використовувати mpm_itk для зміцнення безпеки.

    Якщо сайт містить папки загального доступу (наприклад, upload, tmp), то для них допустиме ім'я власника 777. Переконайтеся, що цей користувач встановлений лише на потрібні директорії, виконавши команду

    Find ./ -perm 0777

    Вона знайде всі папки та файли, власником яких є 777.

    Налаштування на рівні операційної системи

    rkhunter

    Використовуйте утиліту rkhunter для виявлення потенційних уразливостей сервера.

    Для встановлення утиліти використовуйте команду:

    Yum install rkhunter - ОС CentOS apt-get install rkhunter - ОС Debian/Ubuntu make all install clean -C /usr/ports/security/rkhunter або pkg install rkhunter - ОС FreeBSD

    Для оновлення бази цієї утиліти виконайте команди

    Rkhunter --update

    Rkhunter --propupd

    Виконайте перевірку системи командою

    Rkhunter -c --cs2

    У процесі перевірки кілька разів вам потрібно натиснути клавішу Enter для продовження. Після закінчення з'явиться інформація про результат перевірки.

    Результати перевірки поміщаються в лог файл /var/log/rkhunter/rkhunter.log, перегляньте його щодо попереджень і помилок.

    sysctl

    Використовуйте утиліту sysctl для керування параметрами ядра системи. Відкрийте файл конфігурації утиліти /etc/sysctl.conf і внесіть наступні рядки.

    Відключіть можливість маршрутизації вхідного трафіку, оскільки зловмисник може використовувати цю можливість для заміни IP-адрес:

    Net.ipv4.conf.all.accept_source_route = 0

    Відключіть відповіді на ICMP-запити широкомовним каналом - це допоможе запобігти smurf-атаки:

    Net.ipv4.icmp_echo_ignore_broadcasts = 1

    Вимкніть журнал про неправильні повідомлення про помилки:

    Net.ipv4.icmp_ignore_bogus_error_responses = 1

    Увімкніть захист від переповнення пам'яті:

    Kernel.exec-shield = 1 (CentOS)

    Увімкніть використання пам'яті ASLR:

    Kernel.randomize_va_space = 2

    Вимкніть можливість переадресації ICMP-повідомлень:

    Net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0

    Якщо ви не використовуєте на сервері VPN або інші спеціальні програми, вимкніть форвардинг:

    Net.ipv4.conf.all.forwarding = 0

    Увімкніть захист від SYN-флуду - використання SYN cookies:

    Net.ipv4.tcp_syncookies = 1

    Встановіть кількість спроб передачі пакетів SYN-ACK:

    Net.ipv4.tcp_synack_retries = 3

    Встановіть час, через який сервер перевіряє з'єднання, якщо воно давно не використовується (за замовчуванням це 2 години):

    Net.ipv4.tcp_keepalive_time=1800

    Встановіть кількість перевірок з'єднання, перш ніж вона буде розірвана:

    Net.ipv4.tcp_keepalive_probes=3

    Встановіть час перебування сокету у стані FIN-WAIT-2:

    net.ipv4.tcp_fin_timeout=30

    fstab

    Перевірте конфігураційний файл fstab (/etc/fstab), в якому міститься інформація про диски, розділи та пристрої зберігання, вказується як вони монтуються в систему.

    Vi /etc/fstab

    Зауважте, що некореневі розділи повинні мати параметр nodev. Якщо /tmp вмонтовано окремим розділом, додайте nodev, noexec, nosuid для цього розділу.

    rsyslog

    Перевірте файл файлу /etc/rsyslog.conf.

    Vi /etc/rsyslog.conf

    Зверніть увагу на наступні рядки, які повинні мати вигляд:

    Також переконайтеся, що файл файл не порожній, тобто. логування коректно ведеться.

    sudo

    Перевірте, чи коректно налаштована утиліта sudo (або su), яка дозволяє користувачеві запускати деякі команди та програми з правами суперкористувача root. Налаштування цієї утиліти знаходяться у конфігураційному файлі /etc/sudoers або /usr/local/etc/sudoers. Відкрийте його для редагування

    Vi /etc/sudoers

    Знайдіть рядок, який прописаний за замовчуванням і дозволяє суперкористувачу root запускати будь-які команди.

    Для того, щоб наділити всіх користувачів привілеєм запускати команди від імені root, додайте рядок нижче:

    ALL ALL=/bin/su або ALL ALL=/usr/bin/su

    Для того, щоб наділити певного користувача привілеєм запускати лише деякі команди від імені root, додайте рядок:

    %users ALL=/sbin/mount - група users зможе використати sudo тільки з командою mount user ALL=/sbin/mount - користувач user зможе використовувати sudo тільки з командою mount

    Налаштування на мережному рівні

    Перевірте, які порти на сервері відкриті та які служби їх використовують, виконавши команду

    Netstat-tuplnw | awk "(print $4,$NF)" | sort | uniq

    Наприклад, запис 127.0.0.1:53 748/named означає, що служба named використовує 53 порти. Перевірте, що серед працюючих служб лише необхідні, відключіть всі інші.

    FTP

    Встановіть діапазон портів для пасивного режиму FTP. Для цього відкрийте для редагування конфігураційний файл вашого FTP-сервера та додайте рядки:

    для vsftpd.conf:

    Pasv_min_port=1028 pasv_max_port=1048

    для proftpd.conf:

    PassivePorts 1028 1048

    Без особливої ​​потреби не використовуйте FTP-протокол, замість нього працюйте за SFTP. Якщо все ж таки необхідний FTP, додайте наступні рядки до конфігураційного файлу:

    для vsftpd.conf:

    Xferlog_enable=YES (ведення лог-файлу з ftp) anonymous_enable=NO (заборона підключень анонімних користувачів) anon_upload_enable=NO anon_mkdir_write_enable=NO

    для proftpd.conf:

    у секції ...видаліть усі секції і додайте рядки

    DenyAll DenyAll

    iptables

    Перевірте, чи правильно налаштовано фаєрвол. Для iptables виконайте команду

    Iptables -nL

    Ця команда виводить у командний рядок усі правила фаєрволу iptables. Також ці правила можна переглянути та редагувати у конфігураційному файлі фаєрволу /etc/sysconfig/iptables - для ОС CentOS, /etc/network/if-up.d/ispmgrfw - для ОС Debian/Ubuntu.

    У правилах фаєрволу закрийте всі порти, крім тих, які використовуються службами, що працюють на сервері. Для цього змініть рядки

    :INPUT ACCEPT :FORWARD ACCEPT :OUTPUT ACCEPT на:INPUT DROP :FORWARD DROP :OUTPUT DROP

    Щоб відкрити потрібні порти, додайте рядки виду

    A INPUT -p tcp -m tcp --dport 53 -j ACCEPT -A INPUT -p udp -m udp --dport 53 -j ACCEPT -A INPUT -p tcp -m multiport --sports ACCEPT

    де 53 – номер порту який потрібно відкрити.

    Перед тим, як вносити зміни до конфігураційного файлу фаєрволу, зробіть копію працюючого файлу.

    Правила фаєрволу можна настроювати з панелі керування ISPmanager.

    SSH

    Відкрийте конфігураційний файл SSH:

    Vi /etc/ssh/sshd_config

    Перевірте, чи не закоментовані наступні рядки:

    Protocol 2 (для використання другої версії протоколу) IgnoreRhosts yes (не використовувати.rhost файл) HostbasedAuthentication no (не аутентифікувати хост) PermitRootLogin no (заборона доступу суперкористувача root) PermitEmptyPasswords no PasswordAuthentication yes (дозволити аутентифікацію за паролем)

    Увімкніть SFTP, додавши до sshd_config рядок:

    Subsystem sftp /usr/lib/openssh/sftp-server

    Перевірте поштову чергу на предмет переповнення та переконайтеся, що серед повідомлень немає спаму.

    Виконайте mailq і перегляньте список повідомлень. Якщо список дуже великий, вибірково перевірте повідомлення, які можуть бути спамом. Визначте відправника листа за ідентифікатором (наприклад, BD65F10DEE4). Команда

    Exim -Mvh ID_повідомлення

    виводить заголовок листа, а команда

    Exim -Mvb ID_повідомлення

    дасть переглянути тіло повідомлення.

    Серед заголовків повідомлення поле From: містить відправника, а X-PHP-Originating-Script – скрипт, яким було надіслано повідомлення.

    Програмне забезпечення

    Перевірте програмне забезпечення сервера на вразливість.

    ОС CentOS

    Виконайте команду, яка виводить перелік файлів встановленого програмного забезпечення нещодавно модифікованих:

    Rpm -qVa – для виведення всіх файлів, rpm -qVa | awk "$2!="c" (print $0)" - для виведення файлів за винятком логів.

    Проаналізуйте, які файли та як були змінені за допомогою таких параметрів:

    S - модифіковано розмір файлу M - модифіковано права, встановлені за замовчуванням 5 - модифіковано контрольну суму MD5 D - модифіковано major/minor номери для пристрою L - модифіковано символічне посилання U - модифіковано власника файлу G - модифіковано групу T - модифіковано дату зміни файлу (mtime ) c - конфігураційний файл d - файл документації g - файл, який не включений до пакета l - файл ліцензії r - README файл

    Наприклад, рядок S.5....T. c /etc/httpd/conf/httpd.conf означає, що httpd.conf є конфігураційним файлом, змінено його розмір, контрольну суму та дату останньої зміни. Оскільки це конфігураційний файл, ці зміни не викликають підозр.

    Зверніть увагу на файли, які без видимої причини змінюють значення контрольної суми. Для таких файлів виконайте команду:

    Stat /usr/sbin/sshd && file /usr/sbin/sshd де usr/sbin/sshd - шлях до файлу.

    В результаті команди на екран виводиться докладна інформація про зміну файлу.

    Виконає команду:

    Yum --security update

    для встановлення security-update.

    ОС Debian

    Виконайте команди, які перевіряють контрольні суми MD5 для встановлених програм:

    # apt-get install debsums # debsums -c

    Виконайте такі команди, щоб перевірити security-update:

    # echo 'deb http://security.debian.org wheezy/updates main contrib non-free' >> /etc/apt/sources.list # grep security /etc/apt/sources.list > /etc/apt/secsrc .list # apt-get -s -o Dir::Etc::sourcelist="secsrc.list" -o Dir::Etc::sourceparts="-" upgrade

    Для встановлення security-update виконайте команду:

    # apt-get -o Dir::Etc::sourcelist="secsrc.list" -o Dir::Etc::sourceparts="-" upgrade

    Перевірте наявність у всіх репозиторіях звіряння gpg, виконавши команди:

    # grep -ri gpgcheck /etc/yum.conf # grep -ri gpgcheck /etc/yum.repos.d/ Переконайтеся, що рядки мають вигляд: gpgcheck=1 # grep -ri AllowUnauthenticated /etc/apt/

    Строк виду

    APT::Get::AllowUnauthenticated "true";

    бути не повинно.

    Служби, що не використовуються

    ОС CentOS

    Chkconfig --list

    Chkconfig --del service_name де service_name – ім'я служби.

    ОС Debian

    Виконайте команду, яка виводить список служб, що не використовуються:

    Sysv-rc-conf

    Для відключення запуску невикористовуваної службивиконайте команду:

    Sysv-rc-conf від service_name де service_name - ім'я служби.

    Безпека сервера Linux має дуже важливе значення для захисту ваших даних, інтелектуальної власності, а також час від рук зломщиків. За безпеку операційної системи Linux відповідає системний адміністратор. У цій статті ми розглянемо двадцять речей, які потрібно зробити з вашою операційною системою Linux, щоб вона була завжди в безпеці і надійно захищена. Якщо це домашній комп'ютер, то про безпеку, можливо, і немає сенсу турбуватися настільки сильно, достатньо буде надійних паролів та закриття доступу до портів з мережі інтернет. Але у разі публічного сервера варто звернути увагу на забезпечення захисту.

    Ці інструкції підійдуть для будь-якого дистрибутива, неважливо, що ви використовуєте CentOS, Red Hat або Ubuntu, Debian.

    1. Шифрування зв'язку

    Усі дані, що передаються через мережу відкриті для моніторингу. Тому потрібно шифрувати передані дані там, де це можливо за допомогою паролів, ключів або сертифікатів.

    Використовуйте scp, ssh, rsync або sftp для передачі файлів. Можна також змонтувати віддалену файлову систему до вашого домашнього каталогу за допомогою таких інструментів, як shhfs.

    GnuPG дозволяє шифрувати та підписувати ваші дані за допомогою спеціального особистого ключа. Також є функції для керування ключами та доступу до відкритих ключів.

    Fugu - це графічний інструмент передачі файлів за протоколом SFTP. SFTP дуже схожий на FTP, але вся сесія тут зашифрована. Це означає, що жодні паролі чи команди не передаються у відкритому вигляді. А тому такі передачі менш уразливі для третіх сторін. Також можна використовувати FileZilla, це кроссплатформенний FTP клієнтз підтримкою роботи FTS через SSH/TLS та SSH File Transfer Protocol (SFTP).

    OpenVPN – ефективний та легкий VPN клієнт з підтримкою шифрування за SSH.

    2. Постарайтеся не використовувати FTP, Telnet, Rlogin та RSH

    У більшості мереж імена користувачів, паролі від FTP, Telnet, RSH команд можуть бути перехоплені будь-ким з тієї ж мережі за допомогою аналізатора пакетів. Загальне вирішення цієї проблеми полягає у використанні OpenSSH, SFTP або SFTP, який додає SSL або TLS до звичайного FTP. Виконайте таку команду, щоб видалити NIS, RSH та інші застарілі служби:

    yum erase inetd xinetd ypserv tftp-server telnet-server rsh-serve

    3. Зменште кількість програмного забезпечення

    Вам справді потрібні всі встановлені веб-служби? Не слід встановлювати непотрібне програмне забезпечення, щоб уникнути вразливостей у цих програмах. Використовуйте свій пакетний менеджер, щоб подивитися встановлені програмиі видалити всі непотрібні:

    yum list installed
    $ yum list пакет
    $ yum remove пакет

    dpkg --list
    $ dpkg --info пакет
    $ apt-get remove пакет

    4. Одна машина – одна служба

    Запускайте різні служби на окремих серверах або віртуальних машинах. Це обмежує кількість сервісів, які можуть бути скомпрометовані. Наприклад, якщо зловмисник зможе зламати Apache, він отримає доступ до всього серверу. Включно з такими сервісами, як MySQL, сервер електронної поштиі так далі. Ви можете використовувати таке програмне забезпечення, як XEN або OpenVZ для віртуалізації.

    5. Тримайте ядро ​​Linux та ПЗ в актуальному стані

    Застосування патчів безпеки - це дуже важлива частина, щоб підтримувати безпеку сервера Linux. Операційна система надає всі інструменти для підтримки системи в актуальному стані та оновлення до нових версій. Усі оновлення безпеки повинні застосовуватися якнайшвидше. Тут також потрібно використовувати ваш менеджер пакетів. Наприклад:

    Або для систем на основі Debian:

    sudo apt update && sudo apt upgrade

    Ви можете налаштувати Red Hat або Fedora, щоб надіслати вам повідомлення на Email про доступність нових оновлень безпеки. Також ви можете налаштувати автоматичне оновленнячерез cron, або ж ви можете використовувати aptcron у Debian, щоб повідомити про необхідність оновити систему.

    6. Використовуйте розширення безпеки в Linux

    Операційна система Linux поставляється з різними патчами безпеки, які можуть бути використані для захисту від неправильної конфігураціїабо шкідливих програм. Але ви також можете використовувати такі додаткові системи контролю доступу для додатків як SELinux або AppArrmor.

    SELinux пропонує різні політики безпеки для ядра Linux. Тут є можливість контролювати доступ до будь-яких ресурсів системи за допомогою ролей. До того чи іншого ресурсу може отримати доступ лише програма, роль якої дозволяє це робити і навіть права суперкористувача не мають значення. SELinux набагато збільшує безпеку системи Linux, оскільки навіть root тут вважається звичайним користувачем. Докладніше про описано в окремій статті.

    7. Облікові записи користувачів та надійні паролі

    Використовуйте команди useradd та usermod для створення та підтримки облікових записів користувачів. Переконайтеся, що у вас хороший і сильний пароль, він повинен містити принаймні вісім символів, бажано у різному регістрі, серед яких мають зустрічатися спеціальні символи чи цифри. Наприклад, 8 символів, з яких сім літер та один символ або цифра. Використовуйте такі інструменти, як John the ripper, щоб знайти слабкі паролі користувачів на сервері, а також налаштуйте pam_cracklib.so, щоб забезпечити дотримання політики паролів.

    8. Час від часу змінюйте паролі

    Команда change дозволяє визначити кількість днів до дати примусової зміни пароля. Ця інформація використовується системою визначення моменту, коли користувач повинен його змінити. Ці опції знаходяться в /etc/login.defs. Щоб вимкнути старіння пароля, введіть наступну команду:

    change -l username

    Щоб отримати інформацію про строк придатності пароля, введіть команду:

    Також ви можете все настроїти вручну, у файлі /etc/shadow:

    (користувач): (пароль): (Остання_зміна):(максимум_днів): (мінімум_днів): (Попередження):(деактивувати):(рядок_придатності):

    • Мінімум днів- Мінімальний інтервал між змінами паролів, тобто наскільки часто користувач може змінювати пароль.
    • Максимум днів- скільки днів буде придатний пароль, після закінчення цього терміну користувач буде змушений змінити пароль.
    • Попередження- кількість днів після яких користувач буде попереджений, що потрібно змінити пароль.
    • Строк_придатності- кількість днів з першого січня 1970 року, коли аккаунт буде повністю відключений.

    chage -M 60 -m 7 -W 7 ім'я_користувача

    Також бажано заборонити користувачам використовувати старі паролі, інакше всі зусилля зі спробами змусити їх примусово змінювати паролі будуть зведені до нуля.

    9. Блокуйте облікові записи після невдалих спроб входу

    В операційній системі Linux ви можете використовувати команду faillog, щоб переглянути невдалі спроби входу користувачів. Також за допомогою неї можна встановити ліміт невдалих спроб входу. Вся інформація про невдалі спроби входу зберігається у файлі /var/log/faillog. Щоб її подивитись наберіть:

    А щоб задати ліміт спроб входу для певного облікового запису використовуйте:

    faillog -r -u користувач

    Також можна вручну блокувати або розблокувати акаунти за допомогою команди passwd. Щоб заблокувати, використовуйте:

    passwd -l користувач

    А для розблокування:

    passwd -u користувач

    Також бажано перевірити чи є в системі облікові записи з порожніми паролями. Для цього виконайте:

    awk -F: "($2 == "") (print)" /etc/shadow

    Також перевірте, чи немає користувачів з групою або ідом 0. Такий користувач повинен бути тільки один, і це root. Перевірити можна за допомогою такої команди:

    awk -F: "($3 == "0") (print)" /etc/passwd

    Повинен бути лише один рядок:

    root:x:0:0:root:/root:/bin/bash

    Якщо є й інші – видаліть їх. Користувачі, а особливо їхні слабкі паролі – одна з найуразливіших речей, яка може порушити безпеку в linux.

    10. Вимкніть вхід для суперкористувача

    Щоб зберегти безпеку системи linux, ніколи не використовуйте вхід від імені root користувача. Ви можете скористатися sudo, щоб отримати необхідні повноваження та запустити потрібну команду від імені суперкористувача. Ця команда дозволяє не розголошувати пароль суперкористувача іншим адміністраторам, а також містить інструменти моніторингу, обмеження та відстеження дій.

    11. Фізична безпека сервера

    Безпека сервера Linux повинна містити фізичну безпеку. Ви повинні обмежити фізичний доступ до консолі сервера. Налаштуйте BIOS так, щоб не підтримувалося завантаження із зовнішніх носіїв, таких як DVD, CD, USB. Також встановіть пароль на BIOS та завантажувач GRUB, щоб захистити їх параметри.

    12. Вимкніть непотрібні послуги

    Вимкніть усі сервіси та демони, що не використовуються. Також не забудьте видалити ці послуги з автозавантаження. Ви можете переглянути список усіх активних сервісів у системах Red Hat командою:

    chkconfig --list | grep "3:on"

    Для відключення сервісу використовуйте:

    service сервіс stop
    $chkconfig сервіс off

    Знайдіть все відкриті програмамипорти:

    Те саме можна зробити за допомогою сканера nmap:

    nmap -sT -O localhost

    Використовуйте iptables, щоб закрити всі порти, які не повинні бути доступні з мережі. Або зупиніть непотрібні послугияк описано вище.

    13. Видаліть Х сервер

    Х сервер на серверному комп'ютері – річ зовсім необов'язкова. Вам не потрібно запускати графічне оточення на виділеному сервері Apache або Email. Видаліть це програмне забезпечення для підвищення безпеки та продуктивності.

    14. Налаштуйте Iptables

    iptables - це програма простору користувача для налаштування вбудованого в ядро ​​фаєрволу Netfilter. Він дозволяє фільтрувати весь трафік та дозволяти лише певні види трафіку. Також використовуйте TCPWrappers – ACL систему для фільтрації доступу до інтернету. Ви можете запобігти безлічі типів DOS атак за допомогою iptables. Безпека мережі в Linux це дуже важливий момент загальної безпеки системи.

    15. Налаштуйте ядро

    У файлі /etc/sysctl.conf зберігаються налаштування ядра, які завантажуються та застосовуються під час запуску системи.

    Включити захист від переповнення буфера execshield:

    kernel.exec-shield=1
    kernel.randomize_va_space=1

    Включити захист від підроблення IP:

    net.ipv4.conf.all.rp_filter=1

    Вимкнути перенаправлення IP-адрес:

    net.ipv4.conf.all.accept_source_route=0

    Ігнорувати широкомовні запити:

    net.ipv4.icmp_echo_ignore_broadcasts=1
    net.ipv4.icmp_ignore_bogus_error_messages=1

    Логувати всі підроблені пакети:

    net.ipv4.conf.all.log_martians = 1

    16. Розбийте жорсткий диск на розділи

    Поділ жорсткого дискана розділи в залежності від призначення файлів покращує безпеку ОС Linux. Рекомендується робити окремі розділи для таких директорій:

    • /home
    • /var та /var/tmp

    Зробіть окремі розділи для кореневих директорій Apache та FTP серверів. Відкрийте файл /etc/fstab та виставте спеціальні опції для потрібних розділів:

    • noexec- не виконувати будь-які програми або файли, що виконуються на цьому розділі, дозволені тільки скрипти
    • nodev- не дозволяти символічні або спеціальні пристрої цього розділу.
    • nosuid- не дозволяти SUID/SGID доступ до програм з цього розділу.

    17. Використовуйте обмеження дискового простору

    Обмежуйте доступний дисковий простір для користувачів. Для цього створіть дискову квоту /etc/fstab, перемонтуйте файлові системи та створіть базу даних дискових квот. Це підвищить безпеку в Linux.

    18. Вимкніть IPv6

    Протокол інтернету нового покоління IPv6 в майбутньому замінить IPv4, що вже використовується. Але зараз немає інструментів, які дозволяють перевірити безпеку мережі на основі IPv6. Багато дистрибутивів Linux дозволяють використовувати протокол IPv6 за замовчуванням. Хакери можуть надсилати небажаний трафік і адміністратори не зможуть його відстежити. Так що якщо ця служба вам не потрібна, відключіть її.

    19. Вимкніть бінарники, що не використовуються SUID і SGID.

    Всі файли, що виконуються, для яких включений прапор SUID або SGID потенційно небезпечні. Цей прапор означає, що програма буде виконуватись із правами суперкористувача. А це означає, що якщо в програмі є якась вразливість чи баг, то локальний чи віддалений користувачзможе використати цей файл. Знайдіть усі такі файли за допомогою наступної команди:

    find/-perm +4000

    Знайти файли з встановленим прапором SGID:

    find/-perm +2000

    Або скомбінуємо все це в одній команді:

    find / \(-perm -4000 -o -perm -2000 \) -print
    $ find / -path -prune -o -type f -perm +6000 -ls

    Вам доведеться докладно вивчити кожен знайдений файл, щоб зрозуміти, наскільки потрібен той чи інший файл.

    20. Загальнодоступні файли

    Також бажано знайти файли, які можуть змінювати усі користувачі в системі. Для цього використовуйте таку команду:

    find /dir -xdev -type d \(-perm -0002 -a! -perm -1000 \) -print

    Тепер вам потрібно перевірити, чи правильно виставлені права для групи та власника цього кожного файлу і чи не несе це загрози безпеці.

    Також бажано знайти всі файли, що не належать нікому:

    find /dir -xdev \(-nouser-o-nogroup\) -print

    21. Використовуйте централізовану систему автентифікації

    Без централізованої системи автентифікації дані користувача стають суперечливими, що може призвести до застаріння облікових даних, і забування облікових записів, які повинні були бути вже давно видалені. Централізована служба дозволить підтримувати контроль над обліковими записами та автентифікаційними даними користувачів на різних системах Linux та Unix. Ви можете синхронізувати дані автентифікації між серверами. Але не використовуйте службу NIS, краще подивіться на Open DAP.

    Однією з найцікавіших реалізацій такої системи є Kerberos. Вона дозволяє виконувати аутентифікацію користувачів за допомогою секретного ключа, в мережах, де пакети можуть бути перехоплені та модифіковані. Kerberos використовує симетричний ключ для шифрування даних і вимагає для роботи центр управління ключами. Ви можете налаштувати віддалений вхід, віддалене копіювання, захищене копіювання файлів між системами та інші завдання з високим рівнем безпеки.

    22. Логування та аудит

    Налаштуйте логування та аудит для збирання та збереження всіх невдалих спроб входу та спроб злому. За замовчуванням усі логи або принаймні більшість з них знаходяться в папці /var/log/. Докладніше про те, за що відповідають певні, ми говорили в окремій статті.

    Ви можете дивитися логи за допомогою таких утиліт, як logwatch або logcheck. Вони дуже спрощують читання логів. Ви можете переглядати не весь файл, а тільки події, що вас цікавлять, а також відправляти собі повідомлення на електронну адресу.

    Спостерігайте за системою за допомогою служби auditd. Програма записує на диск усі події аудиту, які вас цікавлять. Усі налаштування аудиту зберігаються у файлі /etc/audit.rules при запуску системи сервіс прочитує всі правила цього файлу. Ви можете його відкрити і налаштувати все як потрібно або скористатися окремою утилітою - auditctl. Можна налаштувати такі моменти:

    • Події запуску та вимикання системи
    • Дата та час події
    • Події користувача (наприклад доступ до певного файлу)
    • Тип події (редагування, доступ, видалення, запис, оновлення тощо)
    • Успішність чи збій під час виконання події
    • Запис подій зміни налаштувань мережі
    • Запис зміни користувачів та груп
    • Моніторинг змін файлів

    23. Захистіть сервер OpenSSH

    Дозвольте лише використання протоколу 2:

    Забороніть вхід від імені користувача:

    24. Встановіть IDS

    IDS або система виявлення вторгнень намагається виявити підозрілі, шкідливі активності, такі як атака DOS, сканування портів або навіть спроби зламати комп'ютер шляхом моніторингу мережного трафіку.

    Хороша практика - розгорнути подібне програмне забезпечення перед тим, як система стане доступною з інтернету. Ви можете встановити AIDE, це HIDS (Host based IDS), яка може контролювати всі аспекти внутрішнього пристроювашої системи.

    Snort - це програмне забезпечення виявлення спроб вторгнення з мережі. Вона здатна виконувати аналіз та журналювання пакетів та аналізувати мережевий трафік у реальному часі.

    25. Захистіть ваші файли та каталоги

    У Linux є чудові засоби захисту від несанкціонованого доступу до файлів. Однак дозволи встановлені Linux та файловою системоюнічого не означають, коли зловмисник має фізичний доступ до комп'ютера і він може просто підключити жорсткий дисккомп'ютера до іншої системи, щоб скопіювати ваші дані. Але ви можете легко захистити свої файли за допомогою шифрування:

    • Для шифрування та розшифрування файлу за паролем використовуйте GPG
    • Також можна захищати файли за допомогою OpenSSL
    • Шифрування каталогів виконується за допомогою ecryptfs
    • TrueCrypt - вільний інструмент для шифрування дисків у Windows та Linux

    Висновки

    Тепер безпека ос linux на вашому комп'ютері буде набагато збільшена. Не забувайте ставити складні паролі і іноді. Напишіть у коментарях свій улюблений інструмент для забезпечення безпеки системи.

    У цьому матеріалі ми познайомимося з основними утилітами для hardware Linux. Російською мовою це називається якось на кшталт «перевірка рівня захищеності Linux-систем та оцінка коректності конфігів з погляду ІБ». Зрозуміло, ми не лише зробимо огляд програм, а й наведемо приклади їхнього використання.

    Сам собі аудитор, чи безпека власними силами

    Перед адміністраторами, а особливо перед аудиторами ІБ часто постають завдання перевірити захищеність великої кількостіхостів за дуже короткий час. І звичайно, для вирішення цих завдань в Enterprise-сегменті існують спеціалізовані інструменти, наприклад, такі як мережні сканери безпеки. Упевнений, що всі вони – від open sources движка OpenVAS до комерційних продуктів типу Nessus або Nexpose – відомі нашому читачеві. Однак цей софт зазвичай використовується, щоб шукати застаріле і тому вразливе програмне забезпечення і потім запустити патч-менеджмент. До того ж, не всі сканери враховують деякі специфічні особливості вбудованих механізмів захисту Linux та інших open sources продуктів. Ну і не в останню чергу значення має ціна питання, адже комерційні продукти можуть дозволити собі хіба що компанії, що виділяють під цю справу бюджети.

    Саме тому сьогодні мова піде про спеціалізований набір утиліт, що вільно розповсюджуються, які можуть діагностувати поточний рівень захищеності системи, оцінити потенційні ризики, наприклад «зайві сервіси», що стирчать в інтернет, або небезпечний конфіг за замовчуванням, і навіть запропонувати варіанти виправлення знайдених недоліків. Ще одна перевага використання цих тулз полягає у можливості тиражувати типові сценарії перевірки ферми з будь-якої кількості Linux-систем та формувати документально підтверджену базу тестів у вигляді логів та окремих репортів.

    Практичні аспекти аудиту захищеності

    Якщо подивитися очима аудитора, то підхід до тестування можна поділити на два типи.

    Перший- це відповідність так званим compliance-вимогам, тут перевіряється наявність обов'язкових елементів захисту, прописаних у будь-якому міжнародному стандарті або best practice. Класичний приклад - вимоги PCI DSS для платіжних ІТ-систем, SOX404, NIST-800 series,.

    Другий- це суто раціональний підхід, що ґрунтується на питанні «А що ще можна зробити, щоб посилити захищеність?». Тут немає обов'язкових вимог – лише твої знання, світла голова та вмілі руки. Наприклад, це оновлення версії ядра та/або пакетів додатків, включення, форсування, налаштування файрвола.

    Все, що стосується другого підходу, прийнято називати спеціальним терміном Hardeningщо ще можна визначити як «дії, спрямовані на посилення рівня вихідної захищеності операційної системи (або програми) переважно штатними засобами».

    p align="justify"> Відповідність compliance-вимогам, як правило, перевіряють при підготовці до проходження обов'язкового аудиту типу PCI DSS або іншого сертифікаційного аудиту. Ми ж більше приділимо увагу Hardening-складової. Усі великі розробники пропонують для своїх продуктів Hardening Guidelines- Посібники, що містять поради та рекомендації, як посилити захищеність, враховуючи штатні механізми безпеки та специфіку софту. Так, подібні посібники є у Red Hat, Debian, Oracle, Cisco.

    INFO

    Hardening - це термін зі світу ІБ, який позначає процес забезпечення безпеки системи (програми) за рахунок зниження її вразливості та, як правило, з використанням тільки штатних утиліт або механізмів захисту.

    Sudo apt-get update sudo apt-get install lynis

    І для RPM-орієнтованих дистрибутивів (попередньо додавши відповідні репозиторії):

    Yum install linus -y

    Встановлення на macOS:

    $ brew search lynis $ brew install lynis

    Щоб запустити Lynis, достатньо вказати хоча б один ключ. Наприклад, для запуску всіх наявних тестів слід зазначити ключ -c (check all, перевірити все):

    # Типовий набір тестів sudo lynis audit system # Повний набір тестів sudo lynis audit system -c # Сканування віддаленого хоста audit system remote







    Перед аудитом завжди корисно перевірити, чи доступна Нова версія Lynis:

    Lynis update info && lynis update check

    Утиліти Lynis, крім стандартного, існує ще один режим - непривілейованого запуску:

    Lynis audit --pentest

    Якщо ж ти хочеш помістити ім'я аудитора, який запустив тестування, просто додай параметр -auditor :

    Sudo lynis audit system -c -auditor Daddy

    На будь-якому етапі аудиту процес перевірки може бути продовжено (Enter) або примусово припинено (Ctrl+C). Результати виконаних тестів будуть писатися в журнал Lynis /var/log/lynis.log . Врахуй, що журнал буде перезаписуватись при кожному наступному запуску утиліти.

    Для тестування на систематичній основі в автоматичному режимі можна призначити відповідне завдання планувальник Cron за допомогою ключа -cronjob . У такому разі утиліта запускатиметься за заданим шаблоном (конфігом) і не виводитиме жодних інтерактивних повідомлень, питань та попереджень. Усі результати збережуться в балку. Наприклад, ось скрипт запуску утиліти з дефолтним конфігом раз на місяць:

    #!/bin/sh AUDITOR="automated" DATE=$(date +%Y%m%d) HOST=$(hostname) LOG_DIR="/var/log/lynis" REPORT="$LOG_DIR/report-$( HOST).$(DATE)" DATA="$LOG_DIR/report-data-$(HOST).$(DATE).txt" cd /usr/local/lynis . -cronjob > $(REPORT) mv /var/log/lynis-report.dat $(DATA) # End

    Збережи цей скрипт у каталог /etc/cron.monthly/lynis. І не забудь додати шляхи для збереження логів (/usr/local/lynis та /var/log/lynis), інакше можлива некоректна робота.

    Можна переглянути список усіх доступних для виклику команд:

    Lynis show commands

    Особливо цікаві можуть дивитися параметри з конфігу за замовчуванням:

    Lynis show settings

    Короткий інструктаж роботи з утилітою:

    Man lynis

    Варіанти можливих статусів за наслідками перевірки обмежуються наступним списком: NONE, WEAK, DONE, FOUND, NOT_FOUND, OK, WARNING.


    Запуск окремих тестів у Lynis

    На практиці необхідно провести лише деякі тести. Наприклад, якщо ваш сервак виконує тільки функції Mail Server або Apache. Для цього ми можемо використовувати параметр tests. Синтаксис команди виглядає так:

    Lynis -тест "Test-IDs"

    Якщо тобі важко розібратися через велику кількість ідентифікаторів тестів, то ти можеш використовувати груповий параметр -test-category. За допомогою цієї опції Lynis запускає ідентифікатори лише тестів, які входять до певної категорії. Наприклад, ми плануємо запустити тести брандмауера та ядра:

    ./lynis - test-category "firewalls kernel"

    Крім цього, функціональність Lynis розширюють різні плагіни, які можна дописувати самостійно, а можна підкладати нові в директорію.

    Пропозиції з виправлення (Suggestions)

    Усі попередження (Warnings) будуть перераховані після результатів. Кожне починається з тексту попередження, потім поряд у дужках вказується тест, що його згенерував. У наступному рядку пропонується вирішення проблеми, якщо воно існує. За фактом останній рядок - це URL-адреса, за якою ти зможеш переглянути подробиці і знайти додаткові рекомендації, як усунути проблему.

    Профілі

    Профілі, які керують аудитом, визначаються у файлах із розширенням .prf, розміщених у каталозі /etc/lynis . Стандартний профіль називається передбачувано: default.prf . Розробники не рекомендують редагувати його безпосередньо: будь-які зміни, які ти хочеш внести в аудит, краще додавати до файлу custom.prf , що знаходиться в тому ж каталозі.

    Продовження доступне лише учасникам

    Варіант 1. Приєднайтесь до спільноти «сайт», щоб читати всі матеріали на сайті

    Членство у спільноті протягом зазначеного терміну відкриє тобі доступ до ВСІХ матеріалів «Хакера», збільшить особисту накопичувальну знижку та дозволить накопичувати професійний рейтинг Xakep Score!