Чем отличается generic и hardened
Перейти к содержимому

Чем отличается generic и hardened

  • автор:

Astra Linux: зачем и для кого?

Всем привет, это моя вторая статья в цикле материалов по Astra Linux. Прошлая статья вызвала немало разногласий и теперь я собираюсь пояснить, что все-таки есть в Астре, чего нет в других дистрибутивах.

Немного истории

Не секрет, что само по себе ядро Linux было написано в 1991 году Линусом Торвальдсом. И единственной отличительной особенностью Linux от других ОС семейства Unix была отсутствие каких-либо лицензий в отношении его кода. Это обстоятельство привело к тому, что в начале нулевых “критическая масса” приложений, написанных под Linux превысила порог и Linux начал становиться общепринятым стандартом. Так что мне кажется не стоит рассуждать, кто, что и на каком ядре делал, ибо все ныне существующие Linux дистрибутивы содержат код, написанный Торвальдсом.

Вполне естественно, что в России давно пытаются создать свою защищенную ОС. Пусть не очень удобно, пусть с багами, зато проверено, безопасно и своё. Так появились Мобильная система Вооружённых Сил (МСВС), ОС «РОСА», ОС Qubes и других полноценных и не очень проектов. И тут вступает в игру АО «НПО РусБИТех» со своей операционной системой специального назначения (ОССН) Astra Linux SE.

Что значит «защищенная» ОС?

Есть 2 подхода к ответу на этот вопрос. С одной стороны, это ОС, отвечающая минимальным требованиям руководящих документов, регламентирующих требования к ПО (например, ГОСТ Р ИСО/МЭК 15408-3-2013, Профиль защиты операционных систем типа «А» второго класса Защиты от ФСТЭК и др.). О соответствии ПО этим требованиям говорит сертификация в различных ведомствах (ФСТЭК, ФСБ или МинОбр.). О сертификации ПО я планирую рассказать в одной из следующих статей. С другой стороны, в документе невозможно учесть все современные угрозы и быстро меняющуюся обстановку в сфере ИБ и поэтому в ОС должен обеспечиваться комплекс средств защиты информации (СЗИ), адекватный угрозам безопасности для конкретной системы (зачастую критически важной). Казалось бы, оба подхода говорят об одном и том же: не будут же в критических системах применяться ОС, не отвечающая хотя бы минимальным требованиям по безопасности. Однако не стоит забывать, что даже при полном выполнений всех норм и правил, система может оказаться контролируемой извне (например недобросовестным разработчиком). Так что согласно второму подходу под защищенностью системы подразумевают, что она является еще и доверенной (trusted).

Так что же такого в этой Астре?

Лично я считаю эту систему защищенной, так как:

  • Она сертифицирована одновременно ФСТЭК, ФСБ и МинОбром. Насколько сложно получить хотя бы один из этих сертификатов даже при малом объеме кода я знаю не понаслышке)
  • В ней реализован ряд модулей (о которых я расскажу ниже), которые сильно усложняют неконтролируемый доступ к объектам системы.

Среди администраторов безопасности ОС семейства Linux распространено мнение, что для её превращения в высокозащищённую ОС достаточно установить пакет Security Enhanced Linux (SELinux) специально разработанный для этой цели в АНБ США. Данный пакет широко и успешно применяется для реализации замкнутой программной среды, однако попытки его применить для реализации более сложных моделей управления доступом, как правило, заканчиваются неудачей, так как требуют существенных усилий по разработке соответствующих политик.

Поэтому наши разработчики собрались и разработали свою мандатную сущностно-ролевую ДП-модель безопасности управления доступом и информационными потоками (МРОСЛ ДП-модель). Уже само название звучит устрашающе, и модель ему полностью соответствует. Существует полное математическое описание и доказательство безопасности такого подхода, однако оно займет целую книгу и уйму времени, чтобы в нем разобраться. Поэтому доверимся разработчикам и идём дальше (кому надо, тот посмотрит).

Начнем с 2-х типов ядер в данной системе (generic и hardened).
Kernel Generic – ядро общего назначения, обеспечивающее базовую функциональность ОС.
Kernel Hardened – это ядро “на стероидах”. Помимо базовых функций оно поддерживает:

  • ряд функций модуля PaX (например, UDEREF и kernexec), устанавливающие правила доступа прикладных программ к адресному пространству памяти.
  • функции, например, такие, как PIE (Position Independent Executables) и SSP (Stack Smashing Protector), предотвращающие переполнения стека.
  • функции, используемые ядром при копировании данных в/из пространства памяти прикладных программ (userspace).
  • функции, предотвращающие внедрение вредоносного кода в процессы, путём перехвата начального потока управления.

