testing docker images security

60
Testing Docker Images Security Bsides Manchester, August 2017

Upload: jose-manuel-ortega-candel

Post on 22-Jan-2018

585 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Testing Docker Images Security

Testing Docker Images Security

Bsides Manchester, August 2017

Page 2: Testing Docker Images Security

Jose Manuel

Ortega

Software Engineer & Security Researcher

@jmortegac

jmortega.github.io

Page 3: Testing Docker Images Security

Agenda

● Introduction to docker security● Security best practices● Tools for auditing docker images

Page 4: Testing Docker Images Security

Docker

● “Docker containers wrap up a piece ofsoftware in a complete filesystem thatcontains everything it needs to run: code,runtime, system tools, system libraries –anything you can install on a server. Thisguarantees that it will always run the same,regardless of the environment it is running in.”

Page 5: Testing Docker Images Security

Docker Security

● Docker provides an additional layer of isolation, making your infrastructure safer by default.

● Makes the application lifecycle fast and easier,reducing risks in your applications

Page 6: Testing Docker Images Security

Docker Security

● Docker uses several mechanisms for security:

○ Linux kernel namespaces

○ Linux Control Groups (cgroups)

○ The Docker daemon

○ Linux capabilities (libcap)

○ Linux security mechanisms like AppArmor or

SELinux

Page 7: Testing Docker Images Security

Docker Security

● Namespaces:provides an isolated view of the

system where processes cannot see other

processes in other containers

● Each container also gets its own network stack.

● A container doesn’t get privileged access to the

sockets or interfaces of another container.

Page 8: Testing Docker Images Security

Docker Security

● Cgroups: kernel feature that limits and isolates the resource usage(CPU,memory,network) of a collection of processes.

● Linux Capabilities: divides the privileges of root into distinct units and smaller groups of privileges.

Page 9: Testing Docker Images Security

DockerHub

Page 10: Testing Docker Images Security

DockerFilehttps://github.com/CenturyLinkLabs/dockerfile-from-image

Page 11: Testing Docker Images Security

Docker images

● Images are extracted in a chrooted sub process, being the first-step in a wider effort toward privilege separation.

● From Docker 1.10, all images are stored and accessed by the cryptographic checksums of their contents, limiting the possibility of an attacker causing a collision with an existing image Docker Content Trust.

Page 12: Testing Docker Images Security

Docker Content Trust

● Protects against untrusted images

● Can enable signing checks on every managed host

● Signature verification transparent to users

● Guarantee integrity of your images when pulled● Provides trust from publisher to consumer● export DOCKER_CONTENT_TRUST=1

● ~/.docker/trust/trusted-certificates/

Page 13: Testing Docker Images Security

Security Best Practices

Page 14: Testing Docker Images Security

DockerFile Security

● Do not write secrets(users and passwords).● Remove unnecessary setuid, setgid permissions

(Privilege escalation)● Download packages securely using GPG and certificates● Try to restrict an image or container to one service

Page 15: Testing Docker Images Security

Security best practices

● To disable setuid rights, add the following to the Dockerfile of your image

Page 16: Testing Docker Images Security

Security best practices

● Don’t run containers with --privileged flag

● The --privileged flag gives all capabilities to the

container.

● docker run --privileged ...● docker run --cap-drop=ALL --cap-add=CAP_NET_ADMIN

...

Page 17: Testing Docker Images Security

Security best practices capabilities

● How do we add/remove capabilities?

● Use cap-add and cap-drop with docker run/create

● Drop all capabilities which are not required

● docker run --cap-drop ALL --cap-add $CAP

Page 18: Testing Docker Images Security

Security best practices capabilities

● Manual management within the container:docker run --cap-add ALL

● Restricted capabilities with root:docker run --cap-drop ALL --cap-add $CAP

● No capabilities:docker run --user

Page 19: Testing Docker Images Security

Security best practices capabilities

Page 20: Testing Docker Images Security

Security best practices

● Set a specific user.● Don’t run your applications as root in containers.

Page 21: Testing Docker Images Security

Security best practices

● We can verify the integrity of the image● Checksum validation when pulling image from docker hub● Pulling by digest to enforce consistent

Page 22: Testing Docker Images Security

Security best practices

● Check packages installed in the container

Page 23: Testing Docker Images Security

Docker security is about limiting and controlling the attack surface on the kernel.

Page 24: Testing Docker Images Security

Docker least privileges● Do not run processes in a container as root to avoid root

access from attackers.● Enable User-namespace (disabled by default)● Run filesystems as read-only so that attackers can not

overwrite data or save malicious scripts to the image.● Cut down the kernel calls that a container can make to

reduce the potential attack surface.● Limit the resources that a container can use (SELinux/AppArmor)

Page 25: Testing Docker Images Security

Containers and volumes read-only

15

Page 26: Testing Docker Images Security

Checklist Dockerfile

Page 27: Testing Docker Images Security

Checklist building/maintaining/consuming

