GMOメディアでのリスト型アカウントハッキング対策
security

GMOメディアでのリスト型アカウントハッキング対策

このエントリーをはてなブックマークに追加

こんにちは、セキュリティ担当の色川です。

今やサイバー攻撃の主流の1つとなった「リスト型アカウントハッキング」について、弊社における状況やこれまでに行ってきた対策・対応などを紹介します。

リスト型アカウントハッキング(リスト型攻撃)とは

他社サイトから流出したログイン情報(IDとパスワードの組み合わせ)を使い、不正なログインを試みる攻撃手法です。「パスワードリスト攻撃」とか「不正ログイン攻撃」などとも呼ばれています。(本稿では以降「リスト型攻撃」と表記します。)

他社サイトのログイン情報なので、IDが存在しなかったりパスワードが違ったりしてほとんどは失敗に終わるのですが、流出元サイトと同じID・パスワードで登録している利用者がいるとログインされてしまいます。複数のサイトで同じID・パスワードを使い回す利用者が多いため、効率のよい攻撃手法となっているようです。

GMOメディアにおける状況

弊社では2013年8月に「ヤプログ!」と「ポイントタウン」でほぼ同時にリスト型攻撃を受けました。

リスト型攻撃を検知する仕組みは構築していたので、すぐに対応を始めることはできました。しかし、攻撃元の特定や被害状況の確認などに手間取り、準備不足であったことを痛感しました。

その後も幾度となく攻撃を受けていますが、この時の反省から対応手順書や調査用スクリプトを整備した甲斐もあり、大きな被害を出すことなく収束させることができています。

ログイン状況の可視化

可視化にはGrowthForecastを使用しています。可視化することで普段の傾向や攻撃の状況を視覚的に把握できるようになり、経営層などへの説明も行いやすくなります。

※GrowthForecastでは過去に遡って詳細なグラフを確認することができないので、攻撃を受けたときのグラフを保存しています。

以下のグラフは「ヤプログ!」と「freeml」の平時のログイン状況です。サイトの特性により失敗率などに違いが見られますが、サイトごとのログイン成功率はほぼ一定であることが分かります。

ヤプログ!
yaplog1.png

freeml
freeml1.png

  • pass:ログイン成功
  • miss:ログイン失敗
  • lock:ロックアウトしたアカウントへのログイン試行
  • deny:試行数制限によりブロックしたIPアドレスからのログイン試行

下のグラフは2013年10月に「ゲソてん」がリスト型攻撃を受けたときのものです。

AREA-5-subtract-0-AREA-6-subtract-1-AREA-42-subtract-1.png

見ての通り、普段の量を遥かに超えるログイン試行が行われています。一際目立つ茶色のゲージはログインに失敗したことを示すものですが、よく見るとログインに成功したことを示す緑のゲージも伸びています。
他のサイトで受けた攻撃も同様のグラフとなっています。

※ちなみに、多くのサイトはログインに成功するとマイページなどにリダイレクトし(Status: 302)、失敗するとエラーページを返すため(Status: 200)、アクセスログだけでログイン状況を知ることが可能です。

異常なログインの検知

5分ごとにGrowthForecastから直近のデータを取得し、ログイン失敗率がしきい値を超えていたらアラートメールを送信しています。(失敗率だけだとログイン数が減る深夜に誤検知が増えるので、試行数なども見ています。)

また、GrowthForecastには社内からしかアクセスできないようにしているので、アラートメールにグラフ画像を添付し、移動中でも状況が確認できるようにしています。

しきい値の設定

しきい値にしているログイン失敗率は、実際に受けた攻撃に基づいて算出・調整しています。

攻撃は機械的に行われますが、通常のログインと同じようにリクエストを送信して結果を確認する必要があるため、状況によっては1回の攻撃に数秒かかることもあります。アクセスログから推測すると3~6スレッドくらいで並列アクセスしているようです。
また、ログイン成功率はだいたい1%~15%くらいになっています。

こうした情報から攻撃の最小規模を推定し、平時のログイン数に上乗せした上で失敗率を求め、しきい値としています。式にすると以下のような感じです。

しきい値(%) = (平時の失敗数+攻撃失敗数) ÷ (平時の試行数+攻撃試行数) × 100

初めのころは適当に設定していたので検知できない攻撃もあり、頻繁にグラフを確認することで凌いでいました。現在はしきい値の精度も上がり、ログイン試行の急激な増加は100%検知できています。

攻撃元の特定と遮断

弊社が受けた攻撃は全て国内のISPが利用されており、また、多くの場合IPアドレスが頻繁に変更されています。そのため一般利用者のアクセスと区別がつきにくく、初めは特定に手間取っていました。

現在は短時間に大量にログイン試行したIPアドレスを調べたり、ISPごとのログイン失敗率を出したりして、可能ならIPアドレス単位、難しい場合はISP単位でアクセス拒否の設定を行っています。(ISP単位で拒否した場合は攻撃の収束を確認して開放しています。)

また、同様のチェックをログイン機能に組み込み、不審なアクセス元は自動的にブロックするようにしています。(ISP単位の場合は影響が大きいので、ブロックする代わりに画像認証などを行っています。)

なお、連続で5回ログインに失敗したアカウントはロックアウトしているのですが、攻撃は1IDに対して1回、多くても2~3回しかログイン試行しないので、リスト型攻撃に対しては効果がありませんでした。

被害状況の調査と被害者への対応

攻撃を遮断した後は被害状況を調査します。IPアドレスごとにアクセスされたページを洗い出し、個人情報が閲覧されていないか、投稿や設定変更が行われていないかなどを見ていきます。

しかし、これまでの調査でログイン直後にそうしたことが行われていたことは一度もありません。精度の高いリストを作るためにスクリーニングしているということも考えられますが、単にツールの性能(作りこみ)の問題かもしれません。後者の場合、攻撃者は後から手作業で不正を行うものと考えられますが、それはもう検知できませんので、不正にログインされた可能性の高いアカウントはパスワードを強制変更し、別のパスワードを設定して頂くよう案内しています。

さいごに

パスワードによって利用者を認証する(=本人であることを確認する)仕組みである以上、パスワードさえ正しければ誰であれ本人として受け入れざるを得ません。怪しいアクセスを見つけてブロックするというアプローチをとっていますが、一部は入られてしまうし、全ての利用者に固有のパスワードを設定させるというのも現実的ではありません。

弊社では「リスト型攻撃は防げないもの」と認識し、対応体制を強化することで被害の最小化を図っています。パスワード管理の責任は利用者にありますが、可能な限り守りを固め、利用者の保護に努めるというスタンスです。

今まさにリスト型攻撃対策に取り組んでいる方や、これから取り組もうという方もおられるかと思いますが、本稿で紹介した内容がお役に立つことがあれば幸いです。


名無しのエンジニア
新卒2年目がぼっちでGoogle I/Oに行ってきた話(前編)
新卒2年目がぼっちでGoogle I/Oに行ってきた話(後編)