
Strumento di triage forense per dispositivi Citrix NetScaler, con uno scanner IOC basato su Dissect per webshell, timestomping e binari sospetti, oltre a uno scanner remoto delle versioni che identifica le vulnerabilità CVE.
Questo repository contiene script di triage per dispositivi Citrix NetScaler:
iocitrix.py -- uno script Dissect per il triage di un'immagine/target Citrix NetScaler.scan-citrix-netscaler-version.py -- Scansiona e identifica la versione di un dispositivo NetScaler tramite HTTP(s).Puoi usare questo script per scansionare e determinare la versione di un dispositivo Citrix NetScaler tramite HTTP(s). Determinerà anche se il NetScaler è vulnerabile a specifiche CVE in base alla versione.
scan-citrix-netscaler-version.pyUsa i seguenti passaggi se stai usando pip:
In caso di uv, puoi eseguire lo script direttamente usando:
Esempio di utilizzo:
$ 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)
Oppure ottieni i risultati in 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
}
È anche possibile limitare i controlli dello stato di vulnerabilità a specifiche CVE usando il flag --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
}
Per ottenere i risultati in formato CSV, usa semplicemente il flag --csv.
Per ulteriori opzioni vedi --help.
Puoi usare iocitrix.py per verificare la presenza di Indicatori di Compromissione noti su un target Dissect NetScaler. Controlla le seguenti cose:
Nota che questo script è pensato per essere eseguito su immagini disco forensi di dispositivi Citrix NetScaler e non sul dispositivo stesso. Vedi anche la sezione Creazione di immagini disco Citrix NetScaler su come creare immagini disco forensi del tuo Citrix NetScaler.
Assicurati di avere l'ultima versione di Dissect, il supporto per Citrix NetScaler è stato aggiunto in questa PR: https://github.com/fox-it/dissect.target/pull/357
Disclaimer: Sebbene questo strumento miri all'accuratezza, è possibile che produca falsi positivi o falsi negativi. Si consiglia agli utenti di verificare i risultati e usare il proprio giudizio prima di prendere qualsiasi decisione basata sull'output di questo strumento.
iocitrix.pyUsa i seguenti passaggi:
Nota che il passaggio 4 stamperà il seguente errore, ma puoi ignorarlo:
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.
Puoi quindi eseguire iocitrix.py <TARGETS> per avviare un controllo IOC su una o più immagini forensi. Lo script accetta qualsiasi input che dissect può leggere come Target, come un .VMDK, o un'immagine disco raw. Alcuni esempi sono forniti di seguito.
python3 iocitrix.py image.vmx
python3 iocitrix.py image.vmdk
Se hai anche creato un'immagine forense del RAM disk, puoi utilizzare iocitrix.py per incorporare dati volatili nel suo triage in questo modo:
python3 iocitrix.py md0.img+image.vmx
python3 iocitrix.py md0.img+image.vmdk
python3 iocitrix.py md0.img+da0.img
Il segno + (più) caricherà le due immagini disco come un singolo Dissect Target.
Un Citrix NetScaler espone due importanti block device che possono essere acquisiti per l'analisi forense offline. Questi file block device si trovano ai seguenti percorsi:
/dev/md0: Il disco che contiene la directory root (/). Questo è un RAM disk/dev/da0 o /dev/ada0: Il disco che contiene le directory /var e /flash. Questo è un disco persistente.La directory root (/) di Citrix NetScaler è un RAM disk, il che significa che è un disco volatile. Questo disco si trova in /dev/md0 quando il NetScaler è acceso e in esecuzione, e non sarà disponibile quando il NetScaler è spento. Le directory /var e /flash risiedono sul disco /dev/da0 o /dev/ada0 come due partizioni separate e sono persistenti.
I seguenti comandi possono essere usati su una macchina Linux locale per creare copie disco del tuo NetScaler tramite SSH. Se stai usando Windows, puoi usare WSL (wsl.exe) o Git Bash (git-bash.exe) per usare gli stessi comandi. Evita di usare comandi PowerShell nativi, poiché PowerShell non gestisce correttamente lo streaming di dati binari raw tramite SSH.
Questo mostrerà i dischi disponibili, incluso se il tuo disco persistente è /dev/da0 o /dev/ada0.
Poi controlla la dimensione esatta:
local ~ $ ssh nsroot@<YOUR-NETSCALER-IP> shell diskinfo /dev/da0
local ~ $ ssh nsroot@<YOUR-NETSCALER-IP> shell diskinfo /dev/ada0
Per il RAM disk:
local ~ $ ssh nsroot@<YOUR-NETSCALER-IP> shell diskinfo /dev/md0
Il risultante da0.img o ada0.img sarà approssimativamente della dimensione del rispettivo dispositivo, e md0.img approssimativamente della dimensione di /dev/md0.
local ~ $ df -h .
Assicurati che ci sia spazio sufficiente disponibile per contenere i file immagine disco, le cui dimensioni sono state calcolate nel passaggio precedente.
/dev/da0 o /dev/ada0 sulla tua macchina localeA seconda del nome del tuo disco, esegui
local ~ $ ssh nsroot@<YOUR-NETSCALER-IP> shell dd if=/dev/da0 bs=10M | tail -c +7 | head -c -6 > da0.img
oppure
local ~ $ ssh nsroot@<YOUR-NETSCALER-IP> shell dd if=/dev/ada0 bs=10M | tail -c +7 | head -c -6 > ada0.img
Nota che questo può richiedere del tempo per essere completato. Nessun progresso viene mostrato quando si usa dd.
Si consiglia di attendere fino a quando si riprende il controllo del prompt. Questo è un'indicazione che dd ha terminato.
I comandi tail e head sono usati per rimuovere i banner SSH del NetScaler dal flusso di byte. Tieni presente che i banner SSH del NetScaler possono cambiare nel tempo, nel qual caso dovresti modificare manualmente il comando.