
Citrix NetScaler 장치용 포렌식 트라이지 툴킷으로, 웹셸, 타임스탬프 변조, 의심스러운 바이너리를 탐지하는 Dissect 기반 IOC 스캐너와 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 positive) 또는 미탐(false negative)이 발생할 수 있습니다. 사용자는 결과를 교차 검증하고 이 도구의 출력을 기반으로 결정을 내리기 전에 자신의 판단을 사용하는 것이 좋습니다.
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>를 실행하여 하나 이상의 포렌식 이미지에 대해 IOC 검사를 시작할 수 있습니다. 이 스크립트는 dissect가 Target으로 읽을 수 있는 모든 입력(예: .VMDK 또는 원시 디스크 이미지)을 허용합니다. 몇 가지 예시는 아래에 제공됩니다.
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
+(더하기) 기호는 두 디스크 이미지를 단일 Dissect Target으로 로드합니다.
Citrix NetScaler는 오프라인 포렌식 분석을 위해 이미징할 수 있는 두 개의 중요한 블록 장치를 노출합니다. 이러한 블록 장치 파일은 다음 경로에서 찾을 수 있습니다:
/dev/md0: 루트(/) 디렉터리를 보유하는 디스크. 이는 RAM 디스크입니다./dev/da0: /var 및 /flash 디렉터리를 보유하는 디스크. 이는 영구 디스크입니다.Citrix NetScaler의 루트 디렉터리(/)는 RAM 디스크이므로 휘발성 디스크입니다. 이 디스크는 NetScaler가 전원이 켜져 실행 중일 때 /dev/md0에서 찾을 수 있으며, NetScaler가 전원이 꺼지면 사용할 수 없게 됩니다. /var 및 /flash 디렉터리는 /dev/da0 디스크에 두 개의 별도 파티션으로 존재하며 영구적입니다.
다음 명령을 로컬 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.