Azure Notebooks para Red Teams – Automatizar Búsquedas en Shodan

Cuando estamos en una fase de footprinting y reconocimiento tenemos que utilizar todas las fuentes de información que tengamos a nuestra disponibilidad. Una de estas fuentes y que nos puede aportar cantidades ingentes de información es el buscador Shodan: 

https://www.shodan.io/

Shodan escanea constantemente Internet, de una forma similar a como lo hace Google, pero lo que busca son dispositivos conectados, puertos abiertos e incluso vulnerabilidades en esos dispositivos. Por poner algunos ejemplos, Shodan podría encontrar lo siguiente: 

  • Máquinas Windows con el puerto RDP (3389) abierto. Incluso podría encontrar cuáles de estas máquinas son vulnerable a BlueKeep 
  • SmartTVs 
  • Sistemas de control y de cobro en gasolineras 
  • … 

Además, Shodan incluye muchas opciones de filtrado para buscar por regiones, países, rangos de IPs, organizaciones, … 

La forma más simple de usar Shodan es a través de su interfaz web, pero también nos ofrece una API, lo que nos permite hacer búsquedas desde línea de comandos y automatizar estas búsquedas. Como podemos utilizar librerías de Shodan en Python, es muy sencillo usar estas librerías para lanzar búsquedas desde nuestro Notebook en Azure. 

Para usar la API es necesario registrarse en Shodan. Este registro es gratuito, pero tendrá limitaciones en el número de búsquedas que se pueden hacer, el número de resultados que se pueden exportar, los filtros que se pueden usar en las búsquedas. Para eliminar estos límites, hay varias opciones de suscripción: 

https://developer.shodan.io/billing/signup

Para nuestro ejemplo tendremos suficiente con el registro gratuito. 

Empezamos creando nuestro proyecto en Azure Notebooks y un cuaderno para empezar a escribir código: 

Para poder hacer consultas a Shodan necesitaremos instalar el módulo correspondiente para Python: 

Ya podemos crear un script para hacer las búsquedas. Este script permite hacer cualquier tipo de búsqueda, pero empezaremos con una básica en la que ni siquiera usaremos un filtro: 

Si ponemos la API Key de nuestra cuenta de Shodan, la búsqueda “Windows Server” nos devolverá resultados que se almacenan en “results”. 

Podemos mostrar estos resultados. Teniendo en cuenta que Shodan funciona con un sistema de créditos, si queremos hacer varias pruebas para mostrar los resultados, es mejor hacer este proceso en una celda separada. De esta manera, podemos modificar esta muestra de resultados sin tener que ejecutar otra vez la consulta, lo que podría consumir créditos: 

Vamos a seguir procesando la información y, por ejemplo, podemos guardar en un archivo las direcciones IP que nos ha devuelto la consulta anterior: 

Una tarea que podemos llevar a cabo con estas direcciones IP es utilizar un sistema de geolocalización y después representarlas en un mapa. Para esto vamos a usar el proyecto PyGeoIpMap: 

https://github.com/pieqq/PyGeoIpMap.git

Lo descargamos a nuestro entorno: 

Y como hacemos siempre en nuestros Azure Notebooks, movemos los archivos a la raíz para evitar problemas con los permisos y las rutas relativas: 

Tenemos que instalar los requisitos necesarios para ejecutar pygeoipmap.py: 

Esto puede llevar unos minutos, porque requiere la descarga de la versión 1.2.0 de basemap para la creación de mapas. Este archivo pesa unos 145MB. 

Para la geolocalización de direcciones IP podemos usar varios servicios. En este caso utilizaremos IPstack, que es gratuito. Para utilizarlo necesitaremos registrarnos para obtener una API Key: 

https://ipstack.com/

Teniendo la API Key, ya podemos usar IPStack para procesar las direcciones IP que nos devolvió la consulta a Shodan y que almacenamos en el archivo log.txt: 

Y después de este procesamiento, ya podemos representar las direcciones IP en un mapa: 

En otros posts veremos cómo podemos hacer consultas más elaboradas con Shodan y cómo podemos automatizar otras tareas con los resultados que nos devuelve este buscador.  Como en posts anteriores, los notebooks los podréis descargar desde nuestro repositorio de GitHub.