En este mismo blog hemos hablado en el pasado de la importancia de proteger las API: qué son y cómo ayudaros a implantar medidas para su protección. A raíz de ello, hemos tenido un par de consultas técnicas sobre cómo abordar la implementación de las medidas genéricas que os describíamos en ese post. Es por esto por lo que hoy os traemos un nivel más técnico que os sirva de ayuda para implantar dichas medidas en vuestras API. Así, os proporcionamos aquí un resumen de un subconjunto de controles de un framework de seguridad en API que hemos definido para revisar las API de uno de nuestros clientes. Estas medidas que os proponemos son, a nuestro modo de ver, las más relevantes y que, a su vez, tienen un tiempo de implementación corto o, al menos, asumible en un corto plazo.
Autenticación y acceso
- No uses autenticación básica. Utiliza un estándar de autenticación como OAuth 2.0 o JWT.
- Utiliza políticas de máximo de intentos de peticiones de login y de bloqueo de usuario.
- Usa cifrado en la información sensible.
- Utiliza en el lado servidor el protocolo HTTPS con TLS 1.2+ y protege los ciphers para evitar ataques de MITM (Man in the Middle).
- Utiliza cabeceras con el estándar HSTS (Http Strict Transport Security ) con SSL para evitar ataques de degradación de SSL no seguras.
JSON Web Token
- Utiliza una clave aleatoria compleja (JWT Secret) para evitar ataques de fuerza bruta.
- Define un periodo de vida corto para los token (TTL, RTL).
- No almacenes información sensible en el payload de JWT puesto que es de fácil decodificación.
OAuth
- Valida siempre el redirect_uri para permitir solo la entrada de URLs aceptadas (Whitelisted URL).
- No permitas el intercambio a través de token y sí a través de code (no permitir response_type=token).
- Completa el parámetro state con un hash aleatorio para evitar ataques CSRF (Cross-Site Request Forgery).
Entrada
- No utilices información sensible (credenciales, contraseñas, tokens de seguridad o API keys) en la URL, en su lugar usa la cabecera estándar Authorization.
- Usa un servicio de API Gateway para permitir almacenamiento en caché
Experiencia con nuestro cliente probando el API Security Framework
El framework resultante del trabajo realizado para nuestro cliente contenía 48 controles a implementar para considerar una API segura. Inicialmente, tal y como comentamos en al anterior post en relación con las API, realizamos un profundo trabajo de inventariado de las API. Este inventariado se realizó a través de escaneos tanto internos como externos con herramientas del propio proveedor.
Una vez catalogadas todas las API, procedimos a aplicarles un factor de riesgo a cada una en función de varios parámetros. Es decir, en base a una calculadora de riesgo, priorizamos cada una de las APIs para posteriormente decidir qué hacer con cada una de ellas.
Posteriormente, en base a su categorización y riesgo, decidimos validar un subconjunto de las APIs. Revisamos entonces una a una contra el framework previamente apoyándonos tanto en scripts de Python como en herramientas de escaneo de APIs y concluimos sobre su nivel de protección detallando las deficiencias observadas.
Por último, establecimos y priorizamos un plan de remediación de las deficiencias identificadas. Una vez presentados los resultados, las deficiencias y las acciones correctivas, se nos ha solicitado la coordinación de la implantación de las mismas y el soporte a los equipos técnicos.