Las Webshells son scripts (código que contiene un conjunto de comandos a ejecutar) que se suben malintencionadamente en las páginas webs aprovechando alguna vulnerabilidad, cuya complejidad varía para realizar distintas acciones sobre el servidor que la soporta. Como ejemplo visual se muestra la siguiente imagen:
En la actualidad, estamos constantemente accediendo a dichas páginas web, por ocio, temas de trabajo, para buscar información; por lo que no es de extrañar que suponga un atractivo jugoso para un atacante cualquiera de ellas, no solo para obtener información sensible, sino también para hacerse con el control de la misma, y poder utilizarla para otro tipo de finalidad con un riesgo mayor.
La vulnerabilidad por excelencia para subir este tipo de código en un servidor es la incorrecta gestión de la subida de ficheros en la misma, ya que normalmente es necesario que se pueda subir algún tipo de fichero al servidor web a través de su página, pudiendo ser un documento o una imagen, por lo que se habilita dicha funcionalidad y puede ser la vía de entrada.
También es posible llegar a subir este código malicioso explotando otras vulnerabilidades como SQLi (inyección por código SQL), RFI (inclusión de ficheros directamente al servidor) y XSS (inyección de scripts en la página web), entre otras.
Todo lo comentado, deja de manifiesto que cualquier página web (sin importar su índole) son susceptibles a este tipo de ataques, dejándolas a merced de la complejidad que pueda tener el script en cuestión.
A continuación, se describen algunas de las funcionalidades que pueden tener las Webshell una vez que han sido subidas a una página cualesquiera:
- Visualizar base de datos; es posible obtener información del contenido dentro de la base de datos propia del servidor.
- Obtener/modificar ficheros; se pueden visualizar los distintos ficheros alojados en el servidor, pudiendo modificarlos o incluso en el peor de los casos eliminarlos. De esta manera también se podría modificar la página web en sí, además de poder acceder ficheros de configuración ya que se tiene control total sobre la misma.
- Acceso a la red interna: con acceso al servidor (y en el caso de que éste esté dentro de la red interna de la empresa) se puede visualizar la red interna en la que esta alojada la aplicación, comprometiéndola completamente, ya sea interceptando tráfico o enumerando activos como pueden ser otros servidores, firewalls y routers (con el peligro que esto conlleva si esta dentro de una compañía).
- Acceso persistente: se puede establecer un acceso persistente al servidor que permita conectarse al mismo sin tener que volver a comprometerlo y dejando el mismo oculto y como punto de entrada para sucesivas intrusiones.
- Ataques coordinados: se pueden utilizar varios servidores comprometidos para lanzar un ataque coordinado contra otro objetivo para evitar responsabilidades, como puede ser una denegación de servicio.
Hoy en día, la detección de este tipo de ataques es compleja, ya que las acciones que se puedan realizar tienen que ser desde el propio servidor. Se puede intentar identificar patrones de comportamiento propias de las Webshells o prohibir la ejecución de ciertas funciones, pero el control y auditoria del servidor y la página web son la mejor manera de evitar este ataque.
En este tipo de auditorías técnicas tanto del servidor donde está alojada la página como de la web en sí, se pueden detectar la existencia de Webshells así como evitar que un atacante explote alguna vulnerabilidad y suba una Shell.
La versatilidad que aportan las Webshells para un posible atacante resulta llamativa a la hora de elegir este tipo de ataques que, junto con la sencillez de las mismas y la falta de necesidad de un conocimiento amplio para usarlas, suponen un peligro muy presente para cualquier servidor web hoy en día.
Alejandro García
Cybersecurity Departament