【ITニュース解説】「ぐるなび」で不正ログイン - 対象会員のPWリセットを実施
ITニュース概要
飲食店情報サイト「ぐるなび」で不正ログインが発生。他サービスから流出したIDとパスワードの組み合わせを試す「パスワードリスト攻撃」が原因と見られる。同社は被害の可能性がある会員のパスワードを強制的にリセットする対応を行った。(118文字)
ITニュース解説
飲食店情報サイト「ぐるなび」において、第三者が不正に会員アカウントへログインする事案が発生した。この攻撃は「パスワードリスト攻撃」によるものと見られている。この事件は、Webサービスを開発・運用するシステムエンジニアが向き合うべき、基本的なセキュリティ課題を浮き彫りにしている。 まず、今回の原因とされたパスワードリスト攻撃の仕組みについて理解する必要がある。これは、攻撃者が何らかの方法で事前に入手した他社のサービスから流出したIDとパスワードの組み合わせのリスト(一覧)を利用し、標的となる別のサービス、今回は「ぐるなび」に対してログインを試みる攻撃手法である。多くの利用者が、利便性のために複数の異なるWebサービスで同じメールアドレスとパスワードを使い回しているという習慣を悪用している。この攻撃の重要な点は、「ぐるなび」のシステム自体がハッキングされてパスワードが直接漏洩したわけではないという点だ。あくまで、他の場所で漏れた認証情報が、ぐるなびのログイン画面で試された結果、一致してしまったアカウントが被害に遭ったということである。 このような攻撃に対し、サービス提供者、つまりシステムエンジニアは多層的な防御策を講じる必要がある。第一に、不正なログイン試行そのものを検知し、遮断する仕組みだ。例えば、短時間に同一のIPアドレスから大量のログイン試行があった場合や、特定のIDに対して何度もログイン失敗が繰り返された場合に、そのアクセスを一時的にブロックする。また、WAF(Web Application Firewall)と呼ばれる仕組みを導入し、攻撃パターンに合致するような不審な通信を検知して遮断することも有効な対策となる。今回のぐるなびの発表では不正ログインを「検知した」とあることから、このような監視システムが正常に機能していたと考えられる。 第二に、認証プロセスそのものを強化することだ。パスワードリスト攻撃は、IDとパスワードの組み合わせさえ合致すればログインが成功してしまうため、パスワードのみに依存した認証の脆弱性を突いてくる。この根本的な対策として極めて有効なのが「多要素認証(MFA)」の導入だ。多要素認証とは、利用者が知っている情報(パスワードなど)、利用者が持っている物(スマートフォンに届く確認コードなど)、利用者自身の身体的特徴(指紋や顔認証など)のうち、二つ以上を組み合わせて本人確認を行う方式である。仮にパスワードが漏洩してしまっても、攻撃者は利用者のスマートフォンなど第二の認証要素を持っていないため、ログインを完了させることができない。これにより、パスワードリスト攻撃による被害を劇的に減らすことが可能だ。 第三に、万が一システム内部から情報が漏洩した場合に備え、被害を最小限に抑えるためのデータ保護策も欠かせない。特にパスワードの保管方法は重要である。システムエンジニアは、利用者のパスワードをそのままの文字列(平文)でデータベースに保存してはならない。代わりに「ハッシュ化」という処理を行うのが基本だ。ハッシュ化とは、元のデータを元に戻せない(不可逆な)まったく別の文字列に変換する技術である。さらに安全性を高めるため、「ソルト」と呼ばれるユーザーごとに異なるランダムな文字列をパスワードに付加してからハッシュ化する手法が用いられる。これにより、もしデータベースが流出したとしても、攻撃者は元のパスワードを割り出すことが極めて困難になる。 そして、攻撃を受けてしまった後の対応、すなわちインシデントレスポンスもシステムエンジニアの重要な責務だ。ぐるなびが実施したように、まずは不正ログインのログを分析し、攻撃の手法や被害を受けた可能性のあるアカウントの範囲を正確に特定する。その上で、さらなる被害拡大を防ぐため、対象アカウントのパスワードを強制的にリセットし、利用者が新しいパスワードを設定するまでログインできないようにする措置は非常に重要だ。同時に、該当する利用者に対して状況を速やかに通知し、パスワードの変更を促すとともに、他のサービスでも同じパスワードを使い回していないか確認するよう注意喚起を行う必要がある。 この一連の流れは、現代のWebサービス開発において、機能実装と同じくらいセキュリティ対策が重要であることを示している。システムエンジニアを目指す者は、プログラムを書く技術だけでなく、パスワードリスト攻撃のような典型的な脅威を理解し、それに対する防御策やインシデント発生時の対応フローを設計・実装できる知識とスキルを身につけることが強く求められる。ユーザーの情報を守るという責任を常に意識し、安全なサービスを提供することが、信頼されるエンジニアになるための不可欠な要素である。