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

Construyendo APIs seguras - Semana de la Seguridad Labsis 2019.

Construyendo APIs seguras - Semana de la Seguridad Labsis 2019.

Ileana Maricel Barrionuevo

October 24, 2019
Tweet

More Decks by Ileana Maricel Barrionuevo

Other Decks in Programming

Transcript

  1. Construyendo APIs seguras Ing. Ileana Maricel Barrionuevo GSSIS - Laboratorio

    de Sistemas Ciclo Conferencias de Seguridad 2019 1
  2. Outline - APIs - problemas - OWASP API security Top

    10 - TiredfulAPI >> Explotando la app >> Cómo prevenir - Leak! 2
  3. Y ahora… ¿cuál es el problema? - Implementación de la

    API Expuesta - Object IDs, filters... Requests - Numerosas vulnerabilidades 6 Exposición de datos, Mitm, DoS... Ileana Maricel Barrionuevo - Labsis - GSSIS
  4. API Security Top 10 - 2019 API1:2019 - Broken Object

    Level Authorization API2:2019 - Broken Authentication API3:2019 - Excessive Data Exposure API4:2019 - Lack of Resources & Rate Limiting API5:2019 - Broken Function Level Authorization API6:2019 - Mass Assignment API7:2019 - Security Misconfiguration API8:2019 - Injection API9:2019 - Improper Assets Management API10:2019 - Insufficient Logging & Monitoring 8 Ileana Maricel Barrionuevo - Labsis - GSSIS
  5. API1:2019 - Broken Object Level Authorization 11 IDOR "A direct

    object reference occurs when a developer exposes a reference to an internal implementation object, such as a file, directory, database record, or key, as a URL or form parameter." Eric Sheridan • Vector de ataque ID • Fallas de seguridad Complejidad de mecanismos Checks de autorización? • Impacto Compromiso de cuentas, divulgación, manipulación y pérdida de datos. Ileana Maricel Barrionuevo - Labsis - GSSIS
  6. API1:2019 - Broken Object Level Authorization Django Guardian DjangoObjectPermissionsFilter -

    ObjectPermissionBackend - ObjectPermissionChecker Rules - https://github.com/dfunckt/django-rules >>> @rules.predicate >>> def is_exam_owner(user, exam): ... return exam.user == user How to prevent! 12 Validar que el usuario logueado posea permisos sobre el objeto Slugs → /blog/my-entry-blog from django.contrib.auth.decorators import user_passes_test @user_passes_test(lambda u: u.has_perm('is_exam_owner')) def get_score(request, score_card): # ...
  7. API1:2019 - Broken Object Level Authorization 13 Reemplazar el ID

    original por un hash. IDORUtil.java How to prevent! Ileana Maricel Barrionuevo - Labsis - GSSIS
  8. API1:2019 - Broken Object Level Authorization 14 Reemplazar el ID

    original por un hash. IDORUtil.java public class Movie { @JsonIgnore private String backendIdentifier; ... ... } How to prevent! Ileana Maricel Barrionuevo - Labsis - GSSIS
  9. API1:2019 - Broken Object Level Authorization 15 Reemplazar el ID

    original por un hash. How to prevent! Ileana Maricel Barrionuevo - Labsis - GSSIS /movies { "F498AB2AFB450684FB0378AD6D87F10C3B1826AA":"Avengers", "24D8FB4F39241C8E63F3CF9E82F2D644594CBB4B":"StarWars", "F1244AD6A71A9C6C9E08BA6D819D119FBD7944D0":"Jumanji" } /movies/F1244AD6A71A9C6C9E08BA6D819D119FBD7944D0 { "name":"Jumanji", "creationYear":2005, "creator":"Fox" }
  10. API3:2019 - Excessive Data Exposure 16 • Vector de ataque

    Análisis de respuestas - errores • Fallas de seguridad APIs implementadas genéricamente falta de validaciones • Impacto Datos expuestos MISSING ERROR HANDLING Ileana Maricel Barrionuevo - Labsis - GSSIS
  11. API3:2019 - Excessive Data Exposure 17 How to prevent! Definir

    qué datos pueden ser devueltos por la API → incluye errores URLConf urlpatterns = [ url(r'^books/(?P<ISBN>[0-9-]+)/$', views.book_detail, name='books'), ] • Devolver errores genéricos • Gestionar mediante mensajes de excepciones Java → Hibernate Validator @Max(value=) @Min(value=) @Future @NotNull .... Ileana Maricel Barrionuevo - Labsis - GSSIS
  12. API3:2019 - Excessive Data Exposure 18 How to prevent! Definir

    qué datos pueden ser devueltos por la API → incluye errores • Devolver errores genéricos • Gestionar mediante mensajes de excepciones Ileana Maricel Barrionuevo - Labsis - GSSIS
  13. API5:2019 - Broken Function Level Authorization 20 • Vector de

    ataque API calls legítimas; reemplazo de métodos - is_Admin false-->true • Fallas de seguridad • Impacto Acceso a funcionalidades no autorizadas. Endpoints accesibles a usuarios anónimos - sin privilegios Checks de autorización mal implementados - confusos Ileana Maricel Barrionuevo - Labsis - GSSIS
  14. Denegar accesos por defecto Especificar qué roles pueden acceder a

    cada función. Chequear permisos a recursos requeridos para cada función. 21 API5:2019 - Broken Function Level Authorization How to prevent! @permission_classes((IsAuthenticated, IsAdminUser)) AuthorizeAttribute Ileana Maricel Barrionuevo - Labsis - GSSIS
  15. 23 API8:2019 - Injection • Vector de ataque Datos maliciosos

    → inputs, parámetros… • Fallas de seguridad • Impacto Divulgación, pérdida de datos - DoS - compromiso completo del host en la utilización de queries - ORM - comandos - parsers Ileana Maricel Barrionuevo - Labsis - GSSIS
  16. 24 API8:2019 - Injection How to prevent! Consultas parametrizadas Utilización

    de ORM cursor.execute('Select * from health_tracker where month=%s', (month_requested,)) activity_detail = cursor.fetchall() return JsonResponse(activity_detail, safe=False) activity_detail = Tracker.objects.filter(month=month_requested) final_serialized_data = [] for activity in activity_detail: serializer = TrackerSerializers(activity) final_serialized_data.append(serializer.data) return Response(final_serialized_data) Nunca confiar en la entrada provista por el usuario Ileana Maricel Barrionuevo - Labsis - GSSIS
  17. 25 API2:2019 - Broken Authentication • Vector de ataque Exposición

    - mecanismos complejos - implementación • Fallas de seguridad • Impacto Control de cuentas Acceso a información personal Ejecución de acciones en nombre de otros Ausencia de mecanismos No considera vectores de ataque Ileana Maricel Barrionuevo - Labsis - GSSIS
  18. Leak! https://instagram.fcor2-2.fna.fbcdn.net/vp/4bba0741c40479fbc0dbe00f69bcef94/5DB29 603/t51.12442-15/e35/75328509_103645647687693_6795535750647981337_n.jpg?_n c_ht=instagram.fcor2-2.fna.fbcdn.net 26 Ileana Maricel Barrionuevo - Labsis

    - GSSIS Una de mis stories. (a los 7 días expira) • Ver→ /graphql/query/?query_hash= • buscar display_url • POST /stories/reel/seen es el “visto”.
  19. 28 • Autenticar y autorizar !! • Permisos hacia la

    API y obj. • Exponer sólo lo necesario • Gestionar errores Ileana Maricel Barrionuevo - Labsis - GSSIS • No exponer IDs • ORMs - parametrized queries • Validar inputs NO CONFIAR EN API CONSUMERS!!
  20. 29 Fuentes • https://payatu.com/blog_16 • OWASP API Security Top Ten

    2019 • https://idratherbewriting.com/learnapidoc/docapis_what_is_a_rest_api.html • https://pypi.org/project/django-secure/ • https://github.com/righettod/poc-idor Ileana Maricel Barrionuevo - Labsis - GSSIS