このサイトは現在WordPressで管理されています.メジャーなアプリケーションなので攻撃も多いです.パスワードを少し長く二十数文字にしていますが少し不安.ということで多要素認証を使うことにしました.
タグ: TOTP
CLI なワンタイムパスワードマネージャの cloak を試す
Rust製のコマンドラインで動作するワンタイムパスワードマネージャです.TOTP/HOTP に対応しています.
導入
$ sudo apt install cargo
$ cargo install cloak
~/.cargo/
以下に導入される
試してみる
$ ~/.cargo/bin/cloak --help cloak 0.1.0 Evans Murithi <murithievans80@gmail.com> A Command Line OTP Authenticator application. USAGE: cloak [SUBCOMMAND] FLAGS: -h, --help Prints help information -V, --version Prints version information SUBCOMMANDS: add Add a new account delete Delete an account help Prints this message or the help of the given subcommand(s) list List OTP for all accounts recovery_codes View recovery codes for an account view View the OTP for an account
add
サブコマンドで登録する$ ~/.cargo/bin/cloak add --help cloak-add Add a new account USAGE: cloak add [FLAGS] [OPTIONS] <account> <key> FLAGS: -h, --help Prints help information --hotp Counter based account --totp Time based account (default) -V, --version Prints version information OPTIONS: -a, --algorithm <ALGORITHM> Algorithm to use to generate the OTP code [possible values: SHA1, SHA256, SHA384, SHA512, SHA512_256] ARGS: <account> Name of the account <key> Secret key of the OTP $ ~/.cargo/bin/cloak add matoken@home.nextcloud M0KMYFVOZY7AGX47 Account successfully created
$ ~/.cargo/bin/cloak list Account: matoken@home.nextcloud TOTP: 538273
$ ~/.cargo/bin/cloak view matoken@home.nextcloud 370696
$ cat ~/.cloak/accounts ["matoken@home.nextcloud"] key = "M0KMYFVOZY7AGX47" totp = true hash_function = "SHA1"
$ ls -l ~/.cloak/accounts -rw-r--r-- 1 matoken matoken 87 9月 22 06:19 /home/matoken/.cloak/accounts $ chmod -R go-rx ~/.cloak $ chattr +s ~/.cloak/accounts $ ls -la ~/.cloak 合計 12 drwx------ 2 matoken matoken 4096 9月 22 06:19 . drwxr-xr-x 62 matoken matoken 4096 9月 23 19:58 .. -rw------- 1 matoken matoken 87 9月 22 06:19 accounts
秘密鍵が平文でそのままファイルに格納されるので最低でもecryptfsは設定しておかないとかなな感じ?
私は現在はoathtoolを使ったscriptを使っています.秘密鍵はファイルに手で書いて暗号化しておきscript実行時に復号してoathtoolに渡してTOTP表示という感じ.若しくはKeePassCX.
環境
$ ~/.cargo/bin/cloak -V cloak 0.1.0 $ dpkg-query -W cargo cargo 0.29.0-1 $ lsb_release -d Description: Debian GNU/Linux unstable (sid) $ uname -m x86_64
Nextcloud 14 の Telegram を使った2要素認証
先日ファイル共有ソフトの Nextcloud 14がリリースされました.
新機能のうちSignal/Telegram/SMS による2要素認証のサポートが気になります.
Signal/Telegram/SMS 2FA support
A new 2-factor authentication provider named ‘gateway’ was introduced which allows users to use the secure messaging apps Signal and Telegram as well as various SMS gateways as second factor to secure their authentication.
SMSはplaySMS, websms.deを利用するようです.SignalもTelegramもセキュアなメッセージングサービスなのでこういう用途に向いていそうです.どちらも公式でLinux x86_64のデスクトップアプリが提供されています.アプリの出来は今の所Telegramのほうが上だと思います.Arm Linuxだと公式のものはないのですが,TelegramについてはCLIのアプリがあり,Raspberry Pi の Raspbian stretch でも要patchで動作しました.(Webアプリもあるのでそちらでも動作すると思うが未確認)
SMSはやったことがあるし,Telegram が使いやすい.てことでTelegramの設定をしてみました.まだ未実装な機能が多くちょっと面倒なのでメモしておきます.
Two-Factor Gateway の導入
Nextcloud 14に Two-Factor Gateway アプリを導入します.管理者アカウントで「アプリ」の「セキュリティ」から導入するのが楽でしょう.
導入するとNextcloudの「設定」の「セキュリティ」の中に「Message gateway second-factor auth」という項目が現れますが,設定が出来ません.
GitHubのドキュメントをみると未だ未実装の機能が多いようです.
Telegram Bot の作成
TOTPコードの送信する Telegram Bot を作成します.作成はTelegram のドキュメントを参照して作成します.
BotFather と会話してbot作成
BotFather という bot 管理用の bot が居るので,会話してbot を作成します.
/newbot
コマンドで新しい bot の作成が始まります.botの名前を効かれるので答えます.続いて bot の username
を求められます.この username は最後に bot
とつける必要があります.
成功するとアクセストークンが表示されるのでメモして次の手旬に移ります.以下の例では 640093430:AAFTa_pSAcKCZWeFoVDt-l7h7ewqzNe0Luo
がトークンです.
Done! Congratulations on your new bot. You will find it at t.me/matoken_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this. Use this token to access the HTTP API: 640093430:AAFTa_pSAcKCZWeFoVDt-l7h7ewqzNe0Luo For a description of the Bot API, see this page: https://core.telegram.org/bots/api
occ コマンドで Telegram bot のトークン設定
Nextcloud のインストールされている場所に Nextcloud 管理用の occ
コマンドがあります.このコマンドで Telegram bot のトークンを設定します.
トークンの 640093430:
部分は省いてその後ろだけを入力します.
$ sudo -u www-data php ./occ twofactorauth:gateway:configure telegram Please enter your Telegram bot token: AAFTa_pSAcKCZWeFoVDt-l7h7ewqzNe0Luo Using AAFTa_pSAcKCZWeFoVDt-l7h7ewqzNe0Luo. $ sudo -u www-data php ./occ twofactorauth:gateway:status Signal gateway: not configured SMS gateway: not configured Telegram gateway: configured
ひとまずこれで管理者側の設定は終了です.
Telegram bot の chat_id を調べて登録する
ここからはNextcloud の利用アカウントでの操作になります.
Telegram
In order to receive authentication codes via Telegram, you first have to start a new chat with the bot set up by your admin.
Secondly, you have to obtain your Telegram ID via the ID Bot. Enter this ID to receive your verification code below.You are not using Telegram for two-factor authentication at the moment. Enable
Telegram アプリを利用して,Telegram の bot から TOTPコードを受け取りたい Telegram アカウントに適当なメッセージを投げます.
@matoken hello
その後,Telegram API を利用してメッセージを取得して chat_id を調べます.
以下の例では 475721977
です.
$ curl https://api.telegram.org/bot640093430:AAHu9u_c12KC2PY8g22QZoA94u4tAJvxsvY/getUpdates | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 358 100 358 0 0 315 0 0:00:01 0:00:01 --:--:-- 315 { "ok": true, "result": [ { "update_id": 612249686, "message": { "message_id": 9, "from": { "id": 475721977, "is_bot": false, "first_name": "matoken", "username": "matoken", "language_code": "En" }, "chat": { "id": 475721977, "first_name": "matoken", "username": "matoken", "type": "private" }, "date": 1537282406, "text": "@matoken hello", "entities": [ { "offset": 0, "length": 8, "type": "mention" } ] } } ] }
試しに送信してみて Telegram アプリに bot からメッセージが飛んできたら chat id が正しいはず.
$ curl -X POST "https://api.telegram.org/bot640093430:AAHu9u_c12KC2PY8g22QZoA94u4tAJvxsvY" -d "chat_id=475721977&text=hello" | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 274 100 246 100 28 179 20 0:00:01 0:00:01 --:--:-- 200 { "ok": true, "result": { "message_id": 15, "from": { "id": 640093430, "is_bot": true, "first_name": "matoken_bot", "username": "matoken_bot" }, "chat": { "id": 475721977, "first_name": "matoken", "username": "matoken", "type": "private" }, "date": 1537312183, "text": "hello" } }
Nextcloud にログインして,「設定」→「セキュリティ」の下部に「Message gateway second-factor auth」という項目が出来ているので「Enable」を押す.
Telegram In order to receive authentication codes via Telegram, you first have to start a new chat with the bot set up by your admin. Secondly, you have to obtain your Telegram ID via the ID Bot. Enter this ID to receive your verification code below. You are not using Telegram for two-factor authentication at the moment. Enable
以下のメッセージが表示されたら chat_id
を入力して Verify
します.
Enter your identification (e.g. phone number to start the verification): Verify
Telegram で TOTPコードが飛んで来るのでそれを入力したらOKです.
一旦ログアウトして試してみましょう.
Telegram 認証を試す
めんどくさい……
未だ手順が面倒で一般ユーザに試してくれと言える状態ではないですね.でも次のリリースあたりでは簡単になるんじゃないでしょうか.
環境
$ sudo -u www-data php ./occ app:list|grep twofactor_|grep : - twofactor_backupcodes: 1.3.1 - twofactor_gateway: 0.9.0 - twofactor_totp: 1.5.0 $ sudo -u www-data php ./occ -V Nextcloud 14.0.0 $ lsb_release -d Description: Ubuntu 16.04.5 LTS $ uname -m x86_64
KeePassXC の Steam TOTP を試す
Steam ガードというスマートフォンアプリを使ったValve独自TOTPな多要素認証があります.これは通常のTOTP(rfc6238)と違い独自実装で数字だけではなくアルファベットも利用しているのでOATH ToolkitやGoogle Authenticatorでは認証できません.
Steam ガードのTOTPはValve独自ですが一応いくつかの実装はあります.(未検証)
KeepassXC にも TOTP(KeePassXC 2.2.0以降)と Steam ガードの TOTP(KeePassXC 2.3.0以降)がサポートされています.今回これを試してみました.
a generator for time-based one-time passwords (TOTP)
Add support for Steam one-time passwords [#1206]
しかし,これらを試すにはSteam Guard Mobile Authenticatorを設定したスマートフォンの中からTOTPの秘密鍵を入手する必要があります.以前のAndroidではadb backup するだけで鍵の書かれたファイルが入手できていたらしいのですが現在は暗号化されていてこの手順では入手できないようです.
GitHubにAPKにpatchするscriptが公開されていたのでまずはこれを試してみました.
これがうまく行けば以前のようにadb backupが出来るようになるはずです.しかし,バージョンの問題か失敗しました.
別の方法としてAndroidのroot取得済み端末にSteam Guard Mobile Authenticatorを導入してこちらの端末を有効にして秘密鍵を取得しました.
$ adb shell #Android shellを起動してファイル名を確認 1|shell@MK16i:/ $ su root@MK16i:/ # ls -l /data/data/com.valvesoftware.android.steam.community/files/ -rw-rw---- u0_a59 u0_a59 448 2018-08-31 22:25 Steamguard-76561198085918260 root@MK16i:/ # exit root@MK16i:/ $ exit #AndroidからexitしてPCに戻る $ adb root #rootになる $ adb pull /data/data/com.valvesoftware.android.steam.community/files/Steamguard-76561198085918260 #ファイル取得 $ adb kill-server #adb server終了 $ file Steamguard-76561198085918260 Steamguard-76561198085918260: ASCII text, with very long lines, with no line terminators $ lv Steamguard-76561198085918260 $ jq .uri Steamguard-76561198085918260 | sed -e 's/^.*=\(.*\)&.*$/\1/' #鍵表示 OXYBZQLEOB7KKFAPERMN8EGNOLJWEDYZ $ shred -uz Steamguard-76561198085918260 #ファイル消去
取得した鍵をKeePassXCに登録してみます.
Steamの設定上で右クリック,「タイムベースワンタイムパスワード」→「TOTP の設定…」から「キー」に設定します.
登録した後Steamの設定上で右クリック,「タイムベースワンタイムパスワード」→「TOTP を表示」でトークンが表示できます.
Androidスマートフォンアプリと見比べてみると同じトークンが表示され,Steamにもloginできます :)
Steam Guard Mobile Authenticatorは同時に1端末しか登録できず,2台目を設定すると1台目の端末の鍵が無効にされます.なのでKeePassXCを利用する場合はroot端末と併用するか,root端末から消してKeePassXCのみで運用するしかなさそうです.
いいえ、ひとつのアカウントで一度に有効化できる認証機器はひとつだけです。
もう一つ問題が.KeePassXCにはcli版が同梱されているのですが,バージョン2.3.4時点ではTOTPのオプションが見当たりません.GUIのみの利用となりそうです.
$ keepassxc-cli -h Usage: keepassxc-cli [options] command KeePassXC command line interface. Available commands: add Add a new entry to a database. clip Copy an entry's password to the clipboard. diceware Generate a new random diceware passphrase. edit Edit an entry. estimate Estimate the entropy of a password. extract Extract and print the content of a database. generate Generate a new random password. locate Find entries quickly. ls List database entries. merge Merge two databases. rm Remove an entry from the database. show Show an entry's information. Options: -h, --help Displays this help. -v, --version Displays version information. Arguments: command Name of the command to execute. $ keepassxc-cli -v 2.3.4
$ dpkg-query -W keepassxc keepassxc 2.3.4+dfsg.1-1 $ lsb_release -d Description: Debian GNU/Linux unstable (sid) $ uname -m x86_64
GNU socialに2要素認証を
Mastodonなどでは使える2要素認証ですが,GNU socialにはありません.
先日 GNU social を nightly にしたのでこれが利用できそうです.
Plugin形式で戻すのも簡単そうだし試してみました.
backup
dbとファイルをバックアップしておきます.
|
GNU social の source ディレクトリに移動して 2fa を marge する
|
動いているGNU social環境にcopy
|
config.phpに以下の行を追加してTwoFactorAuth pluginを有効にする
|
動作確認
設定画面の左側に 2FA という項目が増える.
「Require secondary authentication upon login」のチェックボックスにチェックを付けて SAVE で2FAが有効になる.
Default provider で常用する2FA方式を選択しておくと便利です.
認証には,「FIDO 2.0」「TOTP」「U2F」が利用できます.
自分はTOTPを利用しています.TOTPの場合スマホアプリのGoogle Autharicatorなどが使えます.QR CodeやKEYを使ってアプリに登録します.
自分は信頼できるスマホを持っていないのでoathtoolを使って適当なscriptを書いて使っています.
|
バックアップコードも保存しておきましょう.
この状態で一旦GNU socialをログアウト,いつものID/PASSWORDでログインすると2FAの認証画面になるので,認証情報を入力してログインします.
既定値以外の認証情報を用いたい場合は「Try another way to sign in.」から選択可能です.
bug?
認証後真っ白な画面若しくは「Aythentication success!」と表示されるけど認証画面になります.多分バグです.URLを手動で編集したらログインできています.
サードパーティアプリケーションの対応
スマホアプリなどを利用している場合はパスワードを変更しなければいけません.
2FAの設定画面の「Application Passwords」の「ADD APPLICATION」ボタンから追加します.「Application name」に識別用の適当な名前を入れて,「Generate」ボタンでパスワードが生成されます.必要が無くなったら「Revoke」で消しましょう.
AndroidアプリのTwidereでは認証情報の変更画面が見当たりませんでした,アカウントの追加をして何時ものhost/id/新しい2faアプリケーションパスワードを設定するとすでにアカウントがあるとか言われて認証情報が書き換わりました.
という感じでとりあえず利用できるようになりました.
GNU socialでは結構長く放置されているので暫くは入らないような感じですかね.
バグはTOTP利用してる人が居ない?Ubico YubiKeyとかほしいですね.