Кнопка завантаження на порталі 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

Читайте суб'єкт підписувача, а не лише слово стану. Внутрішній центр сертифікації, що підписує внутрішнє збирання, — це очікувано; той самий сертифікат на пакеті, який видає себе за випуск постачальника, — ні.

Для пакета лише з профілем відкрийте архів і ставтеся до кожного вбудованого імені хоста й ключа як до даних, за які треба звітувати. Якщо профіль містить щось багаторазове, поширення через портал перетворює це на спільний секрет із графіком розгортання.

Визначення власника перед розгортанням

За останнім питанням не стоїть жодної команди. З'ясуйте, хто оновлює артефакт, коли постачальник випускає нового клієнта, у кого ключ підпису внутрішнього збирання і як профіль ротується, коли кінцева точка переміщується. Запишіть ці імена поруч із посиланням на завантаження.

Якщо цієї відповіді ніхто не має, завантаження — це канал поширення без договору на обслуговування, і саме це варто повідомити.

Схожі статті