VoIP and Hacking

Crittare il VoIP di Asterisk con OpenVPN

by admin on Mar.25, 2009, under Asterisk, Hacking, Linux, Sicurezza, Telefonia, VoIP

Asterisk non possiede un esteso supporto per la voice encryption, ma è possibile ovviare a questa grave lacuna utilizzando ad esempio un channel IAX2 su OpenVPN, una soluzione software opensource che realizza una Virtual Private Network (o rete privata virtuale), un canale o tunnel virtuale che collega tra loro due reti, nel caso più semplice rappresentate da due computer, tramite Internet.
OpenVPN genera un tunnel point-to-point over UDP (di default) operando in user space, e si compone di una parte server: un demone che resta in ascolto in attesa di connessioni, ed una client che, collegandosi, richiede l’instaurarsi della VPN. Entrambe le parti, prima di trasferire qualsiasi informazione, operano i necessari controlli per verificare l’identità dell’interlocutore.

Consideriamo ad esempio il caso di due sedi remote che vogliano colloquiare in maniera riservata di piani industriali.
Supponiamo anche che le due sedi remote abbiano ognuna un asterisk server, e che tra i due server sia normalmente possibile stabilire un trunk IAX anche se entrambe le macchine possiedono solamente un indirizzo privato nell’ambito della rispettiva rete locale.
Sia perciò Zeus la macchina della sede A, di indirizzo 192.168.2.100 nell’ambito della rete 192.168.2/24, mentre sia Krono quella della sede B, di indirizzo 192.168.1.10 nell’ambito della rete 192.168.1/24. Il router della sede A abbia l’indirizzo IP (pubblico) 80.187.137.15 e quello della sede B l’indirizzo 151.65.43.104. Tramite questi ultimi, rispettivamente, Krono vedrà Zeus, e Zeus vedrà Krono.
Supposto anche che il software openvpn sia già installato su entrambe le macchine, il metodo più sbrigativo, tuttavia valido ai fini didattici, di stabilire un tunnel criptato tra esse e quello di utilizzare una chiave statica, generata su una qualsiasi delle due macchine, e copiata sull’altra tramite un trasferimento sicuro, tipo sftp o scp.
Per fare ciò possiamo dare, ad esempio su Zeus:

# openvpn –genkey –secret keyfile

dove keyfile è il file che contiene la chiave, random, generata in formato ASCII:

# file keyfile
keyfile: ASCII text
# cat keyfile
#
# 2048 bit OpenVPN static key
#
—–BEGIN OpenVPN Static key V1—–
65015d717df293fc75b8930818ffdf6d
15a09a88d59a0db5e2f89b6ed3b053a6
c165c36901585291444e144565de6fd1
c9fac9a3af9330cf0b97f61bda26ce53
0fc1349f1c1d53579bf3544236ecce7e
1548c329ed5b78bbcaea6259f65d714c
3e32f67ba6aa9176f37bce06775213d5
0522fd77c194fe7b0e43361eb7d045dc
c7b21e265654b74f8e1e486f3460f671
0e1e02e0274aa369a35defd02cebd95b
4be22ffdd29091527c10a86f9d3379dd
96f5a69d830d8e17aa43dc45c6269b80
4e10f956651b41bdc8d48d9ee070131c
f6c239aaa2fde3c3ebddbbe12922b2e3
0fb1d5ac369643638f9de2835fc78617
8a1aaae2d9a5db116ea0dccedf10181f
—–END OpenVPN Static key V1—–

e poi trasferire su Krono una copia di keyfile, da posizionare (questo su entrambe le macchine) in un opportuno percorso, ad esempio /etc/openvpn/
A questo punto, per inizializzare la VPN basta dare, su Zeus:

# openvpn –remote 80.187.137.15 –dev tun1 –ifconfig 10.4.0.1 10.4.0.2 –secret /etc/openvpn/keyfile


e su Krono:

# openvpn –remote 151.65.43.104 –dev tun1 –ifconfig 10.4.0.2 10.4.0.1 –secret /etc/openvpn/keyfile
….

Nota: La modalità della chiave statica viene qui adottata solo per comodità, tuttavia, in una situazione reale, magari estesa a più nodi, è sicuramente più indicato adottare una PKI (Public Key Infrastructure), argomento che mi impegno a trattare in un post separato.

