Monitoreo de red: OSSIM Review Parte III (Ntop, NFSen, Pads, P0f, Tcptrack, Arpwatch, OCS-NG)
Llegamos a la 3ra y última parte del review de OSSIM. A través de este review y de OSSIM conocí un montón de herramientas excelentes, que seguramente utilizaré mucho, y aprendí un poco más sobre herramientas que ya conocía. Para el que se perdió el resto del review, puede encontrar la parte 1 aquí, y la parte 2 aquí.

Para esta tercer entrega dejé las herramientas que realizan su trabajo pasivamente, sin interferir en el funcionamiento normal de la red. Estas herramientas trabajan observando el tráfico de la red y generando estadísticas o alertas según lo que observan. También hablaré sobre una excelente herramienta que permite mantener un inventario en tiempo real de los dispositivos de la red.


NFSen

NFSen o Netflow Sensor, es un front-end web para las herramientas de flujo de red nfdump. A través de este front-end podemos ver gráficos de flujos, paquetes y Bytes usando RRD (Bases de datos Round Robin). Además es posible setear alertas e incluso programar plugins propios para procesar el flujo de red.
En cuanto al manejo de los gráficos NFSen es bastante flexible, permitiendo seleccionar intervalos de tiempos, tipo de gráficos (lineares, logarítmicos, etc), ver resumen estadístico, crear filtros, etc. Se pueden crear perfiles donde el usuario puede customizar lo que desea ver, con qué colores, en qué intervalo.

Como NFSen funciona sobre la base de NFDUMP, describiré un poco de qué trata esta última.
NFDUMP es un conjunto de herramientas encargadas de recolectar y procesar flujos de datos en la red que funcionan por línea de comandos. Las herramientas que componen NFDUMP son:
- nfcapd: el demonio que captura el flujo de red. Lee datos de la red y los almacena en archivos, los cuales va rotando automáticamente cada n minutos.
- nfdump: vendría a ser el dump de los datos almacenados por nfcapd. Esta herramienta sirve como visualizador de los datos almacenados por nfcapd. La sintaxis es similar a la de tcpdump, y puede crear varias estadísticas del tipo "top N" basado en flujos de datos IP, ports, etc.
- nfprofile: otro que lee los datos almacenados por nfcapd. Estos datos se pasan a través de un conjunto de filtros y los datos filtrados se almacenan en nuevos archivos.
- nfreplay: simplemente hace forward de los datos almacenados por nfcapd hacia otros hosts.
- nfclean: permite borrar los datos viejos.
- ft2nfdump: permite convertir datos de herramientas de flujo desde archivos o de la stdin al formato nfdump.

NFDUMP entonces permite analizar el flujo de datos en la red del pasado y hacer un seguimiento de patrones de tráfico interesantes continuamente.


Ntop

Otra gran herramienta que permite ver el uso de la red. Ntop lleva su nombre por la analogía con el comando top de Unix que muestra el uso de la memoria, CPU, etc, de los procesos.
Ntop, al igual que nfdump, lee los datos de la red, los almacena en archivos y a partir de ellos genera gráficas visualizables a través de una interfaz Web (port 3000 por defecto). Ntop es mucho más completo que nfdump, porque no solo distingue entre tráfico udp, tcp, icmp, etc, sino que también distingue protocolos de la capa aplicación, como ser HTTP, SNMP, SSH, DNS, etc.
La variedad de gráficas que Ntop es capaz de generar hacen que el administrador tenga una excelente visión de lo que sucede en la red. Se pueden generar gráficas por host, e incluso distingue que servidores ejecuta un dado host.
No hay mejor resumen de lo que se puede hacer con Ntop que el que nos da su autor en la página:
* Ordenar el tráfico de red de acuerdo a varios protocolos
* Mostrar el tráfico de red ordenado de acuerdo a varios criterios
* Mostrar estadísticas del tráfico
* Almacenar en disco estadísticas del tráfico en formato RRD (Round Robin Database)
* Identificar la identidad (e.g. direcciones de e-mail) de computadoras de usuarios
* Identificar pasivamente (i.e. sin enviar paquetes de prueba) el Sistema Operativo de los hosts
* Mostrar la distribución del tráfico IP entre varios protocolos
* Analizar el tráfico IP y ordenarlo de acuerdo a la fuente/destino
* Mostrar la matriz del tráfico IP de la subred (quién está hablando con quién)
* Reportar el uso del protocolo IP ordenado por tipo de protocolo
* Actuar como recolector de flujo de red para los flujos generados por routers (e.g.Cisco) y Juniper o switches (e.g. Foundry Networks)
* Producir estadísticas del tráfico tipo RMON
Pueden aprender más sobre ntop en los documentos recomendados en la página oficial.


Pads

Pads cuyo significado es Passive Asset Detection System (Sistema de Detección Pasiva de Activos) es un sniffer que a través de signatures detecta activos. Los activos pueden ser dispositivos o servicios ejecutándose en la red. La idea detrás de PADS (como comenta su autor en la página oficial) es ser un nmap que funcione de forma pasiva, esto es, sin enviar un solo paquete a la red.

El funcionamiento es simple, Pads sniffea la red y a través de signatures va detectando servicios y hosts que existen en ésta, y loguea lo que detecta. De esta forma se puede hacer un mapeo de la red sin generar tráfico. Claro está que este tipo de detección es menos precisa que un escaneo activo como el de nmap, pero es muy útil cuando este último no es una opción viable.


P0f


