Servidor Linux comprometido

Iniciado por Cronck, 3 Septiembre 2013, 18:52 PM

0 Miembros y 1 Visitante están viendo este tema.

Cronck

Buenas tardes a todo, el tema es...tengo un servidor web en donde tengo algunos sitios, pero ultimamente he tenido problemas con el.

Me han ingresado codigo en los index

Ve procesos corriendo como estos:
ps aux | grep clamav
apache     623 46.1  0.0  54784  1592 ?        Ssl  11:11   6:05 ./clamav -a scrypt -o http://pool-nvc.khore.org:9332 -O u8080.1:1 -B
apache     635 46.1  0.0  55808  1592 ?        Ssl  11:11   6:04 ./clamav -a scrypt -o http://pool-nvc.khore.org:9332 -O u8080.1:1 -B
apache     647 46.1  0.0  55808  1596 ?        Ssl  11:11   6:04 ./clamav -a scrypt -o http://pool-nvc.khore.org:9332 -O u8080.1:1 -B
apache     659 46.1  0.0  55808  1596 ?        Ssl  11:11   6:04 ./clamav -a scrypt -o http://pool-nvc.khore.org:9332 -O u8080.1:1 -B
root      1001  0.0  0.0   4016   668 pts/0    S+   11:24   0:00 grep clamav


Veo que en TMP hay varios archivos ocultos:
drwxr-xr-x  2 root  root     4096 Nov  6  2012 .autoinstaller
-rw-------  1 root  root    10518 Sep  2 16:17 .bash_history
-rw-r--r--  1 root  root       24 Jan  6  2007 .bash_logout
-rw-r--r--  1 root  root      191 Jan  6  2007 .bash_profile
-rw-r--r--  1 root  root      176 Jan  6  2007 .bashrc
-rw-r--r--  1 root  root        0 Sep  3 11:45 cron.php
-rw-r--r--  1 root  root      100 Jan  6  2007 .cshrc
drwx------  3 root  root     4096 Dec 29  2010 .gconf
drwx------  2 root  root     4096 Dec 29  2010 .gconfd
drwx------  2 root  root     4096 Sep  2 10:05 .gnupg
-rw-r--r--  1 root  root     1320 Dec  4  2002 jcameron-key.asc
-rw-------  1 root  root       73 Nov 26  2012 .lesshst
-rw-r--r--  1 root  root  2952318 Jul 23  2010 LINUX_32.tar.gz
-rw-------  1 root  root      168 Nov  5  2012 .mysql_history
-rw-------  1 root  root     1024 Jul 12  2012 .rnd
drwxr-xr-x  3 root  root     4096 Dec 29  2010 .sl-orig-configs
drwx------  2 root  root     4096 Jul 13  2012 .spamassassin
-rw-r--r--  1 root  root      129 Jan  6  2007 .tcshrc


Ya ejecute las aplicaciones para encontrar algun rootkit como son rkhunter y chkrootkit.

Pero no logro encontrar como se están infiltrando y sobre todo como elimininar esa infeccion.

Si alguien tiene alguna idea de como iniciar la busquera o algunas medidas que tenga que tomar para poder eliminar este mal de mi servidor..

Ya no se por donde investigar..se que me falta mucho por revisar pero no se por donde...

Saludos

el-brujo

#1
¿Qué distribución usas? ¿Y qué versión?

Software instalado y corriendo en modo daemon, a parte del Apache ¿Qué versiones usas?

La mayoría de infecciones se producen por alguna vulnerabilidad en el código php, inyectando código. ¿Qué CMS usas o usas alguna protección con PHP? Mira de instalar el suhosin u otra extensión similar.

Intenta restaurar alguna copia de seguridad antes del ataque, para que los ficheros html del public_root del apache al menos estén limpios.

Se requieren conocimientos muy avanzados para detectar una intrusión o si han metido un rootkit que no detectan las herramientas más usuales.


Citar4) Configuración avanzada PHP + Seguridad en PHP

Editaremos el Archivo php.ini

