Обеспечение безопасности загрузчика GRUB в Linux

f8a76ebad777b86cc9b4614aa567647f.jpgАвтор статьи: Рустем Галиев

IBM Senior DevOps Engineer & Integration Architect. Официальный DevOps ментор и коуч в IBM

Привет, Хабр! Сегодня я покажу вам, как защитить загрузчик.

Безопасность компьютерных систем является одним из ключевых аспектов в современном мире цифровых технологий. С каждым днем возрастает число кибератак, направленных на нарушение конфиденциальности данных, а также вторжение в личную жизнь и нанесение ущерба бизнесу. В этом контексте обеспечение безопасности загрузчика GRUB, используемого в операционных системах Linux, становится неотъемлемой составляющей защиты системы. В данной статье мы рассмотрим шаги по обеспечению безопасности загрузчика GRUB, начиная с генерации зашифрованного пароля и заканчивая его внедрением в систему.

Значение безопасности загрузчика GRUB:

GRUB (Grand Unified Bootloader) является ключевым элементом при загрузке операционной системы Linux. Этот процесс начинается с выполнения кода BIOS, который затем передает управление загрузчику GRUB. В случае нарушения безопасности загрузчика, злоумышленники могут получить доступ к системе исключительно путем обхода авторизации, изменения конфигурации или запуска специальных режимов, что может привести к серьезным последствиям, вплоть до полного контроля над системой.

Обеспечение безопасности загрузчика GRUB позволяет предотвратить подобные атаки, обеспечивая аутентификацию пользователей и защиту от несанкционированного доступа к системе уже на этапе ее загрузки. Такой подход обеспечивает надежную защиту операционной системы Linux и способствует сохранению целостности и конфиденциальности данных.

Когда компьютер запускается, первый выполняемый код — это BIOS.

Это происходит очень быстро, и выполняется тест самопроверки.

Затем он выполняет код в секторе Master Boot Record диска, где находится загрузчик.

Загрузчик затем загружает ядро, которое инициализирует всю систему.

Сегодня все основные дистрибутивы Linux используют GRUB 2 в качестве загрузчика. Хакер может изменить GRUB и загрузить систему в специальный режим работы (называемый режимом одиночного пользователя), где root входит автоматически без пароля. Атакующий также может использовать интерфейс редактора GRUB для изменения его конфигурации или сбора информации о системе; или если это двойная загрузка, атакующий может выбрать во время загрузки другую операционную систему, которая игнорирует контроль доступа и права доступа к файлам.

Для решения этих проблем безопасности мы защитим загрузчик GRUB с помощью пароля. Обратите внимание, что люди с физическим доступом к компьютеру могут получить доступ к файлам через другие методы, которые не могут предотвратить GRUB.

Один из таких методов — это загрузка системы с другого носителя, такого как USB-накопитель.

Также стоит установить пароль BIOS и настроить систему на автоматическую загрузку с раздела, на котором установлен Linux.

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

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

Я выполняю:

grub-mkpasswd-pbkdf2

PBKDF2 — это функция вывода ключа, основанная на пароле.

И я ввожу пароль.

И она сгенерировала хешированную форму пароля.

2465a01c3eef10ac70f117ec0ef86b3b.png

Следующим шагом после генерации хешированного пароля является редактирование основного файла конфигурации GRUB и добавление хеша пароля.

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

Основной файл конфигурации GRUB2 находится в /boot/grub/grub.cfg

edb5dc5459b5dce046fc126f0c70fdcb.png

Однако этот файл не изменяется напрямую пользователем. Он перезаписывается определенными обновлениями GRUB при добавлении или удалении ядра или когда пользователь выполняет команду обновления GRUB 2.

Так что, фактически, GRUB использует серию скриптов для построения этого файла конфигурации, они находятся в /etc/grub.d

5722a0848369dd24286576312541c611.png

Поэтому мы изменяем файлы в этом каталоге, а затем выполняем update-grub2.

fa2cc0836fb4cd874897dd19aec57313.png

Эта команда, основанная на содержимом этих файлов в /etc/grub.d, сгенерирует grub.cfg, основной файл конфигурации.

Я предпочитаю изменить настраиваемый файл, такой как 40_custom, потому что он не будет перезаписан, даже когда пакет GRUB будет обновлен.

Давайте посмотрим на хешированный пароль, который мы только что сгенерировали.

b68bc151c4ec2606450a9b38ad985844.png

И я копирую эту строку в буфер обмена, начиная с grub.pbkdf2.

И как root, я открываю 40_custom, так что sudo vim /etc/grub.d/40_custom и в конце файла добавляю

7cc8277f7a8f12089e8c536a54b17257.png

set superusers="root"
password_pbkdf2 root

и вставляю хешированный пароль.

166eb513bca903e5d431f4f9022c7659.png

Я сохраняю файл и выхожу.

Следующим шагом я обновляю файл конфигурации GRUB.

Я выполняю команду update-grub2 от имени root. Эта команда сгенерирует новый файл grub.cfg.

e6b65cbd3e5fb43e8db834969e95e76d.png

И вот он.

Вот и все! Теперь GRUB запрашивает пароль при загрузке; он больше не загружает систему напрямую в первую ОС. Так что я ввожу имя пользователя, которое является root, и пароль, который я установил.

И он загружает ОС.

Материал подготовлен в преддверии старта специализации «Administrator Linux».

© Habrahabr.ru