VPNポータルのダウンロードボタンが返すのはちょうど一つのファイルであり、そのファイルは大きく異なる二つのものになり得ます:設定プロファイルを伴うベンダーの既製インストーラーか、組織が自らコンパイルしたビルドです。ページはどちらでも同じに見えるため、ボタンだけではどちらなのか分かりません。その背後には三つの問いがあります — 実行ファイルを公開したのは誰か、インストールが書き込む設定は何か、次のクライアント版が届いたときに誰が修正するのか。一つ目は成果物のメタデータから、二つ目はパッケージの内容から、三つ目は配備を所有するチームだけから答えることになります。

ブラウザの鍵マークが守るのは 転送であって、成果物ではない。

ダウンロードエンドポイントが実際に返すもの

ほとんどのポータルでは、ダウンロード要求を受けた小さなハンドラが、保存済みファイルをストリームするかその場でファイルを組み立て、応答が出る前にファイル名とコンテンツタイプを設定します。届くのは、MSI、PKG、DEB、RPM、またはそれらのいずれかを包む自己解凍ラッパーというコンテナです。中にはクライアントのバイナリがあり、ファイル名からはそのバイナリがベンダー製か社内ビルドパイプライン製かを確実に判断できません。client-setup.exe という名前のファイルは、来歴の事実ではなく命名の決定を記録しているだけです。

ダウンロードしたバイトをベンダーが公開したチェックサムと比較する。不一致は悪意を証明しません;ファイルがベンダーのビルドではないことを証明するのであり、そこが対応する価値のある違いです。

プロファイルはどこでクライアントに入るのか

事前入力された設定は通常、別のファイルとして運ばれ、インストーラーがユーザー単位またはマシン単位のパスにコピーします:Windows では JSON または XML のプロファイル、macOS では構成プロファイル、Linux では /etc 配下の断片です。そのファイルの値 — ゲートウェイのホスト名、信頼のアンカー、ときに登録素材 — は、初回起動時にクライアントの既定値になります。だからこそ、一回のダウンロードがコードだけでなく秘密も運び得るのです。

アップグレード経路がプロファイルをどう扱うかを尋ねてください。パッケージングによっては、クライアント更新を生き延びることも、上書きされることも、新バージョンでスキーマ検証に失敗することもあります。

署名チェーンが証明しないこと

コード署名は発行元の身元をファイルハッシュに結び付け、Windows では Authenticode のタイムスタンプにより、署名がそれを作成した証明書より長く生きられます。有効な結果が答えるのは、どの発行元がこのバイトに署名したのか、その後変化したのかという二つの問いです。インストーラーのサービス、レジストリ書き込み、同梱ドライバーを列挙するものではなく、その発行元をここで信頼すべきかも決めません。Microsoft の Authenticode ドキュメント はその仕組みを説明し、この狭い範囲について明確に述べています。

ポータル認証が答えるのは三つ目の問い、セッションが意図したサーバーに到達したかです。三つの異なる検査、三つの異なる失敗の仕方があります。

誰かが実行する前に成果物を検証する

ファイルを隔離されたマシンに置き、何かを実行する前にメタデータを読んでください。これらのコマンドは、主要三プラットフォームで発行元の問いに答えます。

# 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

状態の語だけでなく、署名者のサブジェクトを読んでください。社内ビルドに署名する社内認証局は想定内です;ベンダーのリリースだと称するパッケージに同じ証明書が付いているのは想定外です。

プロファイルのみのパッケージでは、アーカイブを開き、埋め込まれたすべてのホスト名と鍵を説明責任のあるデータとして扱ってください。プロファイルに再利用可能なものが含まれていれば、ポータル配布はそれを配布計画付きの共有秘密に変えてしまいます。

配布前に所有権を確定する

最後の問いにはコマンドがありません。ベンダーが新しいクライアントを出したときに誰が成果物を更新するのか、社内ビルドの署名鍵を誰が持つのか、エンドポイントが移るときにプロファイルをどうローテーションするのかを突き止めてください。その名前をダウンロードリンクの隣に書いておきましょう。

誰もその答えを所有していないなら、そのダウンロードは保守契約のない配布経路であり、それが報告する価値のある発見です。

関連記事