- 2020年4月21日
- ヨシダですけど
【OWASP ZAP】辞書攻撃でログインページを突破する方法
どーも、 レオンリモートワーク部 部長 のヨシダです。
本日は脆弱性診断ツールとして有名な OWASP ZAP(以下ZAP)を、逆に攻撃に使ってみましたので、その紹介をしたいと思います。
最初に言っておきますが、絶対に悪用はしないでください。
セキュリティが甘いと、(こんな感じでやられてしまうんだ…)という認識をもっていただきたくて、ブログにしました。
以前、WordPressサイトをクラッキングする際は、ツールとして WPScan を使用してログインページを突破しましたが、今回は、WordPressサイトに限らず、一般的なログインページを想定しております。
参考:WordPressのサイトをハッキング(クラッキング)する方法と対策
ZAPとは
ZAPとは主にWebアプリケーションの脆弱性診断に使用するツールです。
設定や使い方はこちらの記事が参考になると思います。
今回はこのZAPのファジング機能を利用して、攻撃をしていきます。
辞書攻撃とは
パスワードの割り出しや暗号の解読に使われる攻撃手法で辞書にある単語を使う方法のことです。パスワード破りに使用する際には、辞書にある単語を片端から入力して試すことを繰り返します。覚えやすいように意味のある単語をパスワードとして登録した場合が多いためこのような攻撃手法があります。
対処法としては、人名や意味のある単語をパスワードに用いないことや、記号や数字などをランダムに組み合わせることなどが挙げられます。また情報システム側では連続して誤ったパスワードが入力されたときにはアカウントを一時的に無効にしたりすることにより対処できます。
引用元:辞書攻撃(Dictionary Attack)
辞書にある単語一覧のファイル(辞書ファイル)は、インターネット上に多数存在していますが(よく使われるパスワードTOP100 など)、今回は自分でこの辞書ファイルを作成してみました。
環境準備
ログインページにて、以下の内容を入力して「ログイン」すると、トップページにリダイレクトするWEBアプリケーションをAWS上に作成しました。
メールアドレス:login@example.com
パスワード:password
↓
↓
このとき、ZAPのHistory(履歴)は以下の画像のとおり。
302リダイレクトでトップページに遷移しているのがわかります。
また、ログインに失敗したときは、「メールアドレスかパスワードが間違っています。」というエラーメッセージが表示されて、リダイレクトはされません。
このとき、ZAPのHistory(履歴)は以下の画像のとおり。
ログイン失敗しているのに 200 OK になっているのは、エラーを表示するシステム自体がちゃんと動いているためです。
ちなみにソースはこんな感じです(笑)
おもいっきり、ソースにIDとパスワードが書いてるという…笑
本来はDBを使用して、しっかりIDパスワードを検証するようにログインページを作成しますが、めんどくさかったので、今回はこれでお許しを←
※こんなへぼへぼログインページは絶対に作らないでください。
次に、辞書攻撃に使用する辞書ファイルを作成します。
あらかじめパスワードがわかっている状態なので、例としてこんな感じで作成してみました。
7行目に合致するパスワードを記載しました。
これで準備は完了です。
辞書攻撃をやってみる
今回、攻撃者はユーザのメールアドレスが「login@example.com」であるとあらかじめわかっていて、あとはパスワードさえ突破できればOKという状況であると考えてください。
まずはZAPのHistoryから、認証失敗したときのPOST(パスワード:wakaranai で送信しました)を右クリック。
その中のFuzzerを選択します。
パスワードのパラメータをドラッグして、右上の「Add」をクリックします。
もう一度「Add」をクリックすると、「Add Payload」がでてくるので、「File」から作成した辞書ファイルを選択します。
「OK」をクリックして、「Start Fuzzer」をクリックすれば、「password」のパラメータにさきほどの辞書ファイル(dictionary-passwd.txt)が1行ずつ自動で入力されていきます。
結果は、以下のとおり!
7行目にてパスワードが「password」のとき以降、302リダイレクトしているのがZAPのHistory(履歴)からわかります。
(おそらくセッションの関係で、ログイン成功のあとのPOSTも302リダイレクトが行われる)
つまり攻撃者は「あ!パスワードは password なんだね!」というのがわかってしまいます。
これがZAPのファジング機能を利用した辞書攻撃方法です。
ZAPじゃなくてもできるのはここだけの話←
対策方法
そもそもシステム側で、パスワード設定時は辞書に含まれる言葉を許容しないといった、パスワードポリシーをしっかり設定することが重要です。
レオンテクノロジーでは以下のNISTの推奨設定をおすすめしております。
- 最小8文字以上、最大64文字以上
- 複雑性など、他の要素を課すべきではない。すべて数字でもよい
- 過去に漏えいが確認されたパスワードを許容しない
- 辞書に含まれる言葉を許容しない
- 文字の繰り返しや順番で用いることを許容しない
- サービス名、ユーザ名など文脈から特定可能な単語を含まない
ほかにも、多要素認証の実装や、WAFの設置、アカウントロックといった対策方法があります。
アカウントロックとは、10回以上ログインを失敗したら、そのアカウントを一定時間ログインできないようにするような実装のことです。
reCAPTCHAを設置するのも対策のひとつで、設定もお手軽なのでおすすめです。
まとめ
攻撃者はこういったツールを使用して、ユーザのログインページを突破しようとしてきます。
システムを開発する側は、上記の対策方法をしっかり設定しておくことが重要です。
ユーザ側も、パスワードの管理やパスワードの設定時には、十分に気をつけてください。
セキュリティのご相談は、随時受け付けてますので、お気軽にレオンテクノロジーまでお問い合わせください!
あと、このブログを見て悪用は絶対にしないでくださいね。
IPなどから特定されて、タイーホされますよ〜( ̄▽ ̄)
ありがとうございました。