FacebookからOAuthを停止されてわかった今時のセキュリティ

NewsPicksの高山です。

この記事はUzabase Advent Calendar 2021の23日目の記事です。昨日は我らが赤澤剛さんによるAWS Organizationの記事でした。

去る2021年10月12日に突然NewsPicksのサービスでFacebookログインやFacebookへの投稿ができなくなりました。この状態は12月13日まで2ヶ月もの間継続していて、ユーザーさんには不便を強いてしまいました。

米Facebook本社とメールでやりとりしていましたが、メール返信に何週間も待たされ、Facebook日本法人に助けてもらってようやく解決に至ることができました。

この苦労話はいくらでもできるのですが、今回はセキュリティの切り口で書いていきます。

Facebookの「データ保護評価」

7月にFacebookから「データ保護評価」についての発表がありました。

developers.facebook.com

要約すると、FacebookのOAuthを利用して取得したデータにまつわるセキュリティがちゃんとしているか審査するよというものです。

8月にFacebook for Developersでアセスメントに「正直に」答えたところ、10月12月に連携が停止されてしまいました。

アセスメントのいくつかの項目を抜粋します。

  • 個人の人種、民族、肌の色、出身国・国籍、宗教、年齢、性別、性的指向、ジェンダーアイデンティティ、家族構成、障がいの有無、医学的/遺伝子状態に基づいた決定に、プラットフォームデータを使用していますか?
  • プラットフォームデータを速やかに削除するためのプロセスがありますか?
  • データを速やかに削除するためのプロセスでは、ユーザーが自分のアカウントを削除した場合、どのくらいの期間でプラットフォームデータを削除するよう定められていますか?
  • どの情報セキュリティフレームワークを導入していますか?

セキュリティフレームワークというと、ユーザベースではグループ全体でISO 27001に準拠しており、認証もきちんと取得しています。(この認証が最終的にとても役に立つことになりました)

データセキュリティ項目

連携の停止を受けて「異議申し立て」というプロセスを開始し、その後はメールでやりとりしました。

メールによると、「正直に」答えて問題になったのは以下の項目とのことでした。(プラットフォームデータというのはFacebookのAPIから取得したデータのことです)

プラットフォームデータの安全を確保するために、どのような対策を講じていますか?(該当するものをすべて選択)

  • すべてのプラットフォームデータストレージ(すべてのデータベースファイル、バックアップ、オブジェクトストレージバケット)で保存時の暗号化を行っている
  • プラットフォームデータが送信されるすべてのネットワーク接続において、TLS 1.2またはそれ以降の暗号化を行っている
  • アプリとシステムの脆弱性やセキュリティ問題を12か月に1回以上テストしている
  • 認証情報やアクセストークンといった機密性の高いデータを保護している
  • インシデントに対応するシステムおよびプロセスを12か月に1回以上テストしている
  • リモートアクセスに多要素認証を求めている
  • アカウントの維持(アクセス・権限の割り当て、取り消し、審査)のためのシステムを導入している
  • サーバー、仮想マシン、配信、ライブラリ、パッケージ、アンチウイルスソフトといった、システムコードおよびシステム環境を最新の状態に維持するシステムを導入している
  • プラットフォームデータへのアクセスの記録および、プラットフォームデータの送信先と保存先を追跡するシステムを導入している
  • プラットフォームデータ、およびプラットフォームデータがシステムを離れるキーポイント(サードパーティ、パブリックエンドポイントなど)の送信をモニタリングしている
  • ログやその他のセキュリティイベントをモニタリングし、異常なセキュリティ関連イベントのアラートを生成する自動システムを導入している

このうちのいくつ満たしていれば良いのかは最後までわからずじまいでしたが、NewsPicksでは最終的にすべてを満たせるように対策をしました。

アンケートに答えるだけではなく、例えば直近の脆弱性診断の診断結果を提出したり、諸々のスクリーンショットを提出することになります。ユーザベースはコーポレートガバナンスを大事にする企業ですので正直に全部対策しました。

一つ一つ見ていきます。結論からいうと、AWSの機能にお世話になりっぱなしでした。

「すべてのプラットフォームデータストレージ(すべてのデータベースファイル、バックアップ、オブジェクトストレージバケット)で保存時の暗号化を行っている」

RDSに暗号化機能が提供されています

DBクラスタの作成時などに暗号化を有効にできます。RDSの暗号化を使っていれば、RDSの機能で作るS3へのバックアップやスナップショットも自動的にサーバーサイド暗号化されます。

「プラットフォームデータが送信されるすべてのネットワーク接続において、TLS 1.2またはそれ以降の暗号化を行っている」

ALBの設定でTLS1.1のサポートを切りました。

