Spiderfoot Correlations
Spiderfoot Correlations
Nota importada desde Inbox durante consolidacion bulk.
Resumen
Documentación técnica completa del sistema de Correlations de SpiderFoot 4.0. Explica cómo SpiderFoot automatiza el análisis de datos OSINT recolectados mediante reglas de correlación escritas en YAML. Cubre: background del problema (análisis manual de grandes volúmenes de datos), introducción del concepto de correlación (30+ reglas que analizan datos y presentan resultados), estructura de reglas YAML (id, version, meta, collections, aggregation, analysis, headline), ejemplo práctico (open_port_version), referencia completa de cada componente, prefijos de campo (source., child., entity.) con ejemplo detallado de traversal, y guía para crear reglas personalizadas.
Contenido Principal
Background
SpiderFoot automatiza la recolección OSINT y extracción de entidades, pero el análisis de patrones complejos quedaba en manos del usuario. Con volúmenes grandes de datos recolectados, los usuarios necesitaban exportar y usar otras herramientas para filtrar datos de interés.
Introducción de Correlations
Lanzado con SpiderFoot HX (2019), el feature de Correlations aplica "reglas de correlación" sobre los datos de cada escaneo, analizando y presentando resultados con la opinión de SpiderFoot sobre qué puede ser importante.
Ejemplos de reglas incluidas:
- Hosts/IPs reportados como maliciosos por múltiples fuentes
- Web servers atípicos (posible shadow IT)
- Bases de datos expuestas en Internet
- Puertos abiertos revelando versiones de software
Con SpiderFoot 4.0, esta capacidad se abre a la comunidad para que escriban sus propias reglas y contribuyan.
Conceptos Clave
YAML: Las reglas se escriben en YAML (fácil de leer/escribir, permite comentarios, cada vez más común).
Estructura de una regla:
id,version,meta- Define la reglacollections- Qué extraer de los resultados del scanaggregation(opcional) - Agrupar datosanalysis(opcional) - Análisis sobre los datosheadline- Presentar resultados
Ejemplo: open_port_version
id: open_port_version
version: 1
meta:
name: Open TCP port reveals version
description: >
A possible software version has been revealed on an open port. Such
information may reveal the use of old/unpatched software used by
the target.
risk: INFO
collections:
- collect:
- method: exact
field: type
value: TCP_PORT_OPEN_BANNER
- method: regex
field: data
value: .*[0-9]\.[0-9].*
- method: regex
field: data
value: not .*Mime-Version.*
- method: regex
field: data
value: not .*HTTP/1.*
aggregation:
field: data
headline: "Software version revealed on open port: {data}"
Ejemplo de ejecución:
-> # python3.9 ./sf.py -s www.binarypool.com -m sfp_dnsresolve,sfp_portscan_tcp
sfp_portscan_tcp Open TCP Port Banner SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.10
...
correlation [open_port_version]: Software version revealed on open port: SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.10
NOTA: Las reglas solo funcionan si existen datos relevantes en los resultados del scan. Las reglas analizan datos, no recolectan.
Funcionamiento Interno
SpiderFoot traduce las reglas YAML en:
- Queries contra la base de datos SQLite backend
- Lógica Python para filtrar y agrupar resultados
- "Correlation results" almacenados en
tbl_scan_correlation_resultsytbl_scan_correlation_results_events
Visibles en la interfaz web, CLI, o consultables directamente en SQLite.
Reglas Disponibles en SpiderFoot 4.0
cert_expired.yaml host_only_from_certificatetransparency.yaml
cloud_bucket_open.yaml http_errors.yaml
cloud_bucket_open_related.yaml human_name_in_whois.yaml
data_from_base64.yaml internal_host.yaml
data_from_docmeta.yaml multiple_malicious.yaml
database_exposed.yaml multiple_malicious_affiliate.yaml
dev_or_test_system.yaml multiple_malicious_cohost.yaml
dns_zone_transfer_possible.yaml name_only_from_pasteleak_site.yaml
egress_ip_from_wikipedia.yaml open_port_version.yaml
email_in_multiple_breaches.yaml outlier_cloud.yaml
email_in_whois.yaml outlier_country.yaml
email_only_from_pasteleak_site.yaml outlier_email.yaml
host_only_from_bruteforce.yaml outlier_hostname.yaml
outlier_ipaddress.yaml remote_desktop_exposed.yaml
outlier_registrar.yaml root_path_needs_auth.yaml
outlier_webserver.yaml stale_host.yaml
strong_affiliate_certs.yaml vulnerability_critical.yaml
strong_similardomain_crossref.yaml vulnerability_high.yaml
template.yaml vulnerability_mediumlow.yaml
Referencia de Componentes de Regla
meta
- name: Nombre corto y legible
- description: Descripción larga (puede ser multi-párrafo)
- risk: Nivel de riesgo:
INFO,LOW,MEDIUM,HIGH
collections
Uno o más bloques collect, cada uno con uno o más bloques method:
- El primer
methoden cadacollectextrae datos de la DB - Los siguientes
methodrefinan ese dataset - method:
exact(match exacto) oregex(expresión regular) - field:
type(ej:INTERNET_NAME),module(ej:sfp_whois),data(valor del elemento). Después del primer method, se pueden usar prefijos:source.,child.,entity. - value: Valor o regex a matchear
aggregation
Agrupa elementos de datos en buckets para análisis o reporte:
- field: Campo por el que agrupar. Soporta prefijos
source.,child.,entity.
analysis
Aplica análisis a resultados agregados o colecciones directas:
Métodos de análisis:
-
threshold: Descarta colecciones/agregaciones que no cumplan umbrales
field: Campo al que aplicarcount_unique_only: Solo contar valores únicos (true/false)minimum: Mínimo de elementos requeridosmaximum: Máximo de elementos permitidos
-
outlier: Solo mantener outliers
maximum_percent: Porcentaje máximo del total que puede representar un bucketnoisy_percent: Si el porcentaje promedio de cada bucket es menor que este valor (default 10), no reportar outliers
-
first_collection_only: Solo mantener datos que aparecieron en la primera colección pero no en otras
field: Campo para lookup entre colecciones
-
match_all_to_first_collection: Solo mantener datos que matchean con la primera colección
match_method:contains,exact, osubnet
headline
Título que resume los hallazgos. Usar {field} para insertar valores:
- Formato simple:
headline: "texto {data}" - Formato bloque:
text+publish_collections
Prefijos source., child., entity.
Cada data element tiene:
- data/type: El elemento mismo
- source.data/source.type: El elemento del que se derivó
- child.data/child.type: Elementos derivados de este
- entity.data/entity.type: La entidad ancestro (IP, dominio, etc.)
Ejemplo de traversal:
bar [INTERNET_NAME]
→ https://bar/page.html [LINKED_URL_INTERNAL]
→ "This is some web content: foo" [TARGET_WEB_CONTENT]
→ foo [INTERNET_NAME]
Para "This is some web content: foo":
data:This is some web content: footype:TARGET_WEB_CONTENTsource.data:https://bar/page.htmlsource.type:LINKED_URL_INTERNALchild.data:foochild.type:INTERNET_NAMEentity.type:INTERNET_NAMEentity.data:bar
entitysalta directamente a la entidad ancestro (INTERNET_NAME), no al LINKED_URL_INTERNAL intermedio.
Los prefijos siempre refieren al primer match block dentro de cada collect. Ver spiderfoot/db.py para saber qué tipos de datos son entidades.
Crear una Regla Personalizada
- Copiar
template.yamlen/correlations/a un nombre descriptivo (ej:aws_cloud_usage.yaml) - Editar el
idpara que coincida con el nombre del archivo - Configurar meta, collections, aggregation, analysis y headline
- Guardar y reiniciar SpiderFoot
- Si hay errores de sintaxis, SpiderFoot abortará al inicio con información del error
Puntos Clave
- Las correlaciones analizan datos ya recolectados, no recolectan datos nuevos
- Reglas escritas en YAML, fácil de leer y contribuir
- 30+ reglas incluidas en SpiderFoot 4.0
- Sistema extensible: crear reglas personalizadas copiando template.yaml
- Prefijos source./child./entity. permiten análisis relacional profundo
- Resultados visibles en web UI, CLI, o consultables en SQLite directamente
Aplicación Práctica
Útil para automatizar la detección de:
- Hosts/IPs maliciosos reportados por múltiples fuentes
- Shadow IT (web servers atípicos)
- Bases de datos expuestas
- Versiones de software reveladas en puertos abiertos
- Certificados expirados
- Nombres humanos en registros WHOIS
- Emails en múltiples breaches
- Outliers en registradores, países, hostnames
Referencias
- SpiderFoot: https://www.spiderfoot.net
- Correlations documentation: SpiderFoot 4.0 release notes
- Code reference:
spiderfoot/db.pyfor entity type definitions - Rules location:
/correlations/folder in SpiderFoot installation