なぜStack Overflowから個人情報が流出したのか、犯人の攻撃方法と対処の詳細なタイムラインが公開中
2019年5月に発生した技術コミュニティ・Stack Overflowの個人情報流出について、Stack Overflowが攻撃者の詳細な足跡をタイムラインで公開しました。
A deeper dive into our May 2019 security incident - Stack Overflow Blog
https://stackoverflow.blog/2021/01/25/a-deeper-dive-into-our-may-2019-security-incident/
世界標準時2019年5月12日0時ごろ、Stack Overflowコミュニティの複数のメンバーから、新規アカウントが予期せぬ特権を獲得しているとの警告がありました。Stack Overflowチームは、まったく無名のユーザーがStack Exchange Network内のすべてのサイトでモデレーターと開発者レベルのアクセス権を獲得していることを発見し、直ちにアカウントを一時停止。ソースコードと184人のアカウント情報が流出するという被害があり、チームは原因の特定と監査プロセスを開始しました。
チームは攻撃者の足跡をつかむため、外部からのトラフィックが記録されているデータベースを調査。攻撃者のアカウント識別子やIPアドレス、カスタマーサポートチームからの情報などをもとに、チームが再現した「攻撃者が特権を獲得するまでの足跡」が以下となっています。
・2019年4月30日(木)
攻撃者がStack Overflowのインフラ調査を開始。特にビルド・ソースコード管理システムや開発環境をホスティングするウェブサーバーを重点的に調査していました。
・2019年5月1日(水)
Stack OverflowのSREチームが内部で使用するStack Exchangeのチャットルームに対し、攻撃者がアクセスを試みるも失敗に終わりました。
「Stack Overflowの顧客」を名乗る人物から、Stack Overflowのソースコードを監査目的で共有して欲しいという依頼メールが届きました。原則としてStack Overflowはソースコードを公開しておらず、また送信元のメールアドレスも顧客のものであると確認できなかったため、Stack Overflowは要求を拒否しました。
次に、攻撃者はStack Overflow上にチームを作成し、別のアカウントを招待。この時、それぞれのアカウントは別々のデバイスで認証されていました。
・2019年5月2日(木)
攻撃者は、Stack Overflowで公開されている「Stack Overflow for Teamsに関連した投稿」や、GitHub Enterpriseに関連したケーススタディを多数閲覧していました。
また、前日の依頼に続いて別のサポート依頼がありましたが、今回は実際の顧客のメールアドレスを詐称したものでした。また、内容はStack Overflowで閲覧したケーススタディに基づくものでした。なりすまし防止用の自動返信が本物の顧客に送られ、すぐに正当な要求ではないことが通知されました。
・2019年5月3日(金)
Stack Overflowが5月2日のサポート依頼を拒否しました。攻撃者はインフラの調査を続けていました。
・2019年5月4日(土)
攻撃者がGitHub Enterprise上にあるStack Overflowのソースコードをダウンロードしようと試みましたが、ログイン画面に転送されました。しかしこの時、非公開リポジトリのURLが誤って公開リポジトリの中に含まれていたことが、後の調査で判明しました。
・2019年5月5日(日)
この日は攻撃者がさかんに活動する日でした。攻撃者はアクセス制限を回避してStack Overflowの開発環境にログインすることに成功。最初は権限不足でそれほど多くの探索は行えなかったようですが、Stack Overflowがテスト用に準備していた「アカウントのなりすまし機能」が発見され、攻撃者はウェブサイトのモデレーターとしての権限が含まれている「コミュニティ管理者」権限を獲得しました。
攻撃者はさらにアカウント回復機能を利用して「開発者」権限を獲得しようと試みましたが、回復の際に必要なメールを受信できず失敗。しかし、開発環境にはコミュニティ管理者でもメールを受信できるルートが存在したため、攻撃者はそのルートを用いてメールを受信し、ついに「開発者」権限の奪取に成功しました。
・2019年5月6日(月)
攻撃者は引き続き開発環境の調査を進めていました。獲得した開発者権限を利用して本番環境にアクセスし、情報収集やなりすまし機能を試すといった活動を行っていました。なりすまし機能は本番環境には実装されていないので、この試みは失敗に終わりました。
攻撃者は開発環境の探索を進める中で、TeamCityへのアクセス権限を発見。もう利用されていないアクセス権限が残ったままになっていました。攻撃者はTeamCityへのアクセスに成功し、ロール割り当ての設定ミスにより、ただちにビルドサーバーの管理者権限が付与されてしまいました。
攻撃者はTeamCityについて詳しくなかったようで、Stack Overflow上のTeamCityに関する質問を閲覧していました。攻撃者はこの後も幾度にわたってStack Overflowの質問を閲覧しており、この閲覧履歴がStack Overflowチームが攻撃者の攻撃手法を理解するのに役立ったと説明されています。
この日の最後、攻撃者はデータセンターのビルドエージェントに対するアクセスを試みましたが、VPN接続が必須だったため、失敗に終わりました。
・2019年5月7日(火)
攻撃者はStack Overflowで利用されているGitHub Enterpriseの設定方法など、さまざまな内部サイトの設定方法を調査しました。
・2019年5月8日(水)
攻撃者はTeamCityにログインし、ビルドサーバーのファイルシステムを探索。内部のGitHub EnterpriseにアクセスできるSSH鍵を手に入れました。また攻撃者はこのSSH鍵を用いてStack Overflowの重要なソースコードをダウンロードしながら、開発セットアップ用のスクリプトや運用に関するWiki情報も入手しました。さらに、GitHub Enterpriseのウェブサイトにもアクセスを試みましたが、2段階認証が設定されていたため、失敗に終わりました。
また、攻撃者はStack Overflowで.NETプロジェクトをビルドする方法についての質問を閲覧していました。
・2019年5月9日(木)
攻撃者はまず最新のソースコードをダウンロードしました。この行動は今後の攻撃者の日課になります。攻撃者はMicrosoft Azureの仮想マシンから、TeamCityへのアクセス権限を利用してVPN接続を試みたものの、攻撃は失敗。引き続きウェブサーバー下でアプリケーションを動かす方法や、Azure環境でSQLスクリプトを実行する方法などをStack Overflowで調査していました。
・2019年5月10日(金)
攻撃者は引き続き、ウェブサーバーとアプリケーションの調査をStack Overflowで行っていました。
・2019年5月11日(土)
攻撃者はGitユーザーをなりすまし、TeamCityで新しいプロジェクトを作成して何度かビルドを試行。その後、Stack Overflowのローカル環境の設定が含まれるデータベースをコピーしようとしたものの、外部にはコピーできないよう設計されていたため、攻撃者はStack Overflow内部のGitHubでGistを作成し、そこからデータベースをコピー。Stack Exchange Networkのデータを格納している本番用データベースを変更することに成功しました。
一連の作業を終了後、攻撃者はすべての足跡を消去。しかし、TeamCityのビルド情報は「ごみ箱」に残っていたため、後にStack Overflowのチームが状況を把握することができたと語られています。
・2019年5月12日(日)
Stack Overflowが攻撃を受けた当日の5月12日、攻撃者によるSQL実行の後にコミュニティから問題を報告され、Stack Overflowのインシデント対応チームは調査を開始しました。
この時点では攻撃の範囲が明らかになっていなかったため、チームはまず攻撃者のStack Exchange Networkアカウントを削除。その後TeamCityもハッキングされていることが判明したため、ただちにTeamCityをオフラインにしました。
その後、チームは攻撃者に利用された「コミュニティ管理者でもメールを受信できるルート」や「TeamCityのハッキングに利用された脆弱(ぜいじゃく)なウェブサイト設定」などを削除し、攻撃の影響を受けたアカウントの削除やリセットを行いました。また、二次対応チームにフォレンジックを依頼しました。
攻撃者はこの間もアカウントのなりすましやTeamCityへのアクセスを試みていましたが、上記の対策により失敗。しかし、Stack Overflowチームはこの時点ではソースコードの漏えいに気づいておらず、攻撃者は引き続きソースコードをダウンロードすることが可能な状態でした。
・2019年5月13日(月)
攻撃者は引き続きソースコードをダウンロードし、TeamsCityへのアクセスを試みていました。Stack Overflowチームはトラフィックログを解析し、開発環境のアクセスキーや漏えいした認証情報などをすべて変更。また、開発環境へのアクセス認証に存在した穴をふさぎ、認証情報を読み取り不可にするといった脆弱性対策も行われました。
攻撃者は引き続きTeamsCityへのアクセスを試みるとともに、ソースコードをダウンロードし続けていました。また、攻撃者は多数のGitリポジトリをプログラムで更新する方法や、SQLデータベースを作成する方法に関するStack Overflowの質問を閲覧していました。
・2019年5月14日(火)
Stack Overflowチームはこの日、ようやくGitHubのSSH鍵が漏えいしていることを確認。直ちにGitHubサーバーをファイアウォールの背後に移動させ、外部からのアクセスを遮断しました。GitHubリポジトリを監査したところ、幸いなことに改ざんは行われていませんでした。
Stack Overflowチームが注目しているのは「一度GitHubにSSH鍵を追加すると、そのキーを使えばログインに2段階認証は不要になる」という点。SSH鍵の管理がいかに重要かがわかります。
最終的に、Stack Overflowは外部のセキュリティベンダーと契約し、監査とダブルチェックを依頼しました。
・2019年5月16日(木)
引き続き攻撃の監査が行われ、可能であれば攻撃の影響を受けたユーザーに通知できるようにしたいという方針を打ち立てました。
この日は攻撃者の活動は少なく、Stack OverflowでAzure内のSQLデータベースに関する質問を閲覧するにとどまりました。
・2019年5月17日(金)
攻撃者はStack Overflow上のSQLと認証に関する質問を閲覧していました。
Stack Overflowチームはこの日、250ユーザーの個人情報漏えいが推測されると発表しました。
・2019年5月18日(土)
攻撃者はStack Overflowにて「リモート上のGitリポジトリ削除方法」を調べていますが、それ以外は何も活動していませんでした。
・2019年5月22日(水)
Stack Overflowチームは、個人情報が漏えいしたユーザーに通知しました。
・2019年5月23日(木)
Stack Overflowチームは二次調査を終了し、攻撃の原因となった根本的な問題に対処するための一連の改善策を作成しました。
この攻撃を受け、Stack Overflowチームはビルドやソースコード管理システムをファイアウォール内部に移動させたほか、秘密鍵管理の見直しといった対策を行ったとのこと。また、攻撃に備えるために、内部のトラフィックをすべて記録したり、2段階認証を利用したりしてセキュリティを強化する重要性を説いています。
・関連記事
IT技術系Q&Aコミュニティ「Stack Overflow」の4000万件以上ある質問&回答で最も多く引用された「プログラマー必読」な書籍トップ10リスト - GIGAZINE
Stack Overflowに高校時代から10年間書き込みを続けたエンジニアが学んだ15のこと - GIGAZINE
400万人以上の個人情報がChromeとFirefoxの拡張機能から流出してネット上で販売されていたことが判明 - GIGAZINE
12億人分もの個人情報がオンラインのサーバー上に誰でもアクセス可能な状態で保管されていたことが判明 - GIGAZINE
2億6700万人以上のFacebookユーザーの電話番号や名前がオンラインで流出、詐欺に使用される危険性も - GIGAZINE
Intelからおよそ20GBものチップデータやソースコードなど機密情報が大量流出 - GIGAZINE
・関連コンテンツ