OWASP Docker(/Container) Top 10

Transcription

OWASP Docker(/Container) Top 10License of slides (except c-sa/4.0/Dr. Dirk :Container ship MSC Zoe on the river Elbe in front of Blankenese.jpg by Hummelhummel, CC BY-SA 3.0

about:meIndependent Consultant - Information Security(self-employed)OWASP PhD in natural science 20 years paid profession in infosec Pentests, consulting, training 60 publications in magazines Application, system, network security Co-authored Linux book ages ago Information security management Organized chaired AppSec Europe 2013 in Hamburg Involved in few following European conferencesOpen Source Old „fart“: First publication 1995 about Linux (heise) TLS-Checker testssl.shOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

What awaits you Introducing Docker Top 10–––MotivationIdeaStatusOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

Motivation Prerequisite: Understand what you’re doingOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 74986709794197504

Motivation Prerequisite: Understand what you’re doing–Underestimation of complexity –Building a new network with new systemsManagers not knowing required skills well enough Devs are no system / network architectsAn average admin (Ops guy) isn’t eitherOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

Idea Docker/container security is about system and network security. Project is suggesting controls to minimize attack surfacesOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

Threat modeling Threats to mycontainers?Enumerate!OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SAhttps://imgur.com/gallery/ZdEQDwh

Threat ainersNetworkOrchestationToolOWASP Global AppSec – Amsterdam 26.9.2019HostProblemThreatsPoisenedImages Dirk Wetter CC 4.0 BY-NC-SAProblem w/neighborcontainer

Threat modeling Biggest Threats a.k.a. game over–Attack to host via –Network services (or just protocol flaw)Kernel exploitAttack to orchestration Via networkYour management backplane!OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SAReuters, see cle23697997.ece

Threat ainersNetworkOrchestationToolOWASP Global AppSec – Amsterdam 26.9.2019HostProblemThreatsPoisenedImages Dirk Wetter CC 4.0 BY-NC-SAProblem w/neighborcontainer

①②③④IntroductionThreatsOverviewTop# TitleD01Secure User MappingD02Patch Management PolicyD03Network SegmentationD04Secure Defaults and HardeningD05Maintain Security ContextsD06Protect SecretsD07Ressource ProtectionD08Container Image Integrity and OriginD09Follow Immutable ParadigmD10Logging⑤ What‘s next for

1324

D02 D02 – Patch Management Policy A9 in OWASP Top 10Using Components with Known Vulnerabilities–Host–Container Orchestration–Container Images–(Container Software)OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D02 D02 – Patch Management Policy–Host Kernel-Syscalls– Window for privilege escalation!Hopefully nothing is exposed, see D04OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D02OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SAhttps://isc.sans.edu/forums/diary/What You Need To Know About TCP SACK Panic/25046/

D02 Top 2: Patch Management Policy–Host Auto-updates to the rescue!unattended-upgrade(8) and friends– monitor: apt-listchanges(1)–OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D02 Top 2: Patch Management Policy–Container Orchestration Don’t forget to patch the management as needed ;-)OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

(D02)Cloud Native Computing Foundation– Open Sourcing the Kubernetes Security Audit (github) .managed the audit over a four month time span to complete a security assessment against Kubernetes, bearing inmind the high complexity and wide scope of the project significant room for improvement. The codebase is large andcomplex, with large sections of code containing minimal documentationand numerous dependencies, including systems external to Kubernetes.There are many cases of logic re-implementation within thecodebase . selected eight components OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

(D02)Cloud Native Computing Foundation– Open Sourcing the Kubernetes Security Audit (github)OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

(D02)Cloud Native Computing Foundation– Open Sourcing the Kubernetes Security Audit (github)OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D02 D02 – Patch Management Policy–Mini Distro Images Do often: Tear down & freshly deploy (Best: Unit/integration testing before)OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D02 D02 – Patch Management Policy–Docker / Container Software dockerd , docker-containerd-shim libs, .OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D03 D03 – Network Segmentation –Basic DMZ techniques Part I: Building the networkOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SAhttps://xkcd.com/2044/

D03 D03 – Network Segmentation–Depends on Network driver Bridge:– use different bridges / networks for segmentation– DON’T put every container into one /24 Different Tenants: never ever in one network.– More laterOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–3 1 domains Orchestration toolHostContainer imageFirewallingOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–Orchestration tool’s management interfaces Lock down– Network access– Interface with AuthN Question secure defaults!OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04k8s: Insecure kubelet @ tcp/10250 (HTTPS) 10255 (HTTP) Default still open? Fixes complete?OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04CoreOS: etcd @ tcp/2379OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04CoreOS: etcd @ tcp/2379I did a simple search on shodan and came up with 2,284 etcd servers on the open internet. So I clicked a few andon the third try I saw what I was hoping not to see. CREDENTIALS, a lot of CREDENTIALS. Credentials for thingslike cms admin, mysql root, postgres, etc.[.] I wrote a very simple script that basically called the etcd API and requested all keys. That’s basically equivalent todoing a database dump but over their very nice REST API.GET http:// ip address :2379/v2/keys/?recursive trueThis will return all the keys stored on the servers in JSON format. So my script basically went down the list andcreated a file for each IP (127-0-0-1.json) with the contents of etcd. I stopped the script at about 750 MB of data and1,485 of the original IP list.From: OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–Host: OS A standard Debian / Ubuntu is a standard Debian / Ubuntu Specialized container OS like– CoreOS (RH)– RancherOS– VMWare Photon (FLOSS!)– Snappy Ubuntu Core(?)– . Mind: Support time / EOLOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–Host: Services Standard Distribution– Minimum principle, a.k.a.: Do not install useless junkAlso not needed:– Avahi– RPC services– CUPS– SMB / NFSOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–Host Apply some custom hardening– lynis– CISPut all changes into your config management system!OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

