Algunos comandos de nmap

Lejos de ser una entrada dedicada al intenso estudio sobre esta herramienta de escaneo de puertos, simplemente queria poner algunas opciones que me son útiles y que alguna vez se me olvidan, y como a mi, seguro que a muchos otros igual, por lo que simplemente quería apuntarlas en un post.

Quien quiera una documentación completa, muy buena por cierto, que vaya a la página oficial en donde incluso se encuentra en español una guia bastante interesante: Guía de referencia de Nmap.

-Escaneando todas las direcciones de red (desde 192.168.1.0 hasta 192.168.1.255)
-Escaneando puertos (3 formas distintas)
-Adivinar el sistema operativo de un dispositivo

Escaneando todas las direcciones de la red (desde 192.168.1.0 hasta 192.168.1.255)

nmap -sP 192.168.1.0/24
Resultado:

Starting Nmap 5.21 ( http://nmap.org ) at 2011-06-11 22:17 CEST
Nmap scan report for www.brntech.com.tw (192.168.1.1)
Host is up (0.0032s latency).
MAC Address: xX:XX:XX:XX:XX:XX (Unknown)
Nmap scan report for 192.168.1.100
Host is up (0.012s latency).
MAC Address: 00:XX:XX:XX:XX:XX (Intel Corporate)
Nmap scan report for 192.168.1.102
Host is up.
Nmap done: 256 IP addresses (3 hosts up) scanned in 4.50 seconds

Como podemos ver, nos devuelve la dirección del router, de otro dispositivo conectado a la red, y por último, el nuestro.

Escaneando puertos

Podemos escanear uno o varios puertos (separados por comas) de una dirección específica:
nmap -p 135,155 192.168.1.100

Starting Nmap 5.21 ( http://nmap.org ) at 2011-06-11 22:28 CEST
Nmap scan report for 192.168.1.100
Host is up (0.0063s latency).
PORT STATE SERVICE
135/tcp open msrpc
155/tcp filtered unknown
MAC Address: 00:XX:XX:XX:XX:XX (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 1.37 seconds

O incluso buscar si está abierto un puerto específico (o los que sean) en cualquier dispositivo de toda la red:
nmap -p 135,155 192.168.1.1/24

Starting Nmap 5.21 ( http://nmap.org ) at 2011-06-11 22:29 CEST
Nmap scan report for www.brntech.com.tw (192.168.1.1)
Host is up (0.0089s latency).
PORT STATE SERVICE
135/tcp open msrpc
155/tcp closed unknown
MAC Address: 00:XX:XX:XX:XX:XX (Unknown)

Nmap scan report for 192.168.2.100
Host is up (0.017s latency).
PORT STATE SERVICE
135/tcp open msrpc
155/tcp filtered unknown
MAC Address: 00:XX:XX:XX:XX:XX (Intel Corporate)

Nmap scan report for 192.168.2.102
Host is up (0.000076s latency).
PORT STATE SERVICE
135/tcp closed msrpc
155/tcp closed unknown

Nmap done: 256 IP addresses (3 hosts up) scanned in 5.66 seconds

O si no, directamente buscar todos los puertos que tenga abierto una dirección:
nmap 192.168.2.100

Starting Nmap 5.21 ( http://nmap.org ) at 2011-06-11 22:50 CEST
Nmap scan report for 192.168.2.100
Host is up (0.040s latency).
Not shown: 993 filtered ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
554/tcp open rtsp
2869/tcp open unknown
5357/tcp open unknown
10243/tcp open unknown
MAC Address: 00:XX:XX:XX:XX:XX (Intel Corporate)

Nmap done: 1 IP address (1 host up) scanned in 19.53 seconds

Adivinar el sistema operativo de un dispositivo

El funcionamiento de esto se basa en que, nmpa envía a la máquina objetivo una serie de paquetes. Posteriormente analiza los bits de las respuestas recibidas y este resultado lo compara con una base de datos.

nmap -O 192.168.1.100

Starting Nmap 5.21 ( http://nmap.org ) at 2011-06-11 22:32 CEST
Nmap scan report for 192.168.1.100
Host is up (0.031s latency).
Not shown: 993 filtered ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
554/tcp open rtsp
2869/tcp open unknown
5357/tcp open unknown
10243/tcp open unknown
MAC Address: 00:XX:XX:XX:XX:XX (Intel Corporate)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING) : Microsoft Windows Vista|2008|7 (93%)
Aggressive OS guesses: Microsoft Windows Vista Home Premium SP1 (93%), Microsoft Windows Vista SP0 or SP1, Server 2008 SP1, or Windows 7 (93%), Microsoft Windows Server 2008 Beta 3 (88%), Microsoft Windows Vista Business SP1 (88%), Microsoft Windows Vista Home Premium SP1 or Windows 7 (87%), Microsoft Windows 7 (85%), Microsoft Windows Vista SP1 (85%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop

OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.98 seconds

Saludos, lipman

[Script] Tratar cookies esnifadas con Wireshark en PHP

Un sitio web puede tener más de una cookie en el ordenador del usuario que navega, pero las cookies críticas son las que nos permiten la identificación del usuario en la página web. De esta manera, mediante técnicas como los conocidos XSS o los MITM seriamos capaces de obtener cookies críticas que nos permitan falsificar y hacer creer al sistema que nosotros somos el usuario objetivo.

El problema viene cuando el objetivo de un esnifado de red es únicamente saber las cookies críticas del que navega. Con todos los paquetes de datos que recibimos, incluso filtrándolos por HTTP en Wireshark, tendriamos mucho trabajo por delante.

De este problema me surgió la necesidad de crear un script en PHP, el cual quiero compartir en el blog, que nos permite, no solo ordenar y obtener las cookies de manera agradable para la vista, sino que, incluyo una función en la que a partir de un array cuyo índice sea el domino y el valor sea el nombre de la cookie crítica de ese sitio, nos lo colorea de rojo, permitiéndonos así localizarlas más fácilmente. De la misma manera, nos quita las cookies de los hosts repetidos.

El código está completamente comentado y dividio en dos funciones que nos hacen el entendimiento más fácil. El archivo que tenemos que pasarle al script, ha de ser el fichero pcap guardado del wireshark una vez esté filtrado usando el siguiente filtro:
http contains "Cookie: "
Esto nos permite obtener los paquetes que contenga “Cookie:” que son los que nos interesan.

Este es un ejemplo del resultado. Sabemos que la cookie crítica de twitter es auth_token:

Script:





Documento sin título





0)
    $final[] = $valor;
}

//La matriz "final" contiene por cada valor, un paquete con host y cookie
//"resultado" es una matriz vacia en la que se almacenará el resultado devuelto
parsear_matriz($final,$resultado);


//Printeamos el resultado
foreach($resultado as $clave => $valor){

  echo $clave;
  unset($final);
		$nuevo = explode(";",$valor);
		foreach($nuevo as $valor2)
			$final .= "" . $valor2 . "
"; echo $final . "
"; } //FUNCIONES function parsear_matriz($matriz,&$resultado) { foreach($matriz as $valor) { $host = explode("Host: ",$valor); $host = explode("\r\nUser",$host[1]); //Host[0] tiene cada host $cookie = explode("Cookie: ",$valor); //Cookie[1] tiene el valor de la cookie en cada host detectar_cookies_criticas($host[0],$cookie[1]); $host[0] = "" . $host[0] . ":
"; $resultado[$host[0]] = $cookie[1]; //Devolvemos el resultado } } function detectar_cookies_criticas($host,&$cookie){ $buscar = array("twitter.com" => "auth_token"); //Esta matriz contiene el host y la cookie crítica que destacará en el caso de que la encuentre if(array_key_exists($host,$buscar)){ $nuevo = explode($buscar[$host],$cookie); $cookie = $nuevo[0] . "" . $buscar[$host]; $nuevo = explode(";",$nuevo[1]); $cookie .= $nuevo[0] . ";" . $nuevo[1]; } } ?>

Configurando Windows Live Protección Infantil

Índice
1.-Introducción y pequeño comentario.
2.-Instalando y viendo un poco por encima WLPI

Antes de empezar un pequeño comentario y es que hasta finales de junio voy a tener dificultades para escribir en el blog por temas de exámenes

1.-Introducción y pequeño comentario

La verdad que no he visto en demasiados sitios algo en profundidad acerca de Windows Live Protección Infantil. ¿Por qué será? ¿Tal vez por lo de “Infantil”?

Es sabido que el sistema de usuarios de Unix es mucho más poderoso que el de Windows, y lejos de intentar convencer de lo contrario, me gustaria comentar simplemente que Windows Live Protección Infantil (WLPI a partir de ahora) nos ayuda a controlar a los usuarios del sistema, pero no nos dejemos engañar por la palabra “Infantil” que compone el nombre, puesto que no es para nada un juego de niños.

Repito que WLPI no tiene que ver internamente con los usuarios del sistema, pero nos ayuda a controlarlos, poner límites y demás, lo cual me parece interesante, de ahí la razón de este post.

2.-Instalando y viendo un poco por encima WLPI

Una de las ventajas de WLPI es que, a diferencia de lo que un software de control corriente pueda hacer (encima gratuito), es gestionar todo el control sobre una cuenta de usuario desde cualquier sitio. ¿Cómo es posible? Todo se hace a través de una cuenta de usuario de Windows Live (la de hotmail de toda la vida vamos). Después de instalar el software e iniciar sesión desde la cuenta que queramos administrar la cuenta, tendremos nuestro panel de control en la cuenta de hotmail:

3.-Filtrado Web

Una de las características más útiles de WLPI es el filtrado web. De por si, como podemos ver en la imagen anterior, tiene por defecto una configuración predeterminada de la que podemos elegir, o directamente tener una lista de URL’s permitidas y/o bloqueadas como podemos ver a continuación:

En el caso de que el usuario trate de acceder a una web en la que no tiene acceso, le aparecerá la siguiente con dos opciones: enviar solicitud y pedir en persona.
La primera de las opciones envia al administrador una solicitud que desde el panel de control online, podrá ver todas las que le llegan, pudiendo elegir la opción que considere adecuada.


Por último y para finalizar este apartado, vamos a ver el informe de actividades que se genera cuando navegamos por internet, casi como si tuvieramos un keylogger instalado:

Podemos ver cada página visitada, el número de veces, la hora, el dia, e incluso dispone de un buscador en el que podemos meter un rango de horas para una visualización más avanzada del historial. También podemos seleccionar el equipo y la cuenta de usuario que queremos supervisar.

Saludos, lipman

Usando la Geolocalización MAC en nuestro favor. Parte II

Anteriores entradas relacionadas:
[Análisis] Prey, software antirrobo de Código Abierto
Usando la Geolocalización MAC en nuestro favor. Parte I

Actualmente no funciona, debido a que al parecer, Google tiene deshabilitada la respuesta JSON de cuando enviamos una petición para geolocalizar

Índice:
1.-Geolocalización con un script en PHP mediante file_get_contents
2.-Geolocalización con un script en PHP mediante cURL
3.-Geolocalización a través de la shell (también usando cURL)
4.-Geolocation API Specification (W3C)

Siguiendo el hilo argumentativo del análisis que hice a Prey, hice una primera parte que quedó un poco escueta, sobre la que hablé de Geolocalización MAC. Pudimos usar un software para tratar de geolocalizar MACs, e incluso desde la página del MapXSS de Samy. Pero nos quedó pendiente una cosa: geolocalizar MACs por nuestros medios.

En esta entrada voy a tratar 4 formas distintas de geolocalizar una MAC, tres de ellas (las primeras) usando la API de Google. Dos de estas formas serán a través de scripts en PHP: uno de ellos usando cURL, y otro mediante file_get_contains. La otra forma, un tanto curiosa, será a través de la shell (en la que también necesitaremos tener cURL instalado). Con respecto a la forma que no usa la API de Google, usaremos la especificación de la W3C para geolocalizar, que está disponible en algunos navegadores.

1.-Geolocalización con un script en PHP mediante file_get_contents

Los dos primeros métodos funcionan internamente igual: hacemos una enviamos una petición JSON mediante POST, esperando recibir una respuesta que deberiamos de recibir, y posteriormente cuando la tengamos, la decodificamos y obtenemos un array con todos los valores y datos que deseamos, nuestra preciada dirección.

Antes de poner el código, una pequeña aclaración: si probamos este código en un servidor web remoto de algún hosting, es muy probable (casi 100%) de que no funcione. Esto tendriamos que probarlo en nuestro propio servidor PHP. Esto es debido a que los hostings deshabilitan (o deberian) la función file_get_contents por una vulnerabilidad que se encontró en la misma.

Aquí dejo el código explicado:

array(
    'method' => "POST",
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => $datos
  )
);

//Utilizamos file_get_contents para hacer la petición a la API de Google
$respuesta = file_get_contents(
    'http://www.google.com/loc/json',
    false,
    stream_context_create($datos_completos)
);

//Decodificamos lo que nos devuelve
$respuesta = json_decode($respuesta, true);

//Obtenemos los resultados
echo "Direccion Geografica aproximada:
"; foreach($respuesta['location']['address'] as $clave => $valor) echo $clave . ": " . $valor . "
"; echo "Coordenadas aproximadas:
"; echo "Latitud: " . $respuesta['location']['latitude'] . "
Longitud: " . $respuesta['location']['longitude']; ?>

A continuación escribiré una estructura de tipo árbol de los datos que nos devuelve Google tras este envio, ya que nos devuelve una matriz multidimensional, y viene bien saber el contenido de esta:


$respuesta (Array)

>access_token
>location: Array
|-->latitude
|-->longitude
|-->accuracy
|-->address: Array
|---|-->country
|---|-->country_code
|---|-->region
|---|-->country
|---|-->city
|---|-->street
|---|-->postal_code

2.-Geolocalización con un script en PHP mediante cURL

Aquí si ponemos el mismo código que enviamos en el script anterior, no nos funciona, así que tendremos que modificar la petición como veremos a continuación de una manera todavía más sencilla. Además de eso, tendriamos que cambiar la parte de file_get_contents por el cURL. Este código si que deberia de funcionarnos en un servidor remoto, y digo deberia porque yo no lo he conseguido, solo he conseguido que me aparezca el robot de Google tan mono advirtiéndome de un error “temporal” que no tengo ni idea de porqué puede ser… Pero vamos, que en nuestro servidor casero si que funciona.

Aquí el código:


//Datos que enviaremos
$datos_completos = '{version:"1.1.0",request_address:true,wifi_towers:[{mac_address:"xx-xx-xx-xx-xx-xx"}]}';

//Iniciamos cURL
$ch = curl_init();
//Configuramos cURL
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $datos_completos);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_URL,'www.google.com/loc/json'); 

$respuesta = curl_exec($ch);
curl_close($ch);

//Obtenemos la respuesta y posteriormente la decodificamos
$respuesta = json_decode($respuesta, true);

//Para terminar, printeamos los resultados
echo "Direccion Geografica aproximada:
"; foreach($respuesta['location']['address'] as $clave => $valor) echo $clave . ": " . $valor . "
"; echo "Coordenadas aproximadas:
"; echo "Latitud: " . $respuesta['location']['latitude'] . "
Longitud: " . $respuesta['location']['longitude'];

Esto nos devolverá exáctamente el mismo resultado que el anterior script.

3.-Geolocalización a través de la shell (también usando cURL)

Ya por último, acabaremos esta entrada geolocalizando de la forma más sencilla, a través de la shell, en la que solo tenemos que escribirlo y lo recibimos inmediatamente, como veremos en la siguiente imagen.

Usaremos el comando de cURL, por lo que propiamente es hacer lo mismo que en el segundo apartado, pero con la shell:


curl -d '{version:1.1.0,request_address:true,wifi_towers:[{mac_address:xx-xx-xx-xx-xx-xx}]}' www.google.com/loc/json

4.-Geolocation API Specification (W3C)

Para los que usamos twitter, esta especificación no nos deberia de parecer nueva, ya que desde hace tiempo tenemos la opción de añadir desde donde twitteamos usando este método.

A continuación, el código que nos permite esto:











Tras ejecutarlo en Firefox por ejemplo, nos saldrá un aviso de si queremos compartir nuestra localización, que igual a alguno le suena haber visto anteriormente:

Y nos saldrá esto:

A veces no me funciona, igual es que tiene algún límite de peticiones por tiempo (como algunas APIs). Lo curioso (y bueno) del asunto, es que si analizamos con Wireshark los datos, podemos ver que pasan por SSL.

Para terminar con este apartado, decir que en el siguiente enlace disponemos más detalladamente datos relativos al uso de esta Geolocation API.

Saludos, lipman

Usando Google Maps API versión 3

Índice:
1.-Breve Introducción
2.-Inicializando un mapa
3.-Estableciendo puntos
4.-Eventos
5.-Eventos (pasando valores)
6.-Polígonos
7.-Líneas

1.-Breve Introducción

Mucha de la documentación que se encuentra en Internet con respecto a la API de Google Maps es sobre las versiones viejas, por lo que he decidido intentar hacer un conjunto de posts exclusivamente para la última versión.

Para empezar, oficialmente las versiones 1 y 2 se consideran obsoletas, por lo que viene bien aprender un poco acerca de la última versión. Por otro lado, una de las implementaciones nuevas de esta versión, es la adición de Google Street View.

Con las versiones viejas, primero de todo habia que obtener la clave API dependiendo del sitio web en donde quisieramos usar el código. Pero con esta nueva versión no es necesario, es todo mucho más sencillo.

2.-Inicializando un mapa

Lo primero de todo vamos a tratar de entender cómo funciona el “hola mundo de la api de GMaps”:





(1): Como podemos ver, la URL que cargamos es la siguiente: http://maps.google.com/maps/api/js?sensor=false. Aquí simplemente quería explicar qué significa el parámetro sensor, que puede tomar valores de true y false. Este sensor se pone en true cuando el dispositivo sobre el cual se espera que se cargue esta página dispone de un localizador (como un GPS) encargado de determinar la localización del usuario. Como estamos haciendo pruebas sobre un ordenador (que no dispone de GPS) lo tengo puesto en false.

(2): Aquí simplemente decir que creamos una variable llamada coordenadas en la que establecemos el punto céntrico en donde queremos que se centre nuestro mapa. Para obtener las coordenadas, simplemente nos movemos con el Google Maps a un punto, y le damos al botón de enlazar para obtener las coordenadas en los parámetros que se pasan en la URL, como en la siguiente imagen.

(3): Este valor es la cantidad de zoom que queremos aplicar a nuestro mapa. Normalmente va desde el valor 0 al 19. Este valor depende de la zona y del tipo de mapa empleado.

(4): Establecemos el centro, que es la variable coordenadas anteriormente definida.

(5): Aquí elegimos el tipo de mapa que queremos usar:

  • ROADMAP: mapa callejero con el nombre de las calles y demás.
  • SATELLITE: mapa satélite con ningún nombre puesto.
  • HYBRID: mapa híbrido, satélite con los nombres
  • TERRAIN: mapa físico con algunos nombres

(6): Creamos el mapa. Nos tenemos que dar cuenta de que usamos el identificador mapa para luego posteriormente usarlo.

Ahora nos vamos con la parte HTML del asunto:


  

Como podemos ver, creamos un div con el identificador anteriormente usado, y establecemos mediante CSS que ocupe toda la pantalla del navegador.

Ahora, juntamos todo el código fuente, y nos deberia quedar algo así:









  

3.-Estableciendo puntos

En este apartado aprenderemos como establecer puntos dentro de lo que es el mapa. Para este ejemplo, seguiremos usando el código anterior, por lo que, el siguiente código irá a continuación del código Javascript anterior (dentro de la función de iniciar)

  var coordenadas = new google.maps.LatLng(37.680000,-1.669407);
  //Establecemos las coordenadas del punto
  var marker = new google.maps.Marker({ //opciones
      position: coordenadas,
      //Decimos que la posición es la de la variable 'coordenadas'
      map: map,
      //Nombre del mapa
      title:"Hola Mundo!"
      //Titulo (visible cuando colocamos el ratón sobre el punto)
  });

¿Sencillo verdad? Y el resultado es el siguiente:

4.-Eventos

Los eventos son acciones que se toman tras la realización de otra. Con el siguiente ejemplo lo veremos muy claro. Trataremos dos eventos: el cambio de zoom, y el “click” en una marca.

var map;
function iniciar() {
  var coordenadas= new google.maps.LatLng(-25.363882,131.044922);
  var myOptions = {
    zoom: 4,
    center: coordenadas,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  map = new google.maps.Map(document.getElementById("mapa"), myOptions);
  //Hasta aquí es igual que antes

  google.maps.event.addListener(map, 'zoom_changed', function() {
    setTimeout(moveToDarwin, 3000);
  });
  //(1) Primer evento
  
  var marker = new google.maps.Marker({
      position: myLatlng, 
      map: map,
      title:"Hello World!"
  }); //Esto ya lo vimos antes, creamos una marca o punto
  
  google.maps.event.addListener(marker, 'click', function() {
    map.setZoom(8);
  });
  //(2) Segundo evento
  
}
  
function moveToDarwin() {
  var darwin = new google.maps.LatLng(-12.461334, 130.841904);
  map.setCenter(darwin);
}
//Función que se encarga de centrar el mapa en esas coordenadas

Antes de entrar en cada evento particular, podemos destacar las características comunes. Un evento tiene 3 parámetros: el primero hace referencia al objeto que estamos tratando (un mapa o una marca en estos ejemplos). El segundo hace referencia al nombre interno del evento que tiene que ocurrir (que cambie el zoom o que se clickee). El último parámetro simplemente es el accionamiento de una función.

(1): El primer evento se acciona cuando cambiamos el zoom (ya sea para acercar o disminuir), y cuando esto ocurre, al cabo de 3000 ms se acciona la función moveToDarwin que establece el centro en otro sitio.

(2): Este evento se acciona cuando se clickea en la marca, y una vez esto, se establece que el zoom deba de ser 8.

5.-Eventos (pasando valores)

A veces, a la hora de esperar a que se realice un evento, este evento realizado puede transmitir información que nos sea útil. En los ejemplos anteriores no nos valia de nada transmitir información. En uno de los eventos anteriores, simplemente al hacer click en un sitio, estableciamos de zoom 8, y en el otro, simplemente nos moviamos a unas coordenadas predeterminadas.

En el siguiente ejemplo vamos a hacer que cada vez que pinchemos en el mapa, establezcamos una marca. Para esto, a la hora de pinchar, tenemos que transmitir la información de cuando pinchamos (las coordenadas) a la función que se encargará de crear esa marca.


(1): Como podemos ver aquí, transmitimos las coordenadas. event.latLng hace referencia a las coordenadas que queremos transmitir y que posteriormente usaremos para crear la marca.

6.-Polígonos

Simplemente pondré un script de cómo se hacen polígonos. Es realmente fácil y muy intuitivo. El siguiente polígono da como resultado la traza del triángulo de las bermudas:


 
 

7.-Líneas

Funcionan casi igual que los polígonos.. solo que tienen algunas opciones distintas y el nombre de la función (como es obvio..) también cambia. Código de ejemplo:

function initialize() {
  var myLatLng = new google.maps.LatLng(0, -180);
  var myOptions = {
    zoom: 3,
    center: myLatLng,
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };

  var map = new google.maps.Map(document.getElementById("map_canvas"),
      myOptions);
  var flightPlanCoordinates = [
    new google.maps.LatLng(37.772323, -122.214897),
    new google.maps.LatLng(21.291982, -157.821856),
    new google.maps.LatLng(-18.142599, 178.431),
    new google.maps.LatLng(-27.46758, 153.027892)
  ];
  var flightPath = new google.maps.Polyline({
    path: flightPlanCoordinates,
    strokeColor: "#FF0000",
    strokeOpacity: 1.0,
    strokeWeight: 2
  });

  flightPath.setMap(map);
}

Para la gente que se quiera adentrar y profundizar en este mundillo, teneis una referencia justo aquí de los métodos, valores que devuelven, tipos y propiedades, publicado por Google. Viene una cantidad ingente de información de la cual es imposible resumir, pero al venir en completo castellano, será fácil encontrar cosas que queramos adaptar a nuestro uso por parte de la API de Google Maps.

Saludos, lipman

Qubes OS: El sistema operativo que apunta a la seguridad del usuario

Desde hace tiempo quería dedicar una entrada a esta distribución tan especial de Linux, cuyo objetivo principal es la seguridad. Mencionaré lo básico para su entendimiento de forma breve, y posteriormente (cuando acabe ya los exámenes) intentaré hacer un review instalándomelo en un laptop.

1.-Introducción

Qubes OS, fue presentado hace unos meses, cuyo video se encuentra en youtube (http://www.youtube.com/watch?v=0pPf1F1RGF8). Es un sistema operativo basado en Linux, cuyo objetivo apunta a ser el mejor en lo que a seguridad se refiere. Se basa en el aislamiento. Esto quiere decir que usa diferentes máquinas virtuales, en las que producen distintos procesos, de tal forma que, si un atacante vulnera una fallo de seguridad, por ejemplo, en un navegador, al estar situado en una máquina virtual aislada, no compromete al resto del sistema.

Esta distribución, protege de manera diferente cada máquina virtual, dependiendo de la importancia de cada una, ya que no requeriremos la misma seguridad en un navegador que estamos leyendo la Wikipedia, que uno en el que estemos consultando nuestro banco o comprando.

2.-Arquitectura

Qubes OS está diseñado para que, a pesar de usar diferentes máquinas virtuales, aproveche los recursos de forma eficiente. Este sistema divide las máquinas virtuales en dos grandes grupos. Por un lado, las AppVMs son las que se refieren a aplicaciones del usuario, como navegadores o clientes de correo. Por otro, se encuentran las SystemVMs, que son las que proveen al sistema de servicios, tales como la conexión a Internet o el almacenamiento.

2.1-Las AppVMs

Como dijimos anteriormente, son máquinas virtuales independientes que están basadas en Linux que alojan las aplicaciones del usuario.

2.2-El dominio de Red

Al igual que en otros sistemas típicos, como Windows o Linux, el núcleo del código de red se encuentra en el Kernel del sistema. Si se encontrase un bug en esta zona, en un sistema tradicional significaría el comprometimiento entero del sistema, sin embargo, la arquitectura de Qubes limita ese ataque, quedando comprometida solo la máquina virtual en la que se encuentra, que no tendrá demasiados privilegios.

2.3-El sistema de almacenamiento

Al igual que con el dominio de red, el sistema de almacenamiento (que incluye tanto unidades internas como el disco duro, y externas, como pendrives o CDs/DVDs) se encuentra en una máquina virtual poco privilegiada, de tal manera que estariamos a salvo de potenciales virus alojados ahí.Además, Qubes incluye una protección encriptográfica que proteje los archivos del sistema, por lo que en el peor de los casos, un atacante podría hacer el sistema inarrancable, pero no podría acceder ni instalar un virus en el sistema para robar información.

[NetworkMiner] Una alternativa bonita para visualizar paquetes de red

De todos es bien conocido Wireshark, un analizador de paquetes de red multiplataforma cuya característica más destacabla, al menos para mi, es la gran flexibilidad que tiene a la hora de filtrar y analizar todo de una forma bastante gustosa.

Sin embargo… a la hora de comodidad para llevar a cabo algunas tareas como puede ser la visualización de todas las imágenes capturadas, de las cookies obtenidas, de los hosts, etc.. puede resultarnos un poco incómodo. Por ello, recomiendo a todo el uso de NetworkMiner, otro analizador de paquetes que, aunque tristemente solo esté disponible para Windows, es portable, lo cual es atractivo.

Como podemos ver en la imagen superior, una de las cosas más interesantes que trae, es la funcionalidad que nos permite ver los Hosts de manera tan clara y los DNS en la ventana correspondiente.

Otra de las grandes funcionalidades que tiene NetworkMiner es la de poder visualizar y abrir todos los archivos que al capturar paquetes son descargados, archivos del tipo json (peticiones de los servidores), archivos html, y básicamente, cualquier archivo con los que linda nuestro navegador.

La finalidad, al menos para mi, más interesante y cómoda que tiene, es la posibilidad de visualizar todas las imagenes capturadas correctamente. A diferencia de Wireshark, en donde para poder ver una imagen completa teniamos que, primero localizar el archivo de imagen, luego seleccionar la parte que queremos exportar y finalmente, darle a Export Selected Packet Bytes, aquí simplemente las visualizamos en miniaturas, y la que queremos abrir, simplemente seleccionamos y pinchamos con el botón derecho, y le damos a abrir imagen.

Por otra parte, otro de sus atractivos es la facilidad de ver las cookies recogidas respecto al host que pertenecen, junto con datos como su caducidad y la IP del cliente al que hace referencia.

Por último, mencionar que NetworkMiner no solo sirve para visualizar paquetes, sino que tambien nos permite capturarlos como podemos ver a continuación:

Como conclusión diré que para los que quieran visualizar rasgos como imágenes, cookies y hosts capturados de forma fácil y sin profundizar demasiado, esta herramienta es imprescindible (ya que además es portable). Si queremos ojear paquetes con profundidad, siempre recomendaría usar Wireshark.

Un saludo, lipman

Analizando y editando el Exif de las fotos con Opanda PowerExif y Exif Reader

Indice
1.-Introducción
2.-Exif Reader
3.-Opanda PowerExif Professional
4.-Suplantando el Exif de una imagen

1.-Introducción

El Exif (Exchangeable image file format) de las imágenes son unos metadatos asociados a unas etiquetas específicas, tales como Marca, Modelo, Tiempo de exposición, Apertura, ISO, y múltiples características relacionadas con la toma de la fotografía.

Esto mayormente se guarda en fotografías en formato JPG y como metadatos que son, se pueden acceder a ellos y visualizarlos, lo cual nos ayudará a analizar una imagen.

Programas para leer el Exif de las imágenes hay decenas, pero explicaré porqué he escogido este par de aplicaciones: la primera de ellas, Opanda PowerExif, nos permite, además de una visualización muy agradable, editar cualquier tipo de dato que queramos del Exif. Esto es un dato muy importante, porque la mayoria de aplicaciones solamente permiten la lectura del Exif y algunas permiten la modificación o escritura de muy pocas tags, sin embargo, Opanda PowerExif puede editar cualquiera. La segunda aplicación, Exif Reader, me ha llamado la atención simplemente por ser la más completa y portable de todas las que encontré.

2.-Exif Reader

Como anteriormente mencioné, hablo acerca de este programa sobre todo por el hecho de que es portable y no requiere instalación.

Su interfaz gráfica es un tanto brusca, antigua pero simple y efectiva, y una de las cosas que me llamaron la antención fue el hecho de poder comparar el Exif entre varias imágenes a la vez, aunque esto es mejorable, ya que directamente, cuando analizas una foto, se ven paralelamente todas las imagenes de esa carpeta.

No hay mucho más que contar acerca de este programa. Simplemente decir que permite la exportación de los datos para una posible mejor lectura o tratamiento posterior, ya que permite exportar en txt y CSV, incluso tomar una miniatura de la imagen.

3.-Opanda PowerExif Professional

Como podemos ver en la imagen, tiene un interfaz gráfico con un cierto estilo a las aplicaciones para Mac.

A continuación pegaré un collage de las propiedades de las fotografías que nos muestra, todas ellas editables:

Como dije anteriormente, podemos editar cualquiera de las etiquetas del Exif:

Sin embargo, a veces nos interesa directamente eliminar todo el Exif para que no se vea absolutamente nada cuando queramos visualizarlo desde cualquier lector de Exif. Para ello, tenemos el botón de “Remove Exif”.

Otra cosa que podemos hacer con Opanda, es añadir atributos del Exif. Esto quiere decir que en algunas imágenes puede que queramos añadir alguna propiedad, como las del GPS. Pues simplemente le damos a “Add” y nos saldrá la siguiente ventana en donde podremos elegir lo que queremos añadir:

Otro par de características interesantes son las que veremos en detalle posteriormente: Importar y Exportar.

Por último, destacar que desde su instalación, podemos ver el Exif rápidamente de una imagen haciendo click derecho y pulsando sobre ello (o localizarla en un mapa por la información GPS):

4.-Suplantando el Exif de una imagen

Cuando sacamos una foto y la pasamos por herramientas de retoque fotográfico como el Photoshop, en donde la retocamos hasta hartarnos todo lo que se nos ocurra y más, los metadatos de la imagen cambian. Suele desaparecer el Exif y cambiarse por algo que identifica el programa manipulador, como podemos ver:

Así que ahora vamos a valernos de las herramientas de Exportar e Importar. Tenemos diferentes formatos para exportar: exif, xml y txt:

La opción de Importar es mucho más sencilla. Simplemente seleccionamos la imagen de la cual queremos importar sus propiedades y configuramos un poco: elegimos si queremos sobreescribir o no los valores que ya existan, añadir los nuevos, etc…

Sin embargo, recordemos que estamos usando un Trial, así que cuando le demos a guardar, algunas cosas no se guardarán, como nos dice el siguiente recuadro:

Por último ya, me gustaria dedicar esta entrada, ya que es una fecha especial. Por un lado, es la entrada número 100 que se publica, y por otro, hoy 1 de mayo, hacemos un año mi novia y yo, persona que soporta múltiples veces mis paranoias informáticas <3

Cómo generar código CSS online

CSS3 es una tecnología que permite a los diseñadores de sitios web modificar rápidamente varios aspectos del diseño de un sitio, pues se mantienen intactos los archivos fuente HTML y solo se modifica el estilo en un archivo aparte, algo verdaderamente versátil. Al principio había que editar estos archivos manualmente, y como la sintaxis varía con respecto al HTML estándar esta tarea podía llevar mucho tiempo. Los niños de hoy en día lo tienen más fácil porque ahora cuentan con los generadores de CSS.

Hay una gran variedad de herramientas destinadas para este fin: CSS3, Please!CSS 3.0 MakerGrad ColorProCSSorCSS3Menu son algunos ejemplos. CSS3.me es uno de los más completos y sencillos de usar.

Podemos seleccionar efectos, bordes, colores y tamaños para los elementos que queremos mostrar, y ver como se modifica el resultado a medida que los vamos cambiando uno a uno. Una vez que lleguemos al resultado deseado, podrás generar un archivo CSS listo para copiar y usar en nuestro sitio haciendo clic en el gran botón azul que dice «GET THE CODE».

Enlace | CSS3.me
Vía| Visual Beta

[Firefox Forensics] Analizando las huellas de Firefox

La informática forense es la segunda rama de la informática que más me gusta, después de la seguridad, y se nota que poco a poco empieza a haber más en internet acerca de ella (sobre todo, más documentos en español).

Esta entrada la quiero dedicar exclusivamente a un programa llamado Firefox 3 Extractor, que nos permite, a partir de los datos que se guardan del navegador, obtener de forma ordenada esos datos.

El programa (Descarga) consta de dos ficheros: el ejecutable y una libreria para que funcione. Ambos ficheros se han de copiar en la carpeta donde tenemos los datos que extraerá, que en Windows 7 y Vista suele ser:

C:\Users\[ususario]\AppData\Roaming\Mozilla\Firefox\Porfiles\[perfil]

Nada más iniciarlo nos pide unos cuantos datos de configuración rápida:
-Formato de la hora (Inglés o Americano)
-Offset UTC en minutos (para los tiempos): España por ejemplo tiene UTC+1 (+2 en verano), así que pondriamos 180.
-Referencia del Caso
-Nombre del Caso
-Investigador

Tras esta miniconfiguración, nos desplega un menú:

Recalcaría las opciones que me parecen más útiles, como puede ser la B y la D.
La A es igual que la B, salvo que en la opción B nos decodifica las fechas y tiempo, por lo que puede ser más cómodo. Sin embargo, de elegir la A, las fechas y tiempos nos aparecerán codificados en una cadena de 16 dígitos que luego podemos decodificar usando la opción E.

Por otra parte, la opción C y D hacen lo mismo, pero en lugar de exportarlo en formato CSV (que es muy cómodo si después pensamos tratarlo de alguna manera) la opción D lo exporta en formato HTML, legible para cualquier navegador y fácilmente entendible y visible.

Analizando las cookies exportadas
cookies.sqlite moz_cookies
El formato que tiene el fichero generado para ver las cookies ordenadas (en CSV, opción B) tiene la siguiente estructura:
ID, nombre, valor, host, ruta, expiración, ultimo acceso, si es segura, si es HttpOnly (estos dos ultimos valores son indicados mediante 0 o 1).

Este fichero nos puede ser muy útil si buscamos una cookie crítica, es decir, la que usa una página para autenticarnos, como puede ser auth_token en el caso de twitter. Simplemente usariamos Ctrl+B y buscariamos “auth_token”, y nos aparecería. Si tuvieramos que hacer este proceso para comprobar todas las cookies de los sitios que queremos saber, nos podria dar algo (sobre todo si es un log antiguo), así que lo más cómodo, teniendo un archivo CSV, es usar algún programa que nos haga el archivo CSV más legible, como puede ser Calc (el Excel del OpenOffice).

Ahora, tendremos más legible la zona de hosts, que es la que nos interesa.

Analizando los sitios
places.sqlite moz_bookmarks
En este CSV que contiene información acerca de los marcadores (o favoritos), son interesantes los campos de: Id, tipo, padre, posición, titulo, fecha de creación, última modificación.
El tipo será 1, 2 o 3, dependiendo de si es un enlace, una carpeta, o una barra respectivamente.
En el contenido de “padre” pondrá la ID a la que pertenece el enlace. Por ejemplo, si tenemos una carpeta de ID 3, y dentro tenemos un enlace, en este nos aparecerá que tiene como padre el 3.
La posición es el lugar en el que se encuentra respecto a los demás enlaces dentro de su carpeta.
Los tres siguientes campos, su propio nombre lo indica. Destacar que no aparece el enlace (que pena).

places.sqlite moz_places
Aquí realmente no me funcionan bien todos los campos (sobre todo los últimos, aunque igual es porque no tengo que se grabe nada salvo las cookies).
Los campos que destacaria aquí son los de URL, y Título, ya que a partir del título de la web (que anteriormente incluso teniamos en los marcadores) tenemos la URL.