Auditando APIs

Auditando APIs

Reconocimiento

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

  1. 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

  1. Enfoque

Luego de la fase inicial se puede aumentar la especificidad de la las consultas combinando la información recolectada de las herramientas.

  1. 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:

OperadorPropósito
IntitleBusca títulos de paginas
InurlBusca palabras dentro las URL
FiletypeBusca archivos por tipo
SiteLimita 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

ConsultasPropósito
Hostname:” Objetivo.comEsto 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

ComandoResultado
amass Intel -addr <objetivo>Información sobre dominio, ssl
amass Intel -d <objetivo> -whoisNombres 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

  1. Escaneo

Escanear el objetivo para identificar puntos de inicio para la investigación, empezar con puertos, servicios, sistemas operativos, etc.

  1. 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

  1. 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