GitHubログインなどの2要素認証にYubiKeyを使ってみた

BASE株式会社 Product Dev Division 基盤グループ Engineerの田中 (@tenkoma)です。 ある出来事がきっかけで2要素認証にYubiKeyを購入して使ってみたので紹介します。

フィッシングに引っかからない自信を無くした話

1ヶ月半前の土曜夕方に、外出先で以下のツイートを見ました。

ちょうど数時間前に同じメール文面を見たような気がしたのと、同じく数時間前にPCでGitHub.comにログインしていたので、 「これはマズいかもしれない、引っかかったか?」と焦りました。 その場ではパスワード変更だけしました。急いで帰宅して、状況を調べました。その結果—

  • GitHub またはGitHub Japanを騙るメールは見当たらなかった
  • ブラウザの履歴に偽サイトにアクセスした履歴は無かった
  • GitHub.com のSecurity logに自分の部屋とモバイル回線以外のIPからログインされたり操作されたログは無かった

ので、フィッシングにひっかかったというのがほぼ思い違いであることがわかりました。(一安心) もしかすると、上記ツイート以外の注意ツイートを見たことを、メールで受信したと思い込んだのかもしれません。

この経験をしたことで、「上記のようなメールを受信したら、冷静にフィッシングかもと疑うこと無く、偽サイトにワンタイムパスワードごと渡してしまうかもしれない、入力情報を中継されたら、ログインされてしまうかもしれない」と思いました。

YubiKeyを購入して、普段の2段階認証にはそれを使う

いままで、GitHubログインするときは、ID/パスワード入力には1Passwordを、 2段階認証(2FA)では、Authyを使った時間同期式のワンタイムパスワード(TOTP)を入力していました。

しかし両方とも人間が入力する情報なので、フィッシングで偽サイトにアクセスした場合に、両方を入力してしまうことができます。 (1Password ならURLも保存しておけば、ブラウザ拡張の補完候補で絞り込まれるので、偽サイトにアクセスしたとき、「候補に表示されない」ことで気づける可能性はあります) YubiKeyなどのキーデバイスを使うと、2FAではサーバー側のホスト名なども含め認証に必要なデータを生成します。 よって本物のGitHubログインにつかう認証データを、人間のミスで渡してしまうことはありません。

僕が購入したのは、YubiKey 5Ciです。

MacBook Pro, iPhone X, Pixel 4で使いたかったので、USB Type-C, Lightning端子が付いている5Ciにしました。

GitHub.com の2FAにYubiKeyを設定すると、ログインはどうなる?

使い始める前は、「TOTPより面倒くさくなるのでは、端末毎に設定が必要とかだとつらいな」と思っていましたが、むしろ簡単になりました。

設定は、ページにアクセス後、YubiKeyをさして金属部分を触るだけなので省略します。 (日付をみると、GitHubフィッシングが話題になってすぐYubiKeyを買って設定したことが分かります)

f:id:tenkoma:20200729194907p:plain:w600
GitHub.com に設定したデバイスキー一覧

ログインで、ID/パスワードを入力して送信すると、次のように表示されます。

f:id:tenkoma:20200729195007p:plain:w300
ID/パスワード送信後は、まずセキュリティキーを使った2要素認証をうながされる

キーデバイスを設定すると優先してそれで認証するように促されるんですね。 「Use security key」をクリックして、YubiKeyを差し込み金属部分を触ると、ワンタイムパスワードが送信され、ログインが完了します。 僕の場合、Authyを使ったときより簡単になりました。 Authyの場合、

  • Authyを起動し
  • GitHubのエントリを検索して表示し(設定が15個くらいある)
  • クリップボードにコピーするか6桁の数字を覚え
  • 貼り付けるか入力して送信

という感じなので、検索しなくてよいので楽です。

また、MacのChromeで有効にすると、他のデバイスでの設定は不要です。 FirefoxやSafariでも使えますし、Pixel 4(Chrome)やiPhone X(Mobile Safari)でもYubiKeyでの2FAが出来ました。

他にどんなサービスで使える?

YubiKeyが使えるか試したところ、以下のサービスでは使えることが分かりました

  • G Suite
  • GitLab
  • Twitter
  • Facebook
  • Sentry
  • AWSマネジメントコンソール(rootアカウント、IAMともに)

AWS 以外ではTOTPとキーデバイスの両方を同時に設定できるので、YubiKeyを紛失したときのリカバリーとしてTOTPも有効にしています。 個人でAWSのrootアカウントを持っているのですが(全然使えていませんが…)、現時点ではTOTPかキーデバイスの片方しか設定出来ず、YubiKeyを紛失したときのリカバリができないため、rootアカウントには設定していません。

まだ買ってないけど、TOTPのかわりに使える方法ってある?

YubiKeyを使い始めてから知ったのですが、最近のMacではTouch IDが使えます。 2段階認証が、Touch IDを指で押さえるだけになるので、オススメです。

またPixel 4の顔認証もキーデバイスとして使えました。 iPhone XのFace IDは使えませんでした。

まとめ

  • YubiKeyを使った2段階認証は、お金はかかるけど、フィッシングでの不正ログイン対策になります
  • ログイン操作も、時間同期式のワンタイムパスワード(TOTP)より簡単になりました
  • YubiKey紛失時のリカバリがかなり面倒なので、AWSマネジメントコンソールのrootアカウントは複数の2FAを設定出来るようになって欲しい
  • YubiKey持ってない場合でも、MacのTouch IDやAndroidの顔認証が使える可能性はあります

YubiKey、小さいので、財布とかに入れるとすぐに無くしてしまいそうです。 いまのところ、IDカードホルダーに付けているのですが、リモートワークだと常時付けてないので、別のネックレスのようなものか、リストバンドに付けられるといいかもしれない、と思っています。よい案があれば@tenkomaまで教えてください。