やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

二要素認証のコード算出アドオンauthenticator

 Chromium用。

対象環境

  • Raspbierry pi 3 Model B+
  • Raspbian stretch 2018-06-27

アドオン

方法

  1. インストール
  2. 登録
  3. コード生成

1. インストール

  1. ブラウザ起動
  2. authenticatorにアクセスする
  3. インストールをクリックする
  4. ブラウザ上部にAuthenticatorのボタンができる

2. 登録

  1. ブラウザ上部のAuthenticatorボタンをクリックする
  2. Edit(鉛筆アイコン)をクリックする
    f:id:ytyaru:20181005114505p:plain
  3. (追加)をクリックする
    f:id:ytyaru:20181005114558p:plain
  4. 手動入力をクリックする
    f:id:ytyaru:20181005114759p:plain
  5. アカウント名シークレットに各サービスから取得した任意の値を入力する
    f:id:ytyaru:20181005114818p:plain
  6. 算出方式を選択する(タイムベース(TOTP)で大体OKだろうが各サービスに合わせる)
    f:id:ytyaru:20181005114835p:plain
  7. OKボタンをクリックする

3. コード生成

  1. ブラウザ上部のAuthenticatorボタンをクリックする
  2. 登録したアカウントのコードが表示されている
    f:id:ytyaru:20181005120314p:plain
  3. クリックするとコピーされる
    f:id:ytyaru:20181005120407p:plain

 あとはコードを入力するサイトにペーストすればいい。30秒ごとにコードが変化するので予めサイトを用意しておくと良い。

問題

  • 登録しづらい
  • セキュリティ下がる

登録しづらい

 登録時、Authenticatorのエディタを開いたままコピペできない。

 アカウント名シークレットを入力するとき、それぞれを他のテキストエディタ等からコピーしようとウィンドウを移動させると、Authenticatorのエディタ画面が閉じてしまう。

対策

  • A アカウント名シークレットを予めまとめてクリップボードにコピーしておく
  • B authenticatorのエディタ画面で一旦適当な値を入力して保存し、エクスポートし、値を変更してインポートする

 Aのほうが楽だが、今回は authenticatorアドオンの機能確認もしたいのでBにする。

B. インポート案

  1. ブラウザ上部のAuthenticatorボタンをクリックする
  2. Edit(鉛筆アイコン)をクリックする
    f:id:ytyaru:20181005114505p:plain
  3. (追加)をクリックする
    f:id:ytyaru:20181005114558p:plain
  4. 手動入力をクリックする
    f:id:ytyaru:20181005114759p:plain
  5. 適当な値を入力して保存する(アカウント名: ACCOUNT, シークレット: SECRET
    f:id:ytyaru:20181005114818p:plain
  6. 設定をクリックする
    f:id:ytyaru:20181005121547p:plain
  7. エクスポート/インポートをクリックする
    f:id:ytyaru:20181005121957p:plain
  8. バックアップファイルのダウンロードをクリックする
    f:id:ytyaru:20181005122055p:plain
  9. authenticator.jsonファイルがダウンロードされる
  10. テキストエディタでファイルを開き、accountsecretの値を任意に変更する
  11. ブラウザ上部のAuthenticatorボタンをクリックする
  12. 設定エクスポート/インポートバックアップのインポートをクリックする
    f:id:ytyaru:20181005122055p:plain
  13. ブラウザでAuthenticatorの新しいタブが開くのでバックアップのインポートをクリックする
    f:id:ytyaru:20181005122309p:plain
  14. 編集したauthenticator.jsonを選択してOpenボタンをクリックする
  15. 成功しました。と表示される
    f:id:ytyaru:20181005122927p:plain

 以下、バックアップファイルの書式。

authenticator.json

{
  "44c7be48226ebad5dca8216674cad62b": {
    "account": "ACCOUNT",
    "counter": 0,
    "encrypted": false,
    "hash": "44c7be48226ebad5dca8216674cad62b",
    "index": 0,
    "issuer": "",
    "secret": "SECRET",
    "type": "totp"
  }
}

セキュリティ下がる

 authenticatorを使えばすぐにコードを入力できて便利だが、セキュリティの強度は下がる。

バックアップファイル

 たとえばバックアップファイルやデータを抜き取られる可能性がある。離席時に操作されたり、遠隔操作されたらアウト。

アカウント名

 おそらくアカウント名にはサービスとアカウント名を入力するだろう。つまり、サービス、アカウント名、トークン(コード)が紐付いてしまう。

ブラウザ一元管理

 ブラウザには標準でパスワード管理機能がある。authenticatorトークンも保存してしまうと、サービス、アカウント名、パスワード、トークンが紐付いたデータが揃ってしまう。

 要するに、ブラウザで一元管理してしまっているのが問題。ブラウザからデータを抜き取られたらアカウントが乗っ取られる。

 本来の二要素認証はスマホなどPCとは別のデバイスに分散するからこそセキュリティを保てる。

アドオンの危険性

 Stylishというアドオンが裏でユーザの閲覧URLを盗み取っていたというニュースがあった。アドオンならそんなこともできてしまうらしい。authenticatorは大丈夫なの? 今は大丈夫でもいつかこっそりアップデートで変更されたりしない? それをどうやって判断すればいいの?

 設定ソースコードで実装を確認できそう。でもインストールされたものと違うかもしれない。SHAで一致確認したり、通信を監視するなどしないと安全確認ができない。

f:id:ytyaru:20181005121957p:plain

DropBoxへ自動バックアップ

 設定の項目にDropBoxへ自動バックアップとある。鍵であるトークンをオンラインストレージにアップロードしてしまうのは危険ではないのか?

f:id:ytyaru:20181005121957p:plain

 利便性とセキュリティリスクはトレードオフ。どちらかを取ればどちらかを失う。理解して使うべき。

 私は使いたくない。そもそもトークンは自分のみが持っているべき。わざわざ外部サービスにアップロードなどして漏洩したらどうするの。

 代わりにUSBメモリを使ってバックアップファイルを別マシンに移したり、ファイアウォールを立ててLAN内通信で受け渡すのが安全。

二要素認証とは?

 そもそも二要素認証とは? 本人確認する手段のひとつである。

多要素認証

アクセス権を得るのに必要な本人確認のための要素(証拠)を複数、ユーザーに要求する認証方式である。

 従来はパスワードだけだった。多要素認証はパスワードに加え、トークンや生体認証を使う。

 二要素認証(2FA)、二段階認証、ワンタイムパスワード(OTP)などともいう。

以前

 GitHubで二要素認証しようと試みたことがある。

 スマホ持ってないし、電話番号も渡したくなかった。そこでトークンから6桁のコードを算出するツールを用いた。

 WindowsならWinAuthLinuxなど他のOSならpyotpというツールを使った。これと同じことができるのが今回のauthenticator