Construyendo nuestro propio escáner de dispositivos conectados a Internet. Parte 1

Buenas a todos, en el post de hoy me gustaría iniciar una cadena de artículos sobre escaneo de dispositivos conectados a Internet, con la idea de que podáis introduciros en el campo del footprint y el fingerprint de activos (al más puro estilo Shodan) y construiros vuestras propias bases de datos de información.

En Internet existen varias aproximaciones de empresas y particulares que han intentado resolver el complejo problema de obtener un listado lo más actualizado posible, con todos los activos conectados a Internet (webcams, impresoras, ftps, servidores web, scadas, etc. etc.), y uno de ellos, Shodan.io, es el que parece haber logrado los mejores resultados, ya que actualmente es el buscador más utilizado para estas tareas. Por ello, lo primero que haremos hoy será aprender de los mejores, y estudiar que tipo de información obtienen, y cómo podríamos obtenerla nosotros.

Tened en cuenta varias cosas antes de meternos en harina. Hay infinidad de formas de obtener la información que vamos a ver en este post, pero nos interesará la más óptima. ¿Por qué? La respuesta es sencilla, ¿os habéis planteado los millones de IPv4 e IPv6 existentes en Internet y el tiempo que tardaríamos en analizarlas todas? ¿Y que cuando acabásemos, es altamente probable que muchos hosts ya no existan, y habrá que volver a escanear? ¿Sí? ¡Me alegro! Es el primer paso para reconocer que no es una labor trivial, y por ello son pocos los servicios existentes en la actualidad.

Por otro lado, tenemos el gran problema del almacenamiento. ¿Dónde almacenaríamos todos estos TB de información? Es por ello que en esta cadena de posts solo veremos una base, con fines académicos, para que podáis aprender a caminar solos, y escanear una parcelita controlada de Internet, que podáis almacenar de forma sencilla en cualquier disco duro que tengáis por casa.

El primero de los grandes proyectos que os quería presentar, es el de dos buenos amigos, Rafa y Fran, Mr looquer. Un buscador de servicios para IPv6, que a mí personalmente me encanta:




Os dejo su cuenta de Twitter para que podáis seguirlos:


Sin embargo, en esta cadena de posts vamos a dejar IPv6 a un lado, ya que cómo recordaréis los que nos seguís habitualmente, estamos dedicando una cadena exclusiva a IPv6 y a sus ataques. Y por ello, vamos a estudiar otro gran proyecto del que os hemos hablado en infinitas ocasiones, Shodan.io, el cual no hará falta introducir.

Si buscamos en shodan por ejemplo, "webcam", encontramos 3.400 resultados:



Haciendo clic en uno de ellos al azar, veremos numerosos datos de cada uno de los activos escaneados, los cuales procedemos a listar a continuación:

  • Country: el primer dato que nos encontramos es el país dónde se encuentra ubicado el dispositivo. Este es un dato que podremos obtener de forma sencilla consultando en un tercero (existen muchos servicios gratuitos con un API, que dada una IP devuelven el detalle sobre su ubicación). Sin embargo hay que tener en cuenta que cómo realicemos muchos escaneos seguidos, acabaremos baneados. Y a menos que utilicemos proxys que automáticamente vayamos balanceando... puede que no sea una buena aproximación. Otra opción será descargarnos una bbdd de direcciones IP, e irla actualizando cada poco tiempo.Si utilizásemos Python como lenguaje para programar nuestro escáner, Pygeoip podría ser un módulo muy útil para ello: https://pypi.python.org/pypi/pygeoip 


  • Organization e ISP: este dato lo podremos obtener de numerosas maneras, las cuales iremos viendo próximamente.
  • Last Update: última fecha a la que el escáner accedió a la dirección IP. Fácil de obtener desde nuestro código.
  • Hostnames: este dato lo podremos obtener de forma simple con nslookup (https://es.wikipedia.org/wiki/Nslookup), disponible en todos los sistemas operativos. A continuación os comparto el resultado para una IP de Facebook:

  • Ports: los puertos abiertos del host escaneado. Hay infinidad de escáneres que podremos utilizar. Pero ¡ojo!. En algunos países un escaneo de puertos es considerado cómo un ataque, por lo que es recomendable limitar los puertos a escanear, y realizar el proceso de la manera más liviana y menos molesta.
  • Services: la verdadera "chicha" de todo el proyecto, el detalle de los servicios que se encuentran escuchando tras los puertos abiertos, y que prestan servicio a los diferentes usuarios de Internet para los que se han publicado.
Si no tenéis tiempo (o ganas) de programar todo esto, y queréis obtener resultados rápidos, siempre podéis hacer uso directo del API de Shodan, que por 499 $ mensuales nos proporciona acceso total al servicio:





Pero... cómo aquí estamos para aprender :), en los próximos posts comenzaremos a trastear con código para sentar las bases de nuestro futuro escáner.

Saludos!