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_lookupresult = await urlscan_lookup("http://phishing-example.com/login")| Campo | Descripcion |
|---|---|
verdict | Veredicto: benign, malicious, suspicious |
malicious | Si es maliciosa (bool) |
score | Score de malicia (0-100) |
categories | Categorias (phishing, malware, scam…) |
technologies | Stack tecnologico detectado |
domain | Dominio final (tras redirects) |
ip | IP del servidor |
country | Pais del servidor |
server | Servidor web |
screenshot | URL de la captura de pantalla |
request_count | Numero 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_historyresult = 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_investigateiocs = 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_typeresult = 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.