リバースブルートフォース攻撃の概要と Web アプリにおける対策
リバースブルートフォース攻撃(逆総当たり攻撃、リバースブルートフォースアタック)とは、不正ログインを目的とする攻撃手法で、パスワードなどを固定して、ID 部分を変えながら総当たり的にログイン認証を繰り返していく攻撃です。
「ブルートフォース攻撃(総当たり攻撃)」という攻撃も存在していますが、リバースブルートフォース攻撃はその逆に当たる手法(パスワード部分ではなく ID などの部分の変更)を用いた攻撃になります。
総当たり攻撃の対策として、パスワードを一定回数間違えた場合に、対象アカウントをロックする手法が一般的には知られています。そうすることで「一定回数までしか攻撃者はログインを試せないため安全」という前提が作れるためです。
しかしリバースブルートフォース攻撃では、パスワードではなくユーザー ID 側を変更しながら攻撃を行うため、特定アカウントへの大量の認証施行は行われず、アカウントロック対策の実装方法によっては攻撃を防げない場合があります。
本記事では、特に Web アプリケーションにおけるリバースブルートフォース攻撃の概要から、ブルートフォース攻撃との違い、対策方法について解説していきます。
リバースブルートフォース攻撃とは
リバートブルートフォース攻撃(リバースブルートフォースアタック)について解説する前に、ブルートフォース攻撃について解説していきます。
ブルートフォース攻撃は、総当たり攻撃とも呼ばれるサイバー攻撃の一種です。
パスワード認証を破る攻撃手法で、ID(ユーザー名)を固定した状態でパスワードを変えながら突破できるまで当たり続ける力づくの攻撃になります。
ブルートフォース攻撃はツールやソフトウェアを利用して行われることが一般的で、何十億もの文字、数字、記号の組み合わせを作り繰り返し突破を試みます。
その際に「パスワードに使われやすい単語の辞書」などを用いて攻撃する場合もあり、辞書攻撃(Dictionary attack)と呼ばれることがあります。
このような攻撃に対してよく利用される防御策が「アカウントロック」です。
アカウントロックは、ログイン認証の際に一定の回数パスワードを間違えるとアカウントがロックされ、一定期間ログインができなくなったり、別の方法でロックを解除しないとログインができなくなるような仕組みです。
ブルートフォース攻撃では、同じ ID に対してパスワードを変えながら何回も認証を試みますが、サービス側でアカウントロックが設定されていれば、指定回数以上間違えた場合にアカウントロックが発動します。
アカウントロック後は、ログインできなくなるため、攻撃を妨害・防御することができます。
※ブルートフォース攻撃については こちら で対策方法などを詳しくまとめております。ぜひご一読ください。
ブルートフォース攻撃とリバースブルートフォース攻撃の違い
では、リバースブルートフォース攻撃はブルートフォース攻撃とどう違うのでしょうか。
リバースブルートフォース攻撃はその名の通り、ブルートフォース攻撃の「逆」のことを実行する攻撃です。
前述の通り、ブルートフォース攻撃は ID を固定した状態でパスワードを変えながら当たり続ける攻撃ですが、リバースブルートフォース攻撃は、パスワードの方を固定して ID を変えながら当たり続ける攻撃になります。
(変更される部分が ID ではない別の要素の場合もあります)
リバースブルートフォース攻撃は、特定のアカウントの認証突破を狙うのではなく、どんなアカウントでもいいので突破したいという場合に利用されます。
攻撃者にとって、リバースブルートフォース攻撃を利用する一番のメリットは、サービスのアカウントロックを回避できるということにあります。
システムの実装方法にもよりますが、アカウントロックは指定回数パスワード入力を間違えるとロックがかかる一方で、ID の入力間違いの際は何度間違えてもロックがかからないケースも存在します。
そのためリバースブルートフォース攻撃は、誰もが思いつくような単純なパスワードを設定しているアカウントのあぶり出しで使われることが多いです。
安直なパスワードや、予想しやすいパスワードを使ってはいけない理由がこれになります。
ステルスタイプの攻撃手法 パスワードスプレー
リバースブルートフォース攻撃とよく似た攻撃手法のひとつに「パスワードスプレー(low-and-slow 攻撃)」というものもあります。
パスワードスプレーは、複数のアカウントに対して「同じパスワード」を使って同時にログインを試行する点はリバースブルートフォース攻撃と同じです。
リバースブルートフォース攻撃と異なる点は攻撃のスピードです。
パスワードスプレーでは、存在が確認されているアカウントのリストに対し、アカウントロックが起きないような長い時間間隔(遅いスピード)でログインを試行します。
これは、一般的なアカウントロックの発動条件(ポリシー)が「特定時間内におけるログイン失敗の回数」で発動する仕組みを付け狙っているためです。
こうすることで、攻撃者はそのアカウントロックの発動条件に抵触しないように規定時間を超える間隔でリバートブルートフォース攻撃を行います。
たとえば、24 時間以内に3回の失敗でアカウントロックする場合、2 回の試行から 24 時間後に再度試行することでアカウントロックを回避して試行を再開できるなどです。
これにより攻撃者は時間がかかるものの、攻撃の成功率を高め、攻撃を特定されにくくすることができます。
この手法を利用した攻撃で 2018 年に実害が発生した例もあります。
同年にアメリカの国土安全保障省より注意喚起が行われており、注意が必要な攻撃です。
リバースブルートフォース攻撃への対策
ここまで、リバースブルートフォース攻撃、パスワードスプレーの攻撃手法について解説しました。
ここからは、これらの攻撃への対策方法について解説します。
以下に紹介する対策方法を複数使うことで、多層防御を行うことを本記事では推奨しています。
多要素認証を設定する
多要素認証は、認証の 3 要素である「知識情報」「所持情報」「生体情報」のうち、2 つ以上を組み合わせて認証することを指します。
複数の要素を組み合わせることで、不正なアクセスと正常なアクセスを振り分けることが可能になります。
知識情報(本人が知っていること) |
・パスワード |
---|---|
所持情報(本人が持っているもの) |
・携帯電話情報 |
生体情報(本人固有の特徴) |
・指紋 |
多要素認証は、なりすました不正認証などに対して、強力な効果がありますが、必ずなりすましを防御できるわけではありません。
たとえば生体認証の場合、声紋は録音した音声を使うことでなりすましができる場合がありますし、顔認証システムもなりすましができた事例が数多く報告されています。
知識情報に関しても「秘密の質問」は、多くの場合 SNS などのオープンな情報を合わせることで特定できる場合があります。
そのため、先ほども記載しました通り、後述の対策を含めてセキュリティ対策を行う多層的な防御を推奨します。
脆弱なパスワードを登録させない
こちらの対策は、後述するユーザー側の対策である「推察されづらい複雑なパスワードを設定する」対策とは違い、サービス管理者側として脆弱なパスワードをユーザーが設定しないように誘導するための方法になります。
総当たり攻撃・リバースブルートフォースの両方にいえることですが、攻撃者が一番狙っているのは「推測がしやすい脆弱なパスワードを設定しているユーザー」になります。
「推測がしやすい脆弱なパスワード」とは、過去に漏洩が確認されたパスワードのほか、被害者となる本人が他社で使っているパスワードや、推測が容易なものなどを含みます。
ユーザーが強力なパスワードを設定できていれば、攻撃も成功しづらくなるため、サービス管理者はユーザーに強力なパスワードを設定させることが重要となってきます。
近年ではユーザーに強力なパスワードを設定させるための施策として、さまざまなサービスや対策のトレンドが出現しています。
- パスワードの推奨設定の変化(最低12文字、複雑性を強制しない、パスワード管理ツールの推奨など) - OWASP ASVS v4
- パスワードの漏洩チェックサービス - Have I Been Pwned
- パスワードの強度確認JavaScriptライブラリ - zxcvbn
このように、サーバ側の対策のほか、クライアントの対策を合わせてユーザが強力なパスワードを設定するように促すという構造が少しずつ普及してきています。
攻撃に必要なコストを上げる
上述した 2 つの対策は効果が期待されるものですが、多要素認証にも抜け道があったり、強度の高いパスワードを設定したとしても他での使い回しにより危殆化する可能性があります。
過去に当ブログで紹介したブルートフォース攻撃の対策と同じく、CAPTCHA の導入やログイン試行の遅延導入も併せて行うことで、攻撃者が簡単に攻撃を行えないように攻撃コストを上げることができます。
アクセスログを監査する
ここまで、ログインシステムで行うべき対策を記載しました。
リバースブルートフォースを含むブルートフォース攻撃対策は、完全に防ぐことは困難であったり IP ブロックなど対策のいくつかには副作用を伴うなど、慎重に設計することが望まれます。
そのため、上記対策の実施・検討とともに、アクセスログを監査して自身のシステムに対する脅威や利用状況を把握し、地理情報を考慮したログイン制限といった新しい対策を導入検討すると良いでしょう。
アクセスログの監査におけるリバートブルートフォース攻撃の痕跡は、他の攻撃と比べて容易に抽出することができます。
一般的には HTTP ステータスコード 401 の応答、別ページで失敗を示しているならその URL になります。
もちろんこれらの条件だけでは「不正なログイン試行」として判断するにはあまりにもノイズが多いため、下記の観点で確認し分析する必要があります。
- 同じIPアドレスからの多くの失敗したログイン
- 同じIPアドレスからの複数のユーザー名でのログイン
- (可能であれば)通常利用ではあまり観測されないロケーションからのログイン
- 上記の結果、疑わしい送信元からログイン成功を示す痕跡がないか
上記の分析は、必ずしも攻撃を見つけることができるものではありませんが、定期的に実施しておくことで自身のシステムが通常時どのような状態にあるのかを把握することできます。
通常時を把握することで、実際に攻撃を受けたた場合により迅速に脅威に気づくことができたり、新たな設計・対策へのフィードバックに繋げることができます。
また上記の監査で得た視点をシステム的にリアルタイムに監視していくことで、万が一、攻撃がすり抜けた場合に迅速に必要な対処を行うことができるようになります。
なお、注意が必要となるのが、ログに個人情報となるデータが出力されないようにすることです。
先ほど「IP」「対象ユーザ名」をログとして残すことについて触れましたが、そのログの出力方法や利用方法によっては、法律(GDPR など)の問題になったり、ログに個人情報が露出するといった問題に発展します。
前者は法律の問題なので言うまでもありません。
後者はログ自体が攻撃者にとって魅力的なデータになることや、ログを見れる開発者が個人情報にアクセスできてしまうという点が問題になります。
これらを回避するためにもログの取り扱いでは、現地法の理解や、どの情報をログに出力していいのかという規定・管理方法を徹底する必要があります。
たとえば「ログに email は出力しない。個人を特定する場合は、対象ユーザの固有 ID のみ出力する」といった形式でルールを策定すると良いでしょう。
推察されづらい複雑なパスワードを設定する
こちらの対策はユーザー側でできる対策になります。
パスワードを複雑な文字列に設定することは、単純ですが有効な対策手段になります。
パスワードに関しては JPCERT / CC が 推奨されるパスワード設定方法 として、以下の 5 つを挙げているので参考にすると良いでしょう。
- 多要素認証が有効な場合は使用する
- 異なるシステムに対しては異なるパスワードを使用する
- 電話番号や誕生日など、個人情報を基にした文字列は使用しない
- 可能な限り長い文字列を使用する
- 特定の言語の辞書に載っているような単語を使用しない
上記を踏まえた上で、パスワードの文字列を、アルファベットの大文字小文字が含まれているもの、記号が含まれているもの、桁が多いものに設定するとより安全性は高まります。
ありふれたパスワードの例として、毎年「危険なパスワードランキング」というものが公開されています。
こちらに掲載されているパスワードは安直かつ、世界中で利用者が多いものになりますので使用しないようにしましょう。
さいごに
リバースブルートフォース攻撃は、パスワードの管理対策により防御可能な攻撃手法です。
そのため管理者側にとっては、ユーザーに強度の高いパスワードを設定させるということが最も重要になります。
少し前までは「パスワードは漏洩していない」という前提に立ったセキュリティ対策が行われてきました。
しかし、さまざまなパスワード漏洩やその情報を用いた脆弱なパスワード辞書、アカウントロックの回避、アラートを回避するためのゆっくりとした総当りなど、攻撃は年々高度になってきています。
そういった背景もあり、認証周りのトレンドは米国技術標準化研究所(NIST)が発行した認証に関わるガイドライン NIST-800-63 を皮切りに、対策のトレンドが大きく変わってきています。
ユーザーとしてサービスを使う場合、パスワードは推測されずらい文字列にすること、他サービスでの使い回しを避けることを意識し、日頃からパスワード管理を徹底していきましょう。
また、システム管理者はユーザーを被害に巻き込まないためにも、サイバー攻撃への対応策は抜け目なく実施することをおすすめします。
Web に携わる開発者・管理者として、全体像に目を向けながらセキュアな開発を心がけましょう。
さいごになりますが、yamory はオープンソースソフトウェアの脆弱性と、その脆弱性に関連する攻撃情報のモニタリングをすることができる脆弱性管理ツールです。
お使いの Web アプリケーションで危険となりうる脆弱性を自動的に検出できるため、よりセキュアなシステム構築の助けになるかと思います。
無料でトライアルもできますので、ぜひ一度お試しください。