Google EL TIPO DE INFORMATICA: julio 2012

martes, 24 de julio de 2012

Leer Conversaciones Guardadas de Skype con SQLiteBrowser

En estos días se ha estado hablando de Skype en la red debido a la publicación de su código fuente y también a un problema que causaba que mensajes llegaran a personas que nisiquiera estaban en la lista de contactos. Así que quise aprovechar para hablarles de algo que encontré hace un tiempo mientras revisaba los archivos de datos de Skype, por simple curiosidad. Y es que el historial de conversaciónes o chat y otras informaciónes (como la lista de contactos) del usuario son almacenadas en un archivo de base de datos, y lo mejor, no esta encriptado ni nada parecido. Y todavía mejor, por default Skype almacena un historial de todas las conversaciónes, a menos claro que le digamos lo contrario, cosa que por lo que he visto muy poca gente hace.

En Windows 7, los archivos de datos de Skype se almacenan en la dirección "C:\Users\nombre-de-usuario-de-windows\AppData\Roaming\Skype\", dentro de esta carpeta encontraremos una o varias carpetas con los nombres de usuarios de Skype que se hayan logeado en esa computadora, en la que encontraremos estos archivos:


Archivos Skype

Como pueden ver en el gráfico anterior esta señalado el archivo "main.db", este es el archivo que contiene el historial de chat, los contactos, etc. Aquí es entonces donde utilizaremos el programa "SQLite Database Browser" que pueden descargar desde este link. Verán que es bastante sencillo de utilizar, solo hacen doble clic encima del ejecutable, luego hacen clic en "File--> Open Database" y buscamos el archivo "main.db" en la ruta mencionada anteriormente o donde lo hayamos copiado. Al abrir nuestro archivo lo primero que veremos sera la estructura de la base de datos, como se ve a continuación:

Base de datos Skype

En esta ventana seleccionamos el tab "Browse Data", y luego en la sección "Table" seleccionamos la tabla "Messages". Esta tabla es la que contiene el historia de Chat del usuario. Como verán, aquí aparecen las demás tablas que también pueden contener información interesante. En este caso seleccionaremos "Messages":

Archivo de Datos Skype

Esta tabla contiene muchas columnas, para ver el mensaje transmitido tendremos que movernos hacia la derecha en la ventana hasta la columna "body_xml". Lo bueno es que esta herramienta nos permite también ejecutar Queries SQL en esta base de datos, lo que nos facilitaría la lectura de los mensajes, para esto nos movemos al tab "Execute SQL", y en la sección "SQL String:" podemos escribir nuestro query y filtrar los mensajes. Las columnas mas importantes son author, from_dispname, dialog_partner y body_xml, así que podríamos ejecutar el siguiente query:

Archivos de Datos Skye

Como ven, ahora nos resultara mas cómodo leer todas las conversiones. Ahora bien, que hacer para evitar que alguien pueda leer nuestras conversaciones de esta manera? Lo primero primero seria decirle a Skype que no conserve nuestras conversaciones, esto se hace en "Tools --> Options --> Privacy" en la sección "Keep history for" seleccionamos "no history":

Configuracion Skype


Otra opcion seria borrar periódicamente este log, como ven en el gráfico anterior hay un botón "clear hostory" que se encargaría de esto. En la mayoría de los casos creo que la mejor opción seria la primera, no guardar historial de conversaciónes. Así que ya saben, la próxima vez que tengan la computadora de un amigo o compañero en sus manos y este usa Skype... no sean malos y adviertanle sobre el setting para eliminar las conversaciónes :) . Bueno, espero como siempre que esta información les haya sido de utilidad (tanto como a mi :P ).

viernes, 13 de julio de 2012

Un Poco de IPTables Parte 3: Redireccionando Logs

Siguiendo con lo que ahora se ha convertido en una serie de post de IPTables, voy a hablarles de como manejar los logs de IPTables, configurar cuales eventos que queremos escribir, agregar algún prefijo y redireccionarlos a un archivo especifico en el equipo, ya que por default los logs de IPTables se almacenan en el archivo "/var/log/kern.log". Para esto aplicaremos algunas reglas en IPTables y luego configuraremos nuestro syslog server (utilizaremos Syslog-NG) para indicar que queremos tener un archivo aparte únicamente con los log de IPTables. 

Lo primero que debemos hacer es determinar que tanto queremos que IPTables nos registre, si queremos que registre cada paquete que entre o salga a nuestra red, o si solo queremos que registre los paquetes que hayan sido "Dropeados" o descartados. La opción mas recomendable es logear todo lo que pase por nuestro Firewall, ya sea permitido o bloqueado, ya que esto nos permitirá identificar mas fácil algún problema de conexión, como auditoría en caso de que necesitemos localizar conexiones salientes o entrantes hacia algún sitio especifico o también para generar reportes de uso o ancho de banda. Hay que tener en cuenta que con esta opción nuestro archivo de log crecerá mucho mas rápido, dependiendo de la actividad de nuestra red. Para esto haremos lo siguiente: Supongamos en este ejemplo que nuestro firewall tiene 2 interfaces, la eth0 que esta conectada a Internet y la eth1esta conectada a nuestra red LAN, queremos entonces registrar todo lo que entre o salga hacia Internet, agregamos las siguientes reglas (antes de las demás reglas que hayamos definido para que se registre cada paquete antes de tomar alguna decisión sobre el mismo)

-A FORWARD -o eth0 -j LOG --log-level 7 --log-prefix IPTABLES-BANDWIDTH_OUT: 
-A FORWARD -i eth0 -j LOG --log-level 7 --log-prefix IPTABLES-BANDWIDTH_IN: 

