2015年3月3日火曜日

リモートデスクトップ接続ファイルの電子署名

リモートデスクトップサービスに接続するための情報を保存したテキストファイル(RDP)は、改ざん防止のため電子署名を追加できます。

RDPファイルは、リモートデスクトップ接続クライアントで[オプション表示]を行うことで保存できます。

RDP

RDPファイルに接続先ホスト名まで保存しておけば、ダブルクリックするだけでホストに接続できます。

しかし、システム管理者が「ここに接続してね」と配布したRDPファイルを使ってみたら、接続先で個人情報を聞かれた、実はRDPファイルは改ざんされており、本来の接続先とは違うホストにつながるようになっていたらどうでしょう。かなり危険な状態になります。

RDPファイルに電子署名を付けることで、こうした危険性に気付きやすくなります。

▼署名なしのRDPファイルを実行した場合
署名なし

いかにも怪しそうです。

▼署名付きのRDPファイルの場合
署名あり

だいぶいい感じです。

署名付きRDPファイルの中身を直接書き換えてみます。

▼RDPファイルの接続先をメモ帳で変更
改ざん

エラーになりました。ただし、セキュリティ上問題ない変更については警告は出ないみたいです。

RDPファイルの署名手順は意外に知られていないので紹介します。

基本的な作業は以下の3ステップです。

  1. 証明書のインストール
  2. 証明書の拇印(Thumbprint)の取得
  3. RDPファイルに署名

1. 証明書のインストール

まず、RDPファイルに署名作業を行うコンピュータに電子証明書をインストールします。信頼できるコンピュータであれば何でも構いません。

2. 証明書の拇印(Thumbprint)の取得

次に、[証明書]の管理ツールを構成します。

  1. MMCコマンドを実行
  2. [ファイル]メニューから[スナップインの追加と削除]を選択 (またはCtrl-M)
  3. [証明書]スナップインを選択した[追加]をクリック
  4. [コンピューターアカウント]を選択して[次へ]をクリック
  5. [ローカルコンピューター]を選択して[完了]をクリック
  6. [OK]をクリック

次に、自分のコンピュータの証明書に含まれる「拇印(Thumbprint)」を取得します。

  1. [コンソールルート]-[証明書(ローカルコンピューター)]-[個人]-[証明書]を展開
  2. 自分のコンピューターをダブルクリック
  3. [詳細]タブを選択
  4. 一番下にある[拇印]を選択
  5. 拇印を選択し、Ctrl-Cでクリップボードにコピー(右クリックメニューは出ない)

コピーした拇印からスペースを取り除きすべて大文字にします。大文字しか受け付けないことはヘルプなどに記載されていないので注意してください。

PowerShellを使うことで、この作業を自動化できます。

【実行例】
$tp = "fc ff 52 c9 05 f9 ac b0 f0 86 6f f1 ad 4f ee ca ee 6b 0a 9b"
$tp = $tp.ToUpper().Replace(" ","")

赤字は実際の拇印に置き換えてください。

3. RDPファイルに署名

最後に、以下のコマンドを実行して、RDPファイルに署名を追加します(管理者権限が必要です)。

rdpsign /sha1 スペースを除いて大文字に変換した拇印 RDPファイル /v
(/vは詳細表示オプション)

【実行例】
rdpsign /sha1 FCFF<<中略>>0A9B  default.rdp /v