Antes de auditar un API es útil realizar un periodo de validación para verificar si esta operativa, encontrar credenciales, versiones, documentación e información sobre su propósito, mientras más información se encuentre se tendrá mejores probabilidades de explotación.
Si un API esta destinada al uso publico seguramente es amistosa para los desarrolladores y tiene documentación disponible, si esta enfocada para uso interno tendremos que guiarnos por pistas, convenciones, nombres, cabeceras HTTP, respuestas JSON, archivos JavaScript del lado del cliente
Este proceso es mas que usar una herramienta o un solo método, es una metodología para expandir nuestra superficie de ataque, bajo ella podemos encontrar repositorios Git, infraestructura, frameworks, directorios, subdominios y APIs.
Sus objetivos son:
aprender sobre el objetivo
identificar puntos vulnerables para auditar
encontrar configuraciones mal hechas u obviadas
encontrar endpoints adicionales
encontrar funcionalidades nuevas o en desuso
Esta etapa nos permite trabajar de una manera mas inteligente y analizar activos que no han sido revisados exhaustivamente, en vez de realizar reconocimiento de manera aleatoria es mejor dividir las tareas y determinar un objetivos y métodos.
Objetivos: que queremos aprender
Métodos: como lo aprendemos
Resultado: que resultado dará
No se deben ejecutar ciegamente las herramientas automatizadas para evitar confundirnos, un objetivo podría ser encontrar alguna versión de software, encontrar endpoints adicionales, investigar un subdominio o revisar algún repositorio de GitHub para encontrar alguna información olvidada, todo esto depende del sitio objetivo de nuestro estudio.
Algunos métodos para encontrar información son usar u otras herramientas, si no es posible o útil se puede leer la documentación, paginas web, código fuente u otras como:
DNS: enumeración básica, fuerza bruta, reverse DNS, alterar/permutar nombres de subdominios, Zone Transfer.
Scraping: Ask, Beidu, DNSDumpster, DNSTable, Dogpile, Exalead,Google, IPv4info, Netcraft, Riddler, Site Dossier, ViewDNS.
Certificados: Censys, CertSpotter, Crtsh, Entrust, GoogleCT
APIS: AlienVault, BinaryEdge, BufferOver, CommonCrawl, DNSDB,Shodan, Robtex,Sublist3rAPI, Umbrella
Web Archives: Archivelt, ArchiveToday, Wayback
Reconocimiento Pasivo
Es el acto de encontrar información del objetivo sin interactuar directamente con él, el objetivo es encontrar y documentar la superficie de ataque del objetivo sin que se de cuenta de la investigación, la superficie de ataque es la cantidad total de sistemas expuestos en la red en la cual se puede extraer data, ganar acceso o perturbar su funcionamiento.
Típicamente depende de la información de fuentes abiertas (OSINT) y se pueden buscar APIs abiertas, documentación, credenciales, cualquier endpoint abierto será un objetivo más adelante durante el reconocimiento activo
- Búsqueda web
Buscar en Internet por términos generales para aprender información fundamental sobre el objetivo, buscadores como Google, Shodan, pueden ayudar a encontrar información general sobre el API como su uso, diseño, arquitectura, documentación, propósito de negocio
También se puede usar DNSDumpster para realizar un mapeado DNS mostrando todos los hosts relacionados al objetivo y como se conectan entre ellos y OWASP Amass
- Enfoque
Luego de la fase inicial se puede aumentar la especificidad de la las consultas combinando la información recolectada de las herramientas.
- Documentar la superficie de ataque
Es crucial tomar notas para realizar ataques efectivos, documentar y tomar capturas de todos los recursos de interés, puede ser útil crear una lista de los recursos encontrados y retornar a ella cuando sea necesario.
Google Hacking
Involucra un uso inteligente de los parámetros de búsqueda avanzados del buscador y puede revelar APIs públicas, vulnerabilidades, llaves secretas, nombres de usuario.
Parámetros:
Operador | Propósito |
Intitle | Busca títulos de paginas |
Inurl | Busca palabras dentro las URL |
Filetype | Busca archivos por tipo |
Site | Limita las búsquedas a sitios específicos |
Iniciar con términos amplios y luego reducir la búsqueda a términos mas específicos, por ejemplo, un término genérico inurl: /api/ generara miles de resultados, si se incluye un termino mas especifico como intitle: “<objetivo> api key” retornara menos resultados, se puede usar Google hacking database para búsquedas más especificas
Shodan
Similar a Google se pueden usar términos avanzados para buscar APIs con shodan como
Consultas | Propósito |
Hostname:” Objetivo.com” | Esto hará que se realice una búsqueda básica usando el dominio del objetivo |
“content-type:application/json” | Esto devuelve resultados tipo json/xml, se puede agregar “200 OK” para request exitosos |
“wp-json” | Devulve esto si el objetivo es una página wordpress |
Estas consultas se pueden combinar para mostrar mejores resultados “objetivo.com” ”content-type: application/json”
OWASP Amass
Es una herramienta por línea de comando que obtiene información de 55 fuentes distintas, se puede configurar para realizar escaneo pasivos y activos
Comando | Resultado |
amass Intel -addr <objetivo> | Información sobre dominio, ssl |
amass Intel -d <objetivo> -whois | Nombres de dominio whois |
amass enum -pasive -d <objetivo> | Información de interés sobre el dominio |
amass enum -active -d <objetivo> | Información sobre DNS |
amass enum -active brute -w <wordlist> -d <dominio bjetivo> -dir <directorio> | Información sobre dominios, furza bruta contra dominios |
amass viz -enum -d3 -dir <directorio objetivo> | Visualiza relación entre data recolectada |
Reconocimiento activo
Se basa en comunicarse directamente con el objetivo para extraer información
- Escaneo
Escanear el objetivo para identificar puntos de inicio para la investigación, empezar con puertos, servicios, sistemas operativos, etc.
- Análisis
En esta etapa se explora manualmente usando un cliente el objetivo, se examina la pagina web, se interceptan requests, APIs y documentación así como la lógica de negocio.
Se puede ver la aplicación desde tres puntos de vista: invitado, usuario autenticado y administrador, los invitados son usuarios anónimos que entran al sitio por primera vez, usuarios autenticados ha pasado por un proceso de registro y tienen cierto nivel de acceso, administradores tienen para mantener el sitio y sus APIs
Al visitar el sitio se puede considerar
¿Como un usuario nuevo usaría este sitio?, ¿un nuevo usuario puede usar las APIs?, ¿la documentación de las APIs es publica? ¿Como la web reconoce un usuario autenticado?
¿Qué pueden hacer los usuarios autenticados que no pueden los visitantes?, pueden subir archivos? ¿Que hay en el código fuente de la página?, que lenguaje de programación usaron? ¿Tiene secciones en desarrollo o experimentales?
¿Dónde se loguean los administradores?, ¿al usar este perfil muestra secciones en desarrollo?
Lo siguiente seria analizar la aplicación con un proxy como Burp Suite
- Escaneo dirigido
En esta etapa se refinan los escaneos y se hacen más dirigidos, se pueden usar herramientas más específicas para identificar puertos TCP activos, HTTP o HTTPS, lógica de negocio, se puede aplicar fuerza bruta para identificar directorios
Por ejemplo, con nmap se puede escanear uno o todos los puertos del host con
Nmap -sC -sV <ip o rango de red> -oA salida.txt
Robots.txt
Este archivo de texto indica a los bots de los motores de búsqueda a ignorar ciertos directorios y no incluirlos en su búsqueda, irónicamente nos dice la ruta de ellos
User-Agent: *
Disallow: /appliance/
Disallow: /login/
Disallow: /api/
Disallow: /files/
Chrome Dev Tools
Se puede usar las herramientas de desarrollo del navegador para inspeccionar el código fuente en la pestaña sources, en la pestaña Network se puede revisar el trafico de la red y las peticiones, en la pestaña memory se puede realizar un snapshot de la memoria usada por el sistema y buscar términos como API, v1,v2,swagger,rest, si se necesitan mas palabras clave se puede usar Assetnote API wordlist, en la pestaña de memoria pueden aparecer rutas de las APIs, también realizar snapshots diferentes y compararlos entre si, adicionalmente en la pestaña performance se puede analizar las acciones como hacer click en un botón y visualizar si se realizan peticiones tras cámara
Gobuster
Es una herramienta para realizar descubrir directorios mediante fuerza bruta, también funciona para encontrar subdominios
gobuster dir -u http://objetivo.com -w /wordlist.txt
gobuster dir -u http://objetivo.com -w /wordlist.txt -x 200,202,301 -b 302
existen otras alternativas como ffuf entre muchas otras de este tipo.
Kiterunner
Es una herramienta para descubrir endpoints de las APIs que imita la forma como usualmente se usan no solo con métodos HTTP GET.
kr scan http://objetivo.com -w wordlist
kr brute http://objetivo.com -w wordlist