Ограничение отладки и снижение системной избыточности
Содержание
Ограничение отладки и снижение системной избыточности. Свод требований.
Здесь приведены рекомендации по ограничению отладки и снижению системной избыточности. Настоятельно рекомендуется снижать системную избыточность, путем отключения или удаления не используемого ПО, технологий и(или) протоколов. Это снижает вероятную площадь поверхности атаки на систему.
Если система не используется в интересах разработки, а предназначена для работы с важными данными -- рекомендуется отключать любые отладочные интерфейсы, поскольку информация, представленная с их помощью, может быть использована злоумышленником для изучения системы, несанкционированного доступа к обрабатываемым в системе данным, или иного деструктивного воздействию.
Ограничения некоторых интерфейсов отладки уже описывалась в этой статье.
Сводная информация с рекомендуемыми настройками для ядра ОС и проекция к Методическому документу ФСТЭК «Рекомендации по обеспечению безопасной настройки операционных систем Linux» от 25 декабря 2022 г. — приведена в таблице ниже:
№ п/п | Параметр и рекомендуемое значение | Интерфейс | См. документ ФСТЭК | См. раздел | Значение по умолчанию |
---|---|---|---|---|---|
1 | kernel.dmesg_restrict=1 |
/etc/sysctl.conf |
2.4.1 | См. | 0
|
2 | kernel.kptr_restrict=2 |
/etc/sysctl.conf |
2.4.2 | См. | 0
|
3 | debugfs=no-mount |
/etc/default/grub |
2.5.3 | См. | Неактивно |
4 | fs.protected_symlinks=1 |
/etc/sysctl.conf |
2.6.2 | -- | 1
|
5 | fs.protected_hardlinks=1 |
/etc/sysctl.conf |
2.6.3 | -- | 1
|
6 | fs.protected_fifos=2 |
/etc/sysctl.conf |
2.6.4 | -- | 1
|
7 | fs.protected_regular=1 |
/etc/sysctl.conf |
2.6.5 | -- | 1
|
8 | fs.suid_dumpable=0 |
/etc/sysctl.conf |
2.6.3 | -- | 0
|
9 | kernel.yama.ptrace_scope=3 |
/etc/sysctl.conf |
2.6.1 | См. | 1
|
Ограничение отладки и снижение системной избыточности
В чем опасность?
Опасность заключается в возможности извлечения данных из отладочной информации, образующейся, например, при крахе приложений (core dumps). Или в возможности извлечения отладочной информации напрямую из ядра ОС.
Операционная система в конфигурации по умолчанию поддерживает большое количество файловых систем, сетевых технологий и различных устройств. Не все они нужны при работе. Может быть опасно использовать файловые системы, в которых не поддерживаются атрибуты безопасности, а также файловые системы, предполагающие наличие избыточных прав доступа (возможность создания файлов устройств, исполнения файлов, установки бита смены идентификатора и т.п.). Кроме файловых систем опасность представляет поддержка любых устаревших или неиспользуемых технологий или устройств, которая может способствовать компрометации системы или упрощать проникновение в нее и манипуляции с данными.
Что можно сделать для повышения безопасности?
Можно следовать рекомендациям, изложенным в этом руководстве и описывающим различные способы ограничений для получения отладочной информации. Здесь также приведена справочная информация о поддержке операционной системой различных файловых систем, сетевых протоколов, технологий и устройств и даны рекомендации по снижению избыточности. То есть рекомендуется проанализировать, а нужно ли вам использовать ту или иную ФС, технологию или устройство. Если поддержка чего-либо вам не требуется, то здесь описаны способы отключения избыточной функциональности.
Отключение сброса страниц памяти с помощью SysRq
Для отладки любая ОС ROSA (и Linux вообще) поддерживает обработку т.н. «магических клавиш» SysRq
— это сокращение от System Request (системный запрос).
Ниже описаны наиболее важные и популярные сочетания SysRq
:
-
Alt+SysRq+B
— Немедленно перезагрузить ОС (без синхронизации дисковых кешей и размонтирования ФС);
-
Alt+SysRq+C
— Принудительный крах ОС со сбросом на диск состояния памяти;
-
Alt+SysRq+E
— Послать сигналSIGTERM
всем процессам, кромеsystemd
;
-
Alt+SysRq+F
— Запустить механизмoom_kill
, который уничтожит процесс занимающий очень много памяти;
-
Alt+SysRq+I
— Послать сигналSIGKILL
всем процессам, кромеsystemd
;
-
Alt+SysRq+K
— Уничтожить все процессы в текущем терминале;
-
Alt+SysRq+L
-- Послать сигналSIGKILL
всем процессам, включаяsystemd
;
-
Alt+SysRq+N
— Сбросить до нуля приоритет всех процессов с повышенным значением приоритета;
-
Alt+SysRq+O
— Выключить компьютер (аналогично выключению электропитания);
-
Alt+SysRq+P
— Выдать сброс текущего состояния регистров процессора в текущий терминал.
-
Alt+SysRq+R
— Вернуть управление клавиатурой в случае сбоя X-сервера;
-
Alt+SysRq+S
— Синхронизировать весь кеш оперативной памяти на диск;
-
Alt+SysRq+T
— Вывести всю информацию о запущенных процессах на текущую консоль;
-
Alt+SysRq+U
— Перемонтировать все файловые системы в режиме «только для чтения».
Для проверки текущей конфигурации SysRq
выполнить:
# cat /proc/sys/kernel/sysrq
0
Иначе, если значение вывода отлично от нуля, выполнить:
# echo "0" > /proc/sys/kernel/sysrq
# echo "kernel.sysrq = 0" >> /etc/sysctl.conf
Иногда разумно использовать значение kernel.sysrq = 4
(вместо kernel.sysrq = 0
). Это значение устанавливает возможность использования комбинации Alt+SysRq+K
, которая сбросит все процессы на текущем терминале входа. Это может быть полезно, при совершении входа в систему. Если предположить, что нарушитель смог внедрить в систему программу, перехватывающую ввод с текущего терминала (кейлоггер), то при нажатии Alt+SysRq+K
будут уничтожены все процессы (включая фоновые) и, таким образом, и любые несанкционированные процессы или программы, внедренные злоумышленником. Это увеличивает доверие к операции входа в ОС с данного терминала входа.
Администратору системы следует помнить об этом, и принимать решение, опираясь на знание специфики использования «магических клавиш», адекватно оценивая угрозу внедрения в ОС программ перехвата ввода.
Параметры системы, ограничивающие возможность получения отладочной информации
Файл /etc/security/limits.conf
используется для указания общесистемных ограничений или лимитов. Здесь можно задавать много параметров. Но в данном случае важны параметры переменных
soft core
и hard core
. Эти переменные призваны определять «мягкий» (soft) и «жесткий» (hard) лимит на размер отладочного дампа (core dump). Если указать значение 0
, то размер файлов core dump будет нулевой.
Для этого в файле /etc/security/limits.conf
нужно указать следующее:
* hard core 0
* soft core 0
Звездочка указывает, что данное ограничение будет применено для всех интерактивных пользователей системы, включая пользователя root
. Для того, чтобы ограничения вступили в силу, необходимо выйти из текущего сеанса и зайти заново.
Поскольку файл /etc/security/limits.conf
анализируется только для пользователей, получающих сеанс интерактивной работы, то для служб и системных пользователей, от имени которых выполняются службы и сервисы, значения, указываемые в этом файле неприменимы. Для ограничений, накладываемых на фоновые процессы, службы и сервисы, необходимо использовать интерфейсы службы systemd
, чему посвящена отдельная статья.
В файле /etc/sysctl.conf можно указать значение специальной переменной ядра, которая явно запрещает создание дампов памяти от имени процессов с установленным битом смены идентификатора пользователя (SUID bit):
# cat /etc/sysctl.conf | grep fs.suid
fs.suid_dumpable = 0
Если её значение по каким то причинам не равно нулю (значение по умолчанию), то рекомендуется задать безопасное значение:
# echo 0 > /proc/sys/fs/suid_dumpable
echo "fs.suid_dumpable = 0" >> /etc/sysctl.conf
Можно дополнительно установить ограничение (лимит) в файле /etc/profile
для всех интерактивных пользователей системы (пример приведен только для оболочки bourne shell и совместимых с ней):
# echo "ulimit -S -c 0 > /dev/null 2>&1" >> /etc/profile
Это значение принудительно ограничивает системное окружение пользователя, но не применяется к его текущему сеансу. Чтобы оно применялось, требуется получить новый сеанс (то есть выйти из системы и повторно зайти в неё).
Если сбросом дампов управляет служба systemd
, т.е. служба systemd-coredump
установлена и запущена, то в файле /etc/systemd/coredump.conf
также можно установить безопасные значения:
Storage=none
ProcessSizeMax=0