Entrambi i processi non si svincolano, in tal modo, dal terminale di controllo, producendo a video un output che può anche essere molto corposo, e tuttavia molto istruttivo.
Su Zeus, ad esempio si ottiene:

Tue Mar 24 20:59:01 2009 OpenVPN 2.1_rc11 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] built on Oct 15 2008
Tue Mar 24 20:59:01 2009 IMPORTANT: OpenVPN’s default port number is now 1194, based on an official port number assignment by IANA.  OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Tue Mar 24 20:59:01 2009 /usr/sbin/openvpn-vulnkey -q keyfile
Tue Mar 24 20:59:01 2009 TUN/TAP device tun1 opened
Tue Mar 24 20:59:01 2009 /sbin/ifconfig tun1 10.4.0.1 pointopoint 10.4.0.2 mtu 1500
Tue Mar 24 20:59:01 2009 UDPv4 link local (bound): [undef]:1194
Tue Mar 24 20:59:01 2009 UDPv4 link remote: 80.187.137.15:1194

e poi, dopo che il relativo comando sia stato lanciato anche su Krono:

Tue Mar 24 21:11:17 2009 Peer Connection Initiated with 80.183.134.14:1194
Tue Mar 24 21:11:17 2009 Initialization Sequence Completed

mentre sulla console di quest’ultimo l’output è il seguente:

Tue Mar 24 21:11:13 2009 OpenVPN 2.0.9 i486-slackware-linux [SSL] [LZO] [EPOLL] built on Jun 11 2007
Tue Mar 24 21:11:13 2009 IMPORTANT: OpenVPN’s default port number is now 1194, based on an official port number assignment by IANA.  OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Tue Mar 24 21:11:13 2009 TUN/TAP device tun1 opened
Tue Mar 24 21:11:13 2009 /sbin/ifconfig tun1 10.4.0.2 pointopoint 10.4.0.1 mtu 1500
Tue Mar 24 21:11:13 2009 UDPv4 link local (bound): [undef]:1194
Tue Mar 24 21:11:13 2009 UDPv4 link remote: 151.65.43.104:1194
Tue Mar 24 21:11:23 2009 Peer Connection Initiated with 151.65.43.104:1194
Tue Mar 24 21:11:24 2009 Initialization Sequence Completed

Tutto questo testimonia l’avvenuta inizializzazione della VPN, come segnalato del resto anche dalla comparsa di una nuova interfaccia di rete su ciascuno dei due host:

tun1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.4.0.1  P-t-P:10.4.0.2  Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
RX packets:345 errors:0 dropped:0 overruns:0 frame:0
TX packets:765 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:13800 (13.8 KB)  TX bytes:30600 (30.6 KB)

La VPN è immediatamente verificabile con un ping tra 10.4.0.1 e 10.4.0.2 (e viceversa).
Agli stessi indirizzi dovranno fare riferimento i parametri host= nelle definizioni del rispettivo peer IAX nei due diversi iax.conf.
Da questo momento in poi le comunicazioni fra i due pbx che utilizzano il trunk appena definito, risulteranno criptate (blowfish come codifica di default).
Quanto segue è un esempio di quello che un analizzatore di traffico come wireshark catturerebbe nella circostanza:


1270    4.306990    192.168.1.10    80.187.137.15    UDP    Source port: openvpn  Destination port: openvpn
1275    4.325767    80.187.137.15    192.168.1.10    UDP    Source port: openvpn  Destination port: openvpn
1276    4.326903    192.168.1.10    80.187.137.15    UDP    Source port: openvpn  Destination port: openvpn
1281    4.345719    80.187.137.15    192.168.1.10    UDP    Source port: openvpn  Destination port: openvpn
Frame 1281 (150 bytes on wire, 150 bytes captured)

>Internet Protocol, Src: 80.187.137.15 (80.187.137.15), Dst: 192.168.1.10 (192.168.1.10)
>User Datagram Protocol, Src Port: openvpn (1194), Dst Port: openvpn (1194)
>Data (108 bytes)
Data: 1BBD28E20701A25FAFC1EDAED76B48B160EA563C585F9DBD…

Send post as PDF to PDF | PDF Creator | PDF Converter
:, , , , ,

Comments are closed.

Cerchi qualcosa in particolare?

Usa il form qui sotto per cercare nel sito:

Blogroll!

Alcuni links...

Archives

Tutte le entries, in ordine cronologio...