Guía rápida para identificar recursos cloud y servicios externos asociados a una organización. Limita las comprobaciones a información pública y activos autorizados; una IP o hostname del proveedor no demuestra propiedad del tenant.
Flujo rápido
- Extraer proveedores desde DNS, ASN, certificados, SPF y cabeceras.
- Identificar patrones de AWS, Azure, GCP, CDN y plataformas PaaS.
- Generar candidatos de storage a partir de marcas y dominios confirmados.
- Comprobar únicamente existencia, acceso público y metadatos visibles.
- Localizar tenants, SaaS corporativo y dominios personalizados.
- Validar cada relación con DNS, contenido, certificados o fuentes corporativas.
- Registrar activos propios, compartidos, históricos y de terceros por separado.
| Evidencia | Posible proveedor |
|---|---|
*.amazonaws.com, *.awsstatic.com | AWS |
*.azurewebsites.net, *.windows.net, *.azureedge.net | Azure |
*.googleapis.com, *.appspot.com, *.run.app | GCP |
*.cloudfront.net | Amazon CloudFront |
*.firebaseapp.com, *.web.app | Firebase |
*.github.io | GitHub Pages |
*.vercel.app | Vercel |
*.netlify.app | Netlify |
AWS
Buscar recursos asociados a AWS en CNAME, certificados, código JavaScript, repositorios y documentación.
Servicios frecuentes:
- S3:
bucket.s3.amazonaws.com. - CloudFront:
distribution.cloudfront.net. - Elastic Load Balancing:
*.elb.amazonaws.com. - API Gateway:
*.execute-api.<region>.amazonaws.com. - Amplify:
*.amplifyapp.com. - Cognito: dominios y endpoints regionales de autenticación.
# Seguir CNAME y resolución
dig +short CNAME app.example.com
dig +short A app.example.com
# Consultar un bucket candidato sin credenciales
aws s3api head-bucket --bucket example-assets --no-sign-request
# Listar únicamente si el bucket permite acceso público
aws s3 ls s3://example-assets --no-sign-requestLos errores de S3 pueden diferenciar inexistencia, acceso denegado o región incorrecta, pero no prueban que el bucket pertenezca al objetivo.
Azure
Patrones habituales:
- App Services:
*.azurewebsites.net. - Blob Storage:
*.blob.core.windows.net. - Static Web Apps:
*.azurestaticapps.net. - Front Door/CDN:
*.azurefd.net,*.azureedge.net. - Traffic Manager:
*.trafficmanager.net. - API Management:
*.azure-api.net.
# Detectar el backend mediante DNS
dig +short CNAME app.example.com
# Cabeceras y certificado
curl -skI https://app.example.com/
openssl s_client -connect app.example.com:443 \
-servername app.example.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -ext subjectAltNameNo enumerar suscripciones ni recursos internos con credenciales que no hayan sido proporcionadas expresamente para la evaluación.
GCP
Patrones habituales:
- Cloud Storage:
storage.googleapis.com/<bucket>o<bucket>.storage.googleapis.com. - App Engine:
*.appspot.com. - Cloud Run:
*.run.app. - Cloud Functions: endpoints regionales de
cloudfunctions.net. - Firebase Hosting:
*.web.appy*.firebaseapp.com.
# Consultar un bucket candidato
curl -sI https://storage.googleapis.com/example-assets
# Listar solo si permite acceso público
gcloud storage ls gs://example-assets
# Revisar dominio personalizado y backend
dig +short CNAME app.example.comUna respuesta 403 puede confirmar que el nombre existe, pero no su propietario ni el contenido.
S3, Blob Storage y buckets
Generar nombres candidatos usando:
- Dominio raíz y marca.
- Nombre legal, filial o producto.
- Sufijos como
assets,static,media,backup,logs,devoprod. - Referencias exactas encontradas en HTML, JavaScript, aplicaciones móviles o repositorios.
# AWS S3
curl -sI https://example-assets.s3.amazonaws.com/
# Azure Blob Storage
curl -sI https://exampleassets.blob.core.windows.net/
# Google Cloud Storage
curl -sI https://storage.googleapis.com/example-assets/Priorizar candidatos derivados de evidencias reales. Evitar fuerza bruta masiva de namespaces globales.
Storage público
Comprobar por separado:
- Existencia del recurso.
- Listado público del contenedor.
- Lectura pública de objetos conocidos.
- Escritura o modificación: no probar sin autorización expresa.
- Índices, metadatos y políticas visibles.
- Referencias desde aplicaciones oficiales.
# Azure: listado anónimo cuando está permitido
curl -s 'https://exampleassets.blob.core.windows.net/public?restype=container&comp=list'
# S3: listado anónimo cuando está permitido
aws s3 ls s3://example-assets --no-sign-request
# GCS: metadatos/listado público
curl -s 'https://storage.googleapis.com/storage/v1/b/example-assets/o'No descargar colecciones completas. Capturar la mínima evidencia necesaria y evitar exponer nombres o contenido sensible en informes no protegidos.
CloudFront y CDN
Los CDN ocultan el origen y sirven infraestructura compartida.
# CNAME y cadena de resolución
dig +short CNAME cdn.example.com
dig +trace cdn.example.com
# Cabeceras indicativas
curl -skI https://cdn.example.com/
# Certificado presentado por el hostname
openssl s_client -connect cdn.example.com:443 \
-servername cdn.example.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -ext subjectAltNameIndicadores frecuentes: Via, X-Cache, CF-Ray, X-Amz-Cf-*, Server-Timing y CNAME del proveedor. No escanear rangos completos de una CDN.
Azure App Services
Los dominios personalizados de App Service suelen conservar un vínculo DNS con *.azurewebsites.net.
dig +short CNAME app.example.com
curl -skI https://app.example.com/
# Comprobar un hostname exacto ya descubierto
httpx -u https://example-app.azurewebsites.net \
-status-code -title -tech-detect -cname -tls-grabRegistrar el hostname por defecto, dominio personalizado, certificado y estado de la aplicación. No reclamar ni vincular nombres aparentemente abandonados.
Firebase
Firebase puede aparecer en hosting, configuración JavaScript, autenticación y endpoints de base de datos.
Indicadores habituales:
<project>.firebaseapp.com
<project>.web.app
<project>.firebaseio.com
<project>-default-rtdb.firebaseio.com
firebasestorage.googleapis.comBuscar en JavaScript claves como projectId, authDomain, storageBucket y databaseURL. Esta configuración suele ser pública y no constituye por sí sola una credencial.
grep -Eo "(projectId|authDomain|storageBucket|databaseURL)[\"']?[^,}]+" javascript.txt
curl -sI https://example-project.web.app/No intentar escribir datos ni eludir reglas de seguridad durante reconocimiento.
GitHub Pages
GitHub Pages usa *.github.io y admite dominios personalizados mediante CNAME.
dig +short CNAME docs.example.com
curl -skI https://docs.example.com/
# Buscar referencias públicas
git grep -n 'docs.example.com\|github.io' 2>/dev/nullRelacionar organización, repositorio, fichero CNAME, contenido y enlaces oficiales. Un dominio mal configurado debe documentarse; no intentar reclamarlo.
Vercel y Netlify
Patrones habituales:
- Vercel:
*.vercel.app, cabeceras comox-vercel-id. - Netlify:
*.netlify.app, cabeceras y DNS del proveedor.
dig +short CNAME app.example.com
curl -skI https://app.example.com/
httpx -u https://app.example.com -title -status-code -cname -tech-detect -tls-grabBuscar nombres de proyecto en repositorios, metadatos de despliegue, JavaScript y certificados. No registrar proyectos o dominios libres para demostrar una posible toma de control.
SaaS corporativo
DNS, SPF, SSO, políticas legales y portales de login suelen revelar servicios SaaS.
Categorías frecuentes:
- Correo y colaboración.
- CRM, soporte y ticketing.
- Gestión de identidad y SSO.
- Recursos humanos y recruiting.
- Marketing, analítica y formularios.
- Transferencia de archivos y firma electrónica.
- CI/CD, repositorios y monitorización.
# MX, SPF y verificaciones de dominio
dig +short MX example.com
dig +short TXT example.com
# CNAME de portales conocidos
dig +short CNAME support.example.com
dig +short CNAME login.example.comUn include SPF o registro de verificación demuestra una relación técnica pasada o presente, no necesariamente uso activo.
Tenants
Un tenant identifica la instancia lógica de una organización dentro de un proveedor SaaS o cloud.
Buscar:
- Dominios de login y redirecciones SSO.
- Metadatos OpenID Connect o SAML publicados.
- Dominios verificados en DNS.
- Hostnames específicos de la organización.
- Identificadores visibles en JavaScript o aplicaciones móviles.
# Metadatos públicos de Microsoft Entra ID para un dominio confirmado
curl -s 'https://login.microsoftonline.com/example.com/v2.0/.well-known/openid-configuration' \
| jq '{issuer,authorization_endpoint,token_endpoint}'
# Configuración OpenID pública de una aplicación
curl -s https://login.example.com/.well-known/openid-configuration | jqNo realizar enumeración de usuarios, password spraying ni intentos de autenticación durante esta fase.
Cloud enumeration
La enumeración debe partir de indicadores confirmados, no de combinaciones ilimitadas de nombres.
# Extraer endpoints cloud de URLs recopiladas
grep -Eio 'https?://[^[:space:]<>]+' urls.txt \
| grep -Ei 'amazonaws\.com|azurewebsites\.net|windows\.net|googleapis\.com|appspot\.com|run\.app|firebaseio\.com|vercel\.app|netlify\.app' \
| sort -u > cloud-endpoints.txt
# Resolver y enriquecer hostnames
httpx -l cloud-endpoints.txt -silent -status-code -title \
-ip -cname -tech-detect -tls-grab -json -o cloud.jsonlFuentes para generar candidatos:
- DNS actual e histórico.
- Certificate Transparency.
- JavaScript y código fuente público.
- Repositorios y pipelines.
- Aplicaciones móviles.
- Documentación, ofertas de empleo y casos de éxito.
- Shodan, Censys y buscadores.
Validación y atribución
Requerir al menos dos señales antes de atribuir un recurso:
- CNAME desde un dominio confirmado.
- Contenido o marca específica de la organización.
- Certificado con un dominio controlado por el objetivo.
- Referencia desde código, documentación o aplicación oficial.
- Identificador de tenant o proyecto consistente.
- Confirmación corporativa del proveedor utilizado.
Clasificar la evidencia como confirmada, probable, histórica, compartida o descartada.
Plantilla de inventario
Recurso | Proveedor | Servicio | Tenant/proyecto | Dominio | Región | Acceso público | Evidencia | Fuente | Fecha | Confianza | En alcancePara storage añadir: existe, lista, lee, escribe no comprobado y propietario validado.