前の投稿で書いたものをもう少し汎用的にしてみた。
家庭用ルーター管理画面では多くの場合、
・HTTPSでのサーバー(ルータ)検証ができない
・Hostヘッダチェックを行なっておらずDNS rebindingに脆弱
・BASIC認証を利用
という前提を満たす事を利用する、汎用的なルータパスワードフィッシング手法を考えてみた。
フィッシングで正しいルーターに紛らわしいドメイン(たとえば192.168.1.1.router.baffalo.tld)で認証してしまうよう誘導しDNS rebinding攻撃に成功すると、認証パスワードを平文あるいは脆弱なMD5ハッシュとして取得できる可能性がある。
Hostヘッダチェックを行うだけで根本的な対策になるので、ルータ製造企業はできるだけ実装して欲しい。
BASIC認証にはブラウザが認証状態キャッシュ(=一度認証したらしばらくは認証ダイアログを出さずに自動でパスワードを送信する)を実装しているので、DNS rebindingが認証状態が破棄される前に成功すればパスワードを奪取できる。あるいは、フィッシングに脆弱なユーザによって、パスワード自動入力が効いてしまうかもしれない。
フィッシングは一般に紛らわしいドメイン名で攻撃者のサーバにパスワードを送らせる為、攻撃サイトごとに適切な模倣コンテンツの製作が必要だが、この手法では正規のルータにパスワードを送らせて、ブラウザにキャッシュされたパスワードを奪取する、汎用的な攻撃スクリプトが利用できる。
また、正規のルータであるため、ユーザーが攻撃に気づくことが出来るタイミングが、最初にルーターのパスワードを入力する一回のみであり、その後正しくルーターを管理できてしまう点も、フィッシング成功率を高める可能性がある。LAN内は無条件に安全という誤解から、初級者も引っかかるかもしれない。
この攻撃には、フィッシング用に容易したページ(ランディングページ)と、ルータ管理画面ウィンドウ、2つのウィンドウを経由する。
ランディングページでは、ルータのIPをページロード時間などで検出(あるいは決め打ちでもいい)し、ユーザの到達をサーバに通知してから、ルータのIPを指す偽装ドメインにジャンプする。
ランディングページには例えば、オンラインゲームのインストール紹介を模倣し、ルータのポート開放手順の解説などをする、といったシナリオが考えられる。
偽装ドメインは正規のルータを指すので、ユーザがパスワードを覚えていて、偽装ドメインに気づかなければ、認証は正しく行われる。
この間、偽装ドメインのIPは攻撃者のサーバに振り直されている。
時間が経つと、(うまく行けば未熟なユーザーが設定画面での作業に手間取っている間に、)IPアドレスは攻撃者のサーバを指すようになり、パスワード(かMD5ハッシュ)が攻撃者サーバに送信される。
なお、ブラウザがwindow単位のIP pinningをしている場合、ランディングページを残しておいて、定期的に新しいウィンドウを作成する必要がありそう。ただchromeの挙動をみるとタイムアウト式のpinningしかしていないような。
ルータのパスワードは次のrebinding攻撃時のBASIC認証に利用されるかもしれないし、WAN側管理画面が公開されていればそこから完全なアクセスが入手できる。(徳丸先生の昔の記事がヒットした…rebindingマイナー過ぎる…)
前回の記事ではsessionクッキーを使っていれば、と思ったのだが、最近のルータは基本、BASICかDigest認証を利用しているようだった。
IPベースのセッション管理をしているものもあるみたいだけれど、そもLAN内の通信の安全性が前提なので問題無さそう。
(以下追記)
念のため、この手法はWANでも、Hostをチェックせず(IP直打ちで)HTTPでログイン出来るウェブアプリ全てに成立するはず。
流石にそんな阿呆なサービスはもう絶滅していると思うけれど。
自分の書いたアプリはvirtualhostなのでhttpd上でhostチェックされているはずだけれど、一応HTTPS必須化しておいた。
Chrome@win7でrebindingが通る事を金床氏のデモで確認……
posted by ko-zu at 00:45|
Comment(0)
|
TrackBack(0)
|
セキュリティ
|
|