Creando un Servicio de Windows Malicioso

image

Designed by @Secury

¿Que es un Servicio de Windows?

Según la guía oficial de Microsoft un servicio es:

Los servicios de Microsoft Windows, anteriormente conocidos como servicios NT, le permiten crear aplicaciones de larga ejecución que se ejecutan en sesiones propias de Windows. Estos servicios se pueden iniciar automáticamente al arrancar el equipo, se pueden pausar y reiniciar, y no muestran ninguna interfaz de usuario. Estas características hacen que los servicios sean idóneos para su uso en un servidor o siempre que necesite una funcionalidad de larga duración que no interfiera con otros usuarios que estén trabajando en el mismo equipo.1

Un ejemplo de servicio podría ser: un programa que cada X tiempo recopila el consumo de CPU, de Memoria y el espacio en disco y envía esos datos a un servidor central. Un administrador de sistemas podría revisar el estado de cada servidor de forma centralizada haciendo uso de este ejemplo.

¿Para que desarrollar un Servicio de Windows?

Vamos a adoptar dos perspectivas distintas:

  • Perspectiva del Atacante (Red Team): una atacante puede aprovechar las propiedades del servicio para sus fases de Persistencia y Enmascaramiento, es decir, el atacante puede crear una puerta trasera, que se comunique con un Servidor externo, y crear un servicio que la ejecute en cada inicio de sesión. Y además puede camuflar el servicio poniendole un nombre similar a un servicio legítimo.2

  • Perspectiva del Defensor (Blue Team): en cambio, un defensor podría crear un servicio que mantuviese en ejecución un Agente de un Antivirus, o un analizador de archivos, o cualquier tarea de monitorización.

Servicios, Procesos y Tareas Programadas, ¿Diferencias?

En Sistemas Windows podemos encontrarnos con cualquiera de estos 3 elementos y, lo más habitual, es que con los tres a la vez. Técnicamente, para el Sistema Operativo ambos son iguales, es decir, el sistema operativo toma a los 3 como procesos, es decir, como un programa en ejecución, pero cabe destacar que, más allá de como se tratan internamente, los tres tienen propósitos distintos, y sino fuera así no tendría sentido mantener los tres y no unificarlos en uno. Pero… ¿qué propósitos tiene cada uno?

  • Servicios: como bien mencionabamos antes, un servicio de windows es un elemento que no interfiere a la actividad del usuario, que corre en en segundo plano, y que, por convención, no suele tener ventana y es iniciado en el arranque por el sistema operativo.

  • Procesos: los procesos corresponden a programas en ejecución en un sistema, dichos programas pueden ser aplicaciones (a las que comunmente estamos acostumbrados a utilizar, como firefox, el explorador de archivos, etc) o programas del propio sistema (con los que no solemos interactuar). Los podemos diferenciar de los servicios porque, estos pueden ser lanzados sin necesidad de tener privilegios (siempre hay excepciones), y porque, habitualmente, el objetivo de los procesos es interactuar con el usuario.3

  • Tareas Programadas: las tareas programadas, son programas cuya ejecución es periódica, y que suelen utilizarse como medio para asegurarse que un proceso se ejecuta en un determinado momento. Podemos diferenciarlas de los servicios porque, generalmente, no tienen una ejecución continua e indefinida como los servicios, sino que se encargan de iniciar un proceso en un instante de tiempo.4

¿Como se desarrolla un Servicio?

Podemos programar un servicio de windows en cualquier lenguaje que te permita interactuar con la API de Windows, por facilidad, yo utilicé el Framework .NET junto con el IDE Visual Studio, que trae el conjunto de herramientas necesarias para diseñar servicios de windows.

*Importante: La prueba de concepto que desarrollé fue un simple servicio que hacía peticiones HTTP, periódicamente, a un servicio web externo, el cual le proporcionaba comandos que, dicho servicio ejecutaba, y le retornaba el output en otra petición. Es decir, un ejemplo sencillo de lo que viene a ser un Cliente de Command and Control utilizando como medio de transmisión el protocolo HTTP.

Como no quiero extenderme demasiado y repetir lo que en su día documenté en la Wiki del proyecto, simplemente os dejo el enlace del proyecto, para que si alguien quiere descargarselo, probarlo y/o modificarlo a su antojo.

gitlab msa

https://gitlab.com/secu77/msa/wikis/home

Cualquier sugerencia, erratas o lo que sea, podeis contactarme al correo o por telegram. Nos veremos pronto!