アカウントハーベスティングを理解する方法
データ侵害への対応は、サイバーセキュリティのモグラ叩きに似ています。大規模な侵害には、綿密な計画、システムの隅々まで理解すること、そして説得力のあるフィッシングメッセージの作成が必要になります。こうした侵害は深刻なデータ漏洩につながる可能性があります。ソースコード、会社の機密ファイル、パスワードや社会保障番号などのユーザー情報などが考えられます。しかし、すべてのデータ漏洩がそれほど複雑で、被害が大きいわけではありません。アカウントハーベスティングやアカウント列挙のように、セキュリティ上のわずかな隙間を突くだけの場合もあります。これらは一見派手なように聞こえますが、ハッカーが警戒心を抱かせずに、どのユーザー名やメールアドレスが実際に本物のアカウントに属しているかをひそかに突き止めるための手段なのです。
アカウント列挙の仕組み
サイトにログインしようとした際に、パスワードが間違っている場合と、メールアドレスやユーザー名が存在しない場合に異なるメッセージが表示されることに気づいたことがあるなら、それはアカウント列挙の典型的な兆候です。つまり、ユーザー名が正しいのに「パスワードが間違っています」と表示され、そうでない場合は「アカウントが存在しません」と表示される場合、ハッカーに有効なアカウントの明確なマップを与えてしまうことになります。なぜこれが問題なのでしょうか?それは、ハッカーがほとんど手間をかけずに実際のユーザーデータに狙いを定めることができるからです。設定によっては、これは非常に明白で、エラーメッセージが異なるだけで、かなり正確なアクティブユーザーのリストを作成できる場合があります。
これを修正するのは、それほど難しいことではありません。アカウントが存在するかどうかに関係なく、「入力されたユーザー名またはパスワードが間違っています」といった一般的なエラーメッセージを表示するだけで済みます。簡単そうに聞こえますが、このような情報漏洩を目立たなくさせるには、簡単な手順です。
アカウントハーベスティングをステルス的に行う
まあ、これはあくまでも派手なバージョンです。攻撃者が巧妙な手口で攻撃を続けようとする場合、もっと巧妙な方法を使うこともあります。エラーメッセージだけに頼るのではなく、サイト内を閲覧したり、ユーザープロフィールを確認したり、LinkedIn、Facebook、Twitterなどの公開情報を利用したりすることも可能です。つまり、ユーザー名やメールアドレスのパターンを収集することで、ログインフォームに直接攻撃を仕掛けることなく、潜在的な標的アカウントのリストを作成できるのです。この方法ではエラーメッセージが表示されないため、ログから発見するのははるかに困難です。
ハッカーが時々行うもう一つの手は、企業のメールアドレスの命名規則(例:[email protected] )を特定することです。メールアドレスの形式を推測することで、攻撃対象に直接触れることなく、大量のアカウントを収集できます。少し奇妙ですが、攻撃を目立たなくすることができます。ブルートフォース攻撃によるログイン試行や大量のサインアップ攻撃よりもはるかに巧妙です。
ゲームの真相を明らかにする詳細
アカウントハーベスティングが行われているかどうかは、些細な情報から判断できることがあります。Webサーバーはステータスコード( や200 OKなど501 Internal Server Error)を提供しますが、これらを慎重に処理しないと情報が漏洩する可能性があります。例えば、パスワードリセットページに「パスワードリセットメールを送信しました」と表示され、メールがデータベースに存在しないにもかかわらず、サーバーが501エラーコードで応答した場合、ネットワークトラフィックをチェックしている攻撃者はアカウントが存在するかどうかを判断できます。WindowsやWebホスティングスタックは、当然ながら応答を*厄介なほど*正確に行う必要があるからです。
パスワードのハッシュ化が適切に行われていない場合、攻撃者は応答時間に基づいてアカウントの存在を突き止める別の方法となります。有効なアカウントのパスワードをハッシュ化するのにサーバーが100ミリ秒かかるのに、アカウントが存在しない場合には即座に応答するとしたら、攻撃者はその時間を計測し、アカウントが本物か偽物かを推測できます。なぜそれが機能するのかは定かではありませんが、設定によっては顕著な違いが出ることがあります。つまり、タイミング攻撃は確かに存在するのです。
パズルのピースをすべて組み合わせる
肝心なことは何でしょうか?セキュリティには多くの細かい点が関わってきます。エラーメッセージが常に汎用的であること、HTTPステータスコードを適切に処理すること、そしてレスポンスのタイミングの差を決して露呈させないことが、大きな違いを生みます。ハッカーは当然ながら、こうした小さな隙間を狙うからです。簡単に悪用でき、より大きな侵害につながる場合もあれば、ちょっとした情報収集の標的になる場合もあります。
ある設定ではうまくいきましたが、別の設定では…あまりうまくいきませんでした。しかし、機密データを扱う場合は、ログインとパスワードリセットのフローを念入りにチェックし、こうした微妙な漏洩がないか確認することをお勧めします。一貫した対応を続けるだけで、後々多くの問題を防ぐことができる場合もあります。
なぜこれが重要なのか
アカウントの存在に関する情報の漏洩は一見無害に思えるかもしれませんが、実際には非常に機密性の高い情報が漏洩する可能性があります。健康問題や政治的見解に関するサイトにあなたのメールアドレスが登録されていることを誰かに知られたら、ちょっと気まずいですよね?さらに、使い回されたユーザー名とパスワードは実在の人物と結び付けられるため、将来の侵入が容易になります。もし誰かが他の場所での侵入であなたのメールアドレスとパスワードを入手した場合、他のサイトでも同じ組み合わせを試す可能性があります。つまり、パスワードの使い回しは良くないということです。
こうした小さな漏洩やタイミングのトリックは、それ自体では大したことではないように思えるかもしれませんが、ハッカーは賢いのです。十分な情報をつなぎ合わせてパスワードを推測したり、個人情報を特定したり、あるいはより大規模な攻撃を計画したりできるのです。
まとめ
アカウント列挙は、悪意のある人物があなたのアカウントをどこかに持っているかどうかを把握するのに役立つ、巧妙な脆弱性です。アカウント自体をハッキングするのとは異なりますが、後々悪用される足掛かりとなります。幸いなことに、これは通常、非常に簡単に修正できます。エラーメッセージを統一し、応答における情報漏洩に注意し、タイミングの差を最小限に抑えるだけで済みます。もちろん、悪意のある人物が知らないほど良いからです。
これで誰かの頭痛の種が解消されることを願います。こうした小さな詳細はあなたが思っている以上に重要なのです。