expose_php = Off

Para evitar mostrar la versión del PHP en las cabeceras X-Powered-By: PHP, etc.

; Resource Limits ;

max_execution_time = 30 --> máximo tiempo de ejecución de un script php. Si en 30 segunos no obtiene respuesta el script se para y sale un "timeout" como errror.

memory_limit = 8M --> tamaño maximo que puede consumir un script php.

; File Uploads ;

Si queremos enviar ficheros al servidor, aqui lo podemos permitir:

file_uploads = On --> si queremos o no queremos

upload_tmp_dir = F:webspublic --> el directorio donde se copiarán los archivos que nos suban.

upload_max_filesize = 1M --> el tamaño máximo que queremos que nos envien.

Una caracteristica muy importante, especialmente para hostings, es la posibilidad de no permitir algunas de las funciones de PHP. La razon es muy sencilla: algunas funciones de PHP como system, proc, etc hacen y permiten ejecutar comandos del  sistema, lo que puede provocar problemas de seguridad. Por ejemplo, un usuario quizas quiera ejecutar un comando "no peligroso" como uptime, pero otro usuario mal intencionado puede utilizar otros comandos del sistema para extraer informacion comprometida de la maquina: como id, who, cat, etc.

Hosting gratuitos como Lycos, iespana tienen capadas estas funciones por lo comentado arriba, es potencialmente peligroso.

Para no permitir la ejecucion concreta de algunas funciones en PHP (no confundir con comandos) es con:

disable_functions =exec,system,shell_exec,readfile

Aunque las funciones en PHP son exec(), debemos ponerlo sin ().

Por ejemplo en Mi Arroba:

Warning: fsockopen, pfsockpen, show_source, php_uname, ini_alter, ini_restore, ini_set, getrusage, get_current_user, set_time_limit, getmyuid, getmypid, dl, leak, listen, chown, chmod, chgrp, realpath, tmpfile, link() has been disabled for security reasons.

Más restrictivo:

Funciones a deshabilitar:

exec, system, shell_exec, readfile, passthru, escapeshellcmd, proc_open, posix_uname, posix_getuid, posix_geteuid, posix_getgid, getcwd

disable_functions = system, exec, shell_exec, passthru, pcntl_exec, putenv, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, popen, pclose, set_time_limit, ini_alter, virtual, openlog, escapeshellcmd, escapeshellarg, dl, curl_exec, parse_ini_file, show_source

Otra lista más completa:

disable_functions=
popen,pclose,posix_getpwuid,posix_getgrgid,posix_k ill,parse_perms,phpinfo,system,dl,passthru,exec,
shell_exec,popen,proc_close,proc_get_status,proc_n ice,proc_open,escapeshellcmd,escapeshellarg,show_s ource,posix_mkfifo, set_time_limit,mysql_list_dbs,get_current_user,get myuid,pconnect,link,symlink,pcntl_exec,ini_alter,p arse_ini_file,pfsockopen, leak,apache_child_terminate,posix_kill,posix_setpg id,posix_setsid,posix_setuid,proc_terminate,syslog ,fpassthru,stream_select, socket_select,socket_create,socket_create_listen, socket_create_pair,socket_listen,socket_accept,sock et_bind,socket_strerror, pcntl_fork,pcntl_signal,pcntl_waitpid,pcntl_wexits tatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifs topped,pcntl_wstopsig,pcntl_wtermsig,openlog,apach e_get_modules,apache_get_version,apache_getenv, apache_note,apache_setenv,virtual


Recomendable instalar suhosin (una manera muy sencilla y segura de asegurar PHP)

