Solucionando código malicioso en un sitio web

Tenemos ya buen tiempo aceptando clientes con problemas de código malicioso en sus sitios web. La consecuencia directa de estos problemas son: perjudicar la imagen digital de la compañía y quitar posicionamiento en buscadores. Desafortunadamente no solo se trata de eliminar el código malicioso o “malware code” y reestablecer el funcionamiento del sitio web (que es una de las primeras acciones) sino de hacer una suerte de auditoria rápida para descartar que el entorno del servidor y sus librerías y permisos sean los idóneos para que al retornar todo el sitio limpio, no vuelva a contagiarse.

En este post enumeraremos solo las acciones genéricas que realizamos en WordPress ya que es la plataforma más usada por la mayoría de clientes.

  • Realizar un backup en la medida de lo posible. De preferencia desde el panel de control del hosting, descargar una copia de todo el directorio principal al menos, también de las bases de datos y si hubiera un registro de backups previos mucho mejor.
  • Documentarnos a qué tipo de ataque nos enfrentamos. Esto depende la experiencia en el tema y creo que mientras mejor documentados estemos mejor, en internet podemos encontrar no solo casos de intrusión de otros colegas y usuarios, sino de autores y “descubridores” de vulnerabilidades que bien sirve para cruzar información y dar con el punto. Puede ser inyección sql, un plugin con form con validación pésima, los exploits de plugins son variados y se aprovechan del archivo admin-ajax.php para hacer de las suyas, las versiones y permisos del php también deben ser verificadas.
  • Buscar cadenas de texto habitual sobre el código. Conocer el comportamiento del código malicioso puede empezar por  llamadas en javascript que se pueden detectar desde el visor de código en Chrome, y si todo aparenta estar en orden es hora de revisar el código desde el back. Buscamos cadenas de texto como eval(), base64(), unescape() y otros, que no necesariamente sean todas las coincidencias, pero son pistas que nos pueden llevar al código malo. También debemos encontrar archivos que no son parte del core. Hacer lo mismo sobre el archivo backup .sql , esto requiere cierto conocimiento y cuidado porque podríamos dejar esa copia inservible.
  • Proceder con la limpieza manual o reemplazo de archivos si se tiene backups previos. Realizar una comparativa de archivos originales, según la versión del WP, para descartar o reemplazar definitivamente toda la carpeta raíz (generalmente puede ser /public_html) si se cuenta con un backup previo. La limpieza manual es mas tediosa y si bien requiere mas tiempo, nos permite entender el comportamiento del código malicioso.
  • Levantar el sitio web en un servidor temporal. Una vez estemos seguros que tenemos el sitio limpio, es recomendable no llevarlo al mismo servidor inmediatamente sino levantarlo en un servidor de características similares y verificar su integridad. Hecho esto ya podemos pasarlo a producción en su servidor real. Importante que el mismo cumpla con las medidas de seguridad adecuadas.
  • Desinstalar y/o reemplazar plugins y hasta el theme si fuera necesario. Esto es una posibilidad cuando hemos detectado plugins o el mismo theme fue la causa de la vulnerabilidad o debilidad al momento de la intrusión. La antiguedad de un plugin no garantiza su seguridad, los malos elementos siempre encuentran agujeros justo ahi donde hay mas confianza. Si hay plugins que no se usan, simplemente desintalarlos, sobretodo porque hay rutas físicas que pueden haberse quedado en el buscador y esto se aprovecha para encontrar tu sitio que tiene ese plugin débil.
  • Actualizar el core y plugins. Este paso se deja para este momento porque es en el servidor real donde se debe realizar las peticiones de archivos actualizados tanto de plugins como del core de WordPress. Actualizar siempre con una previo backup tanto de archivos como de base de datos.

En la actualidad hemos encontrado y usado muchas herramientas online que nos ahorran mucho de este trabajo, en un futuro post hablaré de ellas, aquí solo un listado a modo general para entender la rutina de limpieza de código que se suele aplicar y que definitvamente varía de acuerdo a la complejidad del caso así como de la plataforma en que se encuentra.