Docker Security 2025: Güvenlik Açıkları ve Best Practices Rehberi (CVE-2025)

26.12.2025 15:03 Haber

Docker container güvenliği (Docker container security) konusunda endişeleriniz mi var? 2025 yılında ortaya çıkan CVE-2025-3224, CVE-2025-13743 ve CVE-2025-9164 güvenlik açıkları (security vulnerabilities) Docker kullanıcılarını alarma geçirdi. Alesta Web olarak bu kapsamlı rehberde Docker security best practices (en iyi güvenlik uygulamalarını), container escape prevention (container kaçış önleme), rootless mode kullanımı ve image security (imaj güvenliği) konularını detaylı anlattık. Production ortamında güvenli Docker deployment (güvenli Docker kurulumu) için mutlaka okumalısınız!

? 2025 Docker Güvenlik Açıkları (2025 Docker Vulnerabilities)

2025 yılında Docker'da kritik güvenlik açıkları (critical security vulnerabilities) tespit edildi. Alesta Web ekibi olarak bu açıkları detaylı inceledik.

⚠️ Kritik Açıklar / Critical Vulnerabilities:
  • CVE-2025-3224: Privilege escalation during updates (güncelleme sırasında yetki yükseltme). Docker Desktop güncellemesi sırasında saldırganların sistem yetkisi kazanması mümkün.
  • CVE-2025-13743: Exposed Hub PATs in diagnostics (tanılama dosyalarında açığa çıkan token'lar). Docker Hub Personal Access Tokens (PAT) yanlışlıkla log dosyalarında saklanıyor.
  • CVE-2025-9164: DLL hijacking in Windows installer (Windows yükleyicide DLL saldırısı). Windows'ta Docker kurulumu sırasında kötü niyetli DLL yüklenebiliyor.
  • CVE-2025-23266: NVIDIA Container Toolkit vulnerability (NVIDIA Container Toolkit güvenlik açığı). GPU kullanan container'larda host sistemine erişim mümkün.

Güvenli Versiyonlar / Safe Versions (2025)

# Docker Desktop güvenli versiyon / safe version
Docker Desktop 4.44+ (tüm CVE'ler patch'lenmiş / all CVEs patched)

# Docker Engine güvenli versiyon
Docker Engine 27.0+ (latest security patches)

# NVIDIA Container Toolkit güvenli versiyon
nvidia-container-toolkit 1.17.8+

Hemen kontrol edin (check immediately): docker --version

Alesta Web tavsiyesi: Eğer Docker Desktop 4.44'ten eski versiyon kullanıyorsanız (if using older than 4.44), ACILEN güncelleyin (update IMMEDIATELY)!

✅ 7 Temel Docker Güvenlik Uygulaması (7 Essential Security Practices)

1. Sistemi Güncel Tutun (Keep Systems Updated)

# Docker Engine güncelleme / update Docker Engine
sudo apt update && sudo apt upgrade docker-ce

# Docker Desktop güncelleme (macOS/Windows)
# GUI'den "Check for updates" tıklayın

# Host kernel güncelleme (Ubuntu)
sudo apt update && sudo apt upgrade linux-image-generic

Container escape saldırılarından korunmak için (to protect against container escape attacks) kernel'i güncel tutmak kritik (keeping kernel updated is critical).

2. Güvenilir Image'lar Kullanın (Use Trusted Images)

? Image Seçimi / Image Selection:
  • ✅ Docker Official Images kullanın (use Docker Official Images)
  • ✅ Docker Verified Publisher'dan seçin
  • ❌ Rastgele Docker Hub image'ları kullanmayın (don't use random Hub images)
  • ❌ Bilinmeyen kaynaklardan Dockerfile kullanmayın (don't use Dockerfiles from unknown sources)

Güvenli Image Örneği / Secure Image Example

# ✅ İYİ: Official image (verified)
FROM node:20-alpine

# ❌ KÖTÜ: Bilinmeyen kaynak (unknown source)
FROM random-user/node-custom:latest

3. Principle of Least Privilege (En Az Yetki Prensibi)

# Root kullanıcı ile ÇALIŞTIRMAYIN / DON'T run as root
# ❌ YANLIŞ
USER root

# ✅ DOĞRU: Non-root user oluşturun
FROM node:20-alpine
RUN addgroup -g 1001 -S nodejs && adduser -S nodejs -u 1001
USER nodejs

# Container çalıştırırken / when running container
docker run --user 1001:1001 myapp

Root user ile çalışan container'lar (containers running as root) privilege escalation riski taşır (carry privilege escalation risk).

4. Container Capability'lerini Kısıtlayın (Restrict Capabilities)

# Tüm capability'leri kaldırıp sadece gerekeni ekleyin
# Drop all, add only necessary
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx

# Örnek: Sadece port 80/443 bind etme yetkisi
# Only permission to bind ports 80/443

alestaweb.com'da Linux capability'leri detaylı rehberimiz var.

5. Secret Management (Gizli Bilgi Yönetimi)

⚠️ ASLA YAPMAYIN / NEVER DO THIS:
# ❌ Dockerfile'da hardcoded secret
ENV DB_PASSWORD=supersecret123

# ❌ Build argument ile secret
ARG API_KEY=my-secret-key

# ❌ Image içinde .env dosyası
COPY .env /app/.env
✅ DOĞRU YÖNTEM / CORRECT METHOD:
# Docker Secrets (Swarm mode)
echo "mysecret" | docker secret create db_password -

# Environment variable (runtime)
docker run -e DB_PASSWORD=$DB_PASSWORD myapp

# Docker BuildKit secrets (build time)
docker build --secret id=npmtoken,src=$HOME/.npmrc .

6. Network İzolasyonu (Network Isolation)

# Custom network oluşturun / create custom network
docker network create --driver bridge secure-network

# Container'ı izole network'e bağlayın
docker run --network secure-network myapp

# Gereksiz port expose etmeyin / don't expose unnecessary ports
# ❌ YANLIŞ: Tüm portları aç
docker run -p 0.0.0.0:3000:3000 myapp

# ✅ DOĞRU: Sadece localhost'ta aç
docker run -p 127.0.0.1:3000:3000 myapp

7. Container Image Scanning (Image Tarama)

# Docker Scout ile tarama / scan with Docker Scout
docker scout cve myapp:latest

# Trivy ile detaylı tarama / detailed scan with Trivy
trivy image myapp:latest

# Snyk ile güvenlik açığı kontrolü
snyk container test myapp:latest

Container scanning tools, known vulnerabilities (bilinen güvenlik açıklarını), secrets (gizli bilgileri) ve misconfigurations (yanlış yapılandırmaları) tespit eder.

? Image Security ve Scanning (Image Security and Scanning)

Container image'ları (container images) en yaygın saldırı vektörüdür (most common attack vector). Alesta Web ekibi olarak image security'yi 3 katmanda inceliyoruz:

Katman 1: Base Image Seçimi / Layer 1: Base Image Selection

# ✅ KÜÇÜK VE GÜVENLİ: Alpine Linux (5MB)
FROM alpine:3.19

# ✅ KÜÇÜK VE GÜVENLİ: Distroless (Node.js için 60MB)
FROM gcr.io/distroless/nodejs20-debian12

# ⚠️ DAHA BÜYÜK: Debian slim (150MB)
FROM debian:12-slim

# ❌ ÇOK BÜYÜK: Ubuntu full (300MB+)
FROM ubuntu:22.04

Küçük image = daha az paket = daha az güvenlik açığı (smaller image = fewer packages = fewer vulnerabilities).

Katman 2: Multi-Stage Build (Çok Aşamalı Derleme)

# Build stage (derleme araçları dahil / includes build tools)
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Production stage (sadece runtime / only runtime)
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
CMD ["node", "dist/index.js"]

Final image'de sadece runtime gerekli dosyalar (only runtime necessary files) olur, build tools olmaz (no build tools).

Katman 3: Software Bill of Materials (SBOM)

# SBOM oluşturma / generate SBOM
docker sbom myapp:latest > sbom.json

# SBOM ile güvenlik kontrolü / security check with SBOM
docker scout cve --sbom sbom.json

SBOM, image'deki tüm component'leri listeler (lists all components in image). Supply chain attacks'e karşı korur (protects against supply chain attacks).

? Rootless Mode Kullanımı (Using Rootless Mode)

Rootless mode, Docker daemon'u root kullanıcı olmadan çalıştırır (runs Docker daemon without root user). Container escape saldırılarında bile (even in container escape attacks) saldırgan root yetkisi kazanamaz (attacker can't gain root privileges).

