ノート PC が WireGuard トンネルを三つ設定したまま故障し、構成ファイルはディスクに残っている。それを代替機にコピーすると、起動はするものの立ち上がらないサービスができる。ファイルは作成したアカウントとマシンに属するキーで保護されているため、バイトは移動しても、読む能力は移動しない。以下の手順は、ファイルの所在を突き止めるところから、サービスを実際に復旧する選択肢までを扱う。

トンネルファイルの現在の置き場所

保存場所はリリース間で移ってきた。古いインストールはプロファイルをシステムプロファイルのローカル アプリケーション データ内の WireGuard\Configurations フォルダーに置き、現在のビルドはプログラム ファイルのツリー内のデータ ディレクトリを使う。各トンネルは、保護方式を名前に持つ二重拡張子の単一ファイルだ。

Get-ChildItem "C:\Program Files\WireGuard\Data\Configurations"

.dpapi という接尾辞は飾りではない。ファイルは保護されたブロブであり、サービスはまさにその形で消費するように設計されている。そこからトンネルをインストールする正式な方法は、ブロブを指す昇格された呼び出しだ。

$blob = "C:\Program Files\WireGuard\Data\Configurations\hq.conf.dpapi"
wireguard.exe /installtunnelservice $blob

そのコマンドは、ブロブを展開できるコンテキストでのみ成功する。サービスをインストールするだけで、こちらに代わって何かを復号することはない。

ブロブが別の場所で開かない理由

保護は、ユーザーのログオン資格情報から、そして選んだスコープに応じてマシンからも、鍵を導き出す。保護呼び出しに関する Microsoft のドキュメントによれば、既定では暗号化したユーザーとマシンに属し、マシン全体のオプションによって展開できる相手が変わる。どちらの場合も鍵はオペレーティング システムの資格情報の中で生きており、ファイルの中にはない。 暗号文は持ち運べるが、鍵は持ち運べない。

フォルダーの所有権を取っても変わるのは ACL だけで、ほかには何も変わらない。古いディスクを外付けケースに入れてブロブを新しい PC にコピーしても、鍵がコピーされていない暗号文が残るだけだ。失敗は暗号上のものであり、サービスを何度入れ直しても変わらない。新しいマシンにはそのアカウントのマスター キーがなく、古いキー ストアはファイルと一緒に移動しない。

設定を難読化したファイルに保存する製品は、対比をはっきりさせる。単に難読化されただけの構成は、難読化を無効にするフラグを見つければ読めるようになるが、保護されたブロブは鍵なしでは閉じたままだ。両者を混同すると、存在しないデコーダーを探すことになる。

古いシステムがまだ起動するうちに試すこと

インストールがまだ起動するなら、トンネルを作成したアカウントでサインインした状態で、クライアントからトンネルをエクスポートする。エクスポートは通常の構成ファイルを生成し、その時点でバックアップは持ち運べるものになる。

ディスクが読めても Windows が起動しないなら、保護されたファイルは事実上失われている。復旧を約束するツールは、もう手元にない元のコンテキストで動いているか、ブロブと古いディスク イメージを渡すよう求めてくるかで、後者は少し立ち止まって考える価値のある判断だ。

どちらの場合でも、わかったこと、つまりトンネル名、エンドポイント、公開鍵を記録しておく。名前とエンドポイントがあれば素早く作り直せ、公開鍵があれば相手側がどの項目を削除すべきか特定できる。

代わりに相手側から作り直す

自分で管理する相手なら、新しい鍵ペアを生成し、新しい公開鍵を相手の一覧に追加する。企業やホスティングのエンドポイントなら、管理者に新しい鍵を発行して古い鍵を削除するよう依頼する。この依頼は盗難のあとに出すものと同じで、ディスクを失った時点で古い秘密鍵は露出したものとして扱う必要がある。

次に、記録した値からトンネルを作り直し、ほかを削除する前にハンドシェイクを確認する。相手側の古い項目も同じ変更で消えるべきで、そうすれば盗まれたディスクが後から再接続することはできない。

教訓は復旧ツールではなく、バックアップの方針に入る。WireGuard の構成は資格情報であり、秘密鍵を持つ者は相手の身元を持つことになり、途中に二つ目のパスワードはない。意識して構成をエクスポートし、ほかの秘密と一緒に保管するか、復旧とは鍵の再発行だと受け入れて、どの選択がどのトンネルに当てはまるかを書き留めるかだ。

関連記事