Citrixをもっと好きにBlog

このブログはCitrix好きな筆者が、Citrix導入に携わる皆さまに送るブログです。みんなでCitrixを盛り上げよう!

【重要】Citrix ADCの脆弱性(CVE-2019-19781)が発表されました。今すぐ対策を実施しましょう

皆さま、お疲れ様です。

 

既に外部公開しているCitrix ADCを導入されているお客様は本情報をご存じだと思いますが、2019年12月17日にCitrix ADCに関する重大な脆弱性の情報が公開されました。(CVE-2019-19781)

CVE-2019-19781 - Vulnerability in Citrix Application Delivery Controller, Citrix Gateway, and Citrix SD-WAN WANOP appliance

 

IPAやJPCERTでも脆弱性対応の注意喚起がなされています。

IPA更新:Citrix ADC および Citrix Gateway における任意のコード実行の脆弱性(CVE-2019-19781)について:IPA 独立行政法人 情報処理推進機構

JPCERT:複数の Citrix 製品の脆弱性 (CVE-2019-19781) に関する注意喚起

 

本記事では脆弱性情報とファームウェア更新手順の一例をまとめたいと思います。

 

  

1.脆弱性の内容・対象機器について

1-1.脆弱性の内容

CVE-2019-19781ではCitrix ADC(旧名 NetScaler ADC)、Citrix Gateway(旧名 NetScaler Gateway)、Citrix SD-WANの特定モデルにおいて、インターネット上の第三者から任意のコードが実行され、データ改ざんやファイル流出が行われる可能性がある、と発表されています。

 

Project Zero IndiaやTrusted Secが1/11にCVE-2019-19781のエクスプロイトコードをGitHubに公開しましたが、様々な攻撃が行われているようです。

アメリカのブログを見ると、一例として、、、

①ns.conf (コンフィグファイル) をCitrix ADC内にxmlファイルとして別名保存するコマンドの実行

②/etc/passwd をCitrix ADC内にxmlファイルとして別名保存するコマンドの実行

③攻撃者がインターネット上に配置した不正プログラムをwgetしてxmlファイルとしてCitrix ADC内に保存するコマンド

などが実際に確認されているそうです。

①や②はその後にxmlファイルをダウンロードしてコンフィグやパスワードを入手する目的で作成、③はバックドアプログラムを機器に配置する目的で作成、といった感じでしょうか。

 

いずれにしてもCitrix ADCの重要情報流出につながる攻撃が行われるリスクがある、という認識を持っていただければと思います。

 

1-2.対象機器・対象ファームウェア

以下の通りです。

対象機器:Citrix ADC(旧名 NetScaler ADC)、Citrix Gateway(旧名 NetScaler Gateway)、Citrix SD-WANの特定モデル(4000-WO, 4100-WO, 5000-WO, 5100-WO)

対象ファームウェア:EOLとなっていない全ファームウェアバージョン

 

具体的には以下の表に該当するものが対象となります。 

製品名

ベース

バージョン

脆弱性の対象となるバージョン(※)
Citrix ADC,
Citrix Gateway
13.0 13.0.47.24より前の全バージョン
12.1 12.1.55.18より前の全バージョン
11.1 12.0.63.13より前の全バージョン
10.5 11.1.63.15より前の全バージョン
Citrix SD-WAN WANOP
4000-WO, 4100-WO,
5000-WO, 5100-WO
10.x 10.2.6bより前の全バージョン
11.x 11.0.3bより前の全バージョン

※どのプラットフォームで実行されていても、上記に該当する場合は脆弱性の対象となります。例えばCitrix ADC、Citrix Gatewayでは物理アプライアンスのMPXと仮想アプライアンスのVPXがありますがどちらも上記表のファームウェアバージョンである場合、脆弱性の対象となります。

 

なお、現在のCitrix ADCのバージョンはCitrix ADCにSSHして以下のコマンドで確認ができます。

> show ns version
NetScaler NS13.0: Build 47.22.nc, Date: Nov 28 2019, 11:59:25 (64-bit)
→私の環境の例です。ベースバージョン13.0で、
 47.22は47.24よりも前のバージョンとなるため脆弱性の対象と判断できます。

  

1-3.対応方法

2020/1/24時点で脆弱性の対象となっていたすべてのバージョンで脆弱性対応がされたファームウェアが公開されています。

こちらのファームウェアの更新を急ぎ行うようにしましょう。 ファームウェアの更新例は本ブログの3章で記載します。

 

Citrix ADC and Citrix Gateway
ベースバージョン

脆弱性対応

バージョン

