Top Banner
Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017
65

Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

May 09, 2020

Download

Documents

dariahiddleston
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: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

AppliedMicroserviceSecurity

AdrianMouat

GOTOAmsterdam2017

Page 2: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le
Page 3: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le
Page 4: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le
Page 5: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le
Page 6: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

AppliedMicroserviceSecurity

Howtobuildanddeployamicroservicesecurely

Withthemajorcaveatthatnothingontheinternetissecure

Andthatbestpracticesarestillevolving

Page 7: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

ExampleApplication

Page 8: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le
Page 9: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Architecture

Page 10: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le
Page 11: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

"Bad"IdentidockDocker leFROMpython

RUNpipinstallFlaskuWSGIrequestsredisWORKDIR/appCOPYapp/appCOPYcmd.sh/

EXPOSE90909191

CMD["/cmd.sh"]

Page 12: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

EvilNo.1Noversionnumbersforsoftware

Breaksrepeatabilityandprovenance

Page 13: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Whichversion?Manypackagesusesemver

MAJOR.MINOR.PATCH

Toospeci candriskmissingsecurityupdates

Toocoarseandriskbreakingchanges

ConsiderMAJOR.MINOR

Page 14: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

"Versioned"IdentidockDocker le

FROMpython:3.6

COPYrequirements.txt/requirements.txtRUNpipinstall-r/requirements.txtWORKDIR/appCOPYapp/appCOPYcmd.sh/

EXPOSE90909191

CMD["/cmd.sh"]

Page 15: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

requirements.txtappdirs>=1.4,<1.5certifi==2017.4.17chardet>=3.0,<3.1click==6.7Flask>=0.12,<0.13idna==2.5...

Page 16: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Aside:TotalRepeatabilty

Currentlynotpossiblewithdockerbuild

Alsopackagescanbeaproblem

Canrunownmirrore.g.

Bazel

"Buildtoolsmustallowustoensure

consistencyandrepeatability"

SiteReliabilityEngineering

https://www.aptly.info/

Page 17: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

EvilNo2.NotSettingaUserIdentidockisrunningasroot

Changetolessprivilegeduser

Page 18: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

IdentidockDocker lewithUser

FROMpython:3.6

RUNgroupadd-ridentidock&&useradd-r-gidentidockidentidock

COPYrequirements.txt/requirements.txtRUNpipinstall-r/requirements.txtWORKDIR/appCOPYapp/appCOPYcmd.sh/

USERidentidock

EXPOSE90909191

CMD["/cmd.sh"]

Page 19: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

ChangingUseratStart-up#!/bin/shset-e

if["$1"='redis-server'-a"$(id-u)"='0'];thenchown-Rredis.execgosuredis"$0""$@"fi

exec"$@"

Page 20: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

gosusudoforcontainers

su-execinAlpine

https://github.com/tianon/gosu

$dockerrun-itdebian-with-sudosudo-unobodypsauxUSERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMANDroot10.00.0410963048?Ss+20:050:00sudo-unobodynobody70.00.0175002068?R+20:050:00psaux

$dockerrun-itdebian-with-gosugosunobodypsauxUSERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMANDnobody10.00.09084800?Rs+20:060:00psaux

Page 21: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Would-beEvilNo3.NotVerifyingDownloads

Doesn'toccurinthisDocker le

EssentialforProvenance

Page 22: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

ENVREDIS_DOWNLOAD_URLhttp://download.redis.io/releases/redis-3.2.9.tar.gzENVREDIS_DOWNLOAD_SHA6eaacfa983b287e440d0839ead20c2231749d5d6b78bbe0e0ffa3a890c59ff26...wget-Oredis.tar.gz"$REDIS_DOWNLOAD_URL";\echo"$REDIS_DOWNLOAD_SHA*redis.tar.gz"|sha256sum-c-;\...

https://github.com/docker-

library/redis/blob/master/3.2/Docker le

Page 23: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

ImageNamingandMetadata

Don'ttagyourimages"latest"

Addmetadataforimageprovenance

https://github.com/opencontainers/image-

spec/blob/master/annotations.md

Page 24: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Docker leFROMpython:3.6

...

CMD["/cmd.sh"]

#https://github.com/opencontainers/image-spec/blob/master/annotations.mdARGCREATEDARGREVISIONARGNAMELABELorg.opencontainers.image.created=$CREATED\org.opencontainers.image.revision=$REVISION\org.opencontainers.image.name=$TAG\org.opencontainers.image.source="[email protected]:amouat/identidock.git"

Page 25: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

BuildScriptTAG=identidock:v2.0.1dockerbuild-fDockerfile_labelled\--build-argCREATED="$(date--rfc-3339=s)"\--build-argREVISION="$(gitrev-parseHEAD)"\--build-argTAG=$TAG\-t$TAG.

Page 26: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le
Page 27: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

PushingandPullingSecurely

Notaseasyasitsounds

DockerContentTrust

Digests

Page 28: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

DockerContentTrust

TurnonwithexportDOCKER_CONTENT_TRUST=1

Imagescanthenbe"signed"

Pulledimagescheckedagainstpublisherspublickey

Pushingimagesrequirescreationofsigningkeys

