Detectar y eliminar scripts maliciosos (malware, envío de spam) en páginas web php
Aquí dejo una recopilación de comandos útiles para buscar archivos infectados por atacantes de webs cuyo objetivo suele ser el envío de spam.
El primer comando mostrará todos los archivos de extensión php modificados en los últimos 7 días.
find . -type f -name ‘*.php’ -mtime -7
Otra forma interesante de ver scripts maliciosos es buscar los archivos cuyo propietario sea root o apache dependiendo de como esté montado apache, lo normal en un hosting es que todos los archivos pertenezcan al usuario del host, cuando un atacante sube un nuevo script (si no tenemos cgi activo) este tiene como propietario el super usuario de apache, así que, buscando los archivos cuyo propietario es apache podremos encontrar scripts maliciosos en potencia:
# find . -user apache -name ‘*.php’
Muchas veces estos scripts hacen una llamada php para que no muestre errores y que no les podamos pillar por los logs, así que, otra forma sencilla de buscar scripts es buscar esas llamadas, para ello usamos los dos comandos siguientes:
# grep -Elir ‘error_reporting\(0\)’ .
# grep -Elir ‘init_set\(.display_errors.\, 0\)’ .
Los siguientes comandos buscan funciones o palabras dentro de cada archivo php que suele ser la forma más típica con la que los atacantes crean su código malicioso, así que buscamos expresiones como eval, o contenido en base y hasta gzinflate:
find . -type f -name ‘*.php’ | xargs grep -l «eval *(»
find . -type f -name ‘*.php’ | xargs grep -l «base64_decode *(»
find . -type f -name ‘*.php’ | xargs grep -l «gzinflate *(»
Por si aún no habeis encontrado lo que buscábais, algunos más…
find . -type f -name ‘*.php’ | xargs grep -l «eval *(str_rot13 *(base64_decode *(»
find . -type f -name ‘*.php’ | xargs egrep -i «(mail|fsockopen|pfsockopen|stream_socket_client|exec|system|passthru|eval|base64_decode) *\(»
find . -type f -name ‘*.php’ | xargs egrep -i «preg_replace *\(([‘|\»])(.).*\2[a-z]*e[^\1]*\1 *,»
find . -type f -name ‘*.php’ | xargs grep base64_ | less
find . -type f -name ‘*.php’ | xargs grep base64_ > results.txt