Устанавливаем браузер Chromium-Gost автоматически

⏱ 7 мин. на чтение

Никому не хочется постоянно проверять новую версию браузера Chromium-Gost. Он же не умеет сам себя обновлять или обновляться вместе с системой (повествую в рамках системы Debian). И ведь для этого надо посмотреть какая текущая версия установлена, это в меню «О программе», потом пойти на сайт разработчиков, там глазами среди множества строчек найти свой пакет deb и сравнительным образом высмотреть, а не надо ли его обновить. Если вдруг надо, то скачать его. Потом запустить установку обновления. А в завершении удалить скаченный установочный пакет.

— А можно делать обновление ручками еженедельно?

— Можно. А зачем?

Вот пусть оно само и делается. Например, еженедельно. Если неделю не включали комп, он всё равно посмотрит, если больше 7 дней прошло, то при включении и обновит. Всего-то делов.

Вот я и сделал себе скрипт, для своей виртуальной машины, пусть там где и надо, там и обновляется.

Представляю скрипт для вашей виртуальной машины, где вы будете наслаждаться криптографией по ГОСТу в браузере Chromium-Gost:

📌 Клик здесь и откроете скрипт 😉

#!/bin/bash
###############################################################################
#   Алгоритм:
#       Получить последнюю доступную версию с сайта.
#       Получить установленную версию (если пакет установлен).
#       Сравнить: если установленная версия соответствует последней (или новее), 
#       то выйти с сообщением, иначе скачать и установить.
#   Также учитытывается, что пакет может быть не установлен — тогда установка всегда нужна.
###############################################################################
#   Как сделать всё автоматически?
#   Скопируйте скрипт в /usr/local/bin/update_chromium_gost.sh и сделайте его исполняемым:
#       sudo chmod +x /usr/local/bin/update_chromium_gost.sh
#   Создайте файл /etc/anacrontab (от root) или добавьте в существующий:
#       sudo nano /etc/anacrontab
#   Добавьте строку:
#       # Период в днях, задержка в минутах, идентификатор, команда
#       7       5       update-chromium    /usr/local/bin/update_chromium_gost.sh
#   где,
#       7 — запускать раз в 7 дней (если прошло 7+ дней с последнего запуска).
#       5 — задержка перед запуском (0 минут, можно поставить 5, чтобы система успела загрузиться).
#       update-chromium — уникальный идентификатор.
#       Команда — полный путь к скрипту.
###############################################################################

BASE_URL="https://update.cryptopro.ru/chromium-gost/"
TMP_DIR="/tmp"

# Функция для получения установленной версии пакета chromium-gost (любое имя)
get_installed_version() {
    # Ищем установленные пакеты, начинающиеся с chromium-gost
    local pkg=$(dpkg-query -W -f='${Package}\n' 2>/dev/null | grep -E '^chromium-gost')
    if [ -n "$pkg" ]; then
        # Получаем версию этого пакета
        local full_version=$(dpkg-query -W -f='${Version}\n' "$pkg" 2>/dev/null)
        # Извлекаем основную версию (всё до первого дефиса)
        echo "$full_version" | cut -d'-' -f1
    else
        echo ""
    fi
}

# Получаем последнюю доступную версию с сайта
echo "Поиск последней версии пакета chromium-gost для Linux..."
LATEST_VER=$(curl -s "$BASE_URL" | grep -oP 'chromium-gost-\K[0-9.]+(?=-linux-amd64\.deb)' | sort -V | tail -n1)

if [ -z "$LATEST_VER" ]; then
    echo "Ошибка: не удалось определить версию пакета на сайте."
    exit 1
fi
echo "Последняя версия на сайте: $LATEST_VER"

# Получаем установленную версию
INSTALLED_VER=$(get_installed_version)
if [ -n "$INSTALLED_VER" ]; then
    echo "Установленная версия: $INSTALLED_VER"
else
    echo "Пакет chromium-gost (любого варианта имени) не установлен."
fi

# Сравниваем версии
if [ -n "$INSTALLED_VER" ] && [ "$(printf '%s\n%s' "$LATEST_VER" "$INSTALLED_VER" | sort -V | tail -n1)" = "$INSTALLED_VER" ]; then
    echo "У вас уже установлена актуальная версия (или новее). Обновление не требуется."
    exit 0
fi

echo "Требуется обновление. Будет установлена версия $LATEST_VER."

# Формируем имя файла
FILENAME="chromium-gost-${LATEST_VER}-linux-amd64.deb"

# Скачиваем файл
echo "Скачивание $FILENAME в $TMP_DIR..."
curl -L -o "$TMP_DIR/$FILENAME" "${BASE_URL}${FILENAME}"
if [ $? -ne 0 ] || [ ! -f "$TMP_DIR/$FILENAME" ]; then
    echo "Ошибка: не удалось скачать файл."
    exit 1
fi

# Устанавливаем пакет
echo "Установка пакета..."
dpkg -i "$TMP_DIR/$FILENAME"

# Исправляем зависимости
echo "Проверка и исправление зависимостей..."
apt-get install -f -y

# Очистка
rm -f "$TMP_DIR/$FILENAME"

echo "Готово! Браузер chromium-gost обновлён до версии $LATEST_VER."