En la primera linea le decimos a IPTables que todos los paquetes que salga desde nuestra red LAN a través de la interfase eth0 (-o eth0) le aplique la acción LOG (-j LOG), esta entrada en el log sera nivel 7 (--log-level 7) y le decimos que agregue el prefijo "IPTABLES-BANDWIDTH_OUT:" (--log-prefix), este prefijo lo utilizaremos mas adelante como filtro para enviar este tipo de eventos hacia un archivo especifico. En este prefijo pueden poner cualquier otra cosa que les haga sentido, de modo que cuando vean un evento en el log con este prefijo sepan de donde viene y como se produjo. En la segunda linea hacemos lo mismo, lo único que decimos que registro todo paquete entrante (-i) por la interface eth0, en este caso serian paquetes provenientes de Internet, y en la parte final del prefijo sustituimos OUT por IN para diferenciar los que son paquetes salientes con los entrantes.

Podemos también registrar los paquetes que han sido descartados, o que no encontraron ninguna regla que coincida permitiendo o denegando el paquete. Como les había mencionado en la entrada anterior sobre IPTables, podemos tener una acción por defecto que se aplicara a los paquetes que no coincidan con ninguna regla, por esto agregamos las siguientes reglas al final de las reglas de cada cadena, por ejemplo, al final de las reglas de INPUT, de modo que luego de que el paquete haya sido evaluado por cada y regla y no coincida, se registre este paquete antes de aplicar la regla default. Por ejemplo, supongamos que tenemos definidas varias reglas en nuestro firewall, una permitirá el trafico HTTP/S y POP3 hacia Internet desde la LAN hacia Internet, luego de estas agregaremos la siguientes reglas para logear todo lo que no se corresponda a lo que hemos definido:

-A FORWARD -p tcp -s LAN -d 0/0 --dport 80 -j ACCEPT
-A FORWARD -p tcp -s LAN -d 0/0 --dport 443 -j ACCEPT
-A FORWARD -p tcp -s LAN -d 0/0 --dport 110 -j ACCEPT
-A FORWARD -j LOG --log-level 7 --log-prefix IPTABLES-FORWARD-DROP:
-A FORWARD -j DROP

Como ven, tenemos aquí las reglas de ejemplo definidas que permiten ciertos paquetes, luego en la cuarta linea indicamos que todo lo que haya llegado a este punto sea logeado y le agregemos el prefijo "IPTABLES-FORWARD-DROP:", así reconoceremos los paquetes con este prefijo y sabremos que fueron descartados en la cadena FORWARD. Esto mismo lo podemos aplicar tambien en INPUT, OUTPUT o cualquier otra que hayamos definido. En el caso de que utilicemos las primeras reglas que registran todo el trafico entrante y saliente, es buena idea también utilizar estas ultimas, así podemos diferenciar cuales eventos corresponden a paquetes bloqueados.

Hasta ahora ya tenemos a IPTables generando logs, pero los estará creando posiblemente en el archivo "kern.log", donde se encontraran también otros tipos de eventos. Ahora veremos como separa los logs de IPTables y almacenarlos en un archivo individual con Syslog-NG.

  • Configuración Syslog-NG

El archivo que crearemos para almacenar el log de IPTables lo llamaremos iptables.log y lo crearemos en /var/log. Con esta informacion, vamos al archivo "/etc/syslog-ng/syslog-ng.conf" y en la sección "#destinations" agregamos la siguiente linea:

destination d_iptables { file("/var/log/iptables.log"); };

Aquí creamos un "destino" que llame "d_iptables" y le indicamos hacia adonde apuntara, que en este caso se nuestro archivo iptables.log (tengan en cuenta que luego del corchete hay un espacio en blanco). Luego nos movemos a la sección "filters" donde crearemos un filtro que nos permitirá separar los eventos de IPTables basándonos en los prefijos que indicamos anteriormente. 

filter f_iptables { match("IPTABLES") ; }'
filter f_not-iptables { not match("IPTABLES") ; };

Aquí agregamos 2 lineas (o filtros), uno que aplicara a los eventos que contengan las palabras IPTABLES (esta palabra la agregamos en cada prefijo) y otro para los eventos que NO contengan estas palabras, el segundo lo utilizamos para evitar que los eventos de IPTables se continúen almacenando en el archivo kern.log. Nos moveremos entonces ya a la sección "log", donde buscaremos el log que define los eventos que se almacenan en el archivo "kern.log" y agregaremos el segundo filtro que creamos, se vera entonces de esta forma:

log {
         source(s_all);
         filter(f_kern);
         filter(f_not_iptables);
         destination(df_kern);
}

Luego agregaremos entonces nuestro nuevo log indicando el destino  filtro que creamos:

log {
         source(s_all);
         filter(f_iptables);
         destination(d_iptables);
}


Al agregar esto salvamos el archivo y reiniciamos el servicio (/etc/init.d/syslog-ng restart). Con esto estaremos recibiendo los eventos de IPTables en el archivo definido. Si queremos ver lo que esta pasando entonces por nuestra red (en caso de que hayan configurado la primera opción de logs) o como va creciendo el archivo de log, podemos ejecutar:

# tail -f /var/log/iptables.log

Para ver solo los que estén siendo descartados por IPTables podemos agregar :

# tail -f /var/log/iptables.log | grep DROP


Bien, hasta aquí mi pequeño tip de IPTables, como siempre, espero que esto les sea de utilidad.