Passive OS Fingerprinting (p0f) es otra herramienta de detección pasiva que permite obtener el fingerprint de Sistemas Operativos sin enviar un solo paquete a la red. Esta herramienta permite hacer un mapeo host->SO de los hosts que existen en la red, sin que estos se enteren. El funcionamiento es similar al de escaners activos como nmap, revisando TTL, TCP Windows size, DF (don't fragment), TOS (Type of Service), etc, de los paquetes que llegan a la máquina.


Arpwatch

Herramienta simple pero muy útil a la hora de detectar intrusos. Arpwatch observa las MACs que existen en la red, y mantiene un archivo con su IP asociada, el timestamp de la última vez que se vió en la red, y genera notificaciones en caso de haber cambios. De esta forma, es posible detectar si una IP asociada a una dada MAC ahora está asociada a otra MAC. En una red donde las máquinas suelen conservar su IP por largos períodos de tiempo (o estar fijas), el uso de una IP por otra máquina (con su dada MAC) es una situación sospechosa.
Esta herramienta permite por ejemplo detectar ataques Man in the Middle, suplantación de proxies, servers DNS, HTTP, etc.


Tcptrack

Conocido como el 'top' (por el comando Unix) de las conexiones TCP, Tcptrack es un sniffer que muestra información sobre las conexiones TCP que ve en una dada interfaz. Al igual que las herramientas anteriores, ésta funciona de forma pasiva, observando conexiones TCP y siguiendo el rastro del estado, mostrando la lista de conexiones de forma similar al comando top de Unix.



OCS-NG

Luego de hablar sobre herramientas de detección de intrusos, vulnerabilidades y monitoreo de la red, nos encontramos con OCS Inventory NG (Open Computer and Software Inventory Next Generation) que nos permite mantener un inventario actualizado en tiempo real de los dispositivos existentes en la red.
OCS-NG cuenta con 4 componentes principales:
- servidor de base de datos: que almacena la información del inventario (puede ser MySQL 4.1 o posterior),
- servidor de comunicación: maneja la comunicación HTTP/S entre la base de datos y los agentes (Apache 1.x, 2.x),
- servidor de despliegue: almacena la información de los paquetes a desplegar (requiere HTTPS),
- consola de administración: front-end web que permite al administrador realizar consultas a la base de datos (Apache 1.x, 2.x y PHP 4.1 o superior).

El funcionamiento se basa en instalar un agente en cada host que se desea inventariar, y mantener un servidor (o repartido en varios servidores) la base de datos con el manejador de los datos enviados por los agentes. Cada agente envía los datos del inventario de la máquina a través de HTTP/S al servidor de comunicación, utilizando archivos XML comprimidos con Zlib. Luego un administrador puede revisar su inventario a través de la interfaz Web.

OCS soporta la mayoría de los sistemas operativos, incluyendo GNU/Linux, Windows, Mac, Solaris, AIX, y *BSD.

Si bien no tuve la oportunidad de probar esta herramienta (viene instalada por defecto en OSSIM, pero no desplegué agentes), a partir de los screenshots se puede observar que es muy completa, mostrando información de discos, sistema de archivos, CPU, memoria, dispositivos, controladores, etc. Una herramienta muy interesante, para tener en cuenta.


To be continued...


Hey, cómo? esta no era la última parte? bueno, si y no. Esta es la última parte del review, donde describí las herramientas que trae OSSIM y el OSSIM en sí, pero todavía no acabé de hablar sobre el monitoreo. Estoy preparando un documento sobre la configuración que le estoy haciendo para que las herramientas reporten lo que me interesa, disminuyendo falsos positivos. Si bien OSSIM funciona correctamente out-of-the-box, realmente hace falta un tuneo fino para que nos sirva lo reportado, la cantidad de información reportada por defecto es abrumadora, al igual que la cantidad de falsos positivos.
También les hablaré sobre configuraciones de seguridad y otras yerbas. Tal vez realice algún artículo (tal vez más de uno) dedicado exclusivamente a Snort, la compleja herramienta de detección de intrusos. El tiempo dirá...
Monitoreo de red: OSSIM Review Parte II (Nagios, Nessus, OpenVAS, Osiris)
Como lo prometí, heme aquí escribiendo la segunda parte del review del OSSIM. Para el que no haya leído la primera parte, puede encontrarla aquí.
Para repasar un poco las cosas, recordemos que OSSIM es una herramienta que agrupa los resultados de muchas herramientas para mostrarlos de forma uniforme al pobre encargado de monitorear la red. La lista de herramientas que se ejecutan de fondo es grande y en la primer parte repasé, además de OSSIM, los IDSs Snort y OSSEC. En esta entrega veremos un poco más sobre herramientas de monitoreo y escaneo de red. Arranquemos nomas con el repaso.


Osiris

Continuando con la seguidilla de IDSs del artículo anterior, OSSIM también trae Osiris, un HIDS centrado en el monitoreo de integridad del host. Este se utiliza para monitorear cambios en una red de hosts a través del tiempo y reportando estos cambios al administrador(es).
Actualmente, el monitoreo incluye cambios en el filesystem. Osiris toma snapshots periódicos del filesystem y los almacena en una base de datos. Estas bases de datos, así como las configuraciones y los logs, son almacenados en un host de administración central. Cuando se detectan cambios, Osiris loguea estos eventos en el log del sistema y opcionalmente envía un e-mail al administrador.
Además de los archivos, Osiris también monitorea listas de usuarios, listas de grupos, y módulos del kernel o extensiones.

La arquitectura de Osiris está basada en tres componentes:
- consola de administración (osirisimd): debe estar instalada en un host confiable porque es a donde se almacena la información sobre los hosts administrados, incluyendo configuraciones, logs, y bases de datos.
- un agente de escaneo (osirisd): proceso que se ejecuta en cada host monitoreado. Es el responsable de escanear el filesystem local y enviar los datos al host administrador.
- aplicación de administración CLI (osiris): la utiliza el administrador para administrar los detalles de los hosts escaneados. Se comunica directamente con la consola de administración.

osiris <==> osirismd <==> osirisd

Pueden leer más sobre Osiris en su handbook.


Nessus

Pasamos de la detección pasiva a la activa por un momento. Nessus es un programa de escaneo de vulnerabilidades. Su función es escanear los hosts que el usuario desea, detectando primero los ports que tienen abiertos y luego enviando una batería de test para comprobar qué hosts son vulnerables. A partir de los resultados obtenidos, Nessus arma un detallado informe con las vulnerabilidades de cada host, describiendo cada vulnerabilidad, el nivel de riesgo que representa y las posibles formas de mitigarla.
Esta herramienta ahorra horas de pruebas al auditor de red (el sueño del pentester), y permite que personas sin tanto conocimiento sobre exploits pueda conocer los problemas en la red y las soluciones.
Nessus es una herramienta muy completa y flexible, permitiendo agregar tests (plugins) de vulnerabilidades, los cuales deben ser escritos en NASL (Nessus Attack Scripting Language), un lenguaje de scripting optimizado para interacción de red personalizada. Además es posible realizar auditoría de passwords y verificar el nivel de parches aplicados en Windows si el usuario provee las credenciales necesarias.
El reporte generado por Nessus se puede exportar en varios formatos como texto plano, XML, HTML y LaTeX, además del formato propio de Nessus.

En sistemas Unix Nessus está compuesto por un demonio nessusd encargado de realizar es escaneo, y un cliente que controla el escaneo y muestra los resultados. La versión Windows, en cambio, es un solo ejecutable que contiene todo.

Realmente esta herramienta es extremadamente útil, no sólo porque realiza un escaneo automatizado excelente (cubre una amplísima variedad de pruebas), generando reportes bien descriptivos, sino también porque es muy fácil de utilizar. La primera vez que corrí Nessus quedé muy sorprendido por su capacidad, no he conocido otra herramienta que realice un escaneo automatizado tan bueno. Generalmente los escaneos automatizados cubren algunos aspectos, pero fallan en detectar muchas vulnerabilidades, dejando la mayor parte del trabajo a la persona que realiza la auditoría.

Penosamente Nessus dejó de ser libre en 2005. La compañía detrás de Nessus (Tenable Network Security) cerró el código en su versión 3 y ahora venden los plugins. Por suerte todavía mantienen un conjunto de plugins gratuitos pero que sólo pueden utilizarse en casa o en empresas sin fines de lucro (ver Nessus FAQ). Si quieren utilizar Nessus en entornos con fines de lucro, deben comprar la versión profesional.
Por ello la gente de Alien Vault (empresa detrás de OSSIM) creó su propio conjunto de plugins gratuitos y licenciados bajo la GPLv2.


OpenVAS

Además de Nessus, OSSIM incluye OpenVAS (OpenSource Vulnerability Assessment Scanner), el fork libre de Nessus, creado a partir del motor en Nessus 2 (que era libre). Se entiende a partir de esto que OpenVAS funciona igual a Nessus y persigue el mismo propósito, escanear en busca de vulnerabilidades.
Esta herramienta tiene algunas limitaciones y no llega a ser Nessus, pero el trabajo detrás es interesante, porque además se pueden utilizar los plugins libres de Nessus.


Nagios

OK llegamos a una de mis favoritas. Sin dudas Nagios es una de las herramientas más interesantes para el monitoreo de redes, aunque también una de las más complejas para customizar y mantener. Como bien dicen en el manual oficial "Relax - it's going to take some time".
Nagios es de las herramientas más complejas, pero permite a un administrador tener una visión central del estado de los hosts de la red. A través del monitoreo de hosts, Nagios puede enviar alertas en caso de fallas. La descripción de la funcionalidad es simple, monitorear hosts y alertar en caso de fallas. Además posee un front-end web desde donde se puede observar el estado de la red.

Nagios se basa en un demonio central que recibe datos de plugins y los almacena en una base de datos. La configuración de todo el sistema se realiza a través de archivos de texto. Nagios no incluye mecanismos de chequeo de estado de hosts y servicios, deja este trabajo a los plugins. Simplemente se limita a ejecutar los plugins, recibir los resultados, procesar los resultados y ejecutar las acciones necesarias.

Lo bueno del sistema de plugins es que abstraen a Nagios del chequeo en sí, logrando que sea extremadamente flexible y extensible, abarcando varias plataformas. Los plugins pueden ser scripts o ejecutables que se pueden ejecutar desde la línea de comandos.


Si bien todo el monitoreo se puede realizar desde una sola máquina, algunos plugins requieren que se instale un agente monitor en la máquina que deseamos monitorear. Ejemplo de este caso es cuando deseamos monitorear el uso de CPU, memoria, disco, de alguna máquina en particular. El agente monitor se comunica con el server Nagios para enviar la información necesaria.
Actualmente existen plugins para monitorear varios dispositivos y servicios incluyendo:
* HTTP, POP3, IMAP, FTP, SSH, DHCP
* Carga de CPU, Uso de Disco, Uso de Memoria, Usuarios Actuales
* Unix/Linux, Windows, y servidores Netware
* Routers y Switches

Alertar sobre fallas es la principal función de Nagios, pero éste también es capaz de ejecutar event handlers. Los event handlers, al igual que los plugins, son comandos del sistema (ejecutables o scripts), y tratan de arreglar el problema antes de notificarlo. Entre los usos se incluye:
* Reiniciar un servicio que falló
* Ingresar un ticket de problema en un sistema helpdesk
* Loguear información del evento en una base de datos
* Reboot del sistema (hay que tener mucho cuidado con este)

Como dije anteriormente, Nagios es muy muy completo. La configuración no es simple, pero está muy bien documentada. Lleva un tiempo hasta que logramos que nos alerte lo que deseamos, o tomar las acciones necesarias. Al principio puede resultar bastante molesto la cantidad de alertas arrojadas, pero gracias a la configuración de umbrales, y a la inteligencia para detectar flip-flos (cuando un servicio/host cae y se levanta muchas veces en un intervalo corto de tiempo) es posible lograr el funcionamiento deseado.


To be continued...

Una vez más, la cantidad de información sobrepasó el tamaño que pensaba y necesitaré terminar de describir las herramientas de OSSIM en un nuevo artículo. Resta entonces hablar sobre herramientas de monitoreo pasivas como Arpwatch, Tcptrack, p0f, Pads; graficadores de tráfico como Ntop, NFSen, y una de inventariado llamada OCS-NG.
Vengo bastante encaminado, así que probablemente termine la revisión en un par de días. Las herramientas que restan son muy interesantes y vale la pena saber de que tratan, así que stay tuned.
Monitoreo de red: OSSIM Review Parte I (OSSIM, Snort y OSSEC)
Hace tiempo en la empresa deseamos instalar un servidor de monitoreo, y por suerte el último mes volvieron realidad mi sueño (si me contento con poco...). Ya tenía en mente cómo sería la máquina para monitorear, tendría un GNU/Linux (tal vez debian o CentOS), y herramientas como ntop, Nessus y snort, pero no mucho más. Pero la cosa cambió cuando Javi me recomendó utilizar la distribución AlienVault OSSIM (Open Source Security Information Management). Esta distribución esta diseñada pensando en el monitoreo, e incluye todas aplicaciones libres destinadas a tal fin, ya configuradas y listas para usar.
La distribución lleva el nombre de la herramienta OSSIM, la cual se encarga de juntar los resultados retornados por las diferentes aplicaciones y mostrarlos en una interfaz Web única, desde donde el administrador puede observar todo lo que sucede en la red.
Si bien la instalación es muy simple y todo sale funcionando en cuestión de minutos, es necesario conocer las aplicaciones que corren de fondo para así entender los resultados retornados, y configurar el sistema para visualizar la información que nos interesa. Esta customización la vengo haciendo hace algunos días, y a partir de ella aprendí para qué sirve cada herramienta.

Como la funcionalidad de OSSIM se basa en las herramientas que corren por detrás, haré un mini-review de cada una. El review lo dividiré en partes porque son varias herramientas y muchas tienen varios componentes por lo que harían el artículo demasiado extenso. En esta primera parte hablaré de OSSIM en sí y de dos de los IDSs que trae, en las próximas examinaré el resto de las herramientas.


OSSIM

Como dije anteriormente, esta herramienta, desarrollada por la gente de AlienVault, se encarga de recolectar los datos entregados por las diferentes aplicaciones de monitoreo y mostrarlos a través de una interfaz Web. Realmente me sorprendió el nivel de integración que tiene OSSIM con el resto de las herramientas (que describiré abajo), logrando abstraer al administrador de lo que sucede de fondo. En lugar de tener que mirar por separado miles de logs, la interfaz Web junta todos los datos en un solo lugar y permite así tener vistas detalladas de cada aspecto de las redes, hosts, servidores, etc.

OSSIM se divide en tres programas: ossim-server, ossim-framework y ossim-agent. Además utiliza una base de datos para almacenar los eventos y la información necesaria para plugins.

- ossim-server: este programa es un demonio que se ejecuta en background y se conecta con la base de datos para obtener/ingresar datos desde los agentes y el framework. El propósito principal de este programa es:
# recolectar datos de los agentes y otros servidores
# priorizar los eventos recibidos
# correlacionar los eventos recibidos de diferentes fuentes
# realizar la evaluación de riesgos y disparar alarmas
# almacenar eventos en la base de datos
# reenviar eventos o alarmas a otros servidores
Pueden leer más en la documentación oficial sobre servidor.

- ossim-framework: es otro demonio que ejecuta tareas misceláneas, no realizables por los agentes, servers o el front-end. Este accede tanto a la base de datos de conocimiento del OSSIM, como a la BD de eventos. El propósito principal de este programa es:
# leer/escribir archivos del filesystem, evitando que el server web lo haga directamente.
# ejecutar comandos externos.
# ejecutar en background tareas que requieran uso intensivo de CPU, para acelerar la visualización y el análisis.
Pueden leer más en su documentación oficial sobre framework.

- ossim-agent: se instala un agente en cada máquina que deseamos utilizar como monitor (llamadas sensores). Los agentes se encargan de recolectar todos los datos enviados por los diferentes dispositivos conectados a la red, estandarizar estos datos para que OSSIM pueda entenderlos, y luego enviarlos al servidor.
Pueden leer más en la documentación oficial sobre agentes.

Dados los tres programas anteriores, la arquitectura de OSSIM se divide en 4 elementos:
1. Sensores
2. Servidor de Administración
3. Base de Datos
4. Frontend
En la configuración default, los sensores se encargan de realizar las tareas de IDS, Vulnerability Scanner, detección de anormalidades, monitoreo de red, recolección de datos de routers, firewalls, e incluso pueden funcionar como firewall. Los sensores se encargan de enviar toda la información al servidor de administración, luego de haberla estandarizado.
Por su parte, el servidor de administración contiene el framework y el servidor OSSIM. Este servidor se encarga de recolectar la información de todos los sensores y normalizar, priorizar, coleccionar eventos, así como realizar análisis de riesgo. Además se encarga de realizar backups, inventarios on-line, y ejecución de escaneos.
La base de datos almacena eventos e información útil para la administración del sistema.
El frontend, como ya mencioné, es una aplicación web donde se puede visualizar todo lo que sucede.

La magia utilizada para estandarizar los datos recolectados de los diferentes programas, se realiza a través de plugins. Cada herramienta que se utiliza, debe tener su correspondiente plugin en OSSIM.
Existen dos tipos de plugins:
- Detectores: encargados de leer los logs creados por las diferentes herramientas y estandarizarlos para que el Agente pueda enviarlos al servidor. Ejemplos típicos de plugins detectores son snort, p0f, arpwatch, pads, etc.
- Monitores: reciben pedidos del servidor OSSIM y los envían a la herramienta correspondiente, obtienen la respuesta y le avisan al servidor si la herramienta acepta lo que se le pide. Ejemplos de monitores son el nmap y tcptrack.

Como ven, OSSIM es un sistema bastante complejo. En la documentación oficial pueden encontrar cómo crear plugins propios, así como también cómo crear políticas para generar alertas y acciones. Realmente vale la pena estudiarlo y utilizarlo.


Snort

Snort es uno de los IDSs utilizados por OSSIM. Por si todavía no conocen este tipo de herramientas, IDS significa Intrusion Detection System, o sistema de detección de intrusos. Los IDSs utilizan distintas técnicas de análisis para alertar al administrador en caso de ver acciones sospechosas. Snort en particular es un NIDS (N de Network) que se encarga de analizar el tráfico de red, inspeccionando el contenido de los paquetes para disparar alertas, o incluso, realizar algún tipo de acción cuando detecta trafico sospechoso. Snort es el IDS más utilizado mundialmente, y es probablemente el más completo de su tipo.
Como bien dice en el FAQ oficial, snort realiza análisis de protocolo, búsqueda/matching de contenido, y puede detectar una gran variedad de ataques y pruebas, como buffer overflows, escaneo sigiloso (stealth) de ports, ataques CGI, intentos de fingerprint de SOs, pruebas SMB, y mucho más.

La idea es simple (implementarla no lo es tanto), Snort sniffea la red y a través de un conjunto de reglas decide si el tráfico es sospechoso. Las reglas contienen la información que debería contener un paquete para considerarlo sospechoso, como ser la IP origen, el port origen, la IP destino, el port destino y el contenido del paquete. En las reglas se pueden utilizar expresiones regulares y se debe incluir un mensaje que describa qué es lo que detecta.
Además del motor de detección, Snort provee preprocesadores. Los preprocesadores permiten a los usuarios y programadores extender la funcionalidad de Snort. El código de los preprocesadores se ejecuta antes del motor de detección, pero después de que el paquete fue decodificado.

Snort es muy flexible y permite al usuario crear sus propias reglas y preprocesadores. Las reglas se almacenan en path/snort/rules/ y tienen una sintaxis simple, los preprocesadores requieren programación. Un artículo interesante para revisar es el de O'Reilly Write Your Own Snort Rules . Por supuesto, la mejor referencia de Snort es la guía de usuario proporcionada por Sourcefire (la empresa detrás de Snort).


OSSEC

Otro de los IDSs provistos por OSSIM, en este caso, un HIDS (H de Host). Un sistema de detección de intrusos basado en el Host se encarga de analizar los datos del host y detectar a través de ellos si el host está siendo víctima de algún ataque. OSSEC realiza esta tarea analizando logs, checkeando integridad, monitoreando la registry de Windows, detectando rootkits, y generando y respondiendo en tiempo real.
Los IDSs basados en análisis de logs son llamados LIDS (L de Log), porque detectan errores (o ataques) usando logs como su fuente de información primaria.

OSSEC (desarrollado por Trend Micro) está formado por un administrador (manager) central de monitoreo, que recibe información desde agentes, syslog, bases de datos y dispositivos sin agentes (agentless).


El manager almacena las bases de datos del chequeo de integridad de archivos, los logs, los eventos, y las entradas de auditoría del sistema. Todas las reglas, decodificadores y configuraciones importantes se almacenan en el manager.
Los agentes son pequeños programas que se instalan en los sistemas que deseamos monitorear, estos coleccionan información en tiempo real y se la envían al manager para ser analizada.
En los sistemas donde no se puede instalar agentes (Agentless), OSSEC puede realizar monitoreo de integridad de archivos.

OSSEC corre en la mayoría de los sistemas (Windows, Linux, OpenBSD/FreeBSD, y MacOS), y el análisis lo realiza a través de reglas escritas en lenguaje XML. Al igual que Snort, estas reglas son relativamente simples de escribir y se basan en la búsqueda de patrones (se pueden usar expresiones regulares) en los archivos analizados. También se pueden crear reglas compiladas, escritas en lenguaje C.

Como se habrán dado cuenta, OSSEC es una herramienta muy potente. Pueden aprender más de OSSEC leyendo el FAQ de la página, donde encontrarán varios tutoriales.


To be continued...

Como dije al principio del artículo, OSSIM posee muchas herramientas, las cuales son complejas y tienen grandes funcionalidades. Entre las herramientas más complejas, me falta escribir sobre Nagios, Ntop, Osiris y OpenVAS. Además me falta describir herramientas más simples en arquitectura pero extremadamente útiles como arpwatch, p0f, tcptrack, pads, spade y Snare. Esperen la próxima entrega, la cual espero no demorar demasiado...
Tips Slackware 13.1

Por qué elegí Slackware?

Luego de haber utilizado Ubuntu por 4 años finalmente me decidí por instalar una distribución GNU/Linux más estable y "espartana" (como diría un profe de la Universidad Nacional del Sur), aunque tuviera que resignar facilidad de uso y mantenimiento. No tengo nada en contra de Ubuntu, creo que es una distribución formidable, muy pero muy fácil de utilizar. Es más, creo firmemente que es mucho más fácil de utilizar que cualquier Windows. A cualquier persona que utiliza una computadora por primera vez le daría una distro basada en Ubuntu por su simplicidad. Pero esta facilidad de uso es lo que me "aburrió", todo es muy fácil y se pierde mucho control sobre lo que el sistema operativo hace (y se pierden muchas oportunidades para comprender y aprender como funciona el sistema operativo). Siempre me divertí más poniéndome el overol que haciendo un "apt-get install ...".
Respecto a la estabilidad, investigando durante mucho tiempo en foros y páginas de Internet descubrí que Slackware es considerada "la distribución de GNU/Linux más estable" y supuse que el mundo no debe estar equivocado por ser la distribución de GNU/Linux más antigua aún con vida.

Un poco de historia...

Mis primeras armas con GNU/Linux las hice utilizando una distro más que "espartana": DSL (abreviatura de Damn Small Linux). Por esa época utilizaba DSL versión 3.4 con un kernel Linux 2.4.26 y corría en un procesador AMD K6 II de 450 MHz (un sólo núcleo obviamente jeje) con unos increíbles 64 MB de memoria RAM. Esta distro ultra liviana, basada en Knoppix, no tenía manejador de paquetes, utilizaba el manejador de ventanas fluxbox, y tanto su "instalación" (estaba pensada para funcionar como live CD, no se recomendaba la instalación) como uso era para usuarios intrépidos. Aunque... si tienen un cacharro viejo tirado en la pieza pónganle un DSL y devuélvanlo a sus años dorados.
Abandoné DSL el día que compré mi máquina de escritorio actual y decidí pasarme a una distribución más moderna, en ese momento Ubuntu 6.04.

Instalando Slackware 13.1

Recuerdo cuando le comenté a demasiadovivo:
- Voy a instalar Slackware en mi PC.
A lo que él respondió:
- ¿Tenés ganas de meterte en problemas?
Durante un momento me acobardé un poco pero me mantuve firme en mi decisión y un sábado a las 2 de la mañana, luego de cumplir con mis obligaciones, instalé Slackware 13.1. Esta versión viene con el kernel de Linux 2.6.33.4, Xfce 4.6.1, KDE 4.4.3, muchas herramientas de desarrollo (Perl, Python, Ruby, Subversion, KDeveloper, etc.), una variedad de Web browsers (Konqueror, SeaMonkey, Firefox) y una colección de aplicaciones basadas en GTK+ (Pidgin, GIMP, GXine, XChat, etc.) entre lo más destacado. Información más detallada en http://www.slackware.org/announce/13.1.php.
La instalación es muy sencilla, la parte más complicada para un usuario inexperto es el particionamiento de los discos utilizando 'cfdisk', pero para aquellos dinosaurios como yo que instalaron Windows 98 una gran cantidad de veces y particionaban sus discos con 'fdisk'... es pan comido. Si tuvieron la oportunidad de instalar FreeBSD se darán cuenta que el instalador es muy similar, también el manejador de paquetes 'pkgtool' el cual utiliza archivos comprimidos tar. Una limitación que tiene el manejador de paquetes es que no resuelve dependencias, como lo hacen otros manejadores de paquetes (por ejemplo aptitude). Pueden encontrar ayuda oficial para instalar Slackware 13.1 en http://www.slackware.org/install/.

Veamos la instalación paso por paso:

1. Primero tenemos que conseguir un DVD de Slackware, bueno esto es fácil, ingresamos en http://www.slackware.org/getslack/torrents.php y descargamos el torrent de la imagen del DVD (es más practico que 6 CDs) y lo descargamos con nuestro cliente bit-torrent favorito (en mi caso fue transmission). Luego de quemar el DVD booteamos desde la unidad lectora de discos. Ingresamos al sistema como usuario 'root' (sin contraseña).

2. Esta es la parte más compleja de la instalación: crear las particiones. Para hacerlo de la forma más sencilla posible vamos a crear dos particiones: una partición para memoria swap (aproximadamente el doble del tamaño de la memoria RAM para la mayoría de los sistemas) y otra partición para el resto del sistema. Lo ideal es crear particiones separadas para los directorios /boot y /var (y posiblemente también una para /etc). No voy a explicar cómo utilizar 'cfdisk' porque sería muy extenso, pero pueden encontrar una guía en español en http://manual.sidux.com/es/part-cfdisk-es.htm.

3. Teniendo nuestras particiones, ejecutamos el comando 'setup'. Esto inicia el proceso de instalación interactivo que contiene las siguientes etapas: HELP, KEYMAP, ADDSWAP, TARGET, SOURCE, SELECT, INSTALL, CONFIGURE, PKGTOOL, EXIT.

  • KEYMAP: Nos permite elegir el mapa de teclado adecuado (en mi caso qwerty/es).

  • ADDSWAP: Indicamos que partición se utiliza como memoria de intercambio (el proceso es automático).

  • TARGET: Seleccionamos la partición donde instalar el sistema y formateamos con ext4.

  • SOURCE: Detecta el origen de la instalación (en este caso el DVD).

  • SELECT: Seleccionamos el software para instalar, debemos seleccionar todos (KDEI para instalar otros idiomas en KDE, lo que incluye el idioma español).

  • INSTALL: Instalamos seleccionando 'full'. Seleccionamos la instalación de lilo automática, el framebuffer de lilo 'auto' y el destino 'MBR'.

  • Se puede encontrar una guía detallada de la instalación en http://troesma.wordpress.com/2010/05/28/como-se-debe-instalar-slackware/.
Una vez finalizada la instalación reiniciamos la PC y nos topamos con lilo, el cual detectó automáticamente durante la instalación otros sistemas operativos instalados, e iniciamos Slackware. Nos logueamos como 'root' e iniciamos KDE mediante el comando 'startx'. Ya tenemos el sistema funcionando!
Lo que sigue a continuación es una lista de tips post-instalación que fui realizando para "tunear" el sistema de acuerdo a mis necesidades. Son configuraciones simples pero que, una vez hechas, me es imposible recordar cómo las hice, por eso decidí anotarlas y eso me motivó a escribir este artículo.

Agregar un nuevo usuario

Por razones de seguridad, no es conveniente correr el sistema como usuario 'root', por lo tanto lo primero que deberíamos hacer es crear un nuevo usuario. La forma más sencilla es utilizar el manejador de usuarios de KDE (también se puede utilizar el comando 'useradd', ver manual). Iniciamos KUser desde "K > Applications > System > User Manager". Luego utilizamos el botón 'Add', el resto es fácil. Una vez creado el nuevo usuario debemos agregarlo al archivo 'sudoers' para que pueda utilizar el comando 'sudo' y realice tareas de administración. Si no se desea que el usuario pueda utilizar 'sudo' se debe omitir este paso.
Otorgar 'sudo' al nuevo usuario 'emi':
    # visudo

    [Insert]
    emi ALL=(ALL) ALL

    [Esc]
    :wq
Si otorgamos 'sudo' es conveniente agregar las rutas '/usr/local/sbin', '/usr/sbin' y '/sbin' a la variable de entorno $PATH, para que bash encuentre los ejecutables de administración del sistema (por ejemplo 'cfdisk', 'dhclient', 'fsck', 'halt', 'ifconfig', 'ip', 'lilo', 'mkfs', 'mount', 'poweroff', 'reboot', 'umount', etc.):

1- Crear el archivo '.profile' en el directorio $HOME
2- Agregar los directorios a la variable $PATH:
    PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH

Cambiar locale

Para que se visualicen correctamente los acentos y 'ñ' en los nombres de archivo debemos cambiar el 'locale' que es el conjunto de reglas de lenguaje y culturales que se aplica en el sistema. Esto incluye el conjunto de caracteres. Para esto editamos el archivo '/etc/profile.d/lang.sh' de la siguiente forma:

Comentar la línea:
#export LANG=en_US

Descomentar la línea:
export LANG=en_US.UTF-8

Deshabilitar servidor Akonadi:

Akonadi es un servicio de manejo de información personal (PIM) incluido en KDE 4. Administra información como contactos de correo electrónico, notas, alarmas, etc. de forma centralizada en una base de datos MySQL. Este servicio puede consumir recursos como memoria, espacio en disco y CPU. Para mejorar el desempeño de KDE en general decidí deshabilitarlo. Si desinstalamos este paquete, aplicaciones como Kontact, KOrganizer, KMail, etc. dejan de funcionar. Por lo tanto no se debe desinstalar, para resolver esto debemos seleccionar nuevos recursos de almacenamiento de datos de KDE desde "K > System Settings > Advanced > KDE Resources". Por ejemplo se pueden utilizar archivos locales para almacenar datos de contactos. Para más información sobre Akonadi leer http://techbase.kde.org/Projects/PIM/Akonadi#Akonadi_FAQ.

Instalar paquetes

Slackbuilds.org es un repositorio de paquetes que no vienen incluidos en la versión oficial de Slackware. A pesar de no ser oficiales, son referenciados en el sitio oficial de Slackware ya que varios desarrolladores de Slackware también desarrollan scripts para slackbuilds.org. Cabe recordar que Slackware trabaja con paquetes tar comprimidos, por lo tanto en el sitio slackbuilds.org proveen scripts que crean los paquetes tar comprimidos a partir del código fuente del paquete que se desea instalar. Por lo tanto, si deseamos instalar un paquete que no está incluido en la versión oficial de Slackware debemos seguir los siguientes pasos (voy a utilizar OpenOffice.org como ejemplo):
    1. Buscar el script en slackbuilds.org, en este caso "openoffice".
    2. Descargar código fuente del paquete desde el sitio oficial del mismo (en la misma página de slackbuilds.org donde descargamos el script hay un link al fuente del paquete).
    3. Extraer el tarball descargado desde slackbuilds.org y editar el archivo .info si no coincide la versión del fuente descargado.
    4. Colocar el fuente (generalmente un .tar.gz) en la carpeta donde se encuentra el script .Slackbuild. Luego ejecutar el script, el mismo crea el paquete a partir del código fuente.
    5. Instalar el paquete creado en el directorio /tmp utilizando el comando 'installpkg'.
    6. Disfrutar! No es tan complicado como parece.

Personalizar lilo (bootloader)

Si deseamos personalizar lilo, por ejemplo cambiar el timeout, el orden de aparición de los OS o el bitmap, debemos:

1- Editar el archivo /etc/lilo.conf
2- Luego ejecutar lilo para que tome la nueva configuración:
    lilo -C /etc/lilo.conf

Instalar NVIDIA video driver

Para aquellos dueños de placas de video NVIDIA, los pasos son idénticos que para otra distro:
    1- Descargar driver desde www.nvidia.com
    2- Cerrar X (Logout desde KDE)
    3- chmod u+x NVIDIA.run
    4- sh NVIDIA.run
    5- startx
    6- K > Applications > Settings > NVIDIA X Server Settings
    7- Disfrutar!

Instalar mod_perl

Esto tuve que hacerlo para ejecutar Perl en modo cgi (o sea, servir páginas Web escritas en Perl):
    1- Instalar mod_perl utilizando el script de slackbuilds.org.
    2- Editar /etc/httpd/mod_perl.conf si es necesario.
    3- Agregar la siguiente línea en el archivo /etc/httpd/httpd.conf:
      Include /etc/httpd/mod_perl.conf

Iniciar firewall automáticamente

Slackware no utiliza "/etc/init.d/" sino que utiliza "/etc/rc.d/" para cargar demonios automáticamente. En mi caso necesito levantar mi firewall escrito con 'iptables' automáticamente cada vez que inicia el sistema. Para esto:

1- Crear bash script con las reglas de iptables
2- Crear un link simbólico al script en la carpeta /etc/rc.d/:
    ln -s /home/emi/firewall.sh /etc/rc.d/rc.firewall
Ojo con los permisos del archivo firewall.sh! El dueño debe ser 'root' y ni el grupo ni los otros deben tener permisos de lectura/escritura

Agregar etiqueta a una partición (sin formatear)

Acá fue cuando hice macanas, quería asignarle una etiqueta a una partición ext4 y (por no leer el manual completo) utilicé el comando 'mke2fs' con la opción -L lo cual borró la tabla de inodos perdiendo el contenido completo de la partición (como si hubiera formateado una partición NTFS). Afortunadamente, pude recuperar la información utilizando 'e2fsck' y aprendí a asignar una etiqueta sin formatear la partición utilizando el comando:
e2label /dev/sdb4 etiqueta

Personalizar atajos de teclado (multimedia)

Si tenemos un teclado con botones adicionales y queremos cambiar su comportamiento, podemos hacerlo desde:

K > Computer > System Settings > Keyboard & Mouse > Standard Keyboard Shortcuts

Instalar corrección ortográfica (aspell-es)

Para poder corregir la ortografía en idioma español es necesario instalar el diccionario español de GNU Aspell:

1- Descargamos el diccionario español desde: ftp://ftp.gnu.org/gnu/aspell/dict/0index.html.
2- Extraemos el contenido del tarball.
3- Instalamos el diccionario:
    ./configure
    make
    make install

Links

www.damnsmalllinux.org
www.slackbuilds.org
www.slackware.org
www.ubuntu.com
Escalación de privilegios en Windows XP
Recientemente estuve tratando de escalar privilegios en una máquina local con Windows XP y, como es de esperarse, encontré una variedad de exploits en Internet. Voy a explicarles los más sencillos y efectivos dividiendo la tarea en dos partes: escalar privilegios desde una cuenta de usuario restringida hasta Administrator; y escalar privilegios desde Administrator hasta SYSTEM, lo que nos dará el control total del sistema.

Primera parte: "from pepe to Administrator"

Primero veamos como lograr privilegios de Administrator partiendo de una cuenta de usuario con privilegios restringidos. Para lograr esta escalada hay dos técnicas básicas, la primera consiste en sobreescribir el ejecutable C:\WINDOWS\SYSTEM32\sethc.exe (lo que requiere permisos de escritura en el directorio C:\WINDOWS\SYSTEM32) y la segunda consiste en explotar una vulnerabilidad en el procedimiento de ejecución de aplicaciones de Windows (la cual requiere permisos de escritura en el directorio C:\).

Veamos cómo funciona la primer técnica: Por defecto, Windows XP instala el software de ayuda y accesibilidad que se activa pulsando la tecla SHIFT 5 veces seguidas. Al hacer esto, aparece un cuadro de diálogo que permite configurar la aplicación sethc.exe ubicada en C:\WINDOWS\SYSTEM32.


El ataque consiste en sustituir sethc.exe por cmd.exe (esto se puede hacer con un disco de arranque ntfsdos o con un live cd de alguna distribución de Linux si no se puede escribir en el directorio C:\WINDOWS\SYSTEM), de esta forma cuando pulsemos la tecla SHIFT 5 veces seguidas se ejecutará un intérprete de comandos. Hasta este punto no es algo muy grave, pero la vulnerabilidad aparece cuando pulsamos SHIFT 5 veces antes de iniciar sesión ya que el interprete de comandos que se ejecuta lo hace bajo privilegios Administrator.


A continuación, cualquier comando que ejecutemos será como usuario Administrator. Lo ideal es crear una nueva cuenta Administaror, lo cual se hace de dos formas:
  • Ejecutando los comandos:

    • net user nuevoadmin 1234password /add
      net localgroup administrators nuevoadmin /add

    De esta forma creamos el usuario "nuevoadmin" con privilegios de administrador y contraseña "1234password"

  • Ejecutando "Computer Management"

    • compmgmt.msc

    Esta aplicación permite agregar usuarios mediante una interfaz gráfica.

Ahora veamos la segunda técnica: Esta técnica consiste en explotar una vulnerabilidad en el procedimiento de ejecución de aplicaciones de Windows. Cuando lanzamos una aplicación, si la ruta al ejecutable no contiene espacios, como por ejemplo:
C:\WINDOWS\system32\cmd.exe
Windows localiza el archivo cmd.exe e inicia su ejecución. Si en cambio la ruta al ejecutable contiene espacios debemos utilizar comillas dobles, como por ejemplo:
"C:\Program Files\McAfee\VirusScan Enterprise\Mcshield.exe"
para que Windows localice correctamente el archivo ejecutable. En la (vieja) notación 8.3 es posible evitar el uso de comillas mediante:
C:\Progra~1\McAfee\VirusS~1\Mcshield.exe

Pero qué sucede si olvidamos las comillas y ejecutamos:
C:\Program Files\McAfee\VirusScan Enterprise\Mcshield.exe

Puede parecer igual a lo anterior pero en realidad sucede lo siguiente:
  • Windows intenta localizar y ejecutar el archivo C:\Program.exe

  • Si ese archivo no existe, Windows intenta localizar y ejecutar el archivo C:\Program Files\McAfee\VirusScan.exe

  • Si ese archivo no existe, Windows finalmente intenta localizar y ejecutar el archivo originalmente deseado C:\Program Files\McAfee\VirusScan Enterprise\Mcshield.exe

Esto nos abre una puerta para lograr el acceso al sistema con mayores privilegios. Por qué? La mayoría de los servicios en Windows se ejecutan como SYSTEM y algunos se encuentran bajo el directorio "C:\Program Files". Entonces veamos la siguiente situación: supongamos que Mcshield.exe es un servicio que se inicia automáticamente con Windows y se ejecuta en el contexto de LocalSystem. La ruta al ejecutable es la mencionada anteriormente, pero sin comillas. Cuando Windows inicia, trata de ejecutar el servicio Mcshield automáticamente como LocalSystem, pero debido a que no hay comillas en la ruta al archivo Mcshield.exe tratará de iniciar (siempre como LocalSystem) primero lo siguiente:
  • C:\Program.exe

  • C:\Program Files\McAfee\VirusScan.exe

Por lo tanto es posible crear nuestro propio "servicio" Program.exe o VirusScan.exe y situarlo en la ubicación donde Windows accidentalmente tratará de ejecutarlo. El servicio puede ser algo básico como agregar un nuevo usuario administrador, como expliqué anteriormente.
Tal vez se pregunten: ¿puede ser que algún servicio tenga la ruta al ejecutable sin comillas? La respuesta es sí, yo lo probé y quedé sorprendido por la cantidad de veces que se ejecutó el "servicio" Program.exe al iniciar Windows. Solamente hay que encontrar uno que se ejecute con privilegios >= Administrator, o plantar el archivo Program.exe y esperar que un administrador inicie sesión en el equipo. En Windows XP es posible listar los servicios que se ejecutan automáticamente al iniciar el sistema desde Start > Settings > Control Panel > Administrative Tools > Services.
Una posible limitación es encontrarse sin permiso de escritura en el directorio "C:\" o "C:\Program Files\McAfee\" pero siempre podemos plantar el "servicio" utilizando un disco de arranque ntfsdos o un live cd. La última barrera sería no poder bootear el sistema desde unidades de disco o usb, en este caso podemos intentar resetear la BIOS quitando la pila.
Si tenemos acceso físico, el sistema está comprometido.

Segunda parte: "from Administrator to SYSTEM"

Bajo circunstancias normales, un usuario no puede ejecutar código como SYSTEM, sólo el sistema operativo tiene esta habilidad, pero utilizando el intérprete de comandos se puede abusar del comando ‘at’ para que Windows ejecute nuestro escritorio con privilegios SYSTEM. El comando ‘at’ despacha comandos y programas para ejecutarse en una fecha y tiempo específico. Este comando se puede utilizar sólo cuando el servicio “Task Scheduler” se está ejecutando y el usuario que lo ejecuta es miembro del grupo “local Administrators”.
Supongamos que una política de Windows nos impide modificar la configuración del proxy en Internet Explorer, a pesar de tener privilegios de administrador local. En la siguiente captura se observa la ventana de configuración de red de Internet Explorer (se accede desde “Tools > Internet Options… > Connections > LAN Settings…”).


Para comenzar, abrimos cms.exe y ejecutamos el comando ‘at’. Se observa que el comando está habilitado (de lo contrario retorna “Access is denied.”) lo que nos permite agregar una nueva tarea programada, como se observa en la siguiente captura:


Cuando el reloj alcanza las 8:27 se ejecuta la tarea “cmd.exe”, la diferencia es que esta tarea se ejecuta con privilegios SYSTEM ya que es iniciada por el servicio “Task Scheduler” que corre bajo la cuenta Local System. En la siguiente captura se observa el intérprete de comandos iniciado automáticamente, la barra de título indica ‘svchost.exe’ (Service Host) en lugar de ‘cmd.exe’. A partir de esta consola podemos ejecutar cualquier aplicación con privilegios SYSTEM:


Si abrimos Internet Explorer desde esta consola tenemos acceso a todas las opciones bloqueadas anteriormente. Esto nos permite, por ejemplo, modificar la configuración del servidor Proxy (estas opciones estaban grisadas en la primer captura):


Si deseamos un entorno de escritorio ejecutado bajo privilegios SYSTEM, primero debemos terminar el proceso “explorer.exe” para cerrar el entorno de escritorio actual:


Una vez que terminamos el proceso “explorer.exe” desaparece el escritorio y todas las ventanas abiertas, excepto la consola con privilegios SYSTEM. A continuación ejecutamos “explorer.exe” desde esta consola, lo que inicia un nuevo entorno de escritorio. Aunque el nombre de usuario corresponde con el nombre del sistema, lo que indica que el entorno de escritorio está ejecutando bajo privilegios SYSTEM. A partir que aquí, todas las aplicaciones que ejecutemos desde el escritorio se ejecutaran bajo privilegios SYSTEM. Es posible resetear la contraseña del administrador local, matar procesos pertenecientes a SYSTEM y acceder a todos los componentes bloqueados del sistema.
Para evitar este ataque, se debe deshabilitar el servicio “Task Scheduler” siempre que no sea necesario. Pero si es necesario, se debe deshabilitar el comando ‘at’ y utilizar el comando ‘schtasks’ (la documentación de este comando se encuentra en http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/schtasks.mspx).

Conclusión

Explotando estas vulnerabilidades, logramos acceso con privilegios SYSTEM a partir de una cuenta limitada "pepe". Espero que les haya gustado.

NOTA: La información presentada en este artículo fue para fines didácticos y no debía utilizarse para abusar de sistemas Windows ;)