И пожалуйста, используйте виртуальную машину для экспериментальных программ таких как Chromium-Gost (вас предупредили).

Что такое Chromium-Gost

По сути, это тот же браузер Chromium с открытым исходным кодом, но в него добавлена поддержка российских криптографических стандартов (ГОСТ), что позволяет ему корректно открывать сайты с «российским шифрованием». Это стало необходимым, так как обычные браузеры (мой любимый FireFox) эти алгоритмы не поддерживают. А про Яндекс-браузер в этот раз умолчу.

Визуально он не отличается от обычного Chromium, а главное изменение заключается в том, как он устанавливает защищённые соединения: он делает это не через стандартную библиотеку BoringSSL, а через прослойку msspi.

📌 Клик здесь, если интересно про msspi

Идея с msspi довольно элегантна: она создаёт «прослойку»-переводчик между браузером и системой. Благодаря этому браузер может использовать криптографию, установленную на вашем компьютере, и это главный ключ к пониманию того, как в Chromium появляется поддержка ГОСТ.

Если объяснять на примере Linux, логика работы такая:

  • Стандартный подход (BoringSSL): Обычно Chromium сам отвечает за шифрование через встроенную библиотеку BoringSSL. Это быстро и удобно, но добавить в неё поддержку ГОСТ сложно, так как это потребует постоянной доработки под каждое обновление браузера.

  • Подход Chromium-Gost (msspi): В этой сборке оригинальный механизм шифрования (BoringSSL) заменяется на библиотеку msspi. Она выступает в роли универсального переводчика: с одной стороны, она имитирует знакомый браузеру интерфейс OpenSSL (родственник BoringSSL). С другой — обращается к API операционной системы (например, к SChannel в Windows или через прослойку CAPIX в Linux), которое и берёт на себя всю работу с криптографией ГОСТ. Благодаря этому, браузер, «думая», что работает как обычно, на самом деле отправляет все задачи по шифрованию внешнему криптопровайдеру, например, КриптоПро CSP.

Для чего это было нужно: главная цель — универсальность. Вместо того чтобы встраивать поддержку всех возможных криптопровайдеров напрямую в браузер, разработчики создали стандартный «мост». Так браузер научился работать с любой криптографией, которая установлена в системе по правилам Windows (через интерфейс SSPI).

Но здесь кроются и главные риски:

  1. Это сложный «микрокосмос»: Поддержка msspi на Linux, где нет нативной SSPI, — это результат трудоёмкой обратной разработки и создания «прослойки», что потенциально увеличивает количество ошибок и уязвимостей.

  2. Проблема с обновлениями: msspi — это отдельный проект. Когда выходит новая версия Chromium с критическим исправлением уязвимости, разработчикам chromium-gost нужно сначала дождаться выхода и обновить сам браузер, а затем адаптировать к нему свою библиотеку msspi. Именно из-за этой дополнительной работы и возникает та самая задержка с безопасностью. Вы получаете не просто обновления браузера, а сложный «слоёный пирог» из Chromium, msspi и системного криптопровайдера, каждый слой которого нужно поддерживать в актуальном и безопасном состоянии.

В чем же проблема?

Основная проблема — в модели распространения и обновлений. Проект Chromium-Gost не принадлежит компании «КриптоПро» и развивается энтузиастами и разработчиками на добровольных началах.

Стандартный Chromium постоянно обновляется, закрывая опасные уязвимости. Например, около 70% критических уязвимостей в Chromium — это ошибки работы с памятью. Исправления для них выходят очень часто.

Однако сборка Chromium-Gost отслеживает выход этих обновлений с большой задержкой, а иногда и вовсе их пропускает. Более того, на форумах пользователи сообщают, что даже при появлении новой версии, она часто содержит лишь упоминание «Обновление стабильной версии» без указания на исправление конкретных CVE-уязвимостей.

Используя Chromium-Gost на основной системе, вы, по сути, получаете браузер с «дырявой» основной версией Chromium, которую никто не спешит чинить. Подтверждение этому — официальные бюллетени безопасности, которые выходят в ответ на найденные уязвимости. Например, был выпущен бюллетень INFESA-2024:0002 для устранения нескольких критических уязвимостей в версиях Chromium до 128.0.6613.113.

Почему изоляция — не паранойя, а необходимость?

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

Виртуальная машина позволяет локализовать любой потенциальный вред в случае эксплуатации уязвимостей через вредоносный сайт, защитив вашу основную ОС.

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

Надеюсь, мне удалось пролить свет на этот вопрос.

P.S. Для себя я сделал виртуальную машину KVM с операционной системой Debian. Внутри ВМ  установлено всё нужное для доступа к государственным сайтам, шифрование КриптоПро, электронный документооборот и отчётность Saby (Тензор, СБИС ранее), и этот самый «православный браузер Chromium-GOST», с ним необходимые плагины и драйвера и ключи электронной подписи. 

Отдал 15Гб пространства на диске под это всё. Но освободил свой комп от постоянной работы на это "добро". Оно только RAM =2Гб и CUP =25% для себя забирает, и это в "лежачем состоянии". И что оно делает само по себе я не знаю. Поэтому место этому "добру" в виртуальной машине. Включил, подписал ЭП, выключил.

Детали этого кому интересны -- сигнализируйте в комментариях, и зачем вам такое обязательно расскажите.