WindowsマシンをWinAuthでMFAデバイスにする

WindowsマシンにWinAuthをインストールすることで、多要素認証の仮想MFAデバイス（時間ベースのワンタイムパスワード生成器）として利用できるようにする話。社員に配布しているのはWindowsマシンだけなのだけど、BYODの雰囲気がある私有スマホは業務での多要素認証に使わせたくない、という組織を想定しています。

# なぜWinAuthを使うのか

AWS等ではセキュリティ強化のために[MFA（多要素認証）が利用可能](https://aws.amazon.com/jp/iam/features/mfa/?audit=2019q1)で、認証の第二要素として仮想MFAデバイスが利用できます。これは特定の端末上に構成された、TOTP（時間ベースのワンタイムパスワード）ソフトウェアです。一般には各自のスマートフォン上の多要素認証アプリケーション（例えば[Google Authenticator](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2)や[Microsoft Authenticator](https://play.google.com/store/apps/details?id=com.azure.authenticator)）が使われるでしょう。

それを避け、Windows端末を多要素認証用のデバイスとして利用したいという企業（組織）ニーズとして、ここでは以下を想定しました。

1. **会社貸与のWindowsマシンだけで多要素認証を行わせたい。**例えば企業として従業員にスマートフォンは貸与していないが、BYODの仕組みはないので、私有スマートフォンでの認証を避けたい。
2. **電子機器持込み禁止のエリアで、据置きのWindowsマシンで多要素認証を行わせたい。**例えば本番環境への運用作業場所は専用のオペレーションルームなどに限定しており、ここへの電子機器持込みは認めていない。

またWindowsで広く使われるパスワードマネージャー、例えばLast Passwordや1passwordなどもワンタイムパスワード（TOTP）の機能を持ち仮想MFAデバイスとして使えます。これについては、組織として、**端末間でデータが同期されるかコピーできるものは[多要素認証と認めない](https://qiita.com/tsukamoto/items/c1699bd2dd215aec2efc)**ことを想定しています。

いろいろと縛りがめんどくさい想定ですが、私の知っている実在環境でも該当するものがあります。こうしたケースを想定した時、以下が要件になります。

* Windows上で動作する
* データが端末内で完結し端末外に出ない（端末に紐づく）

WinAuthはこれを満たすものとして選択しました。他にも候補があるかもしれませんが、要件を満たすものがあったことで十分とし、調査比較はしていません。

# WinAuthのインストール

* [GitHubのWinAuthのページ](https://github.com/winauth/winauth#download-latest-stable-version-winauth-35)の
[Download Latest Stable Version](https://github.com/winauth/winauth#download-latest-stable-version-winauth-35)」からLatest VersionのZIPファイルをダウンロード<br/>![2020-07-16-14-44-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/71f2fa6f-2a7e-515d-1b79-4d57472bf8d2.png)
* ZIPファイルを展開する

## WiAuthにAWS MFA仮想デバイス登録

* 展開されたフォルダ内の `WinAuth.exe` を実行
* `[Add]` > `[Authenticator]`を選択<br/>![2020-07-16-14-39-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/ad27c220-61d9-38cd-2298-34d2240d0df5.png)
* 「Add Authenticator」画面の1.の入力欄に、AWSの仮想MFAデバイス登録画面で表示されるコードを貼り付け<br/>![2020-07-16-14-57-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/f5ede47b-932b-591d-6ded-9fefccb1e606.png)
* `Verify Authenticator` をクリック
* AWSの仮想MFAデバイス登録画面に、「Add Authenticator」画面の4.に表示されるコード2回分を貼り付けて登録
* 「Add Authenticator」画面の `OK` をクリックして登録
* 「Protection」画面で以下を実施
  * 「Protect with my own password」にチェックを入れ、「Password」「Verify」に任意のパスワードを入力
  * 「Encrypt to only be useable on this computer」と「And only by the current user on this computer」にチェック
  * `OK` をクリックして保存<br />![2020-07-16-14-55-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/cae7415d-6b8d-37ea-ab95-4a6960e4cf13.png)

<div style="page-break-before:always" />

## WinAuthでAWS MFA認証

* 展開されたフォルダ内の `WinAuth.exe` を実行
* 表示された6桁のコードを、AWSの認証画面のMFAコード入力欄に入力<br />![2020-07-16-15-14-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/e04ed718-56aa-443d-6f2e-ed708a89feba.png)

# 参考

* [IAM - Multi-factor Authentication](https://aws.amazon.com/jp/iam/features/mfa/?audit=2019q1)
* [Google 認証システム - Google Play のアプリ](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2)
* [Microsoft Authenticator - Google Play のアプリ](https://play.google.com/store/apps/details?id=com.azure.authenticator)