suhosin.executor.func.blacklist = "system, exec, shell_exec, passthru, pcntl_exec, putenv, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, popen, pclose, set_time_limit, ini_alter, virtual, openlog, escapeshellcmd, escapeshellarg, dl, parse_ini_file, show_source, imap_open, ftp_connect, posix_uname, posix_getuid, posix_geteuid, posix_getgid, getcwd, php_uname, phpinfo apache_setenv, define_syslog_variables, eval, exec, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, openlog, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode, exec, pipe, set_time_limit, popen, proc_open, parse_ini_file, show_source, mail, dl, ini_set, ini_alter, virtual, openlog, apc_add, apc_bin_dump, apc_bin_dumpfile, apc_bin_loadfile, apc_cache_info, apc_cas, apc_clear_cache, apc_compile_file, apc_dec, apc_define_constants, apc_delete_file, apc_delete, apc_exists, apc_fetch, apc_inc, apc_load_constants, apc_store, symlink, eval"



Otra manera es hacer funcionar el php en safe_mode. Esto se indica en el php.ini y se activa con la opción:

Safe_mode = ON

o sea modo seguro. Muchos hostings gratuitos lo tienen activado por defecto.  De esta manera varias funciones están desactivadas y muchas otras comprueban los permisos a la hora de leer ficheros, etc.

http://www.zend.com/manual/features.safe-mode.functions.php

allow_url_fopen off --> para no dejar que se abran archivos remotos

register_globals off  --> desactivar las variables globales para que no se pueda permitir la inyección a variables que no están supuestos a modificar (muy importante).

Otra manera intersante de progeter el php es con el magic_quotes_gpc:

Copy/paste de http://vulnfact.com/papers/VF-php_secure.txt

- Buscamos la directiva magic_quotes_gpc, que quizá este en Off, pues la activamos con
    On. Esto hace la adición automática del caracter de escape "" en variables tomadas
    de GET, POST y Cookies.

  magic_quotes_gpc = On ; magic quotes for incoming GET/POST/Cookie data

  - Para evitar que en lugar de enviar cadenas mal intencionadas, sean almacenadas en
    bases de datos o archivos de texto. Debemos activar magic_quotes_runtime.

  magic_quotes_runtime = Off ; magic quotes for runtime-generated data.

Para mayor seguridad, podemos hacer que un vhost (virtual host) del apache no tenga php:

#bastaría con añadir esta linea dentro del vhost del apache
php_admin_flag engine ON

O bien podemos deshabilitar el safe_mode en un vhost (dominio)

php_admin_flag safe_mode Off

Más info:
http://es2.php.net/manual/en/configuration.changes.php


open_basedir = none

En el vhost del Apache:

php_admin_value open_basedir /home/user/public_html

De esta manera sólo dejamos abrir los ficheros que estén en ese directorio (para evitar problemas).

De la misma manera deberíamos logear los errores del php pero no mostrarlos (evitaremos path disclosures, etc).

Añadimos varias instrucciones en el vhost del apache:

php_flag display_errors Off
php_flag log_errors On
php_value error_log "/home/uesr/logs/errorsphp"

Por si todo esto falla y consiguen una shell:

#le damos permisos sólo al root para este fichero
chmod 700 /usr/bin/wget
# modo invariable
chattr +i /usr/bin/wget

Lo mismo para los comandos:

wget, curl, lynx, w3m, framebuffer, links2 (navegadores) y gcc, cc y demás compiladores o binarios que nos parezcan potencialmente peligrosos.

  Se podría decir que hasta ahí tenemos mas o menos asegurado PHP.

Cronck

Muchas gracias por la respuesta brujo.

La version que estoy usando es Centos 5.5
El apache es: 2.2.3-43.el5.centos.3
mysql: 5.1.58-jason.1
php: 5.2.17-jason.2

Se esta usando el CMS wordpress no se esta usando ninguna protección sobre este.

Revisare la informacion que me indicas.


Cronck

Buenas tardes Brujo:
Ya aplique las medidas que me indicaste pero aun sigo teniendo intromisiones.
En que estuve revisando he encontrado esto:

