VPNプロファイルをフォーラムのスレッドに貼る人は、同じ思い込みから始めます。ファイルにはサーバーアドレスと少しのオプションしかないので、共有するのは電話番号を共有するのと同じ感覚です。ところが誰かがそれを読み、四行目に暗号化されていない秘密鍵を見つけます。

プロファイルはトンネルについての説明文書ではありません。それはトンネルの身元を書き出したものです。

ファイル内のオブジェクトは同じ秘密度を持たない

公開CA証明書は持ち運ばれるためのものです。クライアントの秘密鍵はそうではありません。両方が同じファイルに現れると、無害なほうが添付全体を安全に見せます。それが罠です。

OpenVPNは設計上、これをさらに悪化させます。証明書、鍵、認証情報を直接埋め込めるからです。配備には便利で、共有には壊滅的です。読める証明書ブロックから始まるファイルは、そのまま非公開の半分へと続きます。

WireGuardはもっと露骨です。インターフェースのセクションが秘密鍵を持ち、各ピアはさらに事前共有鍵を持てます。どの行が重要かについて曖昧さはありません。ほぼすべての行が重要です。

スクリーンショットは別形式の同じ漏えい

設定をQRコードに符号化しても、それはプレビューにはなりません。コードは同じバイトを運び、部屋にあるどんなスマートフォンのカメラでも復号できます。クライアントの設定ウィンドウのスクリーンショットも同じで、隅に鍵が読める形で残ります。

認証ファイルと参照される鍵のパスも同じ監査の対象です。外部ファイルを指すプロファイルは、パスが読者の手の届く場所を指すかもしれないため、自動的に安全にはなりません。認証ファイル内のトークンはパスワードと同じくらい使え、しかもパスワードには見えないことがほとんどです。

鍵ではなくエラーテキストを送る

診断に必要なのは、エラーテキスト、クライアントのバージョン、試したオプション名です。鍵は必要ありません。その三つで質問を書き、ファイルが端末を離れる前に、すべてのシークレットと不要なネットワーク識別子を置き換えてください。

OpenVPNのインラインファイルに関するマニュアルの節は、そうしたオブジェクトがどこにあるかの有用な地図です。一つのプロファイルにどれだけ入りうるかを思い出させてもくれます。

# which lines in this profile look like secrets?
grep -n -E 'PrivateKey|PresharedKey|password|auth-user-pass|BEGIN .*PRIVATE KEY' wg0.conf

# OpenVPN: show the structure without printing key material
awk '/BEGIN/{print NR": "$0} /^[a-z-]+ /{print NR": "$1}' office.ovpn

そして編集についての記憶を信じるのではなく、最終的な添付を読み直してください。鍵は後ろのブロックに、伏せられていないコメントに、構造的だと判断した行に隠れています。

露出後の唯一の修復はローテーション

投稿を削除しても何も失効しません。ファイルを受け取った人は有効な資格情報をまだ持っており、だからこそ発行者はサービス自身の手続きでそれを失効または交換する必要があります。ローカルのコピーを消しても、向こう側では何も変わりません。

使っているプロファイルは保護された方法で保管し、不要になったインポート済みの項目はダウンロードフォルダに三つ残すのではなく、意図的に削除してください。使わなくなったプロファイルも、失効するまでは資格情報です。

身につける価値のある習慣は小さなものです。プロファイルが端末を離れる前に、アドレスのほかに何が入っているかを尋ね、思い出すのではなくファイルを読んで答えてください。

関連記事