Rootless Docker Kurulumu / Rootless Docker Installation

# Ubuntu/Debian
sudo apt install -y uidmap dbus-user-session

# Rootless Docker kurulumu (root olarak DEĞIL!)
# Install as regular user (NOT as root!)
curl -fsSL https://get.docker.com/rootless | sh

# PATH'e ekleme / add to PATH
export PATH=$HOME/bin:$PATH
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock

# Systemd ile başlatma / start with systemd
systemctl --user enable docker
systemctl --user start docker
✅ Rootless Mode Avantajları / Advantages:
  • Container escape olsa bile saldırgan root olamaz (attacker can't become root even if escape)
  • Host sistem daha güvenli (host system more secure)
  • Multi-tenant ortamlarda zorunlu (mandatory in multi-tenant environments)
⚠️ Rootless Mode Kısıtlamaları / Limitations:
  • 80/443 gibi privileged portlar kullanılamaz (can't use privileged ports like 80/443)
  • Bazı storage driver'lar çalışmaz (some storage drivers don't work)
  • cgroup v2 gerektirir (requires cgroup v2)

Alesta Web önerisi: Production'da güvenlik önceliksiyse (if security is priority in production), rootless mode kullanın.

? Network ve API Güvenliği (Network and API Security)

⚠️ KRİTİK UYARI / CRITICAL WARNING:

Docker daemon API'sini ASLA HTTP üzerinden expose etmeyin (NEVER expose Docker daemon API over HTTP)! Bu, saldırganlara tam kontrol verir (gives attackers full control).

❌ YANLIŞ: HTTP ile Daemon API

# ASLA YAPMAYIN! / NEVER DO THIS!
dockerd -H tcp://0.0.0.0:2375

Bu ayar, internet üzerinden herkesin Docker daemon'unuza erişmesine izin verir (allows anyone on internet to access your Docker daemon)!

✅ DOĞRU: TLS ile Güvenli API
# TLS sertifikaları oluşturun / generate TLS certificates
# (Detaylı adımlar Docker docs'ta)

# Daemon'u TLS ile başlatın / start daemon with TLS
dockerd --tlsverify \
  --tlscacert=ca.pem \
  --tlscert=server-cert.pem \
  --tlskey=server-key.pem \
  -H=0.0.0.0:2376

# Client bağlantısı / client connection
docker --tlsverify \
  --tlscacert=ca.pem \
  --tlscert=cert.pem \
  --tlskey=key.pem \
  -H=tcp://docker-host:2376 ps

alestaweb.com'da Docker TLS kurulumu detaylı rehberimiz var.

⚙️ Runtime Security (Çalışma Zamanı Güvenliği)

Container'lar çalışırken de güvenlik önemli (security matters while containers run). Alesta Web ekibi olarak runtime security için şu araçları öneriyoruz:

1. AppArmor/SELinux Profilleri

# AppArmor profili ile çalıştırma (Ubuntu)
docker run --security-opt apparmor=docker-default nginx

# SELinux ile çalıştırma (RHEL/CentOS)
docker run --security-opt label=type:container_runtime_t nginx

2. Seccomp Profilleri (Syscall Filtering)

# Default seccomp profili
docker run --security-opt seccomp=default.json nginx

# Seccomp tamamen kapalı (GÜVENSİZ! / INSECURE!)
# ASLA PRODUCTION'DA KULLANMAYIN
docker run --security-opt seccomp=unconfined nginx

Seccomp, tehlikeli system call'ları engeller (blocks dangerous system calls).

3. Read-Only Filesystem

# Container filesystem'i read-only yapın
docker run --read-only --tmpfs /tmp nginx

# Sadece /tmp yazılabilir, geri kalan read-only
# Only /tmp writable, rest is read-only

Saldırgan container'a girerse bile (even if attacker enters container) dosya yazamaz (can't write files).