"TOFU"

Requiresnotaryserver

ProbablyDockerHub

Page 29: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Digests

Immutablecontent-basedhashofimage

Canpullbydigest

dockerpulldebian@sha256:72f784399fd2719b4\

cb4e16ef8e369a39dc67f53d978cd3e2e7bf4e502c7b793

Page 30: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

DigestsTAG=myregistry.com/identidock:v2.0.1dockerbuild-fDockerfile_labelled\--build-argCREATED="$(date--rfc-3339=s)"\--build-argREVISION="$(gitrev-parseHEAD)"\--build-argTAG=$TAG\-t$TAG.

#Testing...

dockerpush$TAG

DIGEST=$(dockerinspect-f'{{index.RepoDigests0}}'$TAG)

#dockerserviceupdate--image$DIGESTidentidock#kubectlsetimage...

Page 31: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le
Page 32: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

TheNo1.Vulnerability?Runningout-of-datesoftware

Page 33: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Don'tRunVulnerableSoftware

Keeppackagesuptodate

Useasecurityscanner

Page 34: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

KeepPackagesup-to-dateUsetooling

npmoutdated,piplist--outdated

Auto-builds&hooks

watchtower

Page 35: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

SecurityScanning

Page 36: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

ScanningServicesClair

Opensource

Designedtointegrateintowork ow

DockerSecurityScanning

Neuvector

Twistlock

AquaSecurity

Page 37: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Integrateintowork owMosttoolsareAPIbased

scanautomaticallyonpush

Page 38: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le
Page 39: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

DockerCompose

version:"3"

services:proxy:image:nginx:1.13volumes:-./default.conf:/etc/nginx/conf.d/default.confports:-"80:80"

identidock:image:amouat/identidock:2.0environment:ENV:PROD

dnmonster:image:amouat/dnmonster:1.0

redis:image:redis:3.2

Page 40: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Read-onlyFS

$dockerrun--read-onlydebiansh-c'echo"x">/file'sh:1:cannotcreate/file:Read-onlyfilesystem

Page 41: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Read-onlyFSCanmountvolumesforspeci c les

dockerrun-d-p80:80--read-only\--tmpfs/var/cache/nginx/--tmpfs/run\nginx

Page 42: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Minimaldistrodebian123MB

alpine5MB

Page 43: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

AdvantagesSmallerattacksurface

Easiertodistribute

Page 44: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

DisadvantagesSmallerpackagemanager

muslvsglibc

Lessdebuggingtools

Nobash

Smallersetofmaintainers?

Page 45: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

DockerComposeAlpineversion:"3"

services:proxy:image:nginx:1.13-alpine

...

redis:image:redis:3.2-alpine

Page 46: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Aside:BinaryonlycontainersStaticallycompilecode

Go,C,Rust...

Placeintoscratchimage

Super-minimal

Page 47: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Aside:Aside:UnikernelsTheLinuxkernelislarge

Lotofitisuneeded

Floppydrivers?

Multitenancy

Mergekernelandapplication

runonH/Worhypervisor

Page 48: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

NetworkSegregationRedisanddnmonsterdon'ttalktoeachother

Sotheyshouldn'tbeableto!

Page 49: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

NetworkSegregationservices:proxy:...networks:-frontend

identidock:...networks:-frontend-database-backend

dnmonster:image:amouat/dnmonster:1.0networks:-backend

Page 50: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

redis:image:redis:3.2-alpinenetworks:-database

networks:-database-frontend-backend

Page 51: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

LimitingResourcesMemoryismostimportant

CPUsharedbydefault

Page 52: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

LimitingResources...redis:image:redis:3.2-alpinedeploy:resources:memory:200M

networks:-database...

Page 53: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Aside:Capabilities&SeccompLimitsystemcalls

Page 54: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Aside:LinuxSecurityModules

AppArmor

SELinux

Page 55: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

HostSecuritySameasbefore

Keepup-to-date

Sticktowhatyouknow

docker-bench

Page 56: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Aside:ContainerDistrosRancherOS

CoreOS

Atomic

LinuxKit

Page 57: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Aside:SecureKernelsGRSecurity

PaX

Page 58: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

SecretsPasswords,tokens,keys

Cangettrickywithms

Page 59: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

SecretsEnvironmentvariableswork

butkindaicky

Swarm&Kuberneteshavesolutions

Vault

Page 60: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

MonitoringEssentialwithmicroservices

lotsofsolutions

Prometheus

Page 61: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

Checklist

Page 62: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

MustKeepsoftwareupdated

Runasunprivilegeduser

Establishprovenanceandrepeatability

Page 63: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

ShouldRunwithread-onlyfs

Scanforvulnerabilities

Enforcenetworksegregation

Runminimalcontainerdistro

Page 64: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

CouldUsevaultforsecrets

Restrictcapabilitiesandresources

Runaminimalhostdistro

Runasecurityenhancedkernel

Page 65: Applied Microservice Security - GOTO Conference · Applied Microservice Security Adrian Mouat GOTO Amsterdam 2017. Applied Microservice ... Architecture "Bad" Identidock Docker*le

ConclusionDon'ttrytodoeverythingatonce

Easywins

Containersaddsecurity