prompt% sudo nmap -A .[.]6556/tcp opencheck mk syn-ack ttl 64 check mk extension for Nagios 1.5.[REDACTED] banner: check mk \x0AVersion: 1.5.[REDACTED]\x0AAgentOS: linux\x0AHostna me: [REDACTED][.]prompt% telnet 10.18.XX.YY 6556Trying 10.18.XX.YY.Connected to 10.18.XX.YY.Escape character is ' ]'. check mk [.] df [output of df command] ps [output of ps command with all docker processes in the container] kernel [all kinds of Linux kernel variables]

D04 D04 – Secure Defaults and Hardening–Container from kernel perspective (I) Controlling system calls– syscalls(2), syscall(2)– t seccomp yourprofile.jsonOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–Container from kernel perspective (II) Using x/capability.hOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–Container from kernel perspective (II) Using capabilities--cap-dropOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–Container Minimum principle one microservice per container (but: see networking)Debian / Ubuntu, comes with too muchBetter: Alpine– Busybox– But: wget / netcat “Hacker’s friends” (lessBest:– Distroless, multistageOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA)

D04 D04 – Secure Defaults and Hardening–Firewalla) Last resort to protect servicesb) Good means for network boundariesOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–Firewalla) Last resort to protect servicesprompt% telnet 10.18.XX.YY 6556Trying 10.18.XX.YY.Connected to 10.18.XX.YY.Escape character is ' ]'.(all dirty details follow)OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–Firewalla) Last resort (or additional protection) for network servicesiptables -A INPUT -s mgmt IP -d myCHKMY IP -m tcp --dport 6556 -j ACCEPTiptables -A INPUT -d CHKMY IP -m tcp --dport 6556 -j LOGiptables -A INPUT -d CHKMY IP -m tcp --dport 6556 -j DROPOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–Firewallb) Good means for network boundaries– Whitelist what’s needed– Log everything which violates the whitelist– Block the restOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D04 D04 – Secure Defaults and Hardening–Verify: Did I miss any service?Firewall settingsWhat (Baseline):– Host– OrchestrationOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA ScanningFrom where:– WAN– Container Network– LAN

D06 D06 – Protect Secrets–Whereto: Keys, certificates, credentials, etc ? Image ?Env variables?–docker run -e SECRET myprrecious containerID Careful!–All processes in this container inherit SECRET && know myprrecious–OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SAhttp://www.eoht.info/page/Chicken and egg problem

prompt% sudo nmap -A .[.]6556/tcp opencheck mk syn-ack ttl 64 check mk extension for Nagios 1.5.[REDACTED] banner: check mk \x0AVersion: 1.5.[REDACTED]\x0AAgentOS: linux\x0AHostna me: [REDACTED][.]prompt% telnet 10.18.XX.YY 6556Trying 10.18.XX.YY.Connected to 10.18.XX.YY.Escape character is ' ]'. check mk [.] df [output of df command] ps [output of ps command with all docker processes in the container] kernel [all kinds of Linux kernel variables]

docker containers:sep(XX) (more detailed info about containers and their processes) docker node images [[[images]]][[[image inspect]]][{"Id": "sha256:7d788a125269edce5e71f643 .[.][[[image inspect]]]"Env": [["PATH /usr/local/bin:/usr/bin:/sbin:/bin",{"SLAPD SUFFIX dc ******,dc ***","SLAPD PASSWORD ********","Id": "sha256:"SLAPD CONFIG PASSWORD *******"http://www.eoht.info/page/Chicken and egg problem

D06 D06 – Protect Secrets–Whereto: Keys, certificates, credentials, etc ? Image ?Env variables?– docker run -e SECRET myprrecious ID– Careful! check mk example grepping equals tofor c in (docker ps -q); dodocker inspect c grep PASSdoneLDAP PASSWORD, SLAPD PASSWORD, MONGO PASSWORD*, POSTGRESQL PASS* FTP PASSWORD, SPRING PASS*, JWT HMAC* . OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D06 D06 – Protect Secrets–Whereto: Keys, certificates, credentials, etc ? Image ?Env variables?–docker run -e SECRET myprrecious ID–Pointer –docker run –env-file ./secretsfile.txt IDKubernetes YAML secrets: be careful tooOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

D06 D06 – Protect Secrets–Whereto: Keys, certificates, credentials, etc ? Image ?Env variables?–docker run -e SECRET myprrecious IDPointer: as bad– Kubernetes YAML secrets: be careful toomounts– –Secret mounts (formerly swarm only) /run/secrets similar k8OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

What’s Next Managers–Ressources Skills– Education needed? Budget– External/internal Manpower needed?–CISO: Patchmanagement / Monitoring of it Network architecture? Do I always have the security status? (scanners)OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

What’s Next Developers / Operation: Scan yourself––Net: NmappingHost: Lynis Vuln. Scanner Docker CIS curitydocker inspect / network inspect– –Images: Image Vulnerability ScannersOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

OWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

about:endThank you!@drwetterOWASP Global AppSec – Amsterdam 26.9.2019 Dirk Wetter CC 4.0 BY-NC-SA

① Introduction ② Threats ③ Overview ④ Top# Title D01 Secure User Mapping D02 Patch Management Policy D03 Network Segmentation D04 Secure Defaults and Hardening