古いIEではTLS1.1がデフォルトらしいのと、実際にアクセスもあったのですが、個別に連絡をして切り抜けられました。

「アプリとシステムの脆弱性やセキュリティ問題を12か月に1回以上テストしている」

ユーザベースでは一定基準以上のサービスに対して第三者による脆弱性診断を毎年実施しています。

この項目を急遽対策するのは難しかったと思われますが、毎年やっていて良かったです。

「認証情報やアクセストークンといった機密性の高いデータを保護している」

これについては何のことか最初はわからなかったのですが、その後のFacebookとのやりとりにより、OAuthのユーザーアクセストークンなどをKMSなどに保存しているかというチェック項目だったそうです。

これについては過去2年で大きく改善したところで、AWS Systems Manager Parameter Storeを使うようにして、設定値のハードコードは基本的にはせずにParameter Storeを参照するようにしていっています。セキュリティトークンやDBのパスワードなどはSecureStringとして保存してますので、そのスクリーンショットを送りました。

「インシデントに対応するシステムおよびプロセスを12か月に1回以上テストしている」

これもかなり曖昧な項目で困りました。

ちょうどユーザベースでインシデントに対応するテスト計画をオーソライズしていたので、そのことについて書きました。

「リモートアクセスに多要素認証を求めている」

これも過去2-3年でかなり力を入れてきたところです。

AWSのドキュメントに、AWSコンソールへのログインやAWS CLIの使用に二段階認証を強制するやり方が載っています。NewsPicksではこれを機に二段階認証を強制にしました。

「アカウントの維持(アクセス・権限の割り当て、取り消し、審査)のためのシステムを導入している」

ちょうどユーザベースでは去年から入退社や異動のときの権限付与と剥奪の管理を刷新しました。僕自身もかなり頑張って、NewsPicksで利用していたSaaSなどのすべての権限を洗い出し、管理者権限をまとめ、入退社の申請システムを一元化しました。

現在は組織マスターデータベースに沿って適切なタイミングで適切な管理者に通知が飛んで、それぞれの管理者はそれに従って権限変更をして次に渡すというフローになっています。

「サーバー、仮想マシン、配信、ライブラリ、パッケージ、アンチウイルスソフトといった、システムコードおよびシステム環境を最新の状態に維持するシステムを導入している」

これは日本語だと分かりにくいので英語のほうを参照しました。

Have a system for keeping system code and environments updated, including servers, virtual machines, distributions, libraries, packages, and anti-virus software.

いくつかに分かれるのですが、まずAmazon Linuxやその他のAWSが提供するものはAWSのサポートポリシーに準拠してアップデートしています。ライブラリ等は、最新とはいかなくてもDependabotの強い警告のやつは対応していくポリシーとフローにしました。

余談ですが、最近のlog4j問題はこのフローの良い実地試験になりました。今後もさらに良くしていきたいです。

「プラットフォームデータへのアクセスの記録および、プラットフォームデータの送信先と保存先を追跡するシステムを導入している」

これも複数の段階がありますが、CloudTrailRDSの監査ログVPCフローログAWS WAFなどを使っています。

監査ログのために去年に頑張ってメインのデータベースをAuroraにしたのも良かったところです。

「プラットフォームデータ、およびプラットフォームデータがシステムを離れるキーポイント(サードパーティ、パブリックエンドポイントなど)の送信をモニタリングしている」

これはFacebookのAPIから取得した情報を閲覧できるエンドポイントを監視するという意味だと思います。詳細は省略しますが、そのようなエンドポイントをこの機会に削除して対応しました。

「ログやその他のセキュリティイベントをモニタリングし、異常なセキュリティ関連イベントのアラートを生成する自動システムを導入している」

これはSIEMのことを指しているのでしょうか。

NewsPicksではいわゆるSIEMとは違いますが、自動セキュリティ監視サービスのAmazon GuardDutyを使い始めていたところでした。この機会に通知をSlackに流すようにしました。

まとめ

いかがでしたでしょうか。

実のところ、ユーザベースグループとしてISO 27001の登録証を発行してもらっていたため、これを送ったことでかなりプラスに働いたようです。

繰り返しになりますが、NewsPicksではここ2年ほどでAWSのセキュリティベストプラクティスなどを見ながらセキュリティまわりは着実に改善してきました。その結果、Facebookの要求にも既に対応できていたところもあれば、若干足りていなかったところも比較的すぐに対応できました。

Facebookという大きなプラットフォーマーがすべてのOAuthアプリに対して求めている2021年のセキュリティの基準がこのレベルだと知れたことで、世の中のセキュリティの「当たり前基準」を再認識できた一件でした。

明日はblurfourさんによるログ関連の記事の予定です。それでは良いお年を!

Page top