Про каждую из этих функций вы можете прочитать отдельно, все эти идеи не новы.

В целом ядро hardened ориентировано на создание «живучих» серверных платформ. Правда при этом могут возникнуть проблемы с функционированием некоторых приложений.

Таким образом, Hardened является дополнительным уровнем защиты, наряду с мандатными управлением доступом и контролем целостности , а также с подсистемой безопасности PARSEC на основе МРОСЛ ДП-модели.

Ну вот мы и подошли в PARSECу.

Схема PARSEC

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

Что же касаемо сетевой безопасности, она реализована с помощью службы Astra Linux Directory (ALD), являющаяся аналогом Active Directory от Microsoft. Конечно, реализованы не все возможности AD, однако проект активно развивается и совместим с другими доменными инфраструктурами.

Теперь перейдём к вопросу для кого эта система? Прежде всего знание астры будет полезно сетевым администраторам в различных гос. организациях (рано или поздно), а также всем, кто желает поближе познакомиться с творением РусБИТеха и защищенными ОС в целом. Не стоит забывать, что безопасность требует жертв в виде определенных трудностей в использовании и администрировании системы (в чем вы сможете в последующих статьях)

Заключение

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

На этом все, я постарался в общих чертах объяснить суть творения российских разработчиков. Если остались вопросы, пишите в комментариях, постараюсь на них ответить.

Установка ядер серии 5.*

Установка актуальных версий ядер серии 5.* (модификации 5.4, 5.10, 5.15) возможна с помощью метапакетов linux-5.x с номером, соответствующим номеру модификации ядра:

  • linux-5.4;
  • linux-5.10;
  • linux-5.15.

Метапакеты для каждой модификации ядра представлены в трех вариантах:

  • linux-5.* — установка ядра в вариантах generic и hardened;
  • linux-5.*-generic — установка ядра в варианте generic;
  • linux-5.*-hardened — установка ядра в варианте hardened;
  • linux-5.*-lowlatency — установка ядра в варианте lowlatency (для обновлений, в которых такой вариант присутствует).

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

  1. Для установки ядер не следует использовать пакеты linux-image-5.*, так как нужные зависимости автоматически устанавливаются только при установке пакетов linux-5.*;
  2. Для того, чтобы установленные пакеты с ядрами обновлялись автоматически при установке обновлений необходимо установить метапакет linux-5.*. При установке метапакетов linux-5.*-generic или linux-5.*-hardened автоматическое обновление выполняться не будет.

Метапакеты могут быть установлены с помощью Графический менеджер пакетов synaptic или из командной строки командой apt с указанием названия устанавливаемого метапакета, например, для ядра 5.10:

sudo apt install linux-5.10
sudo apt install linux-5.10-generic
sudo apt install linux-5.10-hardened

Получение списка установленных ядер

Получить список установленных ядер можно командой:

dpkg —list | grep «linux-image-»

Получение версии загруженного ядра

Получить версию и вариант ядра, загруженного в работающей ОС, можно командой:

