[Перевод] Известные баги ядра Linux и борьба с ними
Поскольку с каждым днём в современном цифровом пространстве появляются все новые кибер-угрозы, важность безопасности IT-систем переоценить сложно. При этом уязвимыми являются не только онлайн-сети, но и операционные системы. И хотя Linux отличается более высоким уровнем безопасности в сравнении с другими ОС, на 100% от угроз не защищена и она.
В действительности наблюдается повышение количества атак на операционные системы Linux. Наиболее ценные мишени зачастую работают именно на этой ОС, что ставит её безопасность во главу угла. Например, организации, которые стремятся сохранять свои коммуникации совместимыми с HIPAA, должны убедиться, что каждый элемент используемого ими ПО, включая операционные системы (англ.) и даже программы для цифрового рабочего пространства (англ.), максимально защищён.
Безопасность ядра Linux — основного интерфейса ОС, который управляет всеми остальными процессами — очень важна для безопасности всей системы. Наиболее успешные атаки на ядро Linux (англ.) обычно связаны с неудачной конфигурацией, кривым администрированием и типичными багами в самой системе.
К счастью, существует немало полезных рекомендаций по безопасности, которые можно найти на разных сайтах и информационных ресурсах. В этой статье мы познакомимся с наиболее распространёнными багами ядра Linux и узнаем, как можно закрыть его уязвимости и защититься от потенциальных атак.
▍ Известные дыры в безопасности ядра
В то время как протоколы вроде блокчейна защищены шифрованием, у Linux есть собственное открытое сообщество, в котором множество «глаз» тщательно высматривают программу на предмет возможных недочётов безопасности. Тем не менее уязвимости ядра всё равно остаются серьёзной угрозой для всех основанных на нём систем.
Проблемы с безопасностью возникают на почве многих багов ядра. Их могут легко эксплуатировать хакеры, зачастую даже при отсутствии человеческих ошибок со стороны жертвы — даже когда все технологии и меры безопасности реализованы надёжно, баг ядра может сделать вашу систему уязвимой к DoS-атакам (отказ в обслуживании), повышению привилегий и прочим киберугрозам.
Вот несколько наиболее известных слабых мест ядра Linux из последних:
- CVE-2017–18017: подвержены версии ядра до 4.11. Найти эту ошибку можно в функции Netfilter
tcpmss_mangle_packet
, которая помогает фильтровать сетевые коммуникации. Она делает систему уязвимой к DoS-атакам и переполнению буфера. - CVE-2016–10229: подвержены версии ядра до 4.5. Ошибка кроется в udp.c и позволяет атакующему использовать UDP-трафик для выполнения вредоносного кода.
- CVE-2016–10150: подвержены версии ядра до 4.8.13. Эта ошибка позволяет хакерам выполнять DoS-атаки и получать привилегии администратора.
- CVE-2015–8812: подвержены версии ядра до 4.5. Позволяет удалённо выполнять DoS-атаки с помощью создания пакетов.
- CVE-2014–2523: подвержены версии ядра до 3.13.6. Ошибка кроется в неверном использовании указателей заголовков DCCP и позволяет удалённо выполнять код через пакеты DCCP или проводить DoS-атаку, выводящую систему из строя.
К счастью, существует несколько способов, которые позволят защитить ядро от подобных уязвимостей.
Лучшие советы для защиты ядра от уязвимостей и атак
Упрощённая схема ядра Linux
▍ Регулярное обновление версии ядра и установка патчей безопасности
Поскольку большинство уязвимостей исправляются патчами, самое важное — это стараться регулярно обновлять ядро при выходе новых версий. Незамедлительно применяйте выпускаемые патчи безопасности. Не пропустить их поможет мониторинг рекомендаций по безопасности интересующих вас дистрибутивов.
Применять патчи можно следующим образом:
- Обновлять ядро из командной строки. Несмотря на то что этот метод требует перезагрузки системы, он может оказаться самым доступным, так как в документации дистрибутива наверняка эта процедура описана.
- Использовать системный вызов
kexec
для ускоренной перезагрузки. С помощьюkexec
администратор может ускорить процесс перезапуска. Однако, хоть этот способ и быстрее, он может привести к утрате или повреждению данных. - Обновлять ядро без перезагрузки системы. Для избежания полной перезагрузки можно использовать инструмент обновления ядра в реальном времени, например, Ksplice, Kgraft, Kpatch, KernelCare или Livepatch. Тем не менее этим способом можно применить только критические патчи и исправления, он не является столь же исчерпывающим, как полноценное обновление.
▍ Использование подписей модулей ядра и правил их загрузки
Активация цифровой подписи загружаемых модулей защитит от получения в их числе вредоносных, сократив тем самым поверхность атаки системы. Естественно, отключение модулей сократит её ещё больше, но также наверняка лишит вашу систему важных процессов.
CONFIG_MODULE_SIG
позволяет администраторам активировать подписи модулей ядра. Также можно изменить алгоритм хэширования и включить автоматическое подписывание модулей на этапе сборки. Полностью же отключить загрузку модулей можно командой sysctl kernel.modules_disabled=1
.
▍ Использование Kernel Lockdown
Опция Kernel Lockdown предназначена для лучшего отделения кода ядра от пользовательских процессов. Она лишает рут-пользователя права изменять код ядра. Если этот пользователь будет взломан или иным образом скомпрометирован, активация данного режима существенно затруднит для злоумышленника вмешательство в другие части системы.
У Kernel Lockdown есть два режима:
integrity
: считается наиболее подходящим для большинства случаев.confidentiality
: лучше всего подходит для систем, хранящих чувствительные данные (например, ключ подписи EVM), защищённые даже от рут-пользователя. Режим конфиденциальности полностью запрещает администраторам доступ к памяти ядра.
Но при этом стоит учитывать, что использование любого из перечисленных режимов ограничивает некоторые возможности администрирования.
▍ Активация UEFI Secure Boot в режиме Full или Thorough
Протокол безопасной загрузки UEFI Secure Boot был придуман для защиты от выполнения вредоносного кода во время загрузки. Он позволяет выполнять при запуске код только прошивке UEFI.
Активация UEFI Secure Boot в режиме full
или thorough
может сократить поверхность атаки вашей системы. Таким образом, вы гарантируете, что только криптографически-подписанная прошивка сможет загружать ОС, что существенно усложнит доступ к системе вредоносным модулям или неподписанным руткитам.
Стоит добавить, что в случае активации UEFI Secure Boot при обновлении любых модулей или ядра потребуется ручное администрирование. При этом также по умолчанию активируется опция Kernel Lockdown.
▍ Активация мандатного управления доступом (MAC) с помощью SELinux или AppArmor
SELinux и AppArmor — это две системы безопасности, предназначенные для защиты от уязвимостей, ошибок в настройках сервера и атак нулевого дня. Они обеспечивают дополнительный уровень защиты и дают возможность использовать в политиках безопасности детальный контроль доступа.
В зависимости от используемого дистрибутива Linux одна из этих систем наверняка установлена и включена по умолчанию. Однако некоторые пользователи отключают их для решения различных проблем. Делать так не рекомендуется, поскольку это может повысить уязвимость ОС.
Если вы обнаружите, что у вас эта система отключена, желательно её незамедлительно включить. При использовании SELinux рекомендуется устанавливать для неё разрешающий (permissive) режим.
▍ Реализация строгих разрешений
Разрешения являются краеугольным камнем безопасности, и администраторы должны делать их очень строгими, не нарушая при этом функциональность системы. Эта рекомендация актуальна, независимо от того, используете вы обобщённое представление информации в едином окне (SPOG) или же более сложную структуру.
Вот базовые установки, которые должны быть задействованы:
- Исполняемый код и данные только для чтения не должны поддерживать запись. Когда память ядра и данные только для чтения поддерживают запись, поток выполнения может быть изменён, что приведёт к ослаблению безопасности. И хотя в большинстве архитектур эти компоненты по умолчанию запись не поддерживают, желательно дополнительно это проверить.
- Указатели функций и чувствительные переменные не должны поддерживать запись. Их можно сделать read-only, изменив соответствующую установку на
const
. - Память ядра должна быть отделена от памяти пользовательского пространства. В случае их совместного использования атакующий при взломе системы получит доступ к обоим участкам. Если же их разделить, это сократит потенциальный вред, который взломщик может нанести системе. Делается это с помощью эмуляции или установки аппаратных правил.
▍ Настройка файла sysctl.conf
Файл sysctl.conf жизненно важен для безопасности системы. Он является центральной точкой конфигурации параметров ядра. Здесь рекомендуется использовать безопасные предустановки.
С помощью настроек этого файла также можно повысить общую защиту системы. Для этого можно ограничить передаваемую по сети конфигурацию для IPv4 и IPv6, активировать Exec Shield и верификацию исходного IP-адреса, а также начать логировать подозрительные пакеты.
▍ Непрерывный мониторинг системных событий с помощью аудита
Независимо от того, является ли ваша организация онлайн-магазином или же занимается разработкой ПО, используя модернизацию IBM Cloud для оптимизации процесса аудита, если вы хотите быть в курсе любых возникающих проблем, желательно отслеживая активность всех жизненно важных систем.
Когда дело касается безопасности, регулярный аудит становится необходим. Администраторы должны периодически проверять системный журнал на предмет любой подозрительной или неожиданной активности.
Несмотря на рекомендацию, периодически выполнять аудит вручную, удобный инструмент ядра, AuditD
, автоматически собирает информацию об активности системы. AuditD
, который в большинстве дистрибутивов присутствует по умолчанию, логирует информацию, которую можно использовать для обнаружения потенциальных проблем безопасности.
И хотя этот демон имеет собственные правила аудита, его всё же рекомендуется настроить (например, проверить, чтобы логи сохранялись в безопасном централизованном месте, например, на заказном сервере, и интегрировались с помощью соответствующего инструмента), а также установить необходимые дополнительные правила.
Сочетание регулярного ручного аудита с автоматическим обычно оказывается наиболее эффективным.
▍ Ключевые выводы
Начиная с рабочих коммуникаций посредством VoIP (англ.) и заканчивая репозиториями чувствительных данных, организации имеют кучу информации, которую нужно защитить от киберпреступников. А поскольку дистрибутивы Linux становятся все более популярными и привлекательными мишенями, стало очень важно добиваться от них максимальной защищённости.
Баги ядра Linux являются одной из величайших угроз для общей безопасности системы, так что рекомендую следовать описанным в статье рекомендациям, чтобы исключить или минимизировать возможные последствия деструктивных ошибок и повысить безопасность системы.