はじめまして。冬なのに冬眠してないクマさんです。 いろいろと忙しかった今年も残すところあと27日。 そんな中、僕はペネトレーションテストの実験環境をせっせと構築してます。 まぁ、それはさておき、今回は徳丸先生の動画を参考にしてDigest認証に対する 中間者攻撃をしていこうと思います。
そもそもDigest認証ってなに?
Digest認証とは、WebサーバとWebブラウザなどの間で利用者の認証を行う方式の一つで、認証情報をハッシュ化して送受信する方式。
http://e-words.jp/w/Digest認証.html
http認証の一種であり、TLSで暗号化されていない通信においてもパスワードをハッシュ化して送るため、 平文で送るBasic認証よりも安全とされている認証方式です。 詳しくはhttps://tools.ietf.org/html/rfc7616に書いてあるのでよかったらぜひ。 えっ! 通信を暗号化しなくてもパスワードを送れるなんてちょー便利とか思ったでしょ ところがどっこい安全ではありません。ということを確認していきましょう!
必要な道具とかとか
- Webサーバー(自分が管理しているものにしましょう。間違っても他人のサイトでやらないように!)
- Firefox(Chromeでもsafariでもいいです。)
- OWASP ZAP(Web脆弱性診断ツール)
- Kali Linux(ペネトレーションテストに必要なツールがあらかた入っているディストロ)
これらを揃えればもうあなたは、ペネトレーションテスターです。
揃え方とかは、Qiitaとかに記事があるのでご自分で頑張ってください。 また、ちょっと古いですがペネトレーションテスト環境の構築にはこの本がとても参考になります。 ↓
https://book.mynavi.jp/ec/products/detail/id=55879
いざ、実践!
まずは OWASP ZAPでローカルプロキシを設定します。 そして、Firefoxで先程立てたプロキシに接続するように設定しましょう。 ここら辺もQiitaとかに記事があるのでそれらを参考にしながらやってください。 あっ、大事なことを言い忘れていました。 OWASP ZAPですが予想外の攻撃を防ぐために"標準モード"ではなく"プロテクトモード"にしてください。 次に、Webサーバーの方でDigest認証の設定をしましょう。 設定方法は、上記の動画を参考にどうぞ。
OWASP ZAPを開くと上のような画面が表示されます。 そして、対象のwebサイトをブラウザで開き、httpステータスコードが401のレスポンスを見ます。
この時点で、察しの良い方は気づいていると思いますが、アルゴリズムがMD5なので簡単にハッシュを求められてしまいます。今回は利用しませんが。
先程のレスポンスにブレークポイント設定して、通信を一旦堰き止めます。 その後、上のようにリクエストを改竄し、また流しましょう。
すると、ユーザーがユーザー名とパスワードを入力した後、 クライアントからのリクエストの中にこのような行が含まれていると思います。 ちゃんとBasic認証にダウングレードできていますね。 そしたらツールのエンコード/デコード/ハッシュという機能を用いて、デコードします。
これでユーザー名とパスワードをめでたくゲットできました。👏👏👏
(設定の時にユーザー名をタイプミスしてuse1にしてしまった。恥ずかしい)
あとは、適当に流しておけば、ブラウザにもう一度入力するように表示され、
ユーザーはパスワードを間違えたのかなと思い再度入力します。
今度は正しくページが表示されるでしょう。
まとめ
いかにDigest認証が中間者攻撃に脆弱なのかがわかっていただけたでしょうか? このような攻撃に対処するにはTLSで通信を暗号化することです。 しかし、この他にもDigest認証には問題があります。 まぁ、それについてはまたどこかで。 それと、実際の攻撃では偽のアクセスポイント等を立てる必要があります。 これについては、暇なときテストしてみようかなぁと思っています。
というわけで、皆様、体調に気をつけて良いお年をお過ごしください。
ありがとうございました〜