Obteniendo datos mundiales de Phishing con la API de PhishStats

Carlos Velázquez V
MCD-UNISON
Published in
5 min readSep 14, 2021

Introducción

El Phishing es un tipo de ciberataque que consiste en utilizar páginas web falsas con el fin de engañar al usuario para que proporcione información de usuario como:

  • Información personal.
  • Credenciales de Log-in.
  • Información de tarjetas de crédito.

A pesar de ser uno de los tipos de ciberataque mas antiguos, sigue siendo uno de los más comunes y más costosos, reportándose pérdidas de 54 millones de dólares en el 2020 y no se ve que la incidencia de este ataque vaya a bajar en un futuro.

Es por esto que es importante obtener y analizar datos de Phishing, con el fin de encontrar maneras de poder detectar estos ataques y así evitar robos de información.

Para nuestra suerte, existe PhishStats, una base de datos de Phishing en tiempo real. Esta se encarga de reportar casos de Phishing de todo el mundo. Es actualizada día a día y contiene una gran cantidad de información (más de 3 millones de registros).

Una gran ventaja de la API de PhishStats es que es gratuita y no requiere autenticación. En este artículo veremos cómo obtener datos de su API y guardarlos en un archivo CSV con Python.

Realizando consulta sencilla a la API de PhishStats con Python

Al realizar esta consulta se consigue una respuesta en formato JSON la cual nos da la información de las URL detectadas como Phishing :

Para facilitar su visualización convertiremos el JSON en un DataFrame de Pandas

Como podemos observar, las columnas han sido reducidas ya que obtenemos más de 30 columnas con datos importantes para cada URL registrada. Entre los datos más relevantes que obtenemos están:

  • URL
  • IP
  • Pais, Estado, Ciudad
  • ISP
  • Host
  • Dominio de nivel superior(TLD)
  • Título de la página
  • Fecha en la que fue detectado

La API nos proporciona información muy completa para cada sitio web registrado, con la cual podemos hacer diferentes tipos de análisis, como veremos más adelante.

Realizando consulta con parámetros

Otro aspecto muy importante es que nos permite establecer los parámetros para que la consulta sea más afín a lo que estemos buscando. Por ejemplo, supongamos que estamos buscando solamente datos de Phishing de México, en los parámetros podemos especificar el país de la siguiente manera:

Ahora vemos que en el Dataframe de los resultados obtenidos solamente son páginas de Phishing de México

Establecer los parámetros de consulta resulta de gran utilidad, ya que además de hacer la consulta más específica permite utilizarlos en conjunto con operadores lógicos (and,or) y de comparación (equal, not equal, greater than, less than) lo cual nos permite realizar solicitudes más complejas.

Utilizando operadores lógicos y de comparación en los parámetros

Ahora realizaremos una consulta en la cual pediremos 100 registros de Phishing de Canada y que tenga un PhishScore mayor a 4 (scores de 0–3 son sospechosos de Phishing, de 4–10 ya es catalogado como Phishing, para más información sobre el score ver la página de PhishStats).

Hay una diversa lista de parámetros que podemos establecer para hacer más específica nuestra consulta, entre los que se encuentran:

  • Date: Registros pertenecientes, previos o posteriores a cierta fecha.
  • Size: Número de registros que queremos obtener en la consulta (Default:20, Límite:100).
  • Sort: Ordenar los registros con respecto al valor de una columna.
  • TLD (Top Level Domain): Registros cuyo URL tenga cierto TLD (por ejemplo .com o .net)
  • Título: Registros que tengan cierto título(por ejemplo Google o Facebook.)

Realizando consultas mas complejas

Teniendo en cuenta los diferentes parámetros que podemos establecer, supongamos que queremos obtener 100 registros de Phishing relacionados a Facebook que sean previos al 2021, tengan un PhishScore mayor a 4 y que estén ordenados del registro más reciente al más antiguo. La consulta sería así:

Examinando los títulos de los registros del DataFrame obtenido, podemos notar que son títulos relacionados a páginas de Log in de Facebook, cuyo propósito, como se mencionó previamente, es hacerle creer al usuario que es una página oficial con el fin de robar las credenciales de Log-In.

Titulos obtenidos de los registros de Phishing relacionados a Facebook

Obtener un Dataset de mas de 100 registros de PhishStat

Finalmente, si nosotros quisiéramos obtener un Dataset de tamaño considerable, tenemos que tener en cuenta que PhishStats nos permite un máximo de 100 registros por consulta, esto con el fin de no saturar el servidor.

En estos casos, lo que tenemos que hacer es ir obteniendo los datos de 100 en 100 y al final concatenar todo en un mismo archivo. Para eso, he creado una función que recibe el número de registros que deseamos y nos genera un archivo CSV con los datos más recientes obtenidos.

Por ejemplo, si nosotros quisieramos obtener los 675 registros más recientes de PhishStats sería así:

phishing_data_downloader(675)

Obtendríamos el siguiente output en el cual indica que se generó el archivo CSV con los registros deseados:

Obteniendo datos de PhishStats.info...
Obteniendo página 0 de datos...
Obteniendo página 1 de datos...
Obteniendo página 2 de datos...
Obteniendo página 3 de datos...
Obteniendo página 4 de datos...
Obteniendo página 5 de datos...
Obteniendo última página de datos...
********************
Datos obtenidos con éxito
Nombre del archivo: 2021-09-09-phishstats-675.csv
Fecha y hora de obtención: 2021-09-09 15:40:30.815383
********************

Conclusión y siguientes pasos

El Phising es un grave problema que afecta a miles de personas y empresas diariamente, ocasionando enormes pérdidas económicas. Utilizando la API de PhishStats junto con Python podemos obtener una gran cantidad de datos mundiales de Phishing. Con los datos obtenidos podemos realizar diferentes metodologías de ciencia de datos, tales como:

Referencias y Links de Interés

--

--

Carlos Velázquez V
MCD-UNISON

Químico, Estudiante de la Maestría en Ciencia de Datos.