Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Asegurando tus APIs: Explorando el OWASP Top 10...

Asegurando tus APIs: Explorando el OWASP Top 10 de Seguridad en APIs

En el mundo actual, las APIs juegan un papel importante en la creación de aplicaciones y servicios robustos y flexibles. Sin embargo, con la expansión de las APIs, también surge la necesidad de abordar los desafíos de seguridad asociados.

En esta charla, exploraremos en detalle el OWASP Top 10 de Seguridad en APIs, una lista de las principales vulnerabilidades que los desarrolladores y equipos de seguridad deben tener en cuenta al diseñar, desarrollar y asegurar sus APIs. Por último, comentaremos las mejores prácticas para mitigar los riesgos y garantizar la seguridad de tus APIs. Entre los puntos a tratar podemos destacar:

1.Introducir el concepto de seguridad en las APIs

2.OWASP Top 10 y su importancia para la seguridad en APIs

3.Actualización del OWASP Top 10 security en 2023

4.Herramientas para evaluar y mejorar la seguridad de tus APIs.

5.Estrategias y mejores prácticas para garantizar la seguridad de tus APIs.

jmortegac

April 19, 2024
Tweet

More Decks by jmortegac

Other Decks in Technology

Transcript

  1. Welcome to Commit Conf ∘ Introducir el concepto de seguridad

    en las APIs ∘ OWASP Top 10 y su importancia para la seguridad en APIs ∘ Actualización del OWASP Top 10 security en 2023 ∘ Herramientas para evaluar y mejorar la seguridad de tus APIs. ∘ Estrategias y mejores prácticas para garantizar la seguridad de tus APIs.
  2. Introducir el concepto de seguridad en las APIs • Amenazas

    comunes a la seguridad de las API ◦ Ataques de inyección ◦ Ataques man-in-the-middle (MITM) ◦ Ataques denegación de servicio distribuida (DDoS) ◦ Ataques de control de acceso a las aplicaciones
  3. Actualización del OWASP Top 10 security en 2023 1.Broken Object

    Level Authorization – Autorización a nivel de objeto rota https://api.example.com/v1.1/users/payment/show?user_id=12 https://api.example.com/v1.1/messages/show?id=d0c240ea139206 019f692d
  4. Actualización del OWASP Top 10 security en 2023 1.Broken Object

    Level Authorization – Autorización a nivel de objeto rota
  5. Actualización del OWASP Top 10 security en 2023 1.Broken Object

    Level Authorization # Inicializar el gestor de archivos gestor_archivos = GestorArchivos() # Subir algunos archivos archivo1 = Archivo("archivo1.txt", id_usuario=1) archivo2 = Archivo("archivo2.txt", id_usuario=2) gestor_archivos.subir_archivo(archivo1) gestor_archivos.subir_archivo(archivo2) # Un atacante intenta acceder a un archivo que no le pertenece id_usuario_atacante = 3 nombre_archivo_a_acceder = "archivo1.txt" archivo_a_acceder = gestor_archivos.obtener_archivo(nombre_archivo_a_acceder, id_usuario_atacante) class Archivo: def __init__(self, nombre_archivo, id_usuario): self.nombre_archivo = nombre_archivo self.id_usuario = id_usuario class GestorArchivos: def __init__(self): self.archivos = [] def subir_archivo(self, archivo): self.archivos.append(archivo) def obtener_archivo(self, nombre_archivo, id_usuario): for archivo in self.archivos: if archivo.nombre_archivo == nombre_archivo: return archivo return None
  6. Actualización del OWASP Top 10 security en 2023 1.Broken Object

    Level Authorization def obtener_archivo(self, nombre_archivo, id_usuario): for archivo in self.archivos: if archivo.nombre_archivo == nombre_archivo and archivo.id_usuario == id_usuario: return archivo return None
  7. Actualización del OWASP Top 10 security en 2023 2.Broken Authentication

    – Autenticación rota • La autenticación podría verse comprometida de muchas maneras. Por ejemplo, si la autenticación permite la fuerza bruta, contraseñas débiles o un control de identidad no verificable, podría romperse fácilmente.
  8. Actualización del OWASP Top 10 security en 2023 2.Broken Authentication

    – Autenticación rota POST /graphql { "query":"mutation { login (username:\"<username>\",password:\"<password>\") { token } }" }
  9. Actualización del OWASP Top 10 security en 2023 2.Broken Authentication

    – Autenticación rota • Tokens leaks https://api.example.com/v1.1/users/payment/show?user_id=12 &access_token=360f91d065e56a15a0d9a0b4e170967b
  10. Actualización del OWASP Top 10 security en 2023 3.Broken Object

    Property Level Authorization – Autorización de nivel de propiedad de objeto rota • Expone propiedades de un objeto consideradas sensibles y a las que no debe acceder el usuario. • Permite al usuario cambiar, añadir y o eliminar el valor de una propiedad sensible, para la que no debería tener acceso.
  11. Actualización del OWASP Top 10 security en 2023 3.Broken Object

    Property Level Authorization – Autorización de nivel de propiedad de objeto rota • https://api.example.com/v1.1/users/show?user_id=12 { "id": 6253282, "username": "vickieli7", "screen_name": "Vickie", "location": "San Francisco, CA", "bio": "Infosec nerd. Hacks and secures. Creates god awful infographics.", "api_token": "8a48c14b04d94d81ca484e8f32daf6dc", "phone_number": "123-456-7890", "address": "1 Main St, San Francisco, CA, USA" }
  12. Actualización del OWASP Top 10 security en 2023 3.Broken Object

    Property Level Authorization note1 = Note("Nota privada de Juan", user_id=1) note2 = Note("Nota secreta de María", user_id=2) note_manager = NoteManager() note_manager.add_note(note1) note_manager.add_note(note2) # Supongamos que un usuario intenta ver las notas de otro usuario (un atacante) usuario_malicioso_id = 3 notas_usuario_malicioso = note_manager.get_notes_for_user(usuario_malicioso_id) for nota in notas_usuario_malicioso: print(nota.content) class Note: def __init__(self, content, user_id): self.content = content self.user_id = user_id class NoteManager: def __init__(self): self.notes = [] def add_note(self, note): self.notes.append(note) def get_notes_for_user(self, user_id): return [note for note in self.notes if note.user_id == user_id]
  13. Actualización del OWASP Top 10 security en 2023 3.Broken Object

    Property Level Authorization def get_notes_for_user(self, user_id, request_user_id): # Verificar si el usuario solicitante tiene permiso para ver las notas del usuario especificado if user_id == request_user_id: return [note for note in self.notes if note.user_id == user_id] else: return None
  14. Actualización del OWASP Top 10 security en 2023 4.Unrestricted Resource

    Consumption – Consumo de recursos sin restricciones • La explotación de esta vulnerabilidad por atacantes mediante un ataque de denegación de servicio (DoS), ante la falta de suficientes recursos para atender a todas las peticiones que se realizan a la API. • Un aumento sustancial de los costes operativos asociado al incremento de los recursos que se deben emplear, por ejemplo, más almacenamiento en la nube.
  15. Actualización del OWASP Top 10 security en 2023 5.Broken Function

    Level Authorization – Autorización rota a nivel de función
  16. Actualización del OWASP Top 10 security en 2023 5.Broken Function

    Level Authorization – Autorización rota a nivel de función
  17. Actualización del OWASP Top 10 security en 2023 5.Broken Function

    Level Authorization def actualizar_perfil_usuario(id_usuario, nuevos_datos): # Obtener datos del usuario (asumiendo una conexión a la base de datos) datos_usuario = obtener_datos_usuario(id_usuario) # Actualizar datos (asumiendo la manipulación de datos) datos_usuario.update(nuevos_datos) # Guardar datos actualizados (asumiendo interacción con la base de datos) guardar_datos_usuario(datos_usuario) return {"mensaje": "Perfil actualizado correctamente"}
  18. Actualización del OWASP Top 10 security en 2023 5.Broken Function

    Level Authorization def actualizar_perfil_usuario(usuario_actual, id_usuario, nuevos_datos): # Compruebe si el usuario actual tiene permiso para actualizar el perfil objetivo if not esta_autorizado(usuario_actual, id_usuario): return {"error": "No autorizado para actualizar el perfil"} def esta_autorizado(usuario_actual, id_usuario_objetivo): """ Esta función determina si el usuario actual está autorizado para actualizar el perfil objetivo. (Reemplace con su lógica de autorización basada en roles y permisos de usuario) """ return usuario_actual.id == id_usuario_objetivo # Ejemplo: Permitir solo actualizaciones de uno mismo # Uso (asumiendo un objeto de usuario 'usuario_actual' que ha iniciado sesión) actualizar_perfil_usuario(usuario_actual, usuario_actual.id, {"nombre": "Juana Pérez"})
  19. Actualización del OWASP Top 10 security en 2023 6. Unrestricted

    Access to Sensitive Business Flows-Acceso sin restricciones a flujos empresariales sensibles • OWASP señala que cuando se crea un endpoint de API, se expone un flujo de negocio y es fundamental entender que hay flujos de negocio más sensibles que otros y el acceso excesivo a ellos puede resultar perjudicial para la empresa. • Ejemplos de estos flujos pueden ser los de compra de un producto, el de publicación de comentarios o el de reservas. • La vulnerabiliadd se produce cuando se expone un flujo de negocio sensible sin contar con mecanismos que restrinjan el acceso de forma adecuada.
  20. Actualización del OWASP Top 10 security en 2023 7.Server Side

    Request Forgery – Falsificación de peticiones del lado del servidor
  21. Actualización del OWASP Top 10 security en 2023 7.Server Side

    Request Forgery – Falsificación de peticiones del lado del servidor • Validación de entrada de usuario • Listas blancas de direcciones y recursos permitidos • Limitar permisos y aplicar el principio de mínimo privilegio.
  22. Actualización del OWASP Top 10 security en 2023 8.Security Misconfiguration

    – Configuración incorrecta o no segura • Faltan parches de seguridad • Configuraciones por defecto • Funciones innecesarias que están activadas • La aplicación no utiliza seguridad de la capa de transporte (TLS) ni una política de intercambio de recursos entre orígenes (CORS). • Los mensajes de error que exponen información confidencial
  23. Actualización del OWASP Top 10 security en 2023 8.Security Misconfiguration

    – Configuración incorrecta o no segura • Poner en marcha un proceso de hardening • Revisar y actualizar las configuraciones de la API • Automatizar la evaluación de la configuración y los ajustes en todos los entornos
  24. Actualización del OWASP Top 10 security en 2023 9.Improper Asset

    Management – Gestión inadecuada de activos
  25. Actualización del OWASP Top 10 security en 2023 10.Unsafe Consumption

    of APIs – Consumo no seguro de APIs • Una API interactúa con otras a través de un canal no cifrado. • No se validan ni sanean los datos obtenidos de otras API antes de procesarlos y trasladarlos a componentes de la API. • No se validan las redirecciones. • No se limitan los recursos que se pueden emplear para procesar respuestas de servicios de terceros. • No se implementan tiempos de espera en las interacciones con servicios de terceros.
  26. Herramientas para evaluar y mejorar la seguridad crAPI https://github.com/OWASP/crAPI Completely

    Ridiculous API (crAPI) Pixi https://github.com/DevSlop/Pixi Vulnerable REST API based on the MEAN stack VAmPI https://github.com/erev0s/VAmPI OWASP API Top 10 vulnerabilities vAPI https://github.com/roottusk/vapi OWASP API Top 10-based exercises BankGround https://gitlab.com/karelhusa/bankg round Open source project to learn REST and GraphQL security
  27. Estrategias y mejores prácticas para garantizar la seguridad de tus

    APIs • Implementar comprobaciones de autorización a nivel de objeto y considerar la posibilidad de utilizar ID de objetos generados aleatoriamente. • Asignar y aplicar privilegios en funciones que requieran confidencialidad. • Establecer límites al tamaño de las peticiones, las frecuencias y a qué pueden acceder los usuarios. • Imponer restricciones a los flujos de llamdas que podrían ser el origen de un ataque si se usan en exceso. • Evitar configuraciones inseguras cuando sea posible. • Documentar los servicios y actualizar estos catálogos periódicamente.
  28. Estrategias y mejores prácticas para garantizar la seguridad de tus

    APIs • Mejorar la gobernanza de las APIs • Utilizar herramientas de descubrimiento de APIs • Desplegar una pasarela API • Añadir un firewall de aplicaciones web (WAF) • Cifrar todos los datos (mediante TLS, por ejemplo) • Utilizar OAuth para controlar el acceso de la APIs • Aplicar la limitación de velocidad para restringir la frecuencia con la que se puede llamar a su API. • Considerar un enfoque de confianza cero o zero trust