05 mayo 2015

Monitoreo de Procesos Windows desde Linux


Un saludo, en esta ocasión deseo compartir una solución a un problema de seguridad común: "El monitoreo de las actividades de los usuarios en sistemas operativos Windows", que va más alla de saber que esta haciendo un usuario en un determinado momento, implica también determinar si las acciones que esta llevando a cabo corresponden a las necesidades laborales de su cargo. 

Por ejemplo, existen aplicaciones portables que permiten establecer conexión remota con servidores, como el caso de PUTTY, ¿Cual es el riesgo de que un usuario con perfil de Oficial de Crédito tenga acceso a esta aplicación?. En el caso de los desarrolladores de software ¿Cuál es el riesgo de que estos tengan los programas compilados propios de su empresa, en sus equipos de cómputo?

Para esta problemática existen diversas soluciones, libres y de paga, en mi caso, algunas soluciones antivirus o similares permiten solamente extraer una lista de programas instalados, y no así un registro instantáneo de lo que el usuario esta realizando, es decir, una lista de procesos ejecutados en el equipo de cómputo, por lo que muchas veces, toca implementar una solución propia.

Como primer paso se debe realizar un "perfilamiento de usuarios", que en realidad se traducirá en un perfilamiento de los cargos laborales, ya que la persona puede cambiar, pero los roles del cargo laboral no cambiarán,  por tanto la primera tarea consiste en el perfilamiento de cargos:

CARGOGRUPOS PERMITIDOS
Desarrollador-Software base
-Lenguajes de Programación
-Ofimática
Oficial de Crédito-Software base
-Ofimática
-Aplicaciones de CRÉDITO

El objetivo del cuadro anterior consiste en declarar que, un usuario Desarrollador no puede ejecutar ningún software dentro del grupo "Aplicaciones de CRÉDITO", porque su función laboral no lo requiere. Del mismo modo un Oficial de Crédito no puede ejecutar software de tipo "Lenguajes de Programación". 

Esta relación "Cargo -  Grupos Permitidos" debe reflejarse en una base de datos, para su posterior consulta, asociando el proceso a un Grupo.

PROCESOGRUPO
winword.exeOfimática
iPodService.exeCloud Service
winvnc4.exeAcceso Remoto
chrome.exeSoftware Base
TSVNCache.exeDesarrollo de Software

Pasamos a la parte técnica, realizaremos el monitoreo desde un servidor LINUX, en un esquema de Directorio Activo, y haciendo uso del programa WMIC, el cual es un cliente para la herramienta WMIC de Windows (Windows Management Instrumentation Command-line), la cual permite no solo obtener información sino realizar acciones sobre un equipo de cómputo.  El enlace de descarga, manual de instalación y ejemplos es: http://www.aldeid.com/wiki/Wmic-linux.

Los datos que necesitamos son:

- Nombre de Dominio                           :   MIDOMINIO
- Usuario de Dominio con permiso
de sesión remota                                    :  USR_MONITOREO
- Contraseña del Usuario de Dominio
con permiso de sesión remota:                : M1P@sSw0Rd!
- IP del Equipo a Monitorear                  :  192.168.1.15     

Luego, se puede combinar wmic y php de la siguiente manera:

$IP=$_POST['direccion_IP'];
exec('wmic -W MIDOMINIO -U USR_MONITOREO%M1P@sSw0Rd! //'.$IP.'  "select caption, ExecutablePath from Win32_Process" ',$salida);
print_r($salida);
La variables $salida, contiene el nombre de los procesos y la ruta de los ejecutables, este puede tratarse con funciones de vector, no entrare al detalle técnico de la programación en PHP, y pasaré a los resultados obtenidos.



Por tanto, se obtuvo los procesos que ejecuta un usuario determinado desde un servidor LINUX, además de un estado del proceso, y en comparación a una base de datos previamente implementada se pudo categorizar los procesos de acuerdo al perfil.

Se puede implementar también el envió de notificaciones cuando se identifiquen grupos como "Servicios en la Nube" o cuando un usuario "Oficial de Crédito" este ejecutando procesos que pertenecen al grupo "Acceso Remoto", como es el caso de "WinVNC.exe" (como se observa en la imagen anterior), este control debe ser de tipo tarea programada.

Espero que este pequeño ejemplo sea de utilidad, lo he implementado con muy buenos resultados y si alguien esta interesado en hacerlo solo tiene que escribirme. Hasta la próxima.

CesarR.

Email: cesarcuenca@gmail.com
Twitter: @ccuencad

3 comments :

Gonnza Cabrera dijo...

Muy buen post!. Interesante a la hora de auditar lo mencionado, además abre un enorme abanico de opciones al poder generar informes acudiendo a la programación. Saludos!.

JAIME IVAN MENDOZA dijo...

buen post cesar , saludos..

Luis García dijo...

Si se requiere hacer cosas desde Bash como crontabs o cosas así, es posible compilando Winexe
http://sourceforge.net/projects/winexe/