Google Cloud Platform

Google Cloud Platform で Elasticsearch をセキュアにするための 3 つのステップ

Elasticsearch はサイト内検索や分析に使われている、Apache Lucene をベースに構築されたオープンソースの検索エンジンです。最近注目を集めた無防備な Elasticsearch サーバーを狙ったランサムウェアによる攻撃は、デプロイした環境のセキュリティを高めるためにしておくことがあるかもしれない、と私たちに気づかせるものでした。

この投稿では、Google Cloud Platform(GCP)で Elasticsearch インスタンスをセキュアにするためのベスト プラクティスを紹介します。

Elasticsearch インスタンスを攻撃する手口は多く、インデックス ポイズニング、不正 API アクセス、機密データの抜き取りもその一部です。このような攻撃を防止するために、何をしておくべきなのか見ていきましょう。

1. アクセス ポリシーをロック ダウン

Elasticsearch は悪用を防ぐために、外部のアクセス管理に依存する信頼ベースのセキュリティ モデルを採用してることから、まず最初に必要なことはアクセス ポリシーをロック ダウン(誰に何ができるのかを明確にし、制限する)することです。GCP では、ベスト プラクティスとして内部からのアクセスに IAM ポリシー、外部からのアクセスにはファイアウォールを使います。X-Pack のようなアドオンを導入すると、セキュリティはさらに強化されます。

2. 機密データをインデックスしない

アクセス ポリシーを更新したら、どのコンテンツをインデックスするのかを慎重に考えます。Elasticsearch に最初にインポートするのは、移行する大量のデータであることが多いと思いますが、いずれにしても、ここでのベスト プラクティスは、個人を特定可能な情報(PII)やカード保有者のデータといった機密情報の流出を防ぐために、このような情報をフィルタして取り除くことです。

検索エンジンからは抽象的なドキュメント ID しかわからないとしても、ハッカーは機密情報を引き出すことができます。たとえばワイルドカード検索を使い、クレジット カード番号や社会保障番号(SSN)のような情報を 1 文字ずつ推論し、最終的に情報を抜き取ります。

3. フィルタされていないコンテンツを安全に扱う

インデックス ポイズニングは、フィルタされないまま悪意のあるコンテンツが Elasticsearch に取り込まれたときに発生します。ユーザー生成コンテンツ(UGC)をインデックスするときには、必ず保存前にフィルタするようにしてください。

検索エンジン(さらに言えば、あらゆるデータ ストレージ)から返されるコンテンツは、出力先に応じて適切にエスケープします。ウェブ ページに表示する検索結果のスニペットとしてなら HTML エスケープを、データベースへのクエリの中で使うデータなら SQL エスケープをしてください。詳細は、OWASP のデータ バリデーションXSS 対策に関するページが参考になります。

要約すると、Elasticsearch のセキュリティを向上する方法は、他のクラウド サービスやオープンソース サービスと変わりません。ベスト プラクティスを適用し、ハッカーの立場で考え、そして「重大でない脆弱性を突いた攻撃の連鎖が、最も破壊的な結果をもたらす」ということを忘れないでください。

* この投稿は米国時間 2 月 23 日、Solutions Architect である Ian Maddox によって投稿されたもの(投稿はこちら)の抄訳です。

- By Ian Maddox, Solutions Architect