Утвержден
ФСТЭК России
25 декабря 2022 г.

МЕТОДИЧЕСКИЙ ДОКУМЕНТ

РЕКОМЕНДАЦИИ
ПО БЕЗОПАСНОЙ НАСТРОЙКЕ ОПЕРАЦИОННЫХ СИСТЕМ LINUX

1. ОБЩИЕ ПОЛОЖЕНИЯ

1.1. Настоящие Рекомендации по безопасной настройке операционных систем Linux (далее - Рекомендации) разработаны в соответствии с подпунктом 4 пункта 8 Положения о Федеральной службе по техническому и экспортному контролю, утвержденного Указом Президента Российской Федерации от 16 августа 2004 г. N 1085.

1.2. Рекомендации определяют содержание работ по настройке операционных систем на базе ядра Linux (далее - операционные системы Linux) и направлены на повышение защищенности информационных (автоматизированных) систем, построенных с использованием указанных операционных систем.

1.3. Настоящие Рекомендации подлежат реализации в государственных информационных системах и на объектах критической информационной инфраструктуры Российской Федерации, построенных с использованием операционных систем Linux, несертифицированных по требованиям безопасности информации, до их замены на сертифицированные отечественные операционные системы.

Настройка сертифицированных операционных систем на базе ядра Linux осуществляется в соответствии с эксплуатационной документацией разработчиков операционных систем.

2. СОДЕРЖАНИЕ РЕКОМЕНДАЦИЙ ПО БЕЗОПАСНОЙ НАСТРОЙКЕ
ОПЕРАЦИОННЫХ СИСТЕМ LINUX

При осуществлении безопасной настройки операционных систем Linux выполняются следующие процедуры:

настройка авторизации в операционной системе;

ограничение механизмов получения привилегий;

настройка прав доступа к объектам файловой системы;

настройка механизмов защиты ядра Linux;

уменьшение периметра атаки ядра Linux;

настройка средств защиты пользовательского пространства со стороны ядра Linux.

2.1. Настройка авторизации в операционных системах Linux

При настройке авторизации в операционной системе Linux необходимо:

2.1.1. Не допускать использование учетных записей пользователей с пустыми паролями. Настроить учетные записи таким образом, чтобы каждый пользователь системы либо имел пароль, либо был заблокирован по паролю. В системах Linux данную возможность обеспечивает файл /etc/shadow.

2.1.2. Обеспечить отключение входа суперпользователя в систему по протоколу SSH путем установки для параметра PermitRootLogin значения no в файле /etc/ssh/sshd_config.

2.2. Ограничение механизмов получения привилегий

При ограничении механизмов получения привилегий необходимо:

2.2.1. Обеспечить ограничение доступа к команде su путем добавления в файл /etc/pam.d/su следующей строки: auth required pam_wheel.so use_uid. Задать список пользователей в записи для группы wheel в файле /etc/group:

wheel:x:10:root,<user list>.

2.2.2. Ограничить список пользователей, которым разрешено использовать команду sudo и разрешенных к выполнению через sudo команд путем пересмотра файла /etc/sudoers.

2.3. Настройка прав доступа к объектам файловой системы

При настройке прав доступа к объектам файловой системы необходимо:

2.3.1. Установить корректные права доступа к файлам настройки пользователей, а именно к файлам с перечнями пользовательских идентификаторов (/etc/passwd) и групп (/etc/group), либо хранилищам хешей паролей (в операционных системах GNU/Linux, Solaris, HP-UX: /etc/shadow, AIX: /etc/security/passwd), с помощью команд:

chmod 644 /etc/passwd;

chmod 644 /etc/group;

chmod go-rwx /etc/shadow.

2.3.2. Установить корректные права доступа к файлам запущенных процессов путем выполнения команды вида: chmod go-w /путь/к/файлу для всех исполняемых файлов, запущенных в настоящий момент, и соответствующих библиотек. После этого необходимо осуществить проверку, что директория, содержащая данный файл, а также все родительские директории недоступны для записи непривилегированным пользователям.

2.3.3. Установить корректные права доступа к файлам, выполняющимся с помощью планировщика задач cron неавторизованными пользователями путем выполнения команды chmod go-w путь_к_файлу для каждого файла (либо команды), который вызывается из заданий cron. В противном случае это может привести к выполнению произвольного кода от имени владельца задания cron (в том числе root, что приведет к полной компрометации операционной системы).

