Top Banner
Testing Docker Images Security Bsides Manchester, August 2017
60

Testing Docker Images Security

Jan 22, 2018

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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