Mostrando entradas con la etiqueta facebook. Mostrar todas las entradas
Mostrando entradas con la etiqueta facebook. Mostrar todas las entradas
Auditar logs de accesos de servidores ISA utilizando LogParser
La semana pasada me tocó auditar accesos a Internet para buscar visitas a sitios Web maliciosos o inadecuados y detectar desvíos de seguridad. Para llevar a cabo esta tarea tuve que filtrar los logs de un servidor ISA que se utiliza como proxy para obtener información útil de acuerdo a diferentes criterios de búsqueda.

En este artículo voy a proveer información sobre cómo obtener de forma rápida y precisa esta información utilizando herramientas de línea de comandos. Estas herramientas permiten redirigir la salida a archivos de texto, y realizar el trabajo de forma eficiente y automágica.


Definiciones preliminares

ISA Server: Gateway integrado de seguridad perimetral que permite proteger el entorno de TI frente a las amenazas de Internet, además de proporcionar a los usuarios un acceso remoto seguro a las aplicaciones y datos corporativos (Fuente: Microsoft).

LogParser: LogParser es una herramienta de línea de comandos que provee consultas universales a archivos de texto tales como archivos de logs, archivos XML y CSV y fuentes de datos del sistema operativo Windows tales como logs de eventos, registry, el sistema de archivos y Active Directory (Fuente: Microsoft).

Bash: Programa cuya función consiste en interpretar órdenes. Está basado en la shell de Unix y es compatible con POSIX. Fue escrito para el proyecto GNU y es el intérprete de comandos por defecto en la mayoría de las distribuciones de Linux (Fuente: Wikipedia).


Filtrado de logs

Los logs de acceso de los servidores ISA generalmente se encuentran en la carpeta:

C:\Program Files\Microsoft ISA Server\ISALogs

Para obtener información útil de estos logs utilizaremos la herramienta LogParser provista por Microsoft de forma gratuita. LogParser toma una expresión SQL como parámetro en la línea de comandos, y muestra como resultado las líneas que contienen coincidencias para la misma. Utilizando esta herramienta es posible filtrar los logs de los servidores ISA para obtener información útil de forma resumida.

Al ejecutar LogParser desde el menú de inicio se abre una consola en el directorio donde se instaló y muestra la ayuda:

Microsoft (R) Log Parser Version 2.2.10
Copyright (C) 2004 Microsoft Corporation. All rights reserved.

Usage: LogParser [-i:] [-o:] |
file:[?param1=value1+...]
[] []
[-q[:ON|OFF]] [-e:] [-iw[:ON|OFF]]
[-stats[:ON|OFF]] [-saveDefaults] [-queryInfo]

LogParser -c -i: -o:
[] []
[] [-multiSite[:ON|OFF]]
[-q[:ON|OFF]] [-e:] [-iw[:ON|OFF]]
[-stats[:ON|OFF]] [-queryInfo]

-i: : one of IISW3C, NCSA, IIS, IISODBC, BIN, IISMSID,
HTTPERR, URLSCAN, CSV, TSV, W3C, XML, EVT, ETW,
NETMON, REG, ADS, TEXTLINE, TEXTWORD, FS, COM (if
omitted, will guess from the FROM clause)
-o: : one of CSV, TSV, XML, DATAGRID, CHART, SYSLOG,
NEUROVIEW, NAT, W3C, IIS, SQL, TPL, NULL (if omitted,
will guess from the INTO clause)
-q[:ON|OFF] : quiet mode; default is OFF
-e: : max # of parse errors before aborting; default is -1
(ignore all)
-iw[:ON|OFF] : ignore warnings; default is OFF
-stats[:ON|OFF] : display statistics after executing query; default is
ON
-c : use built-in conversion query
-multiSite[:ON|OFF] : send BIN conversion output to multiple files
depending on the SiteID value; default is OFF
-saveDefaults : save specified options as default values
-restoreDefaults : restore factory defaults
-queryInfo : display query processing information (does not
execute the query)