? Kaynaklar ve Referanslar / Sources and References

Bu makalede kullanılan bilgiler aşağıdaki güvenilir kaynaklardan alınmıştır (information used in this article is from the following reliable sources):

Alesta Web olarak tüm güvenlik testlerini izole lab ortamında gerçekleştirdik (we conducted all security tests in isolated lab environment). Production deployment'tan önce mutlaka test edin (always test before production deployment)!

✅ Güvenli Docker Kullanımı Tamamlandı! (Secure Docker Usage Complete!)

Docker Security 2025 rehberinde (in the guide) en kritik güvenlik açıklarını (most critical vulnerabilities) ve çözümlerini (solutions) öğrendiniz.

Hızlı Özet / Quick Summary:

  • ✅ Docker Desktop 4.44+ kullanın (2025 CVE'leri patch'li / 2025 CVEs patched)
  • ✅ Rootless mode ile daemon çalıştırın (run daemon with rootless mode)
  • ✅ Official/Verified images kullanın (use official/verified images)
  • ✅ Non-root user ile container çalıştırın (run containers as non-root)
  • ✅ Image scanning yapın (Trivy, Docker Scout)
  • ✅ TLS ile API güvenliği sağlayın (secure API with TLS)
  • ✅ Capability'leri kısıtlayın (restrict capabilities)

Faydalı Linkler / Useful Links:

Production'da Docker güvenliği (Docker security in production) konusunda desteğe mi ihtiyacınız var? Alesta Web ekibi size yardımcı olmaya hazır. alestaweb.com'u ziyaret edin!

© 2025 AlestaWeb - Tüm hakları saklıdır.

WM Tools
💫

WebMaster Tools

15 Profesyonel Araç