2.3.4. Установить корректные права доступа к файлам, выполняемым с помощью sudo путем изменения владельца командой chown root путь_к_файлу для каждого исполняемого файла, который можно запускать с привилегиями суперпользователя root, но владельцем которого является обычный пользователь и выполнения команды chmod go-w путь_к_файлу для каждого исполняемого файла, который можно запускать с привилегиями суперпользователя root и к которому имеют доступ на запись все пользователи.

2.3.5. Установить корректные права доступа к стартовым скриптам системы путем выполнения команды chmod o-w <filename> к каждому файлу в директориях /etc/rc#.d, а также к файлам .service, присутствующим в системе.

2.3.6. Установить корректные права доступа к системным файлам заданий (конфигурационным файлам) cron при помощи команды chmod go-wx путь_к_файлу_или_директории.

К системным файлам-описаниям очередей cron относятся следующие файлы (могут присутствовать не всегда, в зависимости от операционной системы и ее настроек):

/etc/crontab;

/etc/cron.d (директория и файлы внутри нее);

/etc/cron.hourly (директория и файлы внутри нее);

/etc/cron.daily (директория и файлы внутри нее);

/etc/cron.weekly (директория и файлы внутри нее);

/etc/cron.monthly (директория и файлы внутри нее).

2.3.7. Установить корректные права доступа к пользовательским файлам заданий cron при помощи команды вида: chmod go-w путь_к_файлу_заданий.

2.3.8. Установить корректные права доступа к исполняемым файлам и библиотекам операционной системы путем анализа корректности прав доступа к утилитам и системным библиотекам, расположенным по стандартным путям (/bin, /usr/bin, /lib, /lib64 и другим путям), а также к модулям ядра (для Linux: /lib/modules/версия-текущего-ядра). Местоположение большинства стандартных исполняемых файлов указано в переменной $PATH пользователя root.

2.3.9. Установить корректные права доступа к SUID/SGID-приложениям путем проведения аудита системы на предмет поиска всех SUID/SGID-приложений - права доступа к каждому из них не должны позволять остальным пользователям изменять его содержимое (в особенности если это SUID-приложение и его владелец root). В противном случае следует выполнить команду вида: chmod go-w /путь/к/приложению. Проверить, что среди выявленных SUID/SGID-приложений не присутствуют лишние (например, если определен "белый" список таких приложений), в противном случае следует снять с таких приложений SUID/SGID-биты.

2.3.10. Установить корректные права доступа к содержимому домашних директорий пользователей (.bash_history, .history, .sh_history и т.п. - файлы истории команд оболочек, .bash_profile, .bashrc, .profile, .bash_logout и т.п. - файлы настройки оболочки, .rhosts - настройки R-подсистем) путем установки на каждый из указанных файлов корректных прав доступа с помощью команды вида: chmod go-rwx путь_к_файлу.

2.3.11. Установить корректные права доступа к домашним директориям пользователей с помощью команды chmod 700 домашняя_директория.

2.4. Настройка механизмов защиты ядра Linux

При настройке механизмов защиты ядра Linux необходимо:

2.4.1. Ограничить доступ к журналу ядра путем установки значения sysctl-опции kernel.dmesg_restrict=1. Журнал ядра должен быть доступен только пользователям, которые обладают разрешением CAP_SYSLOG (администраторы системы).

2.4.2. Заменить ядерные адреса в /proc и других интерфейсах на 0 путем установки значения sysctl-опции kernel.kptr_restrict=2.

2.4.3. Инициализировать динамическую ядерную память нулем при ее выделении путем установки значения опции загрузки ядра init_on_alloc=1. Эта настройка позволяет изменить значение опции сборки ядра CONFIG_INIT_ON_ALLOC_DEFAULT_ON при запуске системы (per boot).

2.4.4. Запретить слияние кэшей ядерного аллокатора путем установки опции загрузки ядра slab_nomerge. Эта настройка позволяет изменить значение опции сборки ядра CONFIG_SLAB_MERGE_DEFAULT при запуске системы (per boot).

2.4.5. Инициализировать механизм IOMMU путем установки значения для следующих опций загрузки ядра:

iommu=force;

iommu.strict=1;

iommu.passthrough=0.

