Malware fileless: ¿es posible una infección sin ficheros infecciosos?
Seguramente conoces bien el malware convencional, que emplea ficheros infecciosos para operar. Sin embargo, hay una amenaza que no es nueva, y que lleva tiempo generando problemas en muchos sistemas. Se trata del fileless (sin archivos), que al carecer de ficheros puede ser algo más complicado de detectar.
Además, su potencial es preocupante, ya que pueden generar serios problemas en la seguridad como hacen sus hermanos con archivos…
Me centraré en Linux por la temática de este blog, pero el resto de sistemas operativos también son vulnerables a este tipo de amenaza, y mucha de la información sirve también para el resto… De hecho, era una técnica frecuente para infectar máquinas Windows, pero que últimamente se ha transformado también al mundo *nix.
ÍNDICE:
¿Qué es el malware fileless?
A diferencia del malware tradicional, que aprovecha archivos ejecutables para infectar sistemas, el malware fileless no depende de ellos para lograr sus objetivos. En vez de eso, carga de forma sigilosa en la memoria RAM y explota los procesos confiables existentes (LOLBins) para instalar y ejecutar el código malicioso.
Generalmente, este tipo de malware puede realizar funciones como conseguir datos confidenciales de la víctima y transmitirlos al atacante, cifrar datos etc. Además, al ejecutarse desde una memoria aleatoria, no dejan rastro, sin escribirse en los medios de almacenamiento secundario. Es decir, este tipo de amenaza volátil desaparecerá cuando se apaga o reinicia la máquina, pero el daño ya estaría hecho.
Esto también dificulta su detección por parte del software anti-malware, ya que no tiene firma, evadiendo la detección de los escáneres tradicionales basados en firmas.
¿Cómo funciona el ataque de malware sin archivos?
Para poder infectar un sistema GNU/Linux mediante malware fileless se deben pasar una serie de etapas o pasos:
- Infección mediante la explotación de una vulnerabilidad: a diferencia del malware con archivos, que infecta el sistema mediante la descarga de algún archivo o ejecutable malicioso, en el sin archivos se explota una vulnerabilidad de un protocolo de red, o de un elemento Flash del navegador web, etc. Por eso, es importante contar con un sistema actualizado en cuanto a parches de seguridad y no usar configuraciones por defecto, ya que algunas configuraciones podrían hacer que un sistema aparentemente vulnerable no se pueda explotar.
- Modificación de un proceso: una vez se ha conseguido el acceso al sistema, lo siguiente es modificar un proceso ya existente y bloquearlo. Para ello emplea la syscall ptrace(), que se emplea para inspeccionar y gestionar el estado interno de un proceso.
- Inserción del código malicioso en la RAM: ahora se puede hacer que se inserte código malicioso gracias al proceso en la memoria principal, sin necesidad de escribir en el disco duro. Para ello, se suele explotar un desbordamiento de buffer, o una situación en la que el proceso, mientras escribe datos en un buffer o en un área de la memoria, sobrepasa el límite y sobrescribe ubicaciones de memoria adyacentes.
- Ejecución del código malicioso: es el momento en el que el código malicioso en memoria hace su función. Generalmente es un código en lenguajes como PHP, Perl, Python, etc. Como muchos sistemas tienen intérpretes de estos lenguajes instalados, se aprovecharán de ellos para la ejecución del script. Se empleará la llamada al sistema memfd_create() para crear ficheros en memoria. Al colocar el código malicioso en /dev/shm o /run/shm, (SHared Memory, una porción de memoria para uso interno del sistema y que desaparece al reiniciar el SO) es posible ejecutar el archivo directamente en la RAM. Una vez ejecutado, el sistema estará comprometido.
¿Me puedo proteger de esta amenaza?
Para poderse proteger de este tipo de amenazas sofisticadas, se requiere una buena estrategia de seguridad proactiva. Generalmente, la mayoría de las infecciones se deben a malas administraciones o configuraciones del sistema, por lo que es muy importante atender a estos dos puntos para cerrar posibles vectores de ataque.
Además, algunas recomendaciones son:
- Mantén siempre el sistema actualizado con los últimos parches de seguridad.
- Desinstala todo el software que no uses, o desactiva los servicios que no se necesitan.
- Gestiona bien los privilegios y contraseñas.
- Supervisa el tráfico de red y comprueba los registros de la actividad.
- Dedica tiempo a mejorar las configuraciones y no dejar las por defecto.
- Implementa soluciones de seguridad capaces de detectar este tipo de amenazas en la RAM. Otras muchas herramientas de gestión habituales también te pueden ayudar a la detección.
Ejemplos prácticos de detección
Una forma de poder detectar este tipo de amenazas de malware con herramientas habituales sería buscando en el directorio de procesos en ejecución si hay alguno memfd:(delete):
ls -alR /proc/*/exe 2> /dev/null | grep memfd:.*\(deleted\)
Si al ejecutar ese comando no se muestran resultados, es algo positivo. En caso de que haya algún resultado, podría ser un proceso sospechoso (aunque existen falsos positivos). En caso de que haya resultados, fíjate en el PID de la ruta del proceso a la que apunta el resultado. Ese será el proceso a vigilar.
Por cierto, que no haya resultados tampoco es garantía de que el sistema esté libre de amenazas. Algunos ataques usan técnicas de ocultación que necesitan de otros procedimientos de detección más avanzados.
Otra cosa que puedes hacer para investigar este tipo de ataques fileless en Linux es usar análisis forense. Por ejemplo, usando herramientas para analizar la red o los procesos:
#Buscar puertos abiertos con nombres de procesos extraños netstat -nalp #Inspeccionar procesos con nombres extraños, aunque esto no es fácil si se usan nombres comunes que puedan confundir ps -auxw
Si ves que el PID de un proceso está llamando tu atención con los resultados de todos los comandos empleados anteriormente, deberías investigar el directorio del proceso (sustituye <PID> por el PID del proceso sospechoso):
#Acceder al directorio del proceso sospechoso cd /proc/<PID> #Listar el contenido. Es importante controlar la fecha de inicio del proceso, directorio de trabajo y el enlace exec que apunta a la ubicación de su binario (debería ser inexistente) ls -al #Usar el concatenador para obtener información de los ficheros cat nombre-fichero
Dentro podrás ver multitud de ficheros con información importante. Por ejemplo, es importante comprobar exe, comm y cmdline. Eso mostrará el binario, el comando y la línea de comandos que iniciaron el proceso, lo que podría dar pistas. En estos casos, podrás ver nombres extraños o rutas extrañas/inexistentes.
Sería positivo investigar también el entorno del proceso, es decir, el fichero environ. Este fichero contiene una lista extensa de variables de entorno que pueden resultar esclarecedoras. Además, puedes vigilar si se ha insertado a través de protocolos como SSH de forma remota, lo que sería sospechoso. Además, incluso si el atacante ha logrado eliminar los logs, en este fichero suele permanecer la IP del atacante.
Conclusión
Con todas esas evidencias, podrías determinar que:
- Si se detectó algún proceso sospechoso en ejecución.
- Si existen puertos de red extraños abiertos.
- Si existen procesos con nombres extraños.
- Si hay más detalles sospechosos en el directorio del proceso.
Todo esto podría indicar si realmente se trata de un falso positivo o si es un proceso potencialmente peligroso.
A por el binario sospechoso
Si las evidencias anteriores te hacen pensar que es un binario sospechoso, entonces se debería tratar como un malware y proceder así:
cp /proc/<PID>/exe /tmp/malware sha1sum /proc/<PID>/exe sha1sum /tmp/malware
Con el hash del proceso en vivo y del recuperao se puede usar para buscar o para analizar.