リリース日
10.5 10.5.70.12 2020/1/24 (リリース済み)
11.1 11.1.63.15 2020/1/19 (リリース済み)
12 12.0.63.13 2020/1/19 (リリース済み)
12.1 12.1.55.18 2020/1/23 (リリース済み)
13 13.0.47.24 2020/1/23 (リリース済み)
Citrix SD-WAN WANOP  
ベースバージョン

脆弱性対応

バージョン

リリース日
10.2.6b 11.1.51.615 2020/1/22 (リリース済み)
11.0.3b 11.1.51.615 2020/1/22 (リリース済み)

 

 

2.攻撃有無の確認

2-1.不審なファイルの有無の確認

1-1.で攻撃の一例として記載しましたが、CVE-2019-19781の攻撃ではコード実行に伴いCitrix ADC上に不正な.xmlファイルが作成されます。

Citrix ADCにSSH接続し、以下コマンドで該当フォルダに不審なファイルがないかを確認しましょう。

> shell ls /netscaler/portal/templates/*.xml
> shell ls /var/tmp/netscaler/portal/templates
> shell ls /var/vpn/bookmark/*.xml
→"No such file or directory" と表示されればOKです。

 

2-2.httpaccessログで不正通信の有無の確認

不正な通信は、Citrix ADCのhttpaccessログやhttperrorログに出力されるため以下のコマンドで確認しましょう。

# httpaccessログの確認
> shell cat /var/log/httpaccess.log | grep \/vpn\/
> shell cat /var/log/httpaccess.log | grep \.\.\/
> shell cat /var/log/httpaccess.log | grep \.pl
> shell gzcat /var/log/httpaccess.log.*.gz | grep \/vpn\/
> shell gzcat /var/log/httpaccess.log.*.gz | grep \.\.\/
> shell gzcat /var/log/httpaccess.log.*.gz | grep \.pl
# httperrorログの確認
> shell cat /var/log/httperror.log | grep (検索キーワードはhttpaccess.logと同じ)
> shell gzcat /var/log/httperror.log | grep (検索キーワードはhttpaccess.logと同じ)
→いずれも何も表示されなければOKです。

 

2-3.不正なcronジョブの有無の確認

cron内に不正なバックドアプログラムなどが仕掛けられていないか以下のコマンドで確認しましょう。

> shell cat /etc/crontab
→私の環境では"adjkerntz -a"、"nsfsyncd -p"、"nslog.sh dozip"、"/bin/pgrep -f (中略)/appfw_dynamic_profiles.py"
 という既定のジョブが設定されていますが上記以外が設定されていなければOKです。
> shell crontab -l -u nobody
→"no crontab for nobody"と表示されればOKです。

 

2-4.PythonPerlなどのプロセスの有無の確認

バックドアプログラムはPythonPerlなどで動作していることが多いため、以下のコマンドでバックドアプログラムが動いていないか確認しましょう。

> shell ps -aux | grep python
> shell ps -aux | grep perl
→"grep python"、"grep perl"のみが表示されればOKです。

 

3.ファームウェア更新例

3-1.更新に当たっての注意点

ここでは私の環境を参考にファームウェアの更新例を記載します。注意点を2点記載します。

①物理アプライアンスの場合、hardware-software compatibility matrixに準拠するようにしましょう。(該当のモデルでサポートしていないバージョンに上げないようにしましょう。)

②Virtual Apps and Desktops(旧:XenApp and XenDesktop)などのCitrixの他製品と組み合わせてCitrix ADCを使用している場合、互換性を確認しましょう。(Citrix ADCを上げたらXenDesktopと互換性がなくなった、ということがないようにしましょう。) 

 

3-2.更新のフロー

本番環境では基本的にHA構成で冗長化していると思いますので、HA構成を基本として記載します。更新は以下のステップで行います。

Step1.HAのセカンダリ機の更新を行う

Step2.セカンダリ機の起動確認とコンフィグ確認

Step3.フェイルオーバーをして、セカンダリ機をプライマリに昇格

Step4.HAのプライマリ機の更新を行う

Step5.プライマリ機の起動確認とコンフィグ確認

Step6.再度フェイルオーバをして、セカンダリ機をセカンダリに戻す

 フェイルオーバを行うStep3と6のタイミングで一瞬通信断が発生します。

 

3-3.更新手順

1.まずは手元にCitrix ADCのファームウェア脆弱性対応バージョンを準備します。Citrixのサイトからダウンロード可能ですが、製品購入者の方のCitrixアカウントが必要です。私の環境では「build-13.0-47.24_nc_64.tgz」というファイルを使用しました。

 

2.事前にコンフィグ確認とバックアップ取得を行います。Citrix ADCのプライマリ機に接続し、以下のコマンドを実行し、コンフィグ確認とバックアップ取得を行います。

# プライマリ機で実行すること
> show ns runningConfig
(コンフィグ内容は割愛)
> save config
Done (コンフィグ変更が行われていない場合はその旨のメッセージが表示されます)
> create system backup -level full
Done
> show system backup
1) FileName: backup_full_192.168.130.11_2020_01_26_03_33.tgz
Level: full Includekernel: NO
Size: 619 CreationTime: "Sun Jan 26 12:33:38 2020"
Version: NS13.0-47.22 CreatedBy: nsroot
IPAddress: 192.168.130.11
Done
> shell ls /var/ns_sys_backup
backup_full_192.168.130.12_2020_01_26_03_33.tgz nsbackupmap.txt
Done
→必要に応じてSCPなどで /var/ns_sys_backup 配下にある.tgzファイルを取得しましょう。

 

3.プライマリ機からログオフし、セカンダリ機にログインします。こちらでも「show ns runningConfig」でコンフィグを確認します。

バックアップは手順2.の「create system backup」コマンドでセカンダリ機側でも取得されています。こちらも必要に応じてSCPで作業端末にバックアップファイルをダウンロードしましょう。

 

4.ファームウェアセカンダリ機のフォルダにSCPします。フォルダは「/var/nsinstall」内に新しく作成します。

# セカンダリ機で実行すること
> shell
Copyright (c) 1992-2013 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
root@NS02# cd /var/nsinstall/
root@NS02# ls
root@NS02# mkdir 130_4724
root@NS02# ls
130_4724
→この /var/nsinstall/130_4724 フォルダに更新ファームウェアをSCPします。

 

5.SCP完了後、以下のコマンドでセカンダリ機のファームウェアを更新し、再起動します。

# セカンダリ機で実行すること
root@NS02# cd 130_4724
root@NS02# ls
build-13.0-47.24_nc_64.tgz
root@NS02# tar -zxvf build-13.0-47.24_nc_64.tgz
root@NS02# ./installns
(インストールプロセスの画面が流れる)
Installation has completed.
Reboot NOW? [Y/N] Y

 

6.再起動完了後、セカンダリ機にSSH接続してバージョンが上がっていることを確認したら、更新前のコンフィグと比較を行います。

# セカンダリ機で実行すること
> show ns version
NetScaler NS13.0: Build 47.24.nc, Date: Jan 20 2020, 06:11:41 (64-bit)
Done
→バージョンが上がっていることを確認します。
> show ns runningConfig
→バージョンアップ前のセカンダリ機のコンフィグと比較します。

 

7.コンフィグ確認完了後、HA Syncを無効化してHAフェイルオーバを行います。ここでセカンダリ機が一時的にプライマリに昇格しサービス提供を行います。フェイルオーバに伴い通信断が発生します。

# セカンダリ機で実行すること
> show ha node
1) Node ID: 0
IP: 192.168.130.12 (NS02)
 Node State: UP
Master State: Secondary
Sync State: SUCCESS → これを無効化する
(略)
> set ha node -hasync disabled
> show ha node
1) Node ID: 0
IP: 192.168.130.12 (NS02)
 Node State: UP
Master State: Secondary
Sync State: DISABLED → 無効化OK
(略)
> force failover
Please confirm whether you want force-failover (Y/N)? [N]:Y
Done
> show ha node
1) Node ID: 0
IP: 192.168.130.12 (NS02)
Node State: UP
Master State: Primary → フェイルオーバOK
(略)

 

8.プライマリ機でも手順4、5、6を実施し、ファームウェア更新→再起動→バージョン更新確認→コンフィグ確認を実施します。コマンドは割愛します。

 

9.プライマリ機の更新完了後、セカンダリ機のHA Syncを有効化し、再度フェイルオーバします。以上で更新作業完了です。

# セカンダリ機で実行すること
> show ha node
1) Node ID: 0
IP: 192.168.130.12 (NS02)
Node State: UP
Master State: Primary
Sync State: DISABLED → これを有効化する
(略)
> set ha node -hasync enabled
> show ha node
1) Node ID: 0
IP: 192.168.130.12 (NS02)
 Node State: UP
Master State: Secondary
Sync State: ENABLED → 有効化OK
(略)
> force failover
Please confirm whether you want force-failover (Y/N)? [N]:Y
Done
> show ha node
1) Node ID: 0
IP: 192.168.130.12 (NS02)
Node State: UP
Master State: Secondary → フェイルオーバOK
(略)

 

 

皆さまが管理されているシステムで外部公開しているCitrix ADCがある場合はファームウェア更新を今すぐ検討しましょう。

それではまた次の記事でお会いしましょう。