前回、Unified Access Gateway(UAG)でLog4jの対応をしましたが、脆弱性情報の更新があったため更新版の手順を実施します。
なお、最新の情報はVMware社のページを確認してください。
VMSA-2021-0028.4
脆弱性が含まれるUAGの判定
VMware社のページを見る限り、以下の条件を全て満たす場合、脆弱であるとアナウンスされています。
VDIからのパススルーには影響はありません。
- UAG v2111までのUAG
- UAGでRADIUSおよびRSA Secure IDを使用している場合
UAGにRADIUSの設定やRSAの設定を行なっているかまずは確認をしてください。
設定を行なっていない場合は、本対応は不要です。
また、UAG v3.3未満のUAGを使用している場合は、UAGのバージョンを上げてから本脆弱性の対応をしてください。(RADIUSやRSAを使用している場合のみ)
UAG設定のエクスポート
UAGの脆弱性対応を行う前に、必ず現行で使用しているUAGの設定をエクスポートしてください。
設定のバックアップは、[手動設定]-[サポート設定]-[Unified Access Gateway設定のエクスポート]より、JSON形式でエクスポートを行います。
また、OPSWAT Metaaccess等を使用している場合は、設定時にクライアントアクセスキー等が必要になる場合があるため、事前に確認しておきます。
また、UAGに対しコマンドを実行するためvCenterのコンソールではなく、SSHでの接続を推奨します。
UAG脆弱性回避設定
UAGに対し、rootアカウントを使用し、SSH接続を行います。
SSHを行ったUAGに対し、以下のコマンドを実行しLog4jの脆弱性が含まれるclassファイルをリストアップさせます。
root@XXXXXX [ ~ ]# find / -type f \( -name "*.jar" -o -name *.war \) -exec sh -c "zipinfo -1 {} 2>/dev/null | grep 'JndiLookup.class' && echo [+]{}" \;
コマンドの実行結果として、以下の文字列が出力されます。
org/apache/logging/log4j/core/lookup/JndiLookup.class
[+]/opt/vmware/gateway/data/authbroker/.extract/webapps/hc/WEB-INF/lib/log4j-core-2.13.3.jar
org/apache/logging/log4j/core/lookup/JndiLookup.class
[+]/opt/vmware/gateway/data/authbroker/.extract/webapps/hc/WEB-INF/lib/tomcat-support-1.0.jar
org/apache/logging/log4j/core/lookup/JndiLookup.class
[+]/opt/vmware/gateway/data/authbroker/password-auth-adapter-0.1.jar
org/apache/logging/log4j/core/lookup/JndiLookup.class
[+]/opt/vmware/gateway/data/authbroker/securid-auth-adapter-0.1.jar
org/apache/logging/log4j/core/lookup/JndiLookup.class
[+]/opt/vmware/gateway/data/authbroker/certificate-auth-adapter-0.1.jar
org/apache/logging/log4j/core/lookup/JndiLookup.class
[+]/opt/vmware/gateway/data/authbroker/rsaaa-auth-adapter-0.1.jar
次に、以下のコマンドを実行しTEMP用のディレクトリを作成します。
root@XXXXXX [ ~ ]# mkdir -p /tmp/fix-jar
次に、以下のコマンドを使用して、Log4jのclassファイルを無害化します。
root@XXXXXX [ ~ ]# mkdir -p /tmp/fix-jar
root@XXXXXX [ ~ ]# unzip -q -o /opt/vmware/gateway/lib/ab-frontend-0.2.jar -d /tmp/fix-jar
root@XXXXXX [ ~ ]# unzip -q -o /tmp/fix-jar/hc.war -d /tmp/fix-jar/hc
root@XXXXXX [ ~ ]# zip -dq /tmp/fix-jar/hc/WEB-INF/lib/log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
root@XXXXXX [ ~ ]# rm /tmp/fix-jar/hc.war
root@XXXXXX [ ~ ]# (cd /tmp/fix-jar/hc && zip -r -q /tmp/fix-jar/hc.war .)
root@XXXXXX [ ~ ]# rm -rf /tmp/fix-jar/hc
root@XXXXXX [ ~ ]# (cd /tmp/fix-jar && zip -r -q ab-frontend-0.2.jar . && chown gateway:users ab-frontend-0.2.jar)
root@XXXXXX [ ~ ]# mv /tmp/fix-jar/ab-frontend-0.2.jar /opt/vmware/gateway/lib
以下のコマンドを実行します。
なお、最初のコマンドを実行後は対話モードが続きます。(doneを入力すると、プロンプトが戻ってきます。)
root@XXXXXX [ ~ ]# find / -type f \( -name "*.jar" -o -name *.war \) -exec sh -c "zipinfo -1 {} 2>/dev/null | grep 'JndiLookup.class' && echo {}" \; | grep .jar | while read -r line ; do
> jar_path=$line
> zip -dq $jar_path org/apache/logging/log4j/core/lookup/JndiLookup.class
> chown gateway:users $jar_path
> done
再度、findコマンドを実行し秘技ファイルが削除されていることを確認します。
root@XXXXXX [ ~ ]# find / -type f \( -name "*.jar" -o -name *.war \) -exec sh -c "zipinfo -1 {} 2>/dev/null | grep 'JndiLookup.class' && echo [+]{}" \;
sedコマンドでiniファイルの書き換えを行います。
root@XXXXXX [ ~ ]# sed -i 's/java /java -Dlog4j2.formatMsgNoLookups=true /' /opt/vmware/gateway/supervisor/conf/authbroker.ini
サービスを再起動します。
root@XXXXXX [ ~ ]# supervisorctl restart authbroker
authbroker: stopped
authbroker: started
psコマンドでプロセスの起動状態を確認します。
root@vUGA2106 [ ~ ]# ps -ef | grep ab-frontend
gateway 19953 817 99 23:38 ? 00:00:22 /usr/lib/jvm/zulu-8/jre/bin/java -Dlog4j2.formatMsgNoLookups=true -Dfile.encoding=UTF8 -Dport=8877 -Dlog4j.configuration=file:/opt/vmware/gateway/conf/log4j-authbroker.properties -Dspring.profiles.active=accesspoint -jar /opt/vmware/gateway/lib/ab-frontend-0.2.jar
root 19996 14224 0 23:39 pts/0 00:00:00 grep --color=auto ab-frontend
gatewayの起動ステータスで以下の引数付きでサービスが立ち上がっていることを確認します。
-Dlog4j2.formatMsgNoLookups=true
以上で、UAGのLog4j対応は完了です。
まとめ
今回は、前回から更新があったUnified Access GatewayのLog4j対応方法を記事にしました。
脆弱性の発見から1週間以上が経過し、情報や影響範囲が絞られてきています。
そのため、早急に行なったLog4jの対応も見直す必要があると思われます。
また、vCenterやHorizonの情報も当初に比べ影響範囲等が明確化かつ限定的になってきています。
vCenterやHorizon等の情報につきましても近いうちに更新していきたいと思います。
おまけ
本ブログでは、VMwareやWindows、Linuxのインストール手順等も公開しております。
インフラエンジニアとして有益な記事や無益なコンテンツも作成しておりますので、通勤時間や休憩時間、休日のスキマ時間等に合わせて読んでいただけると幸いです。
コメント