A seguito di un PT effettuato su una infrastruttura EDGE di Fortinet, è stato riscontrato che le porte TCP/5060 e TCP/2000 risultavano aperte pur non avendo alcun NAT attivo o servizio realmente esposto su tali porte.
Tuttavia, attivando vari sniffing e tracer sul firewall target, pur vedendo le chiamate entranti sulle porte incriminate, tali flussi risultavano bloccati e non inoltrati verso le zone interne dell’infrastruttura (erano evidenti i SYN dall’esterno ma non vedevamo mai alcun SYN/ACK proveniente dal firewall stesso, nè tantomento da host interni).
Vista la situazione particolarmente anomala, abbiamo fatto svariati test di port scanning dall’esterno ed abbiamo notato che quando i tentativi venivano effettuati tramite linee non gestite da infrastrutture firewall
(banalmente utilizzando l’hotspot di un cellulare), le porte risultavano regolarmente chiuse.
Ci siamo quindi concentrati non più sull’infrastruttura target ma su quella di uscita ed investigando a fondo abbiamo scoperto che la tcp/5060 e la tcp/2000 risultavano aperte per qualsiasi host dal quale si effettui una scansione e che ESCA da un Fortinet verso internet.
Approfondendo il tutto sia sulla documentazione FortiNet che tramite il supporto del vendor, è stato accertato che di default sui FortiGate è abilitato il “SIP ALG session helper” che funge da SIP proxy per i flussi uscenti sulle due porte oggetto dei test.
Ecco quindi il motivo per il quale le due porte risultano costantemente aperte. Le risposte ricevute dall’host che esegue i test sono prodotte dal firewall di uscita dei flussi, e non da quello target.
Questa funzionalità permette di aumentare le prestazioni delle chiamate VoIP, tuttavia, se non utilizzata, è consigliabile disabilitarla per questioni di sicurezza.
Facendo ulteriori ricerche, abbiamo scoperto che questa funzionalità è attiva anche su firewall di altri vendor (Ad esempio su alcune versioni Sophos) e su alcuni modelli di router.
PREREQUISITI
Le porte TCP/UDP 5060 viene utilizzata dal protocollo SIP.
La porta 2000/TCP viene utilizzata per “Skinny Client Call” (SCCP) che è un protocollo proprietario di Cisco per il VoIP.
VERIFICARE LE PORTE CON NMAP
Per verificare se le porte 2000/TCP e 5060/TCP fossero aperte abbiamo utilizzato nmap, che è un noto software open source per effettuare port scanning.
Nmap è disponibile per la maggior parte dei sistemi operativi, Windows, Linux e macOS inclusi.
Per installarlo navigare su https://nmap.org/download
Dopo aver installato nmap, è possibile aprire una bash o una PowerShell ed eseguire il seguente comando:
0 |
nmap -sV -sC -Pn -p 80,2000,5060 IP |
Se tutto è andato a buon fine dovremmo visualizzare il seguente output:
0 1 2 3 4 5 6 7 |
Starting Nmap 7.94 ( https://nmap.org ) at 2024-04-10 16:08 ora legale Europa occidentale Nmap scan report for IP Host is up (0.0029s latency). PORT STATE SERVICE VERSION 80/tcp filtered http 2000/tcp open cisco-sccp? 5060/tcp open sip? |
Potrebbe essere necessario eseguire la shell da amministratore, su Linux eseguendola come root oppure usando sudo e su Windows aprendo come amministratore la PowerShell o CMD.
Il flag “-Pn” serve per ignorare se i tentativi di ping falliscono e proseguire con la scansione delle porte.
In alternativa a nmap è possibile utilizzare un software con interfaccia grafica come AngryIP Scanner.
VERIFICARE LE PORTE SUL FIREWALL
Per verificare se il firewall è in ascolto sulle porte TCP/UDP 2000 e 5060/TCP, è necessario accedere in CLI con un’utenza amministrativa ed eseguire i seguenti comandi.
Per verificare il SIP TCP eseguire il comando:
0 |
dia sys tcpsock | grep 5060 |
Dovremmo visualizzare il seguente output:
0 |
0.0.0.0:5060->0.0.0.0:0->state=listen err=0 socktype=2 rma=0 wma=0 fma=0 tma=0 inode=8535 process=175/voipd |
Per verificare il SIP UDP:
0 |
dia sys udpsock | grep 5060 |
Dovremmo visualizzare il seguente output:
0 |
0.0.0.0:5060->0.0.0.0:0 state= txq=0 rxq=0 uid=0 inode=8534 process=175/voipd |
Per verificare SCCP:
0 |
dia sys tcpsock | grep 2000 |
Dovremmo visualizzare il seguente output:
0 |
0.0.0.0:2000->0.0.0.0:0->state=listen err=0 socktype=2 rma=0 wma=0 fma=0 tma=0 inode=8530 process=175/voipd |
DISABILITARE LE PORTE
Per disabilitare le porte sul firewall è necessario configurarlo per utilizzare il “SIP session helper”, in modo da disabilitare il supporto SIP-ALG, successivamente sarà sufficiente rimuovere il session helper.
Per disabilitare il supporto SIP-ALG eseguire i comandi:
0 1 2 |
config system settings set default-voip-alg-mode kernel-helper-based end |
In caso di Multi-vdom, disabilitare il supporto su tutte le interfacce:
0 1 2 3 4 5 6 7 8 9 |
config vdom edit VDOM-A config system settings set default-voip-alg-mode kernel-helper-based end next edit VDOM-B config system settings set default-voip-alg-mode kernel-helper-based end |
Infine, rimuovere il session helper:
0 1 2 |
config sys session-helper delete 13 end |
FONTI
Documentazione FortinetCommunity Fortinet
0 Comments