BlueSky: @chris-ayers.com LinkedIn: - chris-l-ayers Blog: https://chris-ayers.com/ GitHub: Codebytes Mastodon: @Chrisayers@hachyderm.io Twitter: @Chris_L_Ayers
Modern Container Threats:
The Numbers:
Security controls fail differently. Design for overlap, not perfection.
Log4Shell (CVE-2021-44228) is the pattern:
Both are required: prevention reduces volume, runtime defense reduces impact.
Standards: NIST SP 800-207 ย |ย SLSA (OpenSSF)
Tooling approach: CNCF-first, portable, community-driven, production-proven
Choose the simplest enforcement layer that solves the problem:
All Policy as Code: version controlled, peer reviewed, auditable
Image Trust:
:latest
Pod Hardening:
Runtime Boundaries:
Operational Governance:
What We'll Show:
Trust is a vulnerability. You don't control:
Real-World Proof:
Vulnerability Scanning:
Cryptographic Signing:
cosign.pub
Supply chain Levels for Software Artifacts (v1.1)
Goal: Move from L0 โ L2+ for production
Standard: OpenSSF (Open Source Security Foundation)
Key Takeaway: Cryptographic trust from build to deploy
What is Distroless?
Illustrative static-base examples:
Result (this demo): 1322โ26 HIGH/CRITICAL findings (~98% fewer); 430โ34 OS packages
Modern Options:
Separate Build and Runtime:
# Stage 1: Build (has compilers, tools) FROM python:3.11-slim AS build WORKDIR /app COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt # Stage 2: Runtime (minimal) FROM gcr.io/distroless/python3-debian12 COPY --from=build /usr/local/lib/python3.11/site-packages \ /usr/local/lib/python3.11/site-packages COPY --from=build /app /app USER 65532 ENTRYPOINT ["python", "/app/main.py"]
Build tools never reach production
Key Takeaway: Minimal base = minimal risk
Build-time scanning can't detect:
Remember dwell time is still measured in days? Runtime detection is how you shrink it further.
You need eyes on running containers
Extended Berkeley Packet Filter
What is eBPF?
Used by: Cilium, Falco, Tetragon, Pixie, Hubble
Industry consensus: eBPF is the future of observability
Falco (CNCF Graduated) โ Detection (alert on suspicious behavior)
Tetragon (part of Cilium) โ Enforcement (kill processes, block syscalls in-kernel)
Use Falco for broad behavioral monitoring + alerting Use Tetragon when you need real-time kernel-level blocking
Key Takeaway: Detect malicious behavior instantly
Kubernetes Default: Flat Network
Cloud lateral-movement lesson: Capital One breach (2019)
How They Work โ by example:
app=api
app=frontend
app=database
dev
prod
CNI Plugin Required: Calico or Cilium; Docker Desktop's default cluster accepts NetworkPolicy objects but does not enforce them without an enforcing CNI
Beyond L3/L4: Service mesh (Istio, Linkerd) adds mTLS + L7 identity
Key Takeaway: Contain breaches, prevent lateral movement
Siloed Teams, Siloed Tools:
Without Correlation:
With Correlation:
Common Context:
Internal goal: Drive Mean Time To Respond (MTTR) toward < 1 hour
Why OTEL Matters:
Traces: Show which services were accessed during incident
Metrics: Detect resource anomalies (CPU spike = crypto miner)
Logs: Capture security-relevant events with context
Vendor-Neutral: Single instrumentation โ any backend
Key Takeaway: Link security to business impact
Scenario: Cryptominer in compromised Node.js image
Prevention catches what's known โ but what gets through?
The attacker bypassed build-time controlsโฆ
Not every layer prevents โ some reduce, some detect, some contain.
Concrete Steps to Start Monday:
Day 1: Run trivy image on your top 5 production images Day 2: Generate your first SBOM with syft โ know your dependencies Day 3: Apply Restricted Pod Security Standard to one namespace (audit mode) Day 4: Apply default-deny NetworkPolicy to one namespace Day 5: Deploy Falco in dry-run mode โ see what it detects
trivy image
syft
Restricted
Don't boil the ocean: pick one namespace, one app, one pipeline.
"We are layered" โ Security is a team sport
BlueSky: @chris-ayers.com LinkedIn: - chris-l-ayers Blog: https://chris-ayers.com/ GitHub: Codebytes Mastodon: @Chrisayers@hachyderm.io
We start at the gate. Before anything runs, Star-Lord decides what the cluster will even admit.
Star-Lord decides what may enter. Next: Gamora verifies what enters is trustworthy.
Gamora proves what we ship is trustworthy. Next: Rocket shrinks what we ship so there is less to attack.
Rocket ships a cleaner target. But once running, what is the container doing?
Drax detects the threat. Groot limits where it can go.
Groot limits where threats can go. Mantis shows you that they tried.