bash-3.2# netstat -b
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State     
tcp        0      0 xcaretexperiencia:40721 xcaretexperiencias:http TIME_WAIT 
[b]tcp        0      0 xcaretexperiencia:36811 kinkyandcosy.co.u:https ESTABLISHED[/b]
tcp6       0      0 xcaretexperiencias:http xcaretexperiencia:40723 TIME_WAIT 
[b]tcp6       0      0 xcaretexperiencias:http wa.monitoringserv:57731 TIME_WAIT[/b] 
tcp6       0      0 xcaretexperiencias:http 69.171.234.117%81:46721 TIME_WAIT 
tcp6       0    160 xcaretexperiencias:7580 customer-148-223-:51289 ESTABLISHED
tcp6       0      0 xcaretexperiencias:7580 customer-148-223-:59480 ESTABLISHED
tcp6       0      0 xcaretexperiencias:http google-proxy-66-2:39497 TIME_WAIT


netstat -lx
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     5351     @ISCSIADM_ABSTRACT_NAMESPACE
unix  2      [ ACC ]     STREAM     LISTENING     11189    /tmp/.font-unix/fs7100
unix  2      [ ACC ]     STREAM     LISTENING     9486     /dev/gpmctl
unix  2      [ ACC ]     STREAM     LISTENING     7024     /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     7395     @/var/run/hald/dbus-daB79HhjB8
unix  2      [ ACC ]     STREAM     LISTENING     7302     /var/run/pcscd.comm
unix  2      [ ACC ]     STREAM     LISTENING     7337     /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     7396     @/var/run/hald/dbus-gDq0l2jvr6
unix  2      [ ACC ]     STREAM     LISTENING     5335     @ISCSID_UIP_ABSTRACT_NAMESPACE
unix  2      [ ACC ]     STREAM     LISTENING     6348     /var/run/audispd_events
unix  2      [ ACC ]     STREAM     LISTENING     319982759 /var/lib/mysql/mysql.sock



netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State     
tcp        0      0 *:mysql                 *:*                     LISTEN     
tcp        0      0 *:ndmp                  *:*                     LISTEN     
tcp        0      0 localhos:x11-ssh-offset *:*                     LISTEN     
tcp        0      0 localhost.localdom:6011 *:*                     LISTEN     
tcp        0      0 xcaretexperiencia:36811 kinkyandcosy.co.u:https ESTABLISHED
tcp6       0      0 [::]:http               [::]:*                  LISTEN     
tcp6       0      0 ::1%1593:x11-ssh-offset [::]:*                  LISTEN     
tcp6       0      0 ::1%159364928:6011      [::]:*                  LISTEN     
tcp6       0      0 [::]:https              [::]:*                  LISTEN     
tcp6       0      0 [::]:7580               [::]:*                  LISTEN     
tcp6       0      0 xcaretexperiencias:http in.monitoringserv:39358 TIME_WAIT 
tcp6       0      0 xcaretexperiencias:7580 customer-148-223-:51289 ESTABLISHED
tcp6       0    960 xcaretexperiencias:7580 customer-148-223-:59480 ESTABLISHED


Pero no logro encontrar como esta ejecutando esa conexion y no se como cerrar el puerto y eliminar ese proceso

Saludos

cpu2

#4
Vaya que mala espina tienen esas conexiones, para finalizar o "dropear" esas conexiones tienes tcpdrop, tambien podrias bloquear el trafico a los puertos que utiliza con iptables, hasta que soluciones el problema.

Fijate en el netstat, en estas conexion, estas enviando paquetes.

tcp6       0   960 xcaretexperiencias:7580 customer-148-223-:59480 ESTABLISHED
tcp6       0   160 xcaretexperiencias:7580 customer-148-223-:51289 ESTABLISHED


Podrias analizar el trafico, con Wireshark por ejemplo a ver que estas enviando, los datos podrian estar cifrados.

Pero como dijo el-brujo si han metido un rotkit es dificil la deteccion, pero si tienes experiencia no dejas esas conexiones a la vista con un simple netstat.
Tienes alguna copia de seguridad, mira todos los procesos activos con un ps -ax.

Un saludo.

Cronck

Creo que ya he encontrando a donde se conectan pero desconozco si esas librerias puedan dañar mis sitios.