Code Monkey home page Code Monkey logo

container-security's Introduction

Container Security Checklist

Intro

Container technologies are enabling new application architectures for legacy apps, refactored apps, and microservices, among others. However, these new application architectures also introduce new attack vectors including control plane attacks against the orchestrator, network-based attacks across the infrastructure, container repository attacks, and host operating system attacks. According to a December 2018 Datadog survey, containers are now churning 12 times faster than VMs and have an average lifetime of just 12 hours. As a result, container security is a top challenge. In a recent Tripwire survey, 98 percent of respondents felt they needed additional container security capabilities, 75 percent of respondents with more than 100 containers in production had reported an incident, and 42 percent had either delayed or limited container adoption due to security concerns. Although containers are inherently more secure than many other technologies by design, you need to take additional steps to fully secure your container deployments throughout their lifecycle.

Secure the Build Pipeline

  • Verify the image source (registry)
  • Use official base images
  • Lock down access to the image registry (who can push/pull)
  • Scan container image layers for Common Vulnerabilities and Exposures (CVEs)
  • Scan configuration files for security and compliance checks in continuous integration (CI)
  • Do a static analysis of the code and libraries used by the code to surface any vulnerabilities in the code and its dependencies
  • Tag and automatically prevent vulnerable images from running in certain clusters or prevent them from talking to other containers in the cluster

Secure the Host

  • Lock down the operating system (like Google’s Container Optimized OS (COS))
  • Use secure computing (seccomp) to restrict host system call (syscall) access from containers
  • Use Security-Enhanced Linux (SELinux) to further isolate containers
  • Utilize container sandboxing projects like gVisor, Kata Containers, etc. to reduce the attack surface

Secure the Container Runtimes and Configure Admission Control

  • Ensure security configurations span across container runtimes, especially if the environment has multiple container runtimes in the cluster (for example, different runtimes for the orchestrator control plane and workloads)
  • Use policies (for example, pod security policy in Kubernetes) to restrict which containers can run in the cluster including policies to restrict privileged containers, containers that don’t need write access to a specific volume, and containers that need certain syscalls
  • Restrict access to container runtime daemon/APIs

Secure the Network

  • Secure services that are exposed to the Internet using a firewall
  • Lock down Layer 3 and 4 access for the services using network policy
  • Create granular Layer 7 policies using service mesh (such as Istio)
  • Use Mutual Transport Layer Security (mTLS) to mutually authenticate containerized workloads (for example, using Istio)
  • Segregate containerized workloads with a mix of host segregation and network isolation (for example, separate group of hosts for workload segregation and/or network policies to isolate different group of containerized workloads)
  • Log unsuccessful connection attempts

Secure the Orchestrator Configuration

  • Implement version control for orchestrator service definitions and configurations (using git) for auditing
  • Ensure cluster-level policies (such as security policies, network policies, and so on) go through your change request, review, and approval process
  • Implement orchestrator API access security using role-based access control (RBAC) and network policies
  • Be aware of which third-party plugins (such as Container Network Interfaces [CNIs], Container Storage Interface [CSIs], and Container Runtime Interfaces [CRIs]) are running (binary/DaemonSet/controller), what access they have, and whether they are running as privileged containers
  • Control access to the orchestrator control plane APIs from third-party plugins using RBAC and service accounts
  • Enable access logs for all API requests to the orchestrator control plane (for example, audit logs in Kubernetes)
  • Scan orchestrator manifests for containerized apps (such as Kubernetes deployment manifests) for security best practices and applicable compliance standards in the CI phase
  • If you have any sensitive configuration information in your cluster that needs to be accessed by containers at runtime make sure the configuration is encrypted (such as encrypted secrets in kubernetes)
  • Rorate encryption keys that are used for communication between orchestrator components (for example kubernetes API server and etcd)

Secure the Cloud Environment

  • If you’re running your containers in a cloud, remember the default security configuration (for orchestrator, container runtime, and operating system) can be different for different cloud providers
  • Understand the version of orchestrator and container runtime components your cloud provider is running by default, and whether those components are modified from their open source version
  • Scan environment deployment configurations (such as Terraform, Cloud Formation templates, and Azure ARM templates) for security best practices and compliance misalignments

Secure the Data

  • Use a proper filesystem encryption technology for container storage
  • Provide write/execute access only to the containers that need to modify the data in a specific host filesystem path
  • Reduce write/execute filesystem access for the host filesystem to a minimum using constructs like Pod Security Policy (for example, only allowing Read-only Root Filesystem access, listing allowed host filesystem paths to mount, and listing allowed Flex volume drivers)
  • Automatically scan container images for sensitive data such as tokens, private keys, and so on, before pushing them to a container registry (can be done locally and in CI)
  • Limit storage related syscalls and capabilities to prevent runtime privilege escalation
  • Log all successful and unsuccessful attempts to access sensitive data

container-security's People

Contributors

gunjan5 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.