LinuxでBadUSBを用いた(実質)二段階認証
以前 セブンペイの事件をきっかけに二段階認証に注目が集まりましたが、今回はその時にたまたま思いついた BadUSBを(実質)物理鍵として使い二段階認証を行う方法について紹介したいと思います。
一応先に書いておきますが、悪用厳禁です!
BadUSBとは
BadUSBとは USBのファームウェアに、検出不能な状態でマルウェアを送り込み ファームウェアを書き換えることなどができるUSBの設計上の脆弱性が存在し、これを悪用するハッキング手法を指します。
上記の脆弱性を利用してUSBデバイスをキーボードとして認識させることで 接続したPCに対してキーストローク・インジェクション攻撃をすることができます。
今回はこれをうまく利用し、USBにブルートフォースでは破れない強度のパスワードを入力させることで(実質)物理鍵として使います。
BadUSBについて詳しくは下記の動画を参考にしてください。
BadUSB - On Accessories that Turn Evil by Karsten Nohl + Jakob Lell
必要なもの
BadUSBといえばHAK5GEARの USB Rubber Ducky が有名ですが、用意するのが大変なため、今回はBadUSBに代用できて安価かつ比較的容易に入手できるDigisparkを使います。
DigisparkはAmazonなどで1個約300円程度で購入できます。
HiLetgo Digispark Kickstarter ATTINY85 Micro USB 開発ボード Arduinoに対応(2個セット) [並行輸入品]
- 出版社/メーカー: HiLetgo
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
Arduino IDEの導入
Arduino IDEを用いてDigisparkへの命令の書き込みを行います。
ペイロード
下記のスケッチをDigisparkに書き込みます
パスワードは数字、英文字、記号を含めた40字以上が望ましいです。
#include "DigiKeyboard.h"
void setup() {
// put your setup code here, to run once:
DigiKeyboard.delay(2000);
DigiKeyboard.print("ここにパスワード");
DigiKeyboard.delay(300);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(500);
}
void loop() {
// put your main code here, to run repeatedly:
}
ディスク暗号化したLinux
最後にディスク暗号化したLinuxをインストールします。
ディストロは何でも構いません
(例: Debian)
インストールする際に暗号化オプションを選択して、Digisparkに書き込んだものと同じパスワードを設定してください。
完成するとこんな風になります
パソコン用にUSBを使った二段階認証()#badusb pic.twitter.com/8IwlsNwOSA
— sak (@sak_3_9) July 6, 2019
注意点
キーボード配列の問題
Digisparkは標準ではUSキーボードの動作をするため、日本語配列のキーストロークを送る場合は "DigiKeyboard.h" の内容をいじる必要があります。
セキュリティの問題
作成したUSB鍵はパスワード入力画面以外(テキストエディタ上など)で使うとパスワードがバレてしまうので、注意が必要です。(そのための二段階ですが)
それではより良いLinuxライフを!