2.4.6. Рандомизировать расположение ядерного стека путем установки значения опции загрузки ядра randomize_kstack_offset=1. Эта настройка позволяет изменить значение опции сборки ядра CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT при запуске системы (per boot).

2.4.7. Включить средства защиты от аппаратных уязвимостей центрального процессора (для платформы x86) путем установки значения опции загрузки ядра mitigations=auto,nosmt.

2.4.8. Включить защиту подсистемы eBPF JIT ядра Linux путем установки значения sysctl-опции net.core.bpf_jit_harden=2.

2.5. Уменьшение периметра атаки ядра Linux

При уменьшении периметра атаки ядра Linux необходимо:

2.5.1. Отключить устаревший интерфейс vsyscall путем установки значения опции загрузки ядра vsyscall=none. Эта настройка позволяет изменить значение опции сборки ядра CONFIG_LEGACY_VSYSCALL_NONE при запуске системы (per boot).

2.5.2. Ограничить доступ к событиям производительности путем установки значения sysctl-опции kernel.perf_event_paranoid=3.

2.5.3. Отключить монтирование виртуальной файловой системы debugfs путем установки значения опции загрузки ядра debugfs=no-mount (по возможности off).

2.5.4. Отключить системный вызов kexec_load путем установки значения sysctl-опции kernel.kexec_load_disabled=1.

2.5.5. Ограничить использование user namespaces путем установки значения sysctl-опции user.max_user_namespaces=0. Если система на базе Linux не использует user namespaces для выполнения своей задачи, то данная настройка никак не повлияет на работу системы. Рекомендуется предварительно проверить реализацию данной рекомендации на тестовой системе.

2.5.6. Запретить системный вызов bpf для непривилегированных пользователей путем установки значения sysctl-опции kernel.unprivileged_bpf_disabled=1. Если непривилегированные процессы в системе на базе Linux не используют BPF для выполнения своей задачи, данная настройка никак не повлияет на работу системы. Рекомендуется предварительно проверить реализацию данной рекомендации на тестовой системе.

2.5.7. Запретить системный вызов userfaultfd для непривилегированных пользователей путем установки значения sysctl-опции vm.unprivileged_userfaultfd=0.

2.5.8. Запретить автоматическую загрузку модулей ядра, отвечающих за поддержку дисциплины линии терминала путем установки значения sysctl-опции dev.tty.ldisc_autoload=0.

2.5.9. Отключить технологию Transactional Synchronization Extensions (TSX) путем установки значения опции загрузки ядра tsx=off.

2.5.10. Настроить параметр ядра, который определяет минимальный виртуальный адрес, который процессу разрешено использовать для mmap, путем использования sysctl-опции vm.mmap_min_addr = 4096 или больше.

2.5.11. Реализовать рандомизацию адресного пространства, которая защищает от атак на переполнение буфера, путем использования команды после тестирования kernel.randomize_va_space = 2.

2.6. Настройка средств защиты пользовательского пространства
со стороны ядра Linux

При настройке средств защиты пользовательского пространства со стороны ядра Linux необходимо:

2.6.1. Запретить подключение к другим процессам с помощью ptrace путем установки значения sysctl-опции kernel.yama.ptrace_scope=3.

2.6.2. Ограничить небезопасные варианты прохода по символическим ссылкам (symlinks) путем установки значения sysctl-опции fs.protected_symlinks=1. Данная настройка не влияет на нормальную функциональность userspace и блокирует только вредоносное поведение.

2.6.3. Ограничить небезопасные варианты работы с жесткими ссылками (hardlinks) путем установки значения sysctl-опции fs.protected_hardlinks=1. Данная настройка не влияет на нормальную функциональность userspace и блокирует только вредоносное поведение.

2.6.4. Включить защиту от непреднамеренной записи в FIFO-объект путем установки значения sysctl-опции fs.protected_fifos=2. Данная настройка не влияет на нормальную функциональность userspace и блокирует только вредоносное поведение.

2.6.5. Включить защиту от непреднамеренной записи в файл путем установки значения sysctl-опции fs.protected_regular=2. Данная настройка не влияет на нормальную функциональность userspace и блокирует только вредоносное поведение.

2.6.6. Запретить создание core dump для некоторых исполняемых файлов путем установки значения sysctl-опции fs.suid_dumpable=0. Данная настройка не влияет на нормальную функциональность userspace и блокирует только вредоносное поведение.