На момент последнего обновления настоящей статьи:

  • В составе Astra Linux Special Edition РУСБ.10015-01:
    • В Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) без установленных оперативных обновлений доступно ядро модификации 5.4;
    • Ядро модификации 5.10 доступно после установки обновления БЮЛЛЕТЕНЬ № 2021-1126SE17 (оперативное обновление 1.7.1);
    • Ядро модификации 5.15 доступно после установки обновления БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2);
    • В Astra Linux Special Edition РУСБ.10152-01 (очередное обновление 4.7) без установленных оперативных обновлений доступно ядро модификации 5.4;
    • Ядро модификации 5.10 доступно после установки обновления БЮЛЛЕТЕНЬ № 2021-0915SE47MD (оперативное обновление 4.7.1);
    • Ядро модификации 5.15 доступно после установки обновления БЮЛЛЕТЕНЬ № 2022-0926SE47 (оперативное обновление 4.7.2);
    • Ядро модификации 5.4 доступно начиная с обновления 2.12.40;
    • Ядро модификации 5.10 доступно начиная с обновления 2.12.43;
    • Ядро модификации 5.15 доступно начиная с обновления 2.12.45;

    Обновление ядер и удаление неиспользуемых ядер

    При установке обновлений автоматическое обновление установленных ядер выполняется в пределах одной модификации. То есть, например, установленное ядро модификации 5.4 и версии 54 (linux-image-5.4.0-54-hardened) будет обновлено до версии 110 (linux-image-5.4.0-110-hardened), но не до ядра 5.10 или 5.15.

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

    После загрузки с использованием нового ядра для удаления неиспользуемых ядер серий 4.* и 5.* можно использовать следующий сценарий:

    pkgs=`dpkg -l 2> /dev/null | egrep «^ii\s*linux-image-[45]\.[[:digit:]]+\.[[:digit:]]+-[[:digit:]]+-» | cut -d » » -f3 | grep -v ^linux-image-$(uname -r | cut -d ‘-‘ -f1-2)`

    [ -n «$pkgs» ] && apt remove $pkgs
    rm -f /boot/old-*

    Введение

    В состав дистрибутива Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) начиная с обновления БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3) в дополнение к вариантам сборки ядра generic (сборка общего назначения) и hardened (сборка с усиленными внутренними проверками) включен вариант сборки ядра lowlatency.

    Современные компьютеры являются многозадачными, т. е. , с точки зрения пользователя компьютер одновременно выполняет несколько задач. В самом деле задачи выполняются не одновременно, а по очереди некоторыми » квантами «, но переключения между задачами происходят с человеческой точки зрения «очень быстро» и «незаметно». Операция переключения задач сама является квантом задачи и, как любой квант, требует некоторого времени и энергозатрат. В какой момент происходит переключение задач решает ядро операционной системы (планировщик ядра), и, если выполняемая задача не совпадает с ожидаемой пользователем, то пользователь замечает «задержку» (была нажата клавиша, но символ на экране появился не сразу ). Ядро lowlatency предназначено для снижения подобных задержек (снижения «латентности»).

    Латентность (latency) в широком смысле представляет собой временную задержку между причиной и следствием. Применительно к теме данной статье, например, временной интервал между действием пользователя и реакцией компьютера на него. Синонимом термина » латентность» можно считать термин «время реакции». Понятие латентности применяется к операциям, которые оцениваются субъективно, т.е. пользователями, и неприменимо к оценке производительности информационных систем. Например, объективной оценкой производительности сервера СУБД могут быть различные варианты показателя TPC (количество транзакций в секунду) , а объективной оценкой мультимедийного компьютера — FPS (кадровая частота, количество кадров в секунду) .

    С субъективным восприятием качества работы компьютера также связано понятие » джиттер» (jitter) — разброс значений задержек для одного и того же события. Например, с точки зрения пользователя, некоторые нажатия клавиш отображаются на экране мгновенно, а некоторые — с видимой задержкой, или в воспроизведении мультимедиа появляются заметные сбои. Снижение латентности ведет к снижению значений джиттера. Важность значений джиттера зависит от применения компьютера: для сервера СУБД джиттер неважен, для мультимедийного компьютера — критичен.

    Латентность и джиттер зависят от частоты переключения задач в системе. Частота измеряется в Герцах (Гц) — количество переключений в секунду. В ядрах общего назначения частота переключения задач 250 Гц, в ядре lowlatency — 1000 Гц.

    Основной технической особенностью ядра lowlatency является увеличенная до 1000 Гц частота переключения задач. Эта особенность обеспечивает субъективно более комфортную реакцию системы, однако вызывает увеличение накладных расходов на переключение задач. Субъективное улучшение работы компьютера происходит за счет снижения полезной производительности и повышения энергопотребления.

    Пояснительные примеры

    Пользовательские компьютеры

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

    При использовании сборки generic вследствие высоких значений латентности и джиттера выполнение операций редактирования происходит с некоторой неприятной для пользователя переменной задержкой или сопровождается сбоями воспроизведения мультимедиа. Сохранение файла выполняется, условно, за одну секунд у, при этом нарушается воспроизведение музыки и компьютер не реагирует на нажатия клавиш . Субъективно, с точки зрения пользователя, «компьютер работает плохо».

    При использовании сборки lowlatency выполнение каждой отдельной операции редактирования происходит субъективно быстрее, а музыка воспроизводится без помех как при редактировании, так и при сохранении. Однако, сохранение файла при этом выполняется не за одну, а за две секунды, что на фоне музыки не заметно пользователю, т. е. субъективно «компьютер работает хорошо».

    Вне субъективного восприятия пользователя остается повышенное энергопотребление: при низкой нагрузке (условное редактирование файла) компьютер, работая в режиме lowlatency, выполняет больше операций переключения, что повышает расход энергии.

    Серверы

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

    Трактовка результата применения тех или иных настроек зависит от используемых метрик производительности. Например:

    • для серверов СУБД, производительность которых оценивается в метриках TPC, эффект от применения ядра lowlatency будет ограниченным;
    • для серверов обработки сообщений , работа которых требует обработки большого количества мелких сообщений, и приближается к работе в режиме реального времени, может применяться метрика производительности вида «количество сообщений в секунду, при котором 95-ый процентиль задержки обработки стремится к превышению 500 миллисекунд». Такая метрика с высокой вероятностью может быть улучшена за счет снижения значения джиттера при использовании ядра lowlatency;
    • для игровых и мультимедийных серверов, оценка качества работы которых определяется субъективным восприятием пользователей (полнота отрисовки игровых сцен, качество воспроизведения мультимедиа) , стабильность воспроизведения мультимедийного контента (низкое значение джиттера) становится важным требованием, и применение ядра lowlatency может улучшить субъективные показатели работы.

    Рекомендации по применению ядра lowlatency

    1. Предпочтительными всегда являются стандартные решения. Поэтому, если нет веских причин, то не следует заменять стандартное ядро (generic) на lowlatency.
    2. Производительность современных пользовательских (персональных) компьютеров более чем достаточна для качественного решения задачи из приведенного выше примера «пользователь редактирует файл и слушает музыку» или даже «пользователь редактирует файл и смотрит кино в FullHD » , и замена стандартного ядра generic на ядро lowlatency субъективных улучшений не принесет.
    3. На высокозагруженных пользовательских компьютерах (игровых, маломощных, планшетах, мобильных устройствах) применение ядра lowlatency вероятно улучшит субъективное впечатление пользователей от работы с устройством. Однако, следует помнить, что снижение латентности происходит за счет повышения вычислительной нагрузки, что, в итоге, может привести к заметному ухудшению работы (например, критическому снижению показателя FPS в мультимедийных приложениях) . В случае применения ядра lowlatency для портативных устройств следует также помнить про повышенное энергопотребление.
    4. Для серверов применение ядра lowlatency может иметь разные эффекты в зависимости сбалансированности аппаратной платформы и сочетания различных настроек;
    5. Ядро lowlatency не является ядром реального времени, однако низкая латентность и низкий джиттер могут быть полезны для применений в системах автоматизации и управления оборудованием. В этом случае применимость определяется характеристиками аппаратной платформы и требованиями к параметрам управления и энергопотребления.

    Проверка текущих параметров установленных ядер

    Параметры, с которыми собрано ядро, установленное в системе, доступны в каталоге /boot/ в фалах /boot/config-* . Проверить, с какими параметрами задержек (точнее, с какой частотой переключения задач) собраны установленные в системе ядра можно командой:

    grep CONFIG_HZ= /boot/config-*
    Пример вывода команды:

    /boot/config-5.15.0-33-lowlatency:CONFIG_HZ=1000 /boot/config-5.4.0-110-generic:CONFIG_HZ=250 /boot/config-5.4.0-54-generic:CONFIG_HZ=250

    Пояснение: в системе установлено 3 ядра (5.15.0-33-lowlatency, 5.4.0-110-generic, 5.4.0-54-generic), первое ядро lowlatency с частотой переключения задач 1000 Гц, второе и третье — ядра общего назначения (generic) с частотой переключения 250 Гц.

    Проверить, какое ядро загружено в системе, можно командой:

    Установка ядра lowlatency

    Ядро lowlatency может быть установлено из основного репозитория Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) начиная с обновления БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3). Рекомендованная команда для установки:

    linux и linux с приставкой generic: в чём разница?

    Подскажите, пожалуйста: в чём разница между ядром и его компонентами в репозитории Ubuntu и такими же точно, но с приставкой generic?

    То есть: image, headers и так далее — всё тоже, версия таже, только прибавлено generic.

    Jeffrey
    05.01.13 19:40:58 MSK

    generic это ядро без наложения убунтовских patch'(ев).

    hope13 ★★★
    ( 05.01.13 19:46:52 MSK )
    Ответ на: комментарий от hope13 05.01.13 19:46:52 MSK

    linux-image — еще один метапакет, который в свою очередь зависит от linux-image-generic (так же и с headers). Разницы практически нет.

    Скорее всего пакеты без приставки *generic оставили для выбора дефолтного ядра убунты (для неких будущих целей). Сейчас ядро по-умолчанию — это linux-image-generic (и там дальше по зависимостям).

    KennyMinigun ★★★★★
    ( 05.01.13 19:51:15 MSK )
    Последнее исправление: KennyMinigun 05.01.13 19:53:17 MSK (всего исправлений: 2)

    Ответ на: комментарий от hope13 05.01.13 19:46:52 MSK

    Простите, не могли бы вы помочь разобраться?

    Я установил систему Ubuntu 12.10, ничего не ставил и не обновлял. И что я вижу?

    uname -r 3.5.0-17-generic

    Почему грузится ядро без патчей? И как грузить с патчами?

    Jeffrey
    ( 05.01.13 19:56:20 MSK ) автор топика
    Ответ на: комментарий от KennyMinigun 05.01.13 19:51:15 MSK

    Скорее всего пакеты без приставки *generic оставили для выбора дефолтного ядра убунты (для неких будущих целей)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *