Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с ядром версии 5.4 и выше
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с ядром версии 5.4 и выше
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1

Ядро версии 5.4 не рекомендуется к использованию, не является безопасным и предоставлятся только для обеспечения обратной совместимости.

Общая информация

Замкнутая программная среда (ЗПС) является средством повышения защищенности операционной системы путем контроля целостности (неизменности) файлов. Механизм контроля реализован в виде невыгружаемого модуля ядра Astra Linux (модуль digsig_verif), выполняющего проверку электронной цифровой подписи файлов (ЭЦП). Проверка применяется:

  • к файлам формата ELF (исполняемым файлам и разделяемым библиотекам) - проверка ЭЦП, записанной в специальное поле файла (далее - встроенная ЭЦП);
  • к любым файлам - проверка ЭЦП, размещаемой в расширенных атрибутах файла (далее - присоединенная ЭЦП);

Режимы выполнения проверки описаны далее.

Средства создания ЗПС предоставляют возможности внедрения встроенной ЭЦП в исполняемые файлы формата ELF, входящие в состав устанавливаемого СПО, и возможность создания присоединенных ЭЦП. Поддерживается использование при подписывании нескольких ключей.

Рекомендации по повышению защищенности информационных систем

Для повышения защищенности информационных систем (ИС) помимо включения ЗПС рекомендуется применять следующие меры по ограничению запуска программного обеспечения и получения доступа к объектам файловой системы для предотвращения несанкционированного исполнения произвольного кода и доступа к системным компонентам операционной системы (ОС):

  1. Активировать блокировку интерпретаторов (кроме интерпретатора bash). Полный список блокируемых интерпретаторов см. в разделе astra-interpreters-lock статьи Инструменты командной строки astra-safepolicy. При этом в ИС не должно остаться программ, которым разрешено запускать другие программы, включая запуск в режиме эмуляции.
  2. Активировать блокировку интерпретатора bash.
  3. Активировать запрет установки бита исполнения.
  4. Настроить системные и пользовательские профили подсистемы Киоск-2 и включить подсистему Киоск-2 (подробнее см. статью Системный Киоск-2: пакет parsec-kiosk2 (ограничения пользователя).

Для выполнения указанных мер выполнить следующие действия:

При работе в терминале и в сценариях удаленной настройки:

  1. Активировать блокировку интерпретаторов (кроме интерпретатора bash). Команда:

    sudo astra-interpreters-lock enable

  2. Активировать блокировку интерпретатора bash. Команда:

    sudo astra-bash-lock enable

  3. Активировать запрет установки бита исполнения. Команда:

    sudo astra-nochmodx-lock enable

  4. Проверить корректность выполнения действий:
    1. Проверка активации интерпретаторов (кроме интерпретатора bash):

      sudo astra-interpreters-lock status
      результатом команды должно быть "АКТИВНО" и нулевой код завершения;
      sudo astra-interpreters-lock is-enabled
       результатом команды должно быть "ВКЛЮЧЕНО" и нулевой код завершения.

    2. Проверка активации интерпретатора bash:

      sudo astra-bash-lock status
      результатом команды должно быть "АКТИВНО" и нулевой код завершения;
      sudo astra-bash-lock is-enabled
      результатом команды должно быть "ВКЛЮЧЕНО" и нулевой код завершения.

    3. Проверка активации запрета установки бита исполнения:

      sudo astra-nochmodx-lock status
      результатом команды должно быть "АКТИВНО" и нулевой код завершения;
      sudo astra-nochmodx-lock is-enabled
      результатом команды должно быть "ВКЛЮЧЕНО" и нулевой код завершения.

  5. После настройки профилей пользователей и системных профилей активировать режим Киоск-2 и связанные с ним режимы работы
    1. Активировать режим Киоск-2. Команда:

      echo 1 | sudo tee /sys/module/parsec/parameters/uc_enforce

    2. Включить протоколирование попыток нарушений установленных фильтров доступа. Команда:

      echo 1 | sudo tee /sys/module/parsec/parameters/uc_complain;

    3. Включить режим контроля доступа Киоск-2 и протоколирования с сохранением данного состояния после перезагрузки. Команда:

      echo 1 | sudo tee /etc/parsec/kiosk2_enforce; echo 1 | sudo tee /etc/parsec/kiosk2_complain;

При работе в графической сессии:

  1. Открыть инструмент управления политиками безопасности с помощью меню: Пуск — Панель управления — Безопасность — Политика безопасности или выполнив в графическом терминале команду:

    sudo fly-admin-smc

  2. Войти в раздел политики консоли и интерпретаторов:
    Настройки безопасности — Политика консоли и интерпретаторов.
  3. Активировать пункты:
    1. "Включить блокировку интерпретаторов кроме Bash для пользователей".
    2. "Включить блокировку интерпретатора Bash для пользователей".
  4. Подтвердить изменения путем нажатия на зеленую галочку.
  5. Убедиться, что механизм "Запрет установки бита исполнения для всех пользователей, включая администраторов" активирован:
    Настройки безопасности - Системные параметры.

После выполнения указанных действий перезагрузить ОС:

  • выполнив в терминале команду:

    sudo reboot

  • или используя графическое меню Пуск — Завершение работы — Перезагрузка.

Настройка режима работы модуля digsig_verif

Графический инструмент fly-admin-smc

Графический инструмент fly-admin-smc может применяться для настройки всех параметров ЗПС. Инструмент входит в состав пакета fly-admin-local, устанавливается по умолчанию при установке ОС и доступен в графическом меню: <<Панель управления — Безопасность — Политика безопасности — Замкнутая программная среда>>. Описание графического инструмента приведено в его электронной справке. Модуль fly-admin-smc для работы с ЗПС входит в пакет fly-admin-digsig и также устанавливается по умолчанию.

Инструмент командной строки astra-digsig-control

Инструмент командной строки astra-digsig-control входит в состав пакета astra-safepolicy. Применяется только для настройки режима проверки подписи в исполняемых файлах.

Параметры работы ЗПС в каталоге /etc/digsig/

Параметры работы ЗПС в файле /etc/digsig/digsig_initramfs.conf

Настройка режима работы ЗПС может осуществляться путем прямого редактирования конфигурационного файла /etc/digsig/digsig_initramfs.conf.

Для того, чтобы изменения, сделанные в каталоге /etc/digsig (в том числе — изменения, сделанные в конфигурационном файле /etc/digsig/digsig_initramfs.conf) активировались:

  1. Выполнить команду:

    sudo update-initramfs -u -k all

  2. Перезагрузить компьютер.

Изменения, сделанные в  каталоге /etc/digsig без выполнения указанной процедуры, никогда не применяются.

Параметры задаются в виде:

<имя_параметра>=<значение_параметра>

Используются следующие параметры:

  • DIGSIG_ELF_MODE — режим проверки встроенной ЭЦП в файлах формата ELF. Возможные значения:
    • 0 — значение по умолчанию. Проверка встроенной ЭЦП отключена. Может применяться как отладочный режим для разработки и отладки СПО;
    • 1 — штатный режим проверки встроенной ЭЦП. Проверка встроенной ЭЦП включена. Выполнение файлов, имеющих неверную встроенную ЭЦП или не имеющих встроенную ЭЦП, запрещается;

    • 2 — режим проверки работы СПО в ЗПС. Проверка встроенной ЭЦП включена. Выполнение файлов, имеющих неверную встроенную ЭЦП или не имеющих встроенную ЭЦП, разрешается, но при этом выдается сообщение об ошибке проверки ЭЦП;
  • DIGSIG_XATTR_MODE — режим проверки прикрепленной ЭЦП в расширенных атрибутах. Возможные значения:
    • 0 — значение по умолчанию. Проверка прикрепленной ЭЦП отключена. Может применяться как отладочный режим для разработки и отладки СПО;
    • 1 — штатный режим проверки прикрепленной ЭЦП. Проверка прикрепленной ЭЦП включена. Выполнение файлов, имеющих неверную прикрепленную ЭЦП или не имеющих прикрепленную ЭЦП, запрещается;
    • 2 — режим проверки работы СПО в ЗПС. Проверка прикрепленной ЭЦП включена. Выполнение файлов, имеющих неверную прикрепленную ЭЦП или не имеющих прикрепленную ЭЦП, разрешается, но при этом выдается сообщение об ошибке проверки ЭЦП;
  • DIGSIG_IGNORE_XATTR_KEYS – режим применения при проверке встроенной ЭЦП ключей для проверки присоединенной ЭЦП:

    • 0 — значение по умолчанию. При проверке встроенной ЭЦП ключи для проверки присоединенной ЭЦП используются;
    • 1 – при проверке встроенной ЭЦП ключи для проверки присоединенной ЭЦП игнорируются;
  • DIGSIG_IGNORE_GOST2001 – режим использования при проверке ЭЦП по ГОСТ~Р~34.10-2001:
    • 0 — значение по умолчанию. При проверке ЭЦП по ГОСТ~Р~34.10-2001 используется;
    • 1 – при проверке ЭЦП по ГОСТ~Р~34.10-2001 не используется;

Данные для работы ЗПС

Помимо конфигурационного файла /etc/digsig/digsig_initramfs.conf в каталоге /etc/digsig/ представлены:

  • каталог /etc/digsig/keys — каталог дополнительных ключей для проверки встроенной и присоединенной ЭЦП;
  • файл /etc/digsig/xattr_control — список шаблонов шаблонов имен, определяющих файлы, в которых проверяется присоединенная ЭЦП;
  • каталог /etc/digsig/xattr_keys — каталог дополнительных ключей, используемых только при проверке присоединенной ЭЦП;

Шаблоны для проверки присоединенной ЭЦП

В файле /etc/digsig/xattr_control хранится список шаблонов шаблонов имен, определяющих имена файлов, в которых проверяется присоединенная ЭЦП. Порядок применения шаблонов:

  • в шаблонах должны указываться абсолютные пути, т.е шаблон всегда должен начинаться с символа slash (косая черта, "/");
  • шаблоны, начинающиеся с двух символов slash ("//"), указывают имя конкретного файла. Например: //bin/script.sh;
  • шаблоны, оканчивающиеся символом slash, указывают имя каталога, в котором должны проверяться все файлы (включая файлы в подкаталогах). Например: /bin/;
  • все остальные шаблоны рассматриваются как префикс имени файла, Например, шаблону /bin/script соответствуют файлы: /bin/script, /bin/script.signed, /bin/script12345 и т.д.


Динамическое управление режимами работы ЗПС

Динамическое управление режимами работы ЗПС осуществляется через  интерфейс sysfs. При этом действуют следующие ограничения:

  • изменения, вносимые с помощью динамического управления, применяются только к конфигурации, загруженной ядро через обновление ramfs и перезагрузку. Текущее состояние файлов в каталоге /etc/digsig значения при этом не имеет;
  • нулевые значения числовых параметров могут быть динамически заменены на ненулевые ("включены");
  • ненулевые значения числовых параметров не могут быть динамически изменены, в т.ч. не могут быть заменены на нулевые ("выключены");
  • данные (ключи, маски файлов) могут быть только добавлены и не могут быть прочитаны, удалены или изменены;
  • все изменения, сделанные с помощью динамического управления, сохраняются до перезагрузки;
  • все изменения, сделанные с помощью динамического управления, при перезагрузке удаляются;

Доступны следующие  интерфейсы, представленные специальными файлами:

  • интерфейсы просмотра и включения параметров конфигурации:
    • /sys/digsig/elf_mode — режим проверки встроенной ЭЦП. Соответствует параметру конфигурации DIGSIG_ELF_MODE.

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

      sudo cp /etc/digsig/build_system_rbt_root_key_2018.gpg /sys/digsig/keys
      Установленные таким образом ключи будут сохраняться до перезагрузки ОС.


    • /sys/digsig/xattr_mode — режим проверки присоединенной ЭЦП. Соответствует параметру конфигурации DIGSIG_XATTR_MODE;
    • /sys/digsig/ignore_gost2001 — режим проверки ЭЦП по ГОСТ~Р~34.10-2001. Соответствует параметру конфигурации DIGSIG_IGNORE_GOST2001;
    • /sys/digsig/ignore_xattr_keys — режим применения при проверке встроенной ЭЦП ключей для проверки присоединенной ЭЦП. Соответствует параметру конфигурации DIGSIG_IGNORE_XATTR_KEYS;
  • интерфейсы для передачи данных:
    • /sys/digsig/keys — интерфейс загрузки дополнительных ключей для проверки встроенной и присоединенной ЭЦП;
    • /sys/digsig/xattr_control — интерфейс загрузки дополнительных шаблонов имен, используемых при проверке присоединенной ЭЦП;
    • /sys/digsig/xattr_keys — интерфейс загрузки дополнительных ключей, используемых только при проверке присоединенной ЭЦП;

Для получения значения параметра конфигурации, управляемого интерфейсом, нужное значение следует прочитать из соответствующего интерфейса:

sudo cat /sys/digsig/<имя_файла>
Например, проверка установленных режимов проверки присоединенной и отсоединенной ЭЦП может быть выполнена командой:
sudo cat /sys/digsig/elf_mode /sys/digsig/xattr_mode

Ключи для работы с ЭЦП

В модуль digsig_verify встроены открытые ключи, которые используются:

  • для проверки встроенных ЭЦП;
  • для проверки присоединенных ЭЦП;
  • для проверки ЭЦП в дополнительных ключах, загружаемых из каталога /etc/digsig/keys.

В каждый момент времени модуль использует два набора ключей:

  • основной набор ключей, встроенный в модуль — для проверки всех ЭЦП;
  • дополнительный набор ключей  в каталоге /etc/digsig/keys (изначально пустой) — для проверки встроенных ЭЦП;
  • дополнительный набор ключей  в каталоге /etc/digsig/keys_xattrs (изначально пустой) — для проверки присоединенных ЭЦП и, возможно, встроенных ЭЦП. Подпись на первом ключе из этого набора не проверяется..

Все ключи хранятся в указанных каталогах и их подкаталогах (см. ниже). Ключи хранятся в формате gnupg --export/etc/digsig/keys и загружаются при загрузке ОС;

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

Каждый новый ключ, использованный для подписывания СПО, необходимо включить в дополнительный набор ключей, для чего скопировать файл с ключом в каталог /etc/digsig/keys/ или /etc/digsig/xattr_keys, например, с использованием команды:

    sudo cp /<каталог>/<файл ключа> /etc/digsig/keys/
Каждый ключ в момент его добавления в каталог /etc/digsig/keys должен быть подписан уже загруженным ключом. При этом в подкаталогах ключи располагаются в иерархической структуре, которая обрабатывается сверху вниз таким образом, что:

  • файлы ключей в корневом каталоге (/etc/digsig/keys) должны быть подписаны встроенными в модуль digsig_verify ключами;
  • каждый ключ в подкаталогах должен быть подписан либо ключом из вышележащего каталога, либо встроенным ключом.

Например:

/etc/digsig/keys/key1.gpg — публичный ключ 1, подписанный на встроенном ключе;
/etc/digsig/keys/key2.gpg — публичный ключ 2, подписанный на встроенном ключе;
/etc/digsig/keys/key1/key1-1.gpg — публичный ключ, подписанный на ключе 1
/etc/digsig/keys/key1/key1-2.gpg — публичный ключ, подписанный на ключе 1
/etc/digsig/keys/key2/key2-1.gpg — публичный ключ, подписанный на ключе 2
/etc/digsig/keys/key2/key2-2.gpg — публичный ключ, подписанный на ключе 2

Каждый дополнительный ключ, использованный для проверки присоединенной ЭЦП, необходимо скопировать в каталог /etc/digsig/xattr_keys/. Например:

sudo cp /<каталог>/<файл ключа> /etc/digsig/xattr_keys/
В каталоге /etc/digsig/xattr_keys/ также может располагаться иерархическая структура дополнительных ключей, в которой одни дополнительные ключи должны быть подписаны на других дополнительных ключах. При этом дополнительные ключи должны располагаться в подкаталогах таким образом, чтобы при их загрузке не нарушалась цепочка проверки подписей (см. пример выше).

Графический инструмент fly-admin-smc

В состав Astra Linux входит графический инструмент fly-admin-smc, предоставляющий возможности работы с настройками ЗПС. Инструмент доступен в графическом меню: "Пуск" - "Панель управления" - "Безопасность" - "Политика безопасности" - "Замкнутая программная среда". Работа с инструментом подробно описана во встроенной справке. (клавиша F1).

Подписывание ПО

Встроенная ЭЦП

См. Создание встроенной подписи в ELF файлах для режима ЗПС а также Подписание пакетов ПО.

Присоединенная ЭЦП

Далее рассматривается создание собственного ключа, предназначенного для создания и проверки присоединенной ЭЦП. Для создания ключей используется ПО GNU Privacy Guard. Входящий в состав Astra Linux модифицированный GnuPG поддерживает алгоритм ГОСТ~Р~34.11-94. Список доступных алгоритмов можно проверить командой:

gpg --version

Далее приведен пример создания дополнительного ключа и его использования для создание встроенной ЭЦП.

  1. Создать ключевую пару. По умолчанию пара будет сохранена подкаталоге .gnupg домашнего каталога текущего пользователя. Ключевая пара может быть создана с помощью графического инструмента fly-admin-amc, или в командной строке в интерактивном или пакетом режиме.

    По умолчанию для ключевой пары используется алгоритм RSA. Использование этого алгоритма в ЗПС Astra Linux не поддерживается. Для ЗПС Astra Linux следует использовать алгоритм GOST_R34.10-2012.
    1. Для создания ключевой пары в интерактивном режиме выполнить команду gpg с возможностью интерактивного выбора алгоритма:

      gpg --full-generate-key
      Для создания ключевой пары следует выбрать алгоритм GOST_R34.10-2012. После ответа на заданные вопросы будет выдана информация о созданной ключевой паре вида:

      pub   gP256 2024-03-12 [SC]
            566F70D5D822D1B51B23CBE60055EBA236DA8851
      uid                      Astra Linux <info@astralinux.ru>

      Далее в примерах для идентификации ключа используется идентификатор ключа -  последовательность шестнадцатеричных цифр, в примере выше это 566F70D5D822D1B51B23CBE60055EBA236DA8851. Ключ можно также идентифицировать по имени пользователя;

    2. Для создания ключевой пары с использованием алгоритмов ГОСТ в пакетном режиме:
      1. Создать файл с параметрами ключа, например:

        Key-Type:GOST_R34.10-2012
        %no-protection
        Name-Real:<имя_пользователя>
        Name-Comment: <комментарий>
        Name-Email: <e-mail>

        подробнее см. Unattended GPG key generation;

      2. Выполнить команду:

        gpg --gen-key --batch <имя_файла_с_параметрами_ключа>

      3. Информацию о созданном ключе можно получить командой:

        gpg --list-keys

  2. При наличии установленного ключа для подписи созданный ключ может быть подписан:

    gpg --export <идентификатор_ключа> | sudo gpg --import 
    sudo gpg --sign-key <идентификатор_ключа>
    для применения подписанный ключ должен быть экспортирован в каталог /etc/digsig/xattr_keys. Команды:
    sudo gpg --export  <идентификатор_ключа> | sudo tee /etc/digsig/xattr_keys/<имя_файла_с_подписанным_экспортированным_ключом>

    Наличие подписи в ключах для проверки присоединенной ЭЦП не проверяется. Поэтому созданный ключ можно экспортировать не подписывая:

    sudo gpg --export <идентификатор_ключа> | sudo tee /etc/digsig/xattr_keys/<имя_файла_с_экспортированным_ключом>

  3. В файле /etc/digsig/xattr_control задать маски имен контролируемых файлов, например:

    /bin/spo

    Если заданная маска оканчивается символом "/", то она интерпретируется как имя каталога и контролируются все файлы в этом каталоге, в ином случае маска интерпретируется как префикс полного имени контролируемых файлов.

  4. Подписать контролируемые файлы внешней ЭЦП:

    Подписание файлов должно быть выполнено до включения проверки ЭЦП, так как после включения проверки ЭЦП подписание не подписанных файлов будет заблокировано.


    bsign --sign --xattr <имя_файла>
    Дополнительная информация доступна в справке по утилите bsign;

  5. Включить проверку ЭЦП:

    1. Изменить параметр  DIGSIG_XATTR_MODE в файле /etc/digsig/digsig_initramfs.conf, указав нужный режим проверки;
    2. Выполнить команду:

      sudo update-initramfs -u -k all

    3. Перезагрузить ОС;


Для проверки наличия и правильности ЭЦП файла можно использовать утилиту bsign:

bsign -w <имя_файла>

Проверка работы ЗПС

Модуль проверки подписи приложений digsig_verif является модулем ядра. Сообщения модулей ядра можно просмотреть командой:

sudo dmesg
Или, в случае модуля digsig_verif:
sudo dmesg | grep DIGSIG
Попытки запуска не подписанных файлов во включенной ЗПС будут отображаться в журналах, сохраняемых в файлах /var/log/messages и /var/log/kernel.log, сообщениями вида:

... DIGSIG: [ERROR]  NOT SIGNED: path=....
  • No labels