Кнопка загрузки на портале VPN возвращает ровно один файл, и этот файл может быть двумя совершенно разными вещами: готовым установщиком поставщика, рядом с которым едет профиль конфигурации, или сборкой, которую организация собрала сама. Страница выглядит одинаково в обоих случаях, поэтому кнопка не может сказать, что именно у вас. За ней стоят три вопроса — кто опубликовал исполняемый файл, какую конфигурацию записывает установка и кто её чинит, когда выходит следующая версия клиента. На первый вы отвечаете по метаданным артефакта, на второй — по содержимому пакета, а на третий — только по команде, которой принадлежит развёртывание.

Замок в браузере закрывает передачу, а не артефакт.

Что на самом деле возвращает точка загрузки

Большинство порталов передают запрос на загрузку небольшому обработчику, который либо отдаёт сохранённый файл потоком, либо собирает файл на месте, а затем до отправки ответа задаёт имя файла и тип содержимого. То, что приходит, — это контейнер: MSI, PKG, DEB или RPM, либо самораспаковывающаяся обёртка вокруг одного из них. Внутри лежит бинарный файл клиента, и ничто в имени файла надёжно не говорит, пришёл ли этот бинарный файл от поставщика или из внутреннего конвейера сборки. Файл с именем client-setup.exe фиксирует решение об именовании, а не факт происхождения.

Сравните загруженные байты с опубликованной поставщиком контрольной суммой. Несовпадение не доказывает злого умысла; оно доказывает, что файл не является сборкой поставщика, и именно это различие стоит того, чтобы на него реагировать.

Где профиль попадает в клиент

Предзаполненные настройки обычно едут отдельным файлом, который установщик копирует в путь для каждого пользователя или каждой машины: профиль JSON или XML в Windows, профиль конфигурации в macOS, фрагмент под /etc в Linux. Значения в этом файле — имена хостов шлюза, якоря доверия, иногда материал регистрации — становятся настройками клиента по умолчанию при первом запуске. Вот почему одна загрузка может нести не только код, но и секреты.

Спросите, что делает путь обновления с профилем. В зависимости от упаковки он может пережить обновление клиента, быть им перезаписан или не пройти проверку схемы в новой версии.

Что не доказывает цепочка подписей

Подпись кода связывает личность издателя с хешем файла, а в Windows отметка времени Authenticode позволяет подписи жить дольше сертификата, который её создал. Действительный результат отвечает на два вопроса: какой издатель подписал эти байты и изменились ли они после этого. Он не перечисляет службы установщика, записи реестра или поставляемые драйверы и не решает, следует ли доверять этому издателю здесь. Документация Authenticode от Microsoft описывает механизм и прямо говорит об этой узкой области.

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

Проверьте артефакт, прежде чем кто-либо его запустит

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

# Windows PowerShell
Get-AuthenticodeSignature .\client-setup.exe | Format-List Status, SignerCertificate, TimeStamperCertificate

# macOS
pkgutil --check-signature ./Client.pkg
codesign -dv --verbose=4 /Applications/Client.app

# Debian/Ubuntu
dpkg-deb -I ./client_amd64.deb
sha256sum ./client_amd64.deb

Читайте субъект подписывающего, а не только слово состояния. Внутренний удостоверяющий центр, подписывающий внутреннюю сборку, — это ожидаемо; тот же сертификат на пакете, который выдаёт себя за выпуск поставщика, — нет.

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

Определение владельца перед развёртыванием

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

Если этот ответ никому не принадлежит, загрузка — канал распространения без договора на обслуживание, и это тот вывод, о котором стоит сообщить.

Похожие статьи