今回は、2021/12/10に発表されたApache Log4jに関する脆弱性に関するワークアラウンドの一環で、Connection ServerにおけるLog4jの脆弱性軽減対応を行います。
なお、本脆弱性に関する最新の対応方法はVMware社のページで確認してください。
VMSA-2021-0028.4
対象範囲
今回の脆弱性の対象範囲について確認します。
Connection Serverは現在2つの脆弱性を持っています。
CVE-2021-44228とCVE-2021-45046です。
前者については、Log4jのClassファイルによる影響、後者はLog4jのHTML Accessによる脆弱性です。
詳しくはVMwareのCVEで確認をしていただきたいのですが、Connection Serverは2021/12/16・17にリリースされたバージョン以外はほぼすべてのバージョンでどちらかまたは両方の脆弱性を含んでいます。
脆弱性対応方法
基本的な回避策としてはConection Serverのバージョンアップで脆弱性の修正が行われていますが、バージョンアップが難しい場合は、軽減方法が明記されています。
今回は、バージョンアップによる回避方法ではなく、スクリプトによる軽減策で対策を行っていきたいと思います。
脆弱性軽減方法
Connetion Serverの脆弱性軽減にはVMware社が提供している脆弱性軽減スクリプトを入手する必要があります。
入手先は以下の場所より入手できます。
Log4j CVE-2021-44228
記事中段付近にある[Horizon_Windows_Log4j_Mitigation.zip]のリンクよりダウンロードします。
ダウンロード後、Connection Serverにローカルの管理者権限を持つアカウントでログインします。

ダウンロード後、Connection Serverの任意の場所に展開してください。

展開されたファイルには、バッチファイルが入っているため、こちらを実行することで、脆弱性の軽減が可能になります。
内容的には、脆弱性に対応に必要なレジストリの追加等が処理として書かれています。

Connection Serverの[スタートメニュー]より、[コマンドプロンプト]を管理者権限で実行します。

コマンドプロンプトが起動したら、cdコマンドでダウンロードしたバッチファイルのカレントディレクトリまで移動します。

バッチファイルのカレントディレクトリまで移動したら、以下のコマンドを実行します。
> .\Horizon_Windows_Log4j_Mitigation.bat /verbose
コマンド実行後、以下のログが出力された場合、脆弱性があるConnection Serverとなり、対応が必要です。
Vulnerable Log4j libraries detected.

脆弱性の対応を行うため、Windowsの[スタートメニュー]より、[サービス]を起動します。
サービスの一覧から、[VMware Horizon View Connection Server]を右クリックし、[停止]を押下します。
なお、Connection Serverのサービスを停止すると、VDIへの新規ログインや接続中のVDIから切断されます。そのため、充分以上にリスクアセスメントを実施してください。

[VMware Horizon View Connection Server]と関連サービスが完全に停止していることを確認します。
サービスの停止後、以下のコマンドを実行しLog4jの対応を行います。
> .\Horizon_Windows_Log4j_Mitigation.bat /verbose /resolve

コマンドの実行後、以下のログが出力されれば、脆弱性の対応は完了です。
Compuleted. Please restart the services for the changes to take effect.

脆弱性の対応が完了したら、[サービス]-[VMware Horizon View Connection Server]を右クリックし、[開始]を押下します。

[VMware Horizon View Connection Server]のステータスが実行中となっており、Horizon関連サービスも実行中となっていることを確認します。

サービスの起動後にコマンドプロンプト上で以下のコマンドを実行し、Log4jの脆弱性が軽減されたことを確認します。
> .\Horizon_Windows_Log4j_Mitigation.bat /verbose
・・・
No Vulnerable Log4j libraries detected.
対応後稼働確認
今回は、Connection Serverのサービスを再起動しているため、サービスの起動後のHorizon AdministratorやVDIへのログインを確認し、Connection Serverが正常に稼働していることを確認してください。
また、Connection Serverでクラスタを組んでいる場合や、CPAの構成を取っている場合、Horizon Administratorより、他のサーバで問題が発生していないことの確認もお忘れなく。
最後に、Connection Serverのコマンドプロンプト上で以下のコマンドを実行し、他のConnection Serverと正常にレプリケーションがとれていることを確認します。
repadmin /showrepl localhost:389 DC=vdi,DC=vmware,DC=int
脆弱性復旧コマンドを使用してみた
VMware社から提供されている脆弱性軽減スクリプトですが、脆弱性を軽減する機能だけではなく、もとの構成に戻すコマンドも用意されていました。
必要はなさそうですが、コマンドが失敗したりコマンドによりConnection Serverの挙動がおかしくなった際に復旧ができるよになっています。

> .\Horizon_Windows_Log4j_Mitigation.bat /verbose /restore
このバッチファイルに引数を変更することで、元の状態に戻すことができるらしいです。
検証環境で実行した限り、正常に戻っているか怪しいので、可能な限り使用するのは控えたほうが良さそうです。
ただ、[プロセスが、存在しないパイプに書き込もうとしました。]とメッセージが出ていますが、Connection Serverの機能としては正常に実行できているので、失敗しているかわからないですね・・・
まとめ
前回に引き続き、Connection ServerのLog4j対応を行いました。
今回は、スクリプトが提供されていたため、初動で案内されていたレジストリを手動で変更するというリスキーなやり方よりは簡単に実行できるようになっていました。
このスクリプトはHorizon Agent for Windowsでも使用できるので、次回はこのスクリプトを使用して、Horizon Agent for Windowsの脆弱性対応を実施していきたいと思います。
また、Unified Access GatewayのLog4j対応も公開しているため、こちらも合わせてどうぞ。
おまけ
本ブログでは、VMwareやWindows、Linuxのインストール手順等も公開しております。
インフラエンジニアとして有益な記事や無益なコンテンツも作成しておりますので、通勤時間や休憩時間、休日のスキマ時間等に合わせて読んでいただけると幸いです。
コメント