
Citrix NetScalerデバイス向けのフォレンジックトリアージツールキットで、DissectベースのIOCスキャナーを備え、Webシェル、タイムスタンピング、不審なバイナリを検出します。さらに、CVE脆弱性を特定するリモートバージョンスキャナーも搭載しています。
このリポジトリには、Citrix NetScaler デバイス用のトリアージスクリプトが含まれています:
iocitrix.py -- Citrix NetScaler イメージ/ターゲットをトリアージするための Dissect スクリプト。scan-citrix-netscaler-version.py -- HTTP(s) 経由で NetScaler デバイスのバージョンをスキャンし、フィンガープリントを取得します。このスクリプトを使用して、HTTP(s) 経由で Citrix NetScaler デバイスのバージョンをスキャンして特定できます。 また、バージョンに基づいて NetScaler が特定の CVE に対して脆弱かどうかも判定します。
scan-citrix-netscaler-version.py のインストールpip を使用している場合は、次の手順に従ってください:
uv を使用する場合は、スクリプトを直接実行できます:
使用例:
$ python3 scan-citrix-netscaler-version.py 192.168.1.10 192.168.1.12
192.168.1.10 (*.local.domain) is running Citrix NetScaler version 13.1-51.15 (VULNERABLE)
192.168.1.12 (*.local.domain) is running Citrix NetScaler version 12.1-55.330 (NOT VULNERABLE)
または、結果を JSON で取得:
$ python3 scan-citrix-netscaler-version.py https://192.168.1.11 --json | jq
{
"scanned_at": "2025-09-03T23:11:36.864228+00:00",
"target": "https://192.168.1.11",
"tls_names": "my-first-netscaler.local",
"rdx_en_stamp": 1702886392,
"rdx_en_dt": "2023-12-18T07:59:52+00:00",
"version": "12.1-55.302",
"error": null,
"vulnerable": {
"CVE-2025-5349": true,
"CVE-2025-5777": true,
"CVE-2025-6543": false,
"CVE-2025-7775": true,
"CVE-2025-7776": true,
"CVE-2025-8424": true
},
"is_vulnerable": true
}
--cve フラグを使用して、脆弱性ステータスのチェックを特定の CVE に限定することも可能です:
$ python3 scan-citrix-netscaler-version.py https://192.168.1.11 --cve CVE-2025-6543 --json | jq
{
"scanned_at": "2025-09-03T23:16:36.573016+00:00",
"target": "https://192.168.1.11",
"tls_names": "my-first-netscaler.local",
"rdx_en_stamp": 1702886392,
"rdx_en_dt": "2023-12-18T07:59:52+00:00",
"version": "12.1-55.302",
"error": null,
"vulnerable": {
"CVE-2025-6543": false
},
"is_vulnerable": false
}
結果を CSV 形式で取得するには、--csv フラグを使用するだけです。
その他のオプションについては --help を参照してください。
iocitrix.py を使用して、NetScaler Dissect ターゲット上の既知の侵害指標 (IOC) を確認できます。以下の項目をチェックします:
このスクリプトは Citrix NetScaler デバイスのフォレンジックディスクイメージ上で実行することを想定しており、デバイス自体で実行するものではないことに注意してください。 Citrix NetScaler のフォレンジックディスクイメージの作成方法については、Citrix NetScaler ディスクイメージの作成 セクションも参照してください。
最新バージョンの Dissect がインストールされていることを確認してください。Citrix NetScaler のサポートはこの PR で追加されました: https://github.com/fox-it/dissect.target/pull/357
免責事項: このツールは正確性を追求していますが、誤検知 (false positives) や誤検出 (false negatives) が発生する可能性があります。ユーザーは結果を相互検証し、このツールの出力に基づいて意思決定を行う前に自身の判断を使用することをお勧めします。
iocitrix.py のインストール次の手順に従ってください:
ステップ 4 では次のエラーが表示されますが、無視して問題ありません:
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
その後、iocitrix.py <TARGETS> を実行して、1 つ以上のフォレンジックイメージに対して IOC チェックを開始できます。このスクリプトは、dissect が Target として読み取れる任意の入力 (.VMDK や RAW ディスクイメージなど) を受け入れます。以下にいくつかの例を示します。
python3 iocitrix.py image.vmx
python3 iocitrix.py image.vmdk
RAM ディスク のフォレンジックイメージも作成した場合は、iocitrix.py を使用して揮発性データをトリアージに組み込むことができます:
python3 iocitrix.py md0.img+image.vmx
python3 iocitrix.py md0.img+image.vmdk
python3 iocitrix.py md0.img+da0.img
+ (プラス) 記号は、2 つのディスクイメージを単一の Dissect Target として読み込みます。
Citrix NetScaler は、オフラインのフォレンジック分析用にイメージ化できる 2 つの重要なブロックデバイスを公開しています。これらのブロックデバイスファイルは、次のパスにあります:
/dev/md0: ルート (/) ディレクトリを保持するディスク。これは RAM ディスクです。/dev/da0: /var および /flash ディレクトリを保持するディスク。これは永続ディスクです。Citrix NetScaler のルートディレクトリ (/) は RAM ディスクであり、揮発性ディスクであることを意味します。このディスクは NetScaler の電源がオンで実行中の場合に /dev/md0 にあり、NetScaler の電源がオフの場合は利用できません。/var および /flash ディレクトリは /dev/da0 ディスク上に 2 つの別々のパーティションとして存在し、永続的です。
ローカルの Linux マシンで次のコマンドを使用して、SSH 経由で NetScaler のディスクを作成できます:
/dev/da0 ディスクのディスクイメージをローカルマシンに作成するlocal ~ $ ssh nsroot@<YOUR-NETSCALER-IP> shell dd if=/dev/da0 bs=10M | tail -c +7 | head -c -6 > da0.img
これには時間がかかる場合があることに注意してください。dd を使用しても進行状況は表示されません。
プロンプトの制御が戻るまで待つことをお勧めします。これは dd が完了したことを示します。
また、/dev/da0 がない場合は、おそらく /dev/ada0 です。mount または gpart show コマンドを使用して確認できます。
/dev/md0 ディスクのディスクイメージをローカルマシンに作成するlocal ~ $ ssh nsroot@<YOUR-NETSCALER-IP> shell dd if=/dev/md0 bs=10M | tail -c +7 | head -c -6 > md0.img
注記: /dev/md0 と /dev/da0 の両方のディスクイメージを作成することをお勧めしますが、/dev/md0 のディスクイメージの作成は任意です。この手順はスキップできますが、iocitrix.py が特定の侵害指標を見逃す可能性があります。
iocitrix.py の実行ローカルマシンで前述のコマンドを実行すると、da0.img および md0.img ファイルが存在します。iocitrix にこれらのファイルを指定して、イメージのトリアージを開始できます。これを行うには、次のコマンドを使用します:
local ~ $ python3 iocitrix.py md0.img+da0.img
出力例:
(venv) user@dissect:/data/netscaler/image$ python3 iocitrix.py md0.img+da0.img
<Target md0.img+da0.img>
Disks
- <RawContainer size=555745286 vs=None>
- <RawContainer size=21474836486 vs=<DissectVolumeSystem serial=None>>
Volumes
- <Volume name=None size=555745286 fs=<FfsFilesystem>>
- <Volume name='part_00000000' size=1717567488 fs=<FfsFilesystem>>
- <Volume name='part_66600000' size=4401922048 fs=<FfsFilesystem>>
- <Volume name='part_16cc00000' size=2097152 fs=<FfsFilesystem>>
- <Volume name='part_16ce00000' size=15353200128 fs=<FfsFilesystem>>
Hostname : None
Domain : None
IPs : 10.164.0.39, 10.164.0.10
OS family : citrix-netscaler (CitrixBsdPlugin)
OS version : NetScaler 13.1 build 30 (ns-13.1-30.52)
Architecture : x86_64-citrix-netscaler
Language(s) :
Timezone : None
Install date : 2023-08-08 13:59:38.228043+00:00
Last activity : 2023-08-11 08:51:13.979536+00:00
*** Checking for webshells ***
<ioc/hit type='php-file-permission' alert='Suspicious php permission 0o644' confidence='high' path='/var/netscaler/logon/LogonPoint/uiareas/linux/adminupevents.php'>
<ioc/hit type='php-file-contents' alert="Suspicious PHP code 'b'array_filter(''" confidence='high' path='/var/netscaler/logon/LogonPoint/uiareas/linux/adminupevents.php'>
<ioc/hit type='php-file-permission' alert='Suspicious php permission 0o644' confidence='high' path='/var/vpn/config.php'>
<ioc/hit type='php-file-contents' alert="Suspicious PHP code 'b'array_filter(''" confidence='high' path='/var/vpn/config.php'>
<ioc/hit type='php-file-permission' alert='Suspicious php permission 0o644' confidence='high' path='/var/vpn/themes/config.php'>
*** Checking for timestomped files ***
*** Checking for suspicious cronjobs ***
*** Checking for SUID Binaries (this takes a while) ***
<ioc/hit type='binary/suid' alert='Binary with SUID bit set Observed' confidence='medium' path='/tmp/python/bash'>
********************************************************************************
*** ***
*** There were findings for Indicators of Compromise. ***
*** Please consider performing further forensic investigation of the system. ***
*** ***
********************************************************************************
Confidence Type Alert Artefact Location
------------ ------------------- ------------------------------------------ ---------------------------------------------------------------
high php-file-permission Suspicious php permission 0o644 /var/netscaler/logon/LogonPoint/uiareas/linux/adminupevents.php
high php-file-contents Suspicious PHP code 'b'array_filter('' /var/netscaler/logon/LogonPoint/uiareas/linux/adminupevents.php
high php-file-permission Suspicious php permission 0o644 /var/vpn/config.php
high php-file-contents Suspicious PHP code 'b'array_filter('' /var/vpn/config.php
high php-file-permission Suspicious php permission 0o644 /var/vpn/themes/config.php
medium binary/suid Binary with SUID bit set Observed /tmp/python/bash
All targets analyzed.