【AWS】Amazon EMR ~ Log4j / CVE-2021-44228 対策 ~

■ はじめに

今更だが、Log4j 脆弱性問題「CVE-2021-44228」について
EMRでの対応について触れたので、メモしておく。

目次

【1】Log4j 脆弱性問題「CVE-2021-44228」
 1)リスクについて
【2】EMRでの対策手順
 1)パッチをダウンロードし、配置する
 2)Boostrap actionsで、パッチを実行

【1】Log4j 脆弱性問題「CVE-2021-44228」

そもそも、Log4j 脆弱性問題「CVE-2021-44228」とは、、、

https://www.jpcert.or.jp/at/2021/at210050.html

より

Apache Log4jの Lookupと呼ばれる機能が悪用されると...

[1] 遠隔の第三者が細工した文字列を送信
 => Log4jがログとして記録
[2] Lookupにより指定された通信先もしくは
 内部パスからjava classファイルを読み込み実行
[3] 任意のコードが実行される可能性がある

Lookup機能とは?

* ログとして記録された文字列から一部の文字列を変数として置換

1)リスクについて

* 以下に晒される可能性がある
 + 機密情報の窃取
 + リモートから任意コード実行
 + DoS攻撃を受ける

【2】EMRでの対策手順

https://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-log4j-vulnerability.html

で、AWSからパッチが用意してくれている

1)パッチをダウンロードし、配置する

* 以下のサイトを三項に対象のEMR version(今回は「emr-6.4.0」)をダウンロードし
 自分のS3バケットに配置しておく

https://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-log4j-vulnerability.html

コマンド例

# アクセスできるか確認
aws s3 ls s3://elasticmapreduce/bootstrap-actions/log4j/ --no-sign-request

# パッチをダウンロードする
aws s3 cp s3://elasticmapreduce/bootstrap-actions/log4j/patch-log4j-emr-6.4.0-v1.sh ./patch-log4j-emr-6.4.0-v1.sh --no-sign-request

# 自分のS3バケットに配置する
aws s3 cp ./patch-log4j-emr-6.4.0-v1.sh s3://your-bucket-name/emr/patch/patch-log4j-emr-6.4.0-v1.sh

補足1:対応するバージョンのシェルが見当たらないって思ったら、、、

* EMR v5.35.0 の場合、以下の公式サイトを確認したところ、
 デフォルトで対応が取られている模様。

https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-5350-release.html

より抜粋
~~~~~~~~~~~~~
New Features

Amazon EMR release 5.35 applications that use Log4j 1.x
 and Log4j 2.x are upgraded to use Log4j 1.2.17 (or higher)
 and Log4j 2.17.1 (or higher) respectively, and do not require
 using bootstrap actions to mitigate the CVE issues
 in previous releases.
See Approach to mitigate CVE-2021-44228.
~~~~~~~~~~~~~

* EMR v5.30.0 の場合、以下の公式サイトの対応表を確認して
 patch-log4j-emr-5.30.2-v1.sh をダウンロードすればいい。

https://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-log4j-vulnerability.html

EMR リリースバージョン 2021年12月現在の最新改訂
5.30.0 または 5.30.1 5.30.2

補足2:--no-sign-request について
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-options.html

より抜粋
~~~~~~~~~~~~~~~~~~~~~
AWS サービスエンドポイントに対する HTTP リクエストへの署名を
無効にするブールスイッチ。
これにより、認証情報がロードされることを防ぎます。
~~~~~~~~~~~~~~~~~~~~~

2)Boostrap actionsで、パッチを実行

* 対象EMRを起動する際の「Boostrap actions」において、
 1)のパッチ(シェルスクリプト)を実行するように設定する

Boostrap actions 例

* Name : For_Log4J_CVE_2021_44228
* Location : s3://your-bucket-name/emr/patch/patch-log4j-emr-6.4.0-v1.sh
* Optional arguments : なし

関連記事

Amazon EMR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/20/230519
Amazon EMR に関するトラブル
https://dk521123.hatenablog.com/entry/2020/08/05/144724