Il 17% delle aziende Italiane utilizza il VoIP per comunicare telefonicamente con i propri clienti [1],
anche perche’ le telefonate sono piu’ economiche rispetto alle linee tradizionali, ma non sempre e’ questa la motivazione principale.
Un’azienda ha la necessita’ di far comunicare telefonicamente i colleghi tra di loro, siano essi in sede o fuori sede.
Ha la necessita’ di gestire piu’ linee in entrata, girando le chiamate verso un determinato gruppo di interni.
Puo’ avere la necessita’ di registrare le chiamate, di trasferirle verso un numero di cellulare, di una segreteria telefonica …
in breve: ha bisogno di una centralina telefonica.
La potenza di calcolo dei moderni processori permette di utilizzare un normale personal computer come centralina telefonica.
Cosi’ come la riproduzione di audio attraverso il PC sta portando ad una rivoluzione nella fruizione delle opere musicali,
la riproduzione dei video alla scomparsa dei videoregistratori ed alla nascita di formati, supporti e schermi ad alta risoluzione;
la possibilita’ di fondere la telefonia con l’informatica suggerisce nuove soluzioni per migliorare la qualita’ del lavoro e la
soddisfazione dei clienti.
Asterisk e’ un software open-source che permette di convertire flussi audio e video in diversi formati, in tempo reale.
Attraverso dei prodotti hardware dedicati, e’ possibile integrarlo con le linee telefoniche tradizionali: analogiche, ISDN, GSM, etc.
E’ programmabile attraverso i suoi files di configurazione oppure attraverso delle interfaccie grafiche.
Ogni suo componente puo’ essere customizzato ed integrato con altri software ed hardware, secondo la migliore tradizione GNU/Linux.
In breve: e’ la centralina telefonica software piu’ utilizzata sia da aziende che da fornitori di traffico telefonico nel mondo.
Asterisk permette quindi di spostare l’intera infrastruttura telefonica dal mondo fisico a quello dei server e di Internet:
la centralina telefonica diventa cosi’ uno dei tanti software in esecuzione su un server,
mentre il traffico VoIP transita, appunto, sulle reti IP.
Ma se questa migrazione permette di paragonare la manutenzione di una rete telefonica di nuova generazione
ad una delle tante mansioni dell’amministratore di sistema,
la stessa attenzione che si dedica agli altri servizi deve essere rivolta alla sua messa in sicurezza ed al monitoraggio degli eventuali attacchi
ed abusi.
In questo articolo analizzeremo alcune debolezze intrinseche del protocollo piu’ diffuso per il trasporto della voce su reti IP: il
protocollo SIP.
Il protocollo SIP (Session Initiation Protocol, RFC 3261) e’ diventato ormai lo standard per l’accesso ai servizi VoIP.
Asterisk implementa nativamente il protocollo SIP, sia in modalita’ client che in modalita’ server.
Prendiamo come esempio una tipica configurazione aziendale, nella quale Asterisk fornisce i tipici servizi di una centralina telefonica:
- permette agli interni di chiamarsi a vicenda
- permette agli interni di chiamare un numero esterno, attraverso uno o piu’ fornitori di traffico telefonico (carriers)
- permette alle chiamate in entrata di raggiungere gli interni
In pratica Asterisk agisce come un router, con le opportune differenze date dai differenti protocolli di rete:
in particolare il concetto di ‘registrazione’.
La registrazione permette ai vari elementi in questione (interni, Asterisk e carrier) di abilitarsi a vicenda
e di conoscere i rispettivi indirizzi IP, attraverso un’autenticazione, opzionale, mediante coppia username / password.
In questa configurazione, gli interni andranno a registrarsi con Asterisk
mentre Asterisk si registrera’ a sua volta con il carrier.
In questa sede andremo a vedere come effettuare un’attacco ‘a forza bruta‘ verso la coppia username / password di un’interno di Asterisk,
come effettuare un’attacco di ‘enumerazione degli utenti’
e soprattutto come monitorizzare i logs di Asterisk per individuare, in tempo reale:
- ripetuti tentativi di registrazione fallita verso un’interno esistente
- ripetuti tentativi di registrazione fallita verso degli interni non esistenti
- una registrazione avvenuta con successo dopo una o piu’ registrazioni fallite
con degli strumenti per simulare un client SIP (SIPp) ed un’altro di correlazione di eventi (SEC),
entrambi open-source e rilasciati sotto licenza GNU GPL.
E’ possibile effettuare questi attacchi solo se la porta SIP di Asterisk (di default la 5060 UDP) e’ raggiungibile dall’attaccante.
Questa condizione si verifica, per esempio:
- in una configurazione nella quale e’ necessario consentire a degli interni di registrarsi da remoto,
permettendogli quindi l’accesso diretto verso la porta SIP.
In questo caso si consiglia, se possibile, di veicolare l’accesso alle risorse di Asterisk attraverso una VPN. - se l’attaccante e’ gia’ penetrato all’interno della LAN
e puo’ lanciare gli attacchi dalla stessa subnet degli interni. - per tutti i carriers, in quanto per offrire i loro servizi voce devono necessariamente pubblicare la loro porta SIP.
In questo caso si consiglia, dove possibile, di autenticare il cliente attraverso il suo indirizzo IP o ‘range’ di indirizzi IP.
Andiamo ora a configurare Asterisk come piattaforma di prova:
dovra’ semplicemente permettere la registrazione di un’interno,
bastera’ quindi modificare il file sip.conf (di default nella directory /etc/asterisk) ottenendo questo risultato:
[general]
bindport=5060
bindaddr=0.0.0.0
allow=all
canreinvite=no
autocreatepeer=no
[101]
type=friend
host=dynamic
username=101
secret=101
qualify=yes
allow=all
ed assicurarsi che il file logger.conf (di default nella directory /etc/asterisk) abbia attivati almeno i ‘livelli’ di debugging ‘notice‘ e
‘verbose‘ in uno dei ‘filename’, cosi’:
[general]
[logfiles]
console => notice,warning,error,dtmf,debug,verbose
messages => notice,verbose
in modo che i messaggi delle registrazioni vengano scritti nel file ‘messages’ (di default nella directory /var/log/asterisk).
Riavviare Asterisk per rendere effettive le modifiche, oppure lanciare i comandi ‘logger reload‘ e ‘sip reload‘ nella sua interfaccia a riga di
comando per riavviare solo i servizi interessati.
Bene, ora andremo ad installare e configurare SIPp.
Scaricare SIPp dalla home page del progetto: http://sipp.sf.net
per esempio da qui: http://dfn.dl.sourceforge.net/sourceforge/sipp/sipp.3.1.src.tar.gz
da un PC diverso dal server Asterisk, oppure su una macchina virtuale.
Esplodere l’archivio ed eseguire il comando ‘make ossl’ per compilare il tool con le funzioni ssl, necessarie per eseguire le prove di
registrazione (assicurarsi di soddisfarne le dipendenze, in particolare la libreria ‘openssl‘).
La documentazione ufficiale dell’installazione di SIPp e’ presente qui: http://sipp.sf.net/doc/reference.html#Installing+SIPp
o ancora meglio qui: http://sipp.sourceforge.net/wiki/index.php/Compilation
Ora e’ necessario creare uno scenario che consenta di impostare:
- l’indirizzo IP e la porta SIP del server Asterisk
- l’indirizzo IP del client
- il file in formato ‘csv‘ dal quale attingere le combinazioni username / password da utilizzare durante i tentativi di registrazione
Come questo:
<![CDATA[
REGISTER sip:[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: ;tag=[call_number]
To:
Call-ID: [call_id]
CSeq: 1 REGISTER
Contact:
Max-Forwards: 5
Expires: 5
User-Agent: SIPp/Linux
Content-Length: 0
]]>
<![CDATA[
REGISTER sip:[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: ;tag=[call_number]
To:
Call-ID: [call_id]
CSeq: 2 REGISTER
Contact:
[field2]
Max-Forwards: 5
Expires: 5
User-Agent: SIPp/Linux
Content-Length: 0
]]>
Salvarlo come ‘register_client.xml’.
(Qui il file originale)
Con questo scenario, inoltre, e’ possibile salvare su di un file esterno i tentativi riusciti di registrazione e di enumerazione degli utenti,
con l’opzione -trace_logs, come vedremo piu’ avanti.
Purtroppo non e’ questo il luogo per descrivere minuziosamente le potenzialita’ di SIPp e di questo scenario,
ma in breve:
remote_ip, remote_port, transport, local_ip e local_port sono variabili passate all’esecuzione di SIPp attraverso la riga di comando,
mentre field0, field1 e field2 sono i campi pescati di volta in volta dal file ‘csv’.
Il file ‘csv’, per esempio, puo’ avere questo formato:
SEQUENTIAL
201;201;[authentication username=201 password=201];
101;102;[authentication username=101 password=102];
101;101;[authentication username=101 password=101];
Salvarlo come ‘register_client.csv’.
si faccia riferimento alla documentazione, qui:
http://sipp.sf.net/doc/reference.html#Injecting+values+from+an+external+CSV+during+calls
per gli altri tipi di formati supportati.
Bene, e’ quasi il momento di lanciare SIPp,
prima pero’ e’ necessario, sulla macchina dove e’ presente Asterisk:
- lanciare Asterisk, di default col comando ‘asterisk -vvvc’
- monitorizzare il suo file di log ‘messages’, di default col comando ‘tail -f /var/log/asterisk/messages’
A questo punto, supponendo che:
- l’indirizzo IP della macchina dove e’ in esecuzione Asterisk sia 172.16.160.1
- la porta SIP di Asterisk sia quella di default: la 5060 (impostata nel file sip.conf)
- l’indirizzo IP della macchina dove verra’ lanciato SIPp sia 172.16.160.128
e’ possibile lanciare SIPp col comando:
./sipp -sf register_client.xml -inf register_client.csv -l 1 -m 3 -r 1 -t un -trace_err -trace_logs -i 172.16.160.128 172.16.160.1
dove:
-sf
seleziona lo scenario
-inf
il file ‘csv’
-l
il numero massimo di tentativi simultanei
-m
il numero totale di tentativi da eseguire,
dopo di che si interrompe il test
-r
il numero di tentativi simultanei in un secondo
-t
il tipo di socket da utilizzare
-trace_err
salva i messaggi non previsti nel file
<nome del file dello scenario>_<pid>_errors.log
-trace_logs
salva i messaggi di log nel file
<nome del file dello scenario>_<pid>_logs.log
(in questo caso i successi di registrazione ed
enumerazione degli utenti)
-i
l’indirizzo IP di provenienza dei tentativi (SIPp)
mentre l’ultimo argomento e’ l’indirizzo IP di destinazione dei tentativi (Asterisk)
verso la fine del file di log ‘messages’ dovreste vedere i seguenti messaggi:
[Nov 26 16:41:33] NOTICE[9914] chan_sip.c: Registration from ” failed for ‘172.16.160.128′ – No matching peer found
[Nov 26 16:41:34] NOTICE[9914] chan_sip.c: Registration from ” failed for ‘172.16.160.128′ – Wrong password
[Nov 26 16:41:35] VERBOSE[9914] logger.c: — Registered SIP ‘101′ at 172.16.160.128 port 1095 expires 60
dove:
- la prima riga indica che e’ stato fatto un tentativo di registrazione con username errato
- la seconda riga indica che e’ stato fatto un tentativo di registrazione con username corretto ma password errata
- la terza riga indica una registrazione avvenuta con successo
Andiamo ora a studiare una soluzione che ci possa segnalare, in tempo reale, queste situazioni.
Prendiamo ad esempio questi eventi:
[Nov 26 16:41:34] NOTICE[9914] chan_sip.c: Registration from ” failed for ‘172.16.160.128′ – Wrong password
[Nov 26 16:41:35] NOTICE[9914] chan_sip.c: Registration from ” failed for ‘172.16.160.128′ – Wrong password
[Nov 26 16:41:36] VERBOSE[9914] logger.c: — Registered SIP ‘101′ at 172.16.160.128 port 1095 expires 60
i quali indicano che, dopo due tentativi falliti di registrazione, l’interno 101 si e’ correttamente registrato.
In questo caso gli eventi si sono verificati ognuno a distanza di un secondo di tempo dall’altro,
ma avrebbero potuto essere piu’ radi
e mischiati con altri eventi.
Questi eventi, presi singolarmente, non rappresentano una grave minaccia,
ne’ evidenziano una probabile violazione dell’account SIP.
Un IDS non e’ in grado di rilevare questo pericolo
al contrario di un motore di correlazione di eventi.
La correlazione degli eventi e’ una tecnica con la quale si riesce ad evidenziare con precisione un legame tra due o piu’ avvenimenti,
anche se sono occultati da una moltitudine.
Viene utilizzata negli ambiti piu’ disparati: per esempio nel controllo dei processi industriali, nel monitoraggio delle attivita’ commerciali,
nella gestione delle reti e nell’ambiente delle telecomunicazioni.
I correlatori di eventi sono molto costosi. SEC e’ l’eccezione che conferma la regola: e’ l’unico correlatore di eventi open-source.
SEC (Simple Event Correlator) e’ un software maturo e performante, scritto in PERL, la sua home page e’ http://kodu.neti.ee/~risto/sec/
SEC suppporta diverse regole di correlazione, ma qui, per semplicita’, ne useremo tre:
Single
viene innescata alla prima occorrenza di riconoscimento del pattern
SingleWithThreshold
viene innescata alla N occorrenza di riconoscimento dello stesso pattern, entro una finestra temporale
Pair
e’ disegnata per correlare due pattern differenti e si innesca quando entrambi vengono riconosciuti
Andiamo ad implementare una prima semplice regola,
l’obiettivo sara’ di riconoscere i tentativi di registrazione con sia la username che la password errati
e di visualizzarli a schermo, contandoli incrementalmente:
# matches each wrong SIP username registration, from the same host and to the same host, with counter (1)
type=Single (2)
ptype=RegExp (3)
rem=Registration from '' failed for '172.16.160.128' - No matching peer found (4)
pattern=Registration from '' failed for '(\S+)' - No matching peer found (5)
desc=Asterisk SIP - no matching peer found - $1@$2 for $3 (6)
action=eval %x ++$c{"c_$2_$3"} ; write - Asterisk SIP - %t - No matching peer found, counter: %x - $1@$2 for $3 (7)
(Qui il file originale)
salviamola col nome ‘test.sec’ (omettendo, nel copiarla, il numero della riga tra parentesi)
ed eseguiamo SEC con questa regola, facendogli seguire il file ‘messages’ di Asterisk, cosi’:
./sec.pl -conf=test.sec -input=/var/log/asterisk/messages
assicuriamoci che Asterisk sia in esecuzione
e da un’altra macchina lanciamo SIPp, inserendo nel file ‘csv’, per esempio, questi valori:
SEQUENTIAL
201;201;[authentication username=201 password=201];
tentando quindi di registrare un’interno inesistente.
Nella schermata di SEC dovremmo ottenere questo risultato:
Evaluating code ‘++$c{“c_172.16.160.1_172.16.160.128″}’ and setting variable ‘%x’
Variable ‘%x’ set to ‘1′
Writing event ‘Asterisk SIP – Thu Nov 27 19:15:01 2008 – No matching peer found, counter: 1 – 201@172.16.160.1 for 172.16.160.128′ to file -
Asterisk SIP – Thu Nov 27 19:15:01 2008 – No matching peer found, counter: 1 – 201@172.16.160.1 for 172.16.160.128
dove la riga piu’ significativa (tra le altre di debug) e’ l’ultima.
Ecco la spiegazione di ogni riga della regola:
1 e’ una riga commentata, viene ignorata
2 il tipo di regola, discussa poco sopra
3 il tipo di pattern: un’espressione regolare (http://kodu.neti.ee/~risto/sec/sec.pl.html#lbAG)
4 riga commentata, nel formato di SEC, viene ignorata.
E’ permesso inserirne a piacimento,
al contrario dei commenti che iniziano col carattere ‘#’ i quali invece generano errori di sintassi.
In questo caso e’ stata utilizzata per ricordare un’esempio di stringa riconosciuta da questa regola.
5 il pattern che permette di riconoscere una stringa come, per esempio, quella nella riga 4 Le parentesi tonde permettono di memorizzare quanto riconosciuto
in variabili identificate con un numero sequenziale ($1, $2, …)
6 la descrizione testuale della regola, viene stampata a video se action=logonly. Quindi non in questo caso.
7 l’azione da eseguire quando viene rilevato l’evento.
In questo caso le azioni sono due, separate dal carattere ‘;’
eval %x ++$c{“c_$2_$3″} – incrementa di 1 il contatore degli eventi provenienti dallo stesso host e rivolti allo stesso host
e lo assegna alla variabile SEC %x
$2 conserva il contenuto della seconda parentesi tonda della riga 5: l’host di destinazione
$3 conserva il contenuto della terza parentesi tonda della riga 5: l’host di origine
In questo modo, ogni evento avente host di origine o di destinazione unici avra’ un suo contatore.
write – Asterisk SIP – %t – No matching peer found, counter: %x – $1@$2 for $3
scrive a video la stringa di stato, sostituendo alle variabili il loro contenuto.
%t e’ una variabile SEC che contiene la data e l’ora corrente
Non molto utile, ma e’ una buona base di partenza.
Cerchiamo ora di completarla, facendole riconoscere degli attacchi ripetuti, cosi:
# matches each wrong SIP username registration, from the same host and to the same host, with counter
type=Single
continue=TakeNext (1)
ptype=RegExp
rem=Registration from '' failed for '172.16.160.128' - No matching peer found
pattern=Registration from '' failed for '(\S+)' - No matching peer found
desc=Asterisk SIP - no matching peer found - $1@$2 for $3
action=eval %x ++$c{"c_$2_$3"} ; write - Asterisk SIP - %t - No matching peer found, counter: %x - $1@$2 for $3
# matches 2 wrong SIP username registrations in less than 1 minute, from the same host and to the same host
type=SingleWithThreshold (2)
ptype=RegExp
rem=Registration from '' failed for '172.16.160.128' - No matching peer found
pattern=Registration from '' failed for '(\S+)' - No matching peer found
desc=Asterisk SIP - 2 wrong peers in less than 1 minute - $1@$2 for $3
action=write - Asterisk SIP - %t - 2 wrong peers in less than 1 minute - $1@$2 for $3
window=59 (3)
thresh=2 (4)
(Qui il file originale)
Carichiamo in SIPp i seguenti tentativi:
SEQUENTIAL
201;201;[authentication username=201 password=201];
301;301;[authentication username=301 password=301];
facendogli quindi tentare di registrare due interni non esistenti, sequenzialmente.
Eseguiamo SEC col comando:
./sec.pl -debug=1 -conf=test.sec -input=/var/log/asterisk/messages
ottenendo a video questo risultato:
Asterisk SIP – Thu Nov 27 19:38:09 2008 – No matching peer found, counter: 1 – 201@172.16.160.1 for 172.16.160.128
Asterisk SIP – Thu Nov 27 19:38:10 2008 – No matching peer found, counter: 2 – 301@172.16.160.1 for 172.16.160.128
Asterisk SIP – Thu Nov 27 19:38:10 2008 – 2 wrong peers in less than 1 minute – 172.16.160.1@172.16.160.128 for $3
dove l’ultima riga conferma la minaccia in corso.
Ecco la spiegazione delle nuove righe delle regole:
1 indica a SEC di continuare il riconoscimento anche nella regola successiva, passandogli la riga in input.
2 il tipo di regola, discussa sopra:
SingleWithThreshold – viene innescata alla N occorrenza di riconoscimento dello stesso pattern, entro una finestra temporale
3 la finestra temporale: 59 secondi
4 la soglia: 2 occorrenze
Ora andiamo a popolare il file ‘csv’ di SIPp con questi dati:
SEQUENTIAL
101;aaa;[authentication username=101 password=aaa];
101;aab;[authentication username=101 password=aab];
Questa regola, utilizzando gli stessi strumenti della precedente,
permette invece di riconoscere un’attacco a forza bruta verso un’interno esistente:
# matches each wrong SIP password registration, from/to the same host and for the same user, with counter
type=single
continue=TakeNext
ptype=RegExp
rem=Registration from '' failed for '172.16.160.128' - Wrong password
pattern=Registration from '' failed for '(\S+)' - Wrong password
desc=Asterisk SIP - wrong password - $1@$2 for $3
action=eval %x ++$c{"c_$1_$2_$3"} ; write - Asterisk SIP - %t - wrong password, counter: %x - $1@$2 for $3
# matches 2 wrong SIP password registrations in less than 1 minute, from/to the same host and for the same user
type=SingleWithThreshold
ptype=RegExp
rem=Registration from '' failed for '172.16.160.128' - Wrong password
pattern=Registration from '' failed for '(\S+)' - Wrong password
desc=Asterisk SIP - 2 wrong passwords in less than 1 minute - $1@$2 for $3
action=write - Asterisk SIP - %t - 2 wrong passwords in less than 1 minute - $1@$2 for $3
window=59
thresh=2
(Qui il file originale)
Bene, e’ arrivato il momento di creare una regola che implementi la correlazione di eventi differenti.
Andiamo a popolare il file ‘csv’ di SIPp con questi dati:
SEQUENTIAL
101;aaa;[authentication username=101 password=aaa];
101;aab;[authentication username=101 password=aab];
101;101;[authentication username=101 password=101];
cosi’ configurato, SIPp tentera’ due password sbagliate e poi quella corretta.
Dal punto di vista dell’attaccante, avra’ eseguito un’attacco a forza bruta verso un’interno esistente
indovinando le credenziali di autenticazione al terzo tentativo.
Dal punto di vista del sistema attaccato, per individuare questa potenziale violazione d’accesso sara’ necessario correlare gli eventi di
registrazioni fallite seguiti da quella di registrazione avvenuta.
Per l’implementazione della regola e’ possibile utilizzare il tipo ‘Pair’, cosi’:
# matches N failed SIP registration followed by a successfull registration, from/to the same host and for the same user
type=Pair (1)
ptype=RegExp
rem=Registration from '' failed for '172.16.160.128' - Wrong password
pattern=Registration from '' failed for '(\S+)' - Wrong password
desc=Asterisk SIP - wrong password - $1@$2 for $3
action=write - Asterisk SIP - %t - wrong password - $1@$2 for $3
ptype2=RegExp (2)
rem=Registered SIP '101' at 172.16.160.128 port 1095 expires 60
pattern2=Registered SIP '$1' at $3 port (\S+) expires (\S+) (3)
desc2=Asterisk SIP - registered after failures - %1 at %3 port $1 expires $2 (4)
action2=write - Asterisk SIP - %t - registered after failures - %1 at %3 port $1 expires $2 (5)
(Qui il file originale)
ottenendo a video questo risultato:
Asterisk SIP – Thu Nov 27 19:53:54 2008 – wrong password – 101@172.16.160.1 for 172.16.160.128
Asterisk SIP – Thu Nov 27 19:53:57 2008 – registered after failures – 101 at 172.16.160.128 port 1095 expires 60
la spiegazione delle nuove istruzioni della regola sono:
1 il tipo di regola, discussa sopra:
Pair – e’ disegnata per correlare due pattern differenti e si innesca quando entrambi vengono riconosciuti
2, 3, 4 e 5 i parametri della seconda occorrenza
Ora proviamo ad aggiungere un contatore dei tentativi falliti di registrazione
utilizzando di nuovo la possibilita’ di concatenare piu’ regole, cosi’:
# matches each wrong SIP password registration, from/to the same host and for the same user, with counter
type=single
continue=TakeNext
ptype=RegExp
rem=Registration from '' failed for '172.16.160.128' - Wrong password
pattern=Registration from '' failed for '(\S+)' - Wrong password
desc=Asterisk SIP - wrong password - $1@$2 for $3
action=eval %x ++$c{"c_$1_$2_$3"} ; write - Asterisk SIP - %t - wrong password, counter: %x - $1@$2 for $3
# matches N failed SIP registration followed by a successfull registration, from the same host and for the same user
type=Pair
ptype=RegExp
rem=Registration from '' failed for '172.16.160.128' - Wrong password
pattern=Registration from '' failed for '(\S+)' - Wrong password
desc=Asterisk SIP - wrong password - $1@$2 for $3
action=none
ptype2=RegExp
rem=Registered SIP '101' at 172.16.160.128 port 1095 expires 60
pattern2=Registered SIP '$1' at $3 port (\S+) expires (\S+)
desc2=Asterisk SIP - registered after failures - %1 at %3 port $1 expires $2
action2=eval %y $c{"c_%1_%2_%3"} ; write - Asterisk SIP - %t - registered after %y failures - %1 at %3 port $1 expires $2
(Qui il file originale)
ottenendo a video questo risultato:
Asterisk SIP – Mon Dec 1 21:45:12 2008 – wrong password, counter: 1 – 101@172.16.160.1 for 172.16.160.128
Asterisk SIP – Mon Dec 1 21:45:13 2008 – wrong password, counter: 2 – 101@172.16.160.1 for 172.16.160.128
Asterisk SIP – Mon Dec 1 21:45:14 2008 – registered after 2 failures – 101 at 172.16.160.128 port 1095 expires 60
Notare nell’ultima riga l’avviso “registered after 2 failures” il quale, utilizzando il contatore,
riassume piu’ eventi in uno solo, presentandolo in maniera velocemente comprensibile.
Da notare, inoltre, che non sono state utilizzate finestre temporali:
questa soluzione e’ immune alla cosiddetta modalita’ di attacco “under the radar“
il quale diluisce nel tempo i tentativi di intrusione (per esempio 1 ogni 30 secondi)
nella speranza di non venire rilevato dagli IPS ‘con insufficiente memoria a breve termine’.
Se siete un carrier VoIP, per esempio,
una registrazione avvenuta dopo 2 fallimenti indichera’ certamente un cliente del vostro servizio che stava configurando
la sua periferica per interconnettersi con voi;
ma se una corretta registrazione e’ avvenuta dopo, diciamo, 1000 tentativi falliti,
allora stiamo parlando di una riuscita intrusione nel vostro sistema
il quale probabilmente si tradurra’ nel prosciugamento del credito telefonico della vittima.
E se questo ignaro cliente ha probabilmente la colpa di aver scelto una password debole per il proprio account SIP
voi avete l’obbligo professionale di proteggere il vostro sistema ed i vostri clienti con le migliori difese possibili.
Se siete una azienda ed un vostro interno viene compromesso, potreste essere vulnerabili a tentativi di attacco di social engineering:
se i vostri interni si possono chiamare a vicenda, l’attacker potrebbe fingere di essere un vostro collega,
facendo risultare la chiamata come se venisse dall’interno dell’azienda.
Questo articolo ha voluto spiegare l’implementazione di alcune semplici regole di correlazioni di eventi,
utilizzando il software open-source SEC.
Rimanendo nel campo del VoIP, con questo strumento e’ possibile ottenere molto di piu:
per esempio e’ possibile monitorizzare le risorse, gli utilizzi e gli abusi; individuare attacchi distribuiti, flood (DDOS), INVITE [2] …
Mentre nel campo dell’analisi degli eventi in generale,
e’ possibile monitorizzare hardware, eventi del sistema operativo, servizi di rete o presentare dei report statistici, o anche far confluire
diverse sorgenti eterogenee verso un’unico elaboratore centrale.
Note
[1] http://punto-informatico.it/2324117/Telefonia/News/voip-italiano-cresce-nel-mercato-business.aspx
[2] http://sipvicious.org/blog/2008/04/storming-sip-security-now-available.html
Approfondimenti
Asterisk home page: http://www.asterisk.org
SIPp home page: http://sipp.sourceforge.net
SEC home page: http://kodu.neti.ee/~risto/sec
SEC tutorial: http://en.hakin9.org/attachments/pdf/hakin9_05_2006_10_EN_str28-39.pdf
SEC tutorial: http://sixshooter.v6.thrupoint.net/SEC-examples/article.html
LogSurfer home page: http://www.crypt.gen.nz/logsurfer
Links
http://voipsa.org
http://sipvicious.org
http://www.milw0rm.com/search.php?dong=sip
http://www.hakin9.org/prt/view/voice-over-ip.html
http://voipsecurityblog.typepad.com
http://www.unprotectedhex.com/index.php?option=com_content&task=section&id=4&Itemid=31
Suggerimenti di soluzioni per l’integrazione con SEC
http://code.google.com/p/php-syslog-ng
http://webfwlog.sourceforge.net
http://www.splunk.com
http://www.zenoss.com
http://munin.projects.linpro.no
http://cacti.net
Come prevenire l’enumerazione degli utenti in Asterisk
Asterisk Project Security Advisory – AST-2009-003
Applicazioni commerciali
L’autore dell’articolo propone soluzioni gia’ complete o su misura
destinati ai target business ed ITSP.
Puo’ essere contattato presso l’indirizzo email mikeOverIP@gmail.com
|
|
Questa guida è disponibile anche in Inglese |
![]() |
|


