Armadilloフォーラム

シリアルポートでのbrute force attack対策

tmygt

2024年3月1日 17時22分

シリアルポートを有効にするべきかどうか検討しています。
ユーザ/攻撃者に意図しない操作をしてほしくない反面、不具合/故障解析用途ではシリアルポートが生きていると便利です。

そこで、質問なのですが、シリアルポート経由のPWに対するbrute force attack対策は何か実現可能なのでしょうか?
例えば一定回数ログインに失敗するとロックしたり、次のログインを試せるまでの時間が長くなったりするなどの設定は可能でしょうか

実機で何回かでたらめなPWを試してみたのですが、下記のようなメッセージが表示されるだけでロックや待機時間の変化はなかったです。

armadillo login: root
Password:
Maximum number of tries exceeded
コメント

at_dominique.m…

2024年3月1日 18時28分

tmygtさん、

いつもお世話になっています、
マルティネです。

> そこで、質問なのですが、シリアルポート経由のPWに対するbrute force attack対策は何か実現可能なのでしょうか?
> 例えば一定回数ログインに失敗するとロックしたり、次のログインを試せるまでの時間が長くなったりするなどの設定は可能でしょうか

そういうのは特にないです。

理由は二つあります:
* シリアルでログインを間違うと login コマンドがすでに2秒ほど待ってくれてます(実際に計ってみたら expect で最大スピードでログインを試すと1分で25-26回の入力は可能です)
パスワードはある程度複雑でしたら bruteforce できないレベルです(すでにシンプルなランダムな6文字[a-z]だけでも、2^26 (チョイス)/26(回/分)/60/24(分/1日)/365 = 22.60 なので、平均で11年かかります。現代に一般な8文字[a-zA-Z0-9]でしたら15977352年…)
(ちなみに abos-web も2秒の待ち時間を実施しています)
* つまらない理由ですが、busybox init の respawn 機能にリスタートを送らせる機能はないので、簡単に有効できる機能ではありません(スクリプトか何かで代用はできますが、メリットは見えてません)

jtag/SD ブートを無効にして、uboot の prompt が無効化になっている場合はシリアルからの攻撃のリスクはほぼないと考えています。

参考までに、自分が攻撃するなら、シリアルで簡単なパスワードはダメな場合はすぐに以下の順番で確認すると思います:
* uboot に入れるかどうか、SD ブートできるかどうか。
* アプリまわり / アップデート仕組みを調べる (swupdate はすでに fuzzing して特に問題を見つけてませんが、イメージが暗号化されてなければ情報をもらえますし、何かの処理ミスの可能性もあります)。
* USB が自動マウントされるままでしたら(ABOS のアップデートのためにデフォルトでマウントしています)、丁寧に壊れてるファイルシステムで実行できる不具合はたまにでてきますのでその方向を試します。シリアルで情報があれば(カーネルのバージョン、usb入力時の情報など)攻撃の参考になりますので、デフォルトで login: プロンプト以外に何も表示させないのもいいかもしれません(uboot の 'console' 変数を none などにして、/etc/issue をブランクにする)。
* eMMC を外して直接に読み取ってからパスワードを変更や bruteforce を行う。

よろしくお願いします。

マルティネさん

コメントありがとうございます。
expectでの実測結果をみると、確かに十分な長さのランダムなパスワードを設定することで現状でも問題なさそうですね。

> 参考までに、自分が攻撃するなら、シリアルで簡単なパスワードはダメな場合はすぐに以下の順番で確認すると思います:
こちらのコメントもありがとうございます。参考になります。

ubootのプロンプト無効化、jtag無効化、eMMC暗号化、USB無効化は実施するつもりでした。
SDカードブートについては少し悩んでいるので、別の投稿で質問させてください。

よろしくお願いいたします。