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 los incidencia de este ataque no va a bajar en un futuro.
Por esto que es importante obtener y analizar datos de Phishing, con el fin de encontrar maneras de poder detectar estos ataques y evitar robos de información.
Para nuestra suerte, existe PhishStats, una base de datos de Phishing en tiempo real. Se encarga de reportar casos de Phishing en todo el mundo. Es actualizada contantemente y contiene una gran cantidad de información (más de 3 millones de registros).
Gran ventaja de la API de PhishStats que es gratuita, 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
#Importando las librerías necesarias import pandas as pd import requests #Realizaremos una solicitud sencilla donde pedimos datos de la API response = requests.get("https://phishstats.info:2096/api/phishing") print(response.json()) |
Al realizar esta consulta se consigue una respuesta en formato JSON la cual nos da la información de las URL detectadas como Phishing :
[{"id": 2, "url": "http://00000-00.000webhostapp.com/", "ip": "2a02: 4780: muerto: 6c62 :: 1", "countrycode": "EE. UU.", "countryname": "Estados Unidos", "código de región":"", "regionname": "", "ciudad":"", ... "page_text": ""}] |
Para facilitar su visualización convertiremos el JSON en un DataFrame de Pandas
response = requests.get("https://phishstats.info:2096/api/phishing") df_response = pd.DataFrame.from_records(response.json()) df_response.head() |
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:
#Estableciendo parametros y realizando consulta query_params = {"_where": "(código de país, eq, MX)"} respuesta = solicitudes.get ("https://phishstats.info:2096/api/phishing?", params = query_params) #Pasando respuesta a DataFrame df_phishing_mx = pd.DataFrame.from_records (respuesta.json ()) df_phishing_mx.head (5) |
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).
#Estableciendo parametros y realizando consulta query_params = {"_where": "(score,gt,4)~and(countrycode,eq,CA)", "_size": 100} response = requests.get("https://phishstats.info:2096/api/phishing?", params = query_params) #Pasando respuesta a DataFrame df_phishing_ca = pd.DataFrame.from_records(response.json()) df_phishing_ca.head(5) |
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í:
#Estableciendo parametros y realizando consulta query_params = {"_where": "(title,like,~Facebook~)~and(score,gt,4)~and(date,lt,2020-12-31T00:00:00.000Z)", "_sort": "-date", "_size":100} response = requests.get("https://phishstats.info:2096/api/phishing?", params = query_params) #Convirtiendo respuesta a DataFrame df_facebook = pd.DataFrame.from_records(response.json()) df_facebook.head(5) |
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.
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.
Analisis Exploratorio de Datos(EDA).
Generar una Blacklist de IP para agregar otra capa de seguridad.
Entrenar un algoritmo de Machine Learning para detectar Phishing.
Quieres saber mas sobre estos temas? visita nuestra pagina web de cursos Hacking Ético y aprende con nosotros ya.
Comments