Saltar al contenido

URLScan y utilidades

URLScan.io

URLScan es un servicio que visita URLs en un navegador virtual y registra todo lo que ocurre: peticiones de red, tecnologias usadas, capturas de pantalla, veredicto final.

Que devuelve

from src.tools.urlscan import urlscan_lookup
result = await urlscan_lookup("http://phishing-example.com/login")
CampoDescripcion
verdictVeredicto: benign, malicious, suspicious
maliciousSi es maliciosa (bool)
scoreScore de malicia (0-100)
categoriesCategorias (phishing, malware, scam…)
technologiesStack tecnologico detectado
domainDominio final (tras redirects)
ipIP del servidor
countryPais del servidor
serverServidor web
screenshotURL de la captura de pantalla
request_countNumero de peticiones HTTP realizadas

Senales de phishing

URLScan es especialmente bueno detectando phishing porque visita la pagina y ve lo que realmente muestra. Busca:

  • Formularios de login imitando marcas conocidas
  • Certificados SSL con nombres engaosos
  • Redirects encadenados a dominios maliciosos
  • Carga de recursos desde CDNs de malware conocidos

Free tier

5.000 scans/dia. Los scans son publicos — cualquiera puede ver el resultado si conoce el UUID.


Herramientas de utilidad

search_history

Consulta si un IOC fue investigado antes en la base de datos local.

from src.tools.history import search_history
result = await search_history("185.220.101.34")
# → {"found": true, "last_seen": "2026-03-05", "cached_result": {...}}

Util para:

  • Evitar investigar el mismo IOC dos veces
  • Ver si la reputacion de un IOC ha cambiado desde la ultima vez
  • Construir historial de amenazas

pivot_investigate

Extrae IOCs relacionados de un resultado y los prepara para investigacion adicional.

from src.tools.pivot import pivot_investigate
iocs = await pivot_investigate(virustotal_result)
# → ["evil.com", "185.220.101.35", "attacker@protonmail.com"]

El agente usa esta funcion para el auto-pivot: despues de analizar una IP, extrae dominios, IPs relacionadas o emails y los investiga automaticamente (hasta 2 niveles).

classify_threat_type

Clasificador local basado en palabras clave que asigna una categoria de amenaza:

from src.tools.threat_classifier import classify_threat_type
result = await classify_threat_type("host distributing emotet banking trojan")
# → {"type": "banking_malware", "family": "emotet", "confidence": 0.87}

Categorias disponibles: ransomware, banking_malware, apt, phishing, c2, botnet, infostealer, cryptominer, ddos, exploit_kit.

No requiere API key ni LLM — es clasificacion local por regex y keywords.