Page 28: Testing Docker Images Security

AUDITING

TOOLS

Page 29: Testing Docker Images Security

Docker images scanning● You can scan your images for known vulnerabilities● There are tools for that, like Docker Security Scanning,

Docker Bench Security and CoreOS Clair● Find known vulnerable binaries

Page 30: Testing Docker Images Security

Docker Security Scanning

https://docs.docker.com/docker-cloud/builds/image-scan/

● Checks based on best practices for hosts and containers

● Find Common Vulnerabilities and Exposures (CVEs)

Page 31: Testing Docker Images Security

Docker Security Scanning● Checks against CVE database for image layers● Binary scanning of all components in the image● Performs binary scan to pick up on statically linked binaries● Analyses libraries statically compiled in the image● Generates a reports that shows if there are CVE in the

libraries inside the image

Page 32: Testing Docker Images Security

Docker Security Scanning

15

25

Page 33: Testing Docker Images Security

Docker Security Scanning

Page 34: Testing Docker Images Security

Docker CVEhttps://www.docker.com/docker-cve-database

Page 35: Testing Docker Images Security

Security pipeline

Page 36: Testing Docker Images Security

Clair (Container Vulnerability Analysis Service)

https://github.com/coreos/clair

Vulnerability Static Analysis for Containers

Page 37: Testing Docker Images Security

Clair Use cases● You've found an image by searching the internet and want

to determine if it's safe enough for you to use in production.

● You're regularly deploying into a containerized production environment and want operations to alert or block deployments on insecure software.

Page 38: Testing Docker Images Security
Page 39: Testing Docker Images Security
Page 40: Testing Docker Images Security

Docker Bench Security

https://github.com/docker/docker-bench-security

Checks based on best practices for hosts and containers

Page 41: Testing Docker Images Security

Docker bench security● Open-source tool for running automated tests ● Inspired by the CIS Docker 1.11 benchmark● Runs against containers currently running on same host● Checks for AppArmor, read-only volumes, etc...

Page 42: Testing Docker Images Security
Page 43: Testing Docker Images Security

Docker bench security

Page 44: Testing Docker Images Security

Docker bench security● The host configuration● The Docker daemon configuration● The Docker daemon configuration files● Container images and build files● Container runtime● Docker security operations

Page 45: Testing Docker Images Security

Docker bench security● The Docker daemon configuration● [WARN] 2.1- Restrict network traffic between containers● [WARN] 4.1 - Create a user for the container

[WARN] * Running as root:● [WARN] 5.4 - Restrict Linux Kernel Capabilities within containers

[WARN] * Capabilities added: CapAdd=[audit_control]

● [WARN] 5.13 - Mount container's root filesystem as readonly

[WARN] * Container running with root FS mounted R/W:

Page 46: Testing Docker Images Security

15

25 22

Page 47: Testing Docker Images Security

Docker Slim

https://github.com/docker-slim/docker-slim

Optimize and secure your Docker containers

Page 48: Testing Docker Images Security

Other tools● OpenSCAP Container Compliance● Lynis● Twistlock● Dockscan● Aqua Security● Dagda

Page 49: Testing Docker Images Security

OpenScap Clair Lynis TwistLock DockScan

Images and Containers

Images and Containers

DockerFile Images, containers, packages. Kubernetes Mesos.

Docker server

RedHat/Fedora/CentOS based containers

Debian/Ubuntu/CentOS based containers

Linux and Unix based Systems

Linux and Unix based Systems

Docker and container installations

Page 50: Testing Docker Images Security

Lynis● Lynis is a Linux, Mac and Unix security auditing

and system hardening tool that includes a module to audit Dockerfiles.

● lynis audit dockerfile <file>

Page 51: Testing Docker Images Security

● https://github.com/CISOfy/lynis-docker

Page 52: Testing Docker Images Security

Dagda● Static analysis of known vulnerabilities on

Docker containers● Allows monitoring Docker containers for

detecting anomalous activities

Page 53: Testing Docker Images Security

Dagda● Python 3● MongoDB● PyMongo● Requests● Python-dateutil● Joblib● Docker-py● Flask● Flask-cors● PyYAML

Page 54: Testing Docker Images Security

● python3 dagda.py check --docker_image <image_name>● python3 dagda.py history <image_name> --id <Id_Scan>

Page 55: Testing Docker Images Security
Page 56: Testing Docker Images Security
Page 57: Testing Docker Images Security

Conclusions

Signing ● Secure & sign your source

Dependences ● Pin & verify your dependencies

Content Trust● Sign your artifacts with Docker

Content Trust

Privileges ● Least Privilege configurations

Page 59: Testing Docker Images Security

References

● Docker Content Trust

● https://docs.docker.com/engine/security/trust/content_trust

● Docker Security Scanning

● https://docs.docker.com/docker-cloud/builds/image-scan● https://blog.docker.com/2016/04/docker-security● http://softwaretester.info/docker-audit/

Page 60: Testing Docker Images Security

Books