Examples:
LogParser "SELECT date, REVERSEDNS(c-ip) AS Client, COUNT(*) FROM file.log
WHERE sc-status<>200 GROUP BY date, Client" -e:10
LogParser file:myQuery.sql?myInput=C:\temp\ex*.log+myOutput=results.csv
LogParser -c -i:BIN -o:W3C file1.log file2.log "ComputerName IS NOT NULL"

Help:
-h GRAMMAR : SQL Language Grammar
-h FUNCTIONS [ ] : Functions Syntax
-h EXAMPLES : Example queries and commands
-h -i: : Help on
-h -o: : Help on
-h -c : Conversion help


Ejemplos de consultas típicas

El servidor ISA guarda cada acceso en un registro, el cual tiene una cantidad fija de campos. Por ejemplo para cada pedido: c-ip contiene la ip que lo realizó; date contiene la fecha; time la hora; r-host el nombre del servidor al cual se accedió; etc. Cada registro es una línea y cada campo se separa con un tabulador, de acuerdo al formato W3C.
Los logs del servidor ISA que me tocó auditar comienzan con la siguiente cabecera, que declara la versión del servidor y los nombres de los campos:

#Software: Microsoft(R) Internet Security and Acceleration Server 2000
#Version: 1.0
#Date: 2011-02-06 00:00:02
#Fields: c-ip cs-username c-agent sc-authenticated date time s-svcname s-computername cs-referred r-host r-ip r-port time-taken cs-bytes sc-bytes cs-protocol cs-transport s-operation cs-uri cs-mime-type s-object-source sc-status s-cache-info rule#1 rule#2

Al utilizar LogParser para filtrar logs de un servidor ISA, se debe indicar que el formato de entrada es W3C, y que los campos se separan con tab. Luego de estos parámetros opcionales (tipo de entrada y separador) se indica la consulta SQL que se desea realizar.
El archivo de log se pasa como parámetro dentro de la consulta SQL, puede ser un archivo local o un share. Además se puede utilizar asterisco para leer de múltiples archivos de log.
Debido a que el nombre de archivo no puede contener espacios, se deben reemplazar los mismos con '\u0020'.
Los nombres de los campos de los registros se obtienen directamente desde el archivo de log (en la 3er línea del archivo que se encuentra comentada con numeral). Es posible redireccionar la salida a un archivo utilizando el caracter '>' o desde la consulta SQL utilizando la orden "INTO".


Ver todos los sitios visitados por la IP 192.168.1.100:

C:\Program Files\Log Parser 2.2>Logparser -i:W3C -separator:'tab' "SELECT DISTINCT r-host AS Site FROM C:\Program\u0020Files\Microsoft\u0020ISA\u0020Server\ISALogs\*.log WHERE c-ip='192.168.1.100'"

El identificador DISTINCT delante del campo r-host se utiliza para que no repita resultados.


Ver todas las IP que ingresaron a facebook:

C:\Program Files\Log Parser 2.2>Logparser -i:W3C -separator:'tab' "SELECT DISTINCT c-ip AS IP, r-host AS URL FROM \\logserver\ISALogs\*.log WHERE r-host LIKE '%facebook.com%'"


Ver la cantidad de visitas por sitio:


C:\Program Files\Log Parser 2.2>Logparser -i:W3C -separator:'tab' "SELECT COUNT(*) AS Hits, r-host AS Site FROM \\logserver\ISALogs\*.log GROUP BY Site ORDER BY Hits DESC" > hits.txt

La orden COUNT(*) en conjunto con GROUP BY suman la cuenta para cada valor distinto del campo r-host. La orden ORDER BY en conjunto con DESC se utilizan para ordenar el resultado de forma descendente.


Ver las visitas que realizó la IP 192.168.1.50 entre la 1:00 AM y 2:00 AM:

C:\Program Files\Log Parser 2.2>Logparser -i:W3C -rtp:-1 -separator:'tab' "SELECT time AS Time, cs-uri AS URI FROM C:\Program\u0020Files\Microsoft\u0020ISA\u0020Server\ISALogs\*.log WHERE c-ip='192.168.1.50' AND (TO_TIME(time) BETWEEN TIMESTAMP('01:00:00','hh:mm:ss') AND TIMESTAMP('02:00:00','hh:mm:ss'))" > filtered_log.txt

Por defecto, LogParser muestra la salida paginada. La opción -rtp:-1 se utiliza para evitar esto y poder redireccionar la salida.


Ver los clientes del Proxy:


C:\Program Files\Log Parser 2.2>Logparser -i:W3C -separator:'tab' "SELECT c-ip as Client INTO clients.csv FROM C:\Program\u0020Files\Microsoft\u0020ISA\u0020Server\ISALogs\*.log GROUP BY Client ORDER BY Client" -o:CSV

En este caso se exporta la salida como un archivo CSV directamente en la consulta utilizando la orden "INTO". La opción -o:CSV se utiliza para indicarle a LoggParser que la salida se exporta a un archivo CSV.


Filtrado de logs utilizando bash

Si se dispone de acceso a una consola bash, es posible realizar esta misma tarea utilizando herramientas libres como grep, sed, awk, sort, etc. Está fuera del alcance de este artículo explicar el funcionamiento de cada una de estas herramientas. A continuación se muestra un ejemplo práctico.


Ver todos los sitios visitados por la IP 192.168.1.100:

$ time grep '192.168.1.100' WEBEXTD20120101.log | awk –F"\t" '{print $10}' | sort | uniq

Con grep se buscan todos los registros que contienen la dirección IP 192.168.1.100. Luego se utiliza awk para extraer la décima columna (separadas por tab), que corresponde con el campo r-host. Finalmente se ordena el resultado y se eliminan los registros repetidos.
Se utiliza el comando time para medir el tiempo que tarda en realizar el trabajo. Tanto utilizando LogParser como bash scripts los tiempos de ejecución son bajos.
Nueva extensión para Firefox: Firesheep

La llegada de Firesheep (una extensión de Firefox que automatiza algo que se podía hacer manualmente utilizando Wireshark desde hace años) revolucionó el mundo. Firesheep permite capturar cookies de otras personas esnifeando redes inseguras para luego loguearse en sus cuentas Web. Por ejemplo, me conecto a una red insegura (como una red inalámbrica abierta), luego "pepito" (que se encuentra conectado a la misma red) se loguea en facebook, utilizando Firesheep obtengo la cookie de "pepito" en facebook y a continuación entro a la cuenta de "pepito" en facebook. Así de simple.

El éxito de esta herramienta radica en que basta hacer un par de clics para robar una cuenta Web, algo al alcance de cualquiera, a diferencia de: abrir Wireshark; capturar tráfico de la red insegura; filtrar la captura; copiar el contenido de una cookie; insertar la cookie en el navegador; y finalmente ingresar al sitio.

Debido a esto, creo, va a provocar un caos en las redes inalámbricas abiertas ya que ahora cualquier afiliado al PAMI te hace un session hijacking con 2 clics, que bien :). Aunque por el momento sólo está disponible para Windows y Mac OS, que mal :(

Cabe destacar que esto no es sólo una vulnerabilidad de las redes inalámbricas abiertas, sino que aplica también para las redes cableadas no switcheadas (y switcheadas también, haciendo un previo ataque ARP poisoning).

Pueden ver un video sobre esta herramienta en acción aquí.

Lo más interesante de esta clase de vulnerabilidad es que pone en tela de juicio la seguridad de la llamada """Web 2.0""" y el nivel de adopción de SSL. Un estudio realizado por Digital Society clasificó el nivel de seguridad de los sitios más importantes como Facebook, Google, Twitter, Hotmail, etc. Les recomiendo leer este excelente artículo: Online services security report card. Como siempre, Google a la vanguardia:



Espero que sirva para concientizar, y la próxima vez que se conecten a una red inalámbrica abierta no envíen credenciales sin utilizar HTTPS!

Saludos!