Ограничение отладки и снижение системной избыточности — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(Новая страница: « Внимание. Статья в процессе написания. == Ограничение отладки и снижение системной изб…»)
 
 
(не показано 8 промежуточных версий 2 участников)
Строка 1: Строка 1:
+
{{Заготовка}}
Внимание. Статья в процессе написания.
+
  
 +
== Ограничение отладки и снижение системной избыточности. Свод требований. ==
 +
 +
Здесь приведены рекомендации по ограничению отладки и снижению системной избыточности. Настоятельно рекомендуется снижать системную избыточность, путем отключения или удаления не используемого ПО, технологий и(или) протоколов. Это снижает вероятную площадь поверхности атаки на систему.
 +
 +
Если система не используется в интересах разработки, а предназначена для работы с важными данными -- рекомендуется отключать любые отладочные интерфейсы, поскольку информация, представленная с их помощью, может быть использована злоумышленником для изучения системы, несанкционированного доступа к обрабатываемым в системе данным, или иного деструктивного воздействию.
 +
 +
Ограничения некоторых интерфейсов отладки уже описывалась в [http://%D0%97%D0%B0%D1%89%D0%B8%D1%82%D0%B0_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8_%D0%B8_%D1%8F%D0%B4%D1%80%D0%B0_%D0%B2_%D0%9E%D0%A1_ROSA#.D0.97.D0.B0.D1.89.D0.B8.D1.82.D0.B0_.D0.BF.D0.B0.D0.BC.D1.8F.D1.82.D0.B8_.D0.B8_.D1.8F.D0.B4.D1.80.D0.B0_.D0.B2_.D0.9E.D0.A1_ROSA._.D0.A1.D0.B2.D0.BE.D0.B4_.D1.82.D1.80.D0.B5.D0.B1.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B9 этой статье].
 +
 +
Сводная информация с рекомендуемыми настройками для ядра ОС и проекция к Методическому документу ФСТЭК «Рекомендации по обеспечению безопасной настройки операционных систем Linux» от 25 декабря 2022 г. — приведена в таблице ниже:
 +
 +
{| class="wikitable"
 +
|-
 +
! № п/п !! Параметр и рекомендуемое значение !! Интерфейс !! См. [https://fstec.ru/dokumenty/vse-dokumenty/spetsialnye-normativnye-dokumenty/metodicheskij-dokument-ot-25-dekabrya-2022-g документ ФСТЭК] !! См. раздел !! Значение по умолчанию
 +
|-
 +
| 1 || <code>kernel.dmesg_restrict=1</code> || <code>/etc/sysctl.conf</code> || 2.4.1|| [http://wiki.rosalab.ru/ru/index.php/%D0%97%D0%B0%D1%89%D0%B8%D1%82%D0%B0_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8_%D0%B8_%D1%8F%D0%B4%D1%80%D0%B0_%D0%B2_%D0%9E%D0%A1_ROSA#.D0.9E.D0.B3.D1.80.D0.B0.D0.BD.D0.B8.D1.87.D0.B5.D0.BD.D0.B8.D1.8F_.D0.BD.D0.B0_.D0.BF.D1.80.D0.BE.D1.81.D0.BC.D0.BE.D1.82.D1.80_.D1.81.D0.BE.D0.BE.D0.B1.D1.89.D0.B5.D0.BD.D0.B8.D0.B9_.D1.8F.D0.B4.D1.80.D0.B0 См.] || <code>0</code>
 +
|-
 +
| 2 || <code>kernel.kptr_restrict=2</code> || <code>/etc/sysctl.conf</code> || 2.4.2 || [http://wiki.rosalab.ru/ru/index.php/%D0%97%D0%B0%D1%89%D0%B8%D1%82%D0%B0_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8_%D0%B8_%D1%8F%D0%B4%D1%80%D0%B0_%D0%B2_%D0%9E%D0%A1_ROSA#.D0.97.D0.B0.D1.89.D0.B8.D1.82.D0.B0_.D0.BE.D1.82_.D0.BF.D1.80.D0.BE.D1.81.D0.BC.D0.BE.D1.82.D1.80.D0.B0_.D0.B0.D0.B4.D1.80.D0.B5.D1.81.D0.BE.D0.B2_.D1.83.D0.BA.D0.B0.D0.B7.D0.B0.D1.82.D0.B5.D0.BB.D0.B5.D0.B9 См.] || <code>0</code>
 +
|-
 +
| 3 || <code>debugfs=no-mount</code> || <code>/etc/default/grub</code> || 2.5.3 || [http://wiki.rosalab.ru/ru/index.php/%D0%97%D0%B0%D1%89%D0%B8%D1%82%D0%B0_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8_%D0%B8_%D1%8F%D0%B4%D1%80%D0%B0_%D0%B2_%D0%9E%D0%A1_ROSA#.D0.9E.D1.82.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D1.81.D0.BB.D1.83.D0.B6.D0.B5.D0.B1.D0.BD.D0.BE.D0.B9_.D0.A4.D0.A1_.D1.8F.D0.B4.D1.80.D0.B0_debugfs См.] || Неактивно
 +
|-
 +
| 4 || <code>fs.protected_symlinks=1</code> || <code>/etc/sysctl.conf</code> || 2.6.2 || -- || <code>1</code>
 +
|-
 +
| 5 || <code>fs.protected_hardlinks=1</code> || <code>/etc/sysctl.conf</code> || 2.6.3 || -- || <code>1</code>
 +
|-
 +
| 6 || <code>fs.protected_fifos=2</code> || <code>/etc/sysctl.conf</code> || 2.6.4 || -- || <code>1</code>
 +
|-
 +
| 7 || <code>fs.protected_regular=1</code> || <code>/etc/sysctl.conf</code> || 2.6.5 || -- || <code>1</code>
 +
|-
 +
| 8 || <code>fs.suid_dumpable=0</code> || <code>/etc/sysctl.conf</code> || 2.6.3 || -- || <code>0</code>
 +
|-
 +
| 9 || <code>kernel.yama.ptrace_scope=3</code> || <code>/etc/sysctl.conf</code> || 2.6.1 || [http://wiki.rosalab.ru/ru/index.php/%D0%97%D0%B0%D1%89%D0%B8%D1%82%D0%B0_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8_%D0%B8_%D1%8F%D0%B4%D1%80%D0%B0_%D0%B2_%D0%9E%D0%A1_ROSA#.D0.9E.D1.82.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D1.82.D1.80.D0.B0.D1.81.D1.81.D0.B8.D1.80.D0.BE.D0.B2.D0.BA.D0.B8_.D0.BF.D1.80.D0.BE.D1.86.D0.B5.D1.81.D1.81.D0.BE.D0.B2 См.] || <code>1</code>
 +
|}
  
 
== Ограничение отладки и снижение системной избыточности ==
 
== Ограничение отладки и снижение системной избыточности ==
 +
 +
'''В чем опасность?'''
  
 
Опасность заключается в возможности извлечения данных из отладочной информации, образующейся, например, при крахе приложений (core dumps). Или в возможности извлечения отладочной информации напрямую из ядра ОС.
 
Опасность заключается в возможности извлечения данных из отладочной информации, образующейся, например, при крахе приложений (core dumps). Или в возможности извлечения отладочной информации напрямую из ядра ОС.
Строка 9: Строка 42:
 
Операционная система в конфигурации по умолчанию поддерживает большое количество файловых систем, сетевых технологий и различных устройств. Не все они нужны при работе. Может быть опасно использовать файловые системы, в которых не поддерживаются атрибуты безопасности, а также файловые системы, предполагающие наличие избыточных прав доступа (возможность создания файлов устройств, исполнения файлов, установки бита смены идентификатора и т.п.). Кроме файловых систем опасность представляет поддержка любых устаревших или неиспользуемых технологий или устройств, которая может способствовать компрометации системы или упрощать проникновение в нее и манипуляции с данными.  
 
Операционная система в конфигурации по умолчанию поддерживает большое количество файловых систем, сетевых технологий и различных устройств. Не все они нужны при работе. Может быть опасно использовать файловые системы, в которых не поддерживаются атрибуты безопасности, а также файловые системы, предполагающие наличие избыточных прав доступа (возможность создания файлов устройств, исполнения файлов, установки бита смены идентификатора и т.п.). Кроме файловых систем опасность представляет поддержка любых устаревших или неиспользуемых технологий или устройств, которая может способствовать компрометации системы или упрощать проникновение в нее и манипуляции с данными.  
  
В данной статье даны рекомендации по ограничению отладки. А также приведена справочная информация о поддержке операционной системой различных файловых систем, сетевых протоколов, технологий и устройств и даны рекомендации по снижению избыточности. То есть рекомендуется проанализировать, а нужно ли вам использовать ту или иную ФС, технологию или устройство. Если поддержка чего-либо вам не требуется, то здесь описаны способы отключения избыточной функциональности. Следуя этим рекомендациям можно существенно снизить площадь атаки на ядро ОС и на систему в целом.
+
'''Что можно сделать для повышения безопасности?'''
 +
 
 +
Можно следовать рекомендациям, изложенным в этом руководстве и описывающим различные способы ограничений для получения отладочной информации. Здесь также приведена справочная информация о поддержке операционной системой различных файловых систем, сетевых протоколов, технологий и устройств и даны рекомендации по снижению избыточности. То есть рекомендуется проанализировать, а нужно ли вам использовать ту или иную ФС, технологию или устройство. Если поддержка чего-либо вам не требуется, то здесь описаны способы отключения избыточной функциональности.  
  
 
=== Отключение сброса страниц памяти с помощью <code>SysRq</code> ===
 
=== Отключение сброса страниц памяти с помощью <code>SysRq</code> ===
Строка 45: Строка 80:
 
* <code>Alt+SysRq+U</code> — Перемонтировать все файловые системы в режиме «только для чтения».
 
* <code>Alt+SysRq+U</code> — Перемонтировать все файловые системы в режиме «только для чтения».
  
 +
Для проверки текущей конфигурации <code>SysRq</code> выполнить:
 +
 +
<code># cat /proc/sys/kernel/sysrq</code>
 +
 +
<code>0</code>
 +
 +
Иначе, если значение вывода отлично от нуля, выполнить:
 +
 +
<code># echo "0" > /proc/sys/kernel/sysrq</code>
 +
 +
<code># echo "kernel.sysrq = 0" >> /etc/sysctl.conf</code>
 +
 +
Иногда разумно использовать значение <code>kernel.sysrq = 4</code> (вместо <code>kernel.sysrq = 0</code>). Это значение устанавливает возможность использования комбинации <code>Alt+SysRq+K</code>, которая сбросит все процессы на текущем терминале входа. Это может быть полезно, при совершении входа в систему. Если предположить, что нарушитель смог внедрить в систему программу, перехватывающую ввод с текущего терминала (кейлоггер), то при нажатии <code>Alt+SysRq+K</code> будут уничтожены все процессы (включая фоновые) и, таким образом, и любые несанкционированные процессы или программы, внедренные злоумышленником. Это увеличивает доверие к операции входа в ОС с данного терминала входа.
 +
 +
Администратору системы следует помнить об этом, и принимать решение, опираясь на знание специфики использования «магических клавиш», адекватно оценивая угрозу внедрения в ОС программ перехвата ввода.
 +
 +
=== Параметры системы, ограничивающие возможность получения отладочной информации ===
 +
 +
Файл <code>/etc/security/limits.conf</code> используется для указания общесистемных ограничений или лимитов. Здесь можно задавать много параметров. Но в данном случае важны параметры переменных
 +
<code>soft core</code> и <code>hard core</code>. Эти переменные призваны определять «мягкий» (soft) и «жесткий» (hard) лимит на размер отладочного дампа (core dump). Если указать значение <code>0</code>, то размер файлов core dump будет нулевой. 
 +
 +
Для этого в файле <code>/etc/security/limits.conf</code> нужно указать следующее:
 +
 +
<code>* hard core 0</code>
 +
 +
<code>* soft core 0</code>
 +
 +
Звездочка указывает, что данное ограничение будет применено для всех интерактивных пользователей системы, включая пользователя <code>root</code>. Для того, чтобы ограничения вступили в силу, необходимо выйти из текущего сеанса и зайти заново.
 +
 +
Поскольку файл <code>/etc/security/limits.conf</code> анализируется только для пользователей, получающих сеанс интерактивной работы, то для служб и системных пользователей, от имени которых выполняются службы и сервисы, значения, указываемые в этом файле  неприменимы. Для ограничений, накладываемых на фоновые процессы, службы и сервисы, необходимо использовать интерфейсы службы <code>systemd</code>, чему посвящена отдельная статья.
 +
 +
В файле <code>/etc/sysctl.conf</code> можно указать значение специальной переменной ядра, которая явно запрещает создание дампов памяти от имени процессов с установленным битом смены идентификатора пользователя (SUID bit):
 +
 +
<code># cat /etc/sysctl.conf | grep fs.suid
 +
 +
fs.suid_dumpable = 0</code>
 +
 +
Если её значение по каким то причинам не равно нулю (значение по умолчанию), то рекомендуется задать безопасное значение:
 +
 +
<code># echo 0 > /proc/sys/fs/suid_dumpable</code>
 +
 +
<code>echo "fs.suid_dumpable = 0" >> /etc/sysctl.conf</code>
 +
 +
Можно дополнительно установить ограничение (лимит) в файле <code>/etc/profile</code> для всех интерактивных пользователей системы (пример приведен только для оболочки <code>bourne shell</code> и совместимых с ней):
 +
 +
<code># echo "ulimit -S -c 0 > /dev/null 2>&1" >> /etc/profile</code>
 +
 +
Это значение принудительно ограничивает системное окружение пользователя, но не применяется к его текущему сеансу. Чтобы оно применялось, требуется получить новый сеанс (то есть выйти из системы и повторно зайти в неё).
 +
 +
Если сбросом дампов управляет служба <code>systemd</code>, т.е. служба <code>systemd-coredump</code> установлена и запущена, то в файле <code>/etc/systemd/coredump.conf</code> также можно установить безопасные значения:
 +
 +
<code>Storage=none
 +
 +
ProcessSizeMax=0</code>
  
  
 
[[Категория:Безопасность]]
 
[[Категория:Безопасность]]

Текущая версия на 01:48, 31 декабря 2023

Away.png
Это заготовка статьи!
Вы можете помочь проекту, дописав и дополнив данную статью.


Ограничение отладки и снижение системной избыточности. Свод требований.

Здесь приведены рекомендации по ограничению отладки и снижению системной избыточности. Настоятельно рекомендуется снижать системную избыточность, путем отключения или удаления не используемого ПО, технологий и(или) протоколов. Это снижает вероятную площадь поверхности атаки на систему.

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

Ограничения некоторых интерфейсов отладки уже описывалась в этой статье.

Сводная информация с рекомендуемыми настройками для ядра ОС и проекция к Методическому документу ФСТЭК «Рекомендации по обеспечению безопасной настройки операционных систем 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