Quay lại danh sách
Tin tức công nghệ

Bảo mật Docker Container: Sử dụng AppArmor và Seccomp chuyên sâu chống Container Breakout

4 tháng 6, 2026

Giới thiệu về lỗ hổng Container Breakout và rủi ro bảo mật Docker

Trong kỷ nguyên của kiến trúc vi dịch vụ (microservices), Docker đã trở thành tiêu chuẩn công nghiệp giúp tăng tốc độ triển khai và tối ưu hóa tài nguyên phần cứng. Tuy nhiên, kiến trúc chia sẻ chung nhân hệ điều hành (shared kernel) của container mang lại một rủi ro bảo mật tiềm tàng: Container Breakout (tấn công thoát quản trị container). Nếu một hacker chiếm được quyền kiểm soát một ứng dụng bên trong container bị cấu hình sai hoặc tồn tại lỗ hổng, họ có thể khai thác các lỗ hổng hệ thống để thoát ra ngoài, leo thang đặc quyền và kiểm soát hoàn toàn máy chủ (Host OS).

Để ngăn chặn hiệu quả các cuộc tấn công nâng cao này, các cơ chế bảo mật mặc định của Docker là chưa đủ. Các chuyên gia DevSecOps cần triển khai các giải pháp bảo mật chuyên sâu ở cấp độ nhân (Kernel-level security), cụ thể là AppArmor và Seccomp. Bài viết này sẽ hướng dẫn chi tiết cách xây dựng các cấu hình định chế riêng (custom profiles) nhằm thắt chặt an ninh và cô lập container một cách tuyệt đối.

Tìm hiểu cơ chế bảo vệ của AppArmor và Seccomp

AppArmor là gì?

AppArmor (Application Armor) là một mô-đun bảo mật của Linux (Linux Security Module - LSM) cho phép quản trị viên giới hạn năng lực của các chương trình thông qua các cấu hình gọi là Profile. Khác với cơ chế phân quyền dựa trên người dùng truyền thống, AppArmor ràng buộc trực tiếp lên hành vi của tiến trình: giới hạn quyền truy cập tệp tin (đọc, ghi, thực thi), liên kết mạng (network sockets) hoặc các quyền can thiệp hệ thống (capabilities).

Seccomp là gì?

Seccomp (Secure Computing Mode) là một tính năng bảo mật của nhân Linux cho phép lọc các lệnh gọi hệ thống (system calls - syscalls) mà một tiến trình có thể thực hiện. Khi một container vận hành, nó tương tác với Kernel thông qua hàng trăm syscalls khác nhau. Tuy nhiên, một ứng dụng web thông thường chỉ cần sử dụng dưới một phần ba số lượng syscalls đó. Seccomp giúp chúng ta chặn đứng các syscalls nguy hiểm (ví dụ: ptrace, reboot, hoặc sys_chroot), giảm thiểu đáng kể bề mặt tấn công (attack surface).

Hướng dẫn xây dựng và áp dụng Custom Seccomp Profile

Mặc dù Docker đi kèm với một cấu hình Seccomp mặc định chặn khoảng 44 syscalls trên tổng số hơn 300+, nhưng đối với các hệ thống tài chính hoặc dữ liệu nhạy cảm, chúng ta cần một cấu hình nghiêm ngặt hơn dựa trên nguyên tắc Đặc quyền tối thiểu (Least Privilege).

Bước 1: Phân tích các syscalls cần thiết bằng Strace

Trước khi chặn các lệnh gọi hệ thống, bạn cần biết ứng dụng của mình thực sự cần những gì để hoạt động mà không làm sập hệ thống. Sử dụng công cụ strace để giám sát:

strace -c -f -p [PID_CỦA_CONTAINER]

Lệnh này sẽ liệt kê tần suất và danh sách các syscalls đang được ứng dụng thực hiện.

Bước 2: Tạo tệp cấu hình Custom Seccomp JSON

Dưới đây là một cấu hình mẫu Seccomp ở định dạng JSON, thiết lập hành vi mặc định là từ chối (SCMP_ACT_ERRNO) và chỉ cho phép các lệnh gọi thiết yếu:

{
  "defaultAction": "SCMP_ACT_ERRNO",
  "architectures": [
    "SCMP_ARCH_X86_64",
    "SCMP_ARCH_X86"
  ],
  "syscalls": [
    {
      "names": [
        "read",
        "write",
        "exit",
        "exit_group",
        "epoll_wait",
        "futex"
      ],
      "action": "SCMP_ACT_ALLOW"
    }
  ]
}

Bước 3: Khởi chạy Docker với Custom Seccomp

Để áp dụng cấu hình vừa tạo (ví dụ đặt tên tệp là custom-seccomp.json), sử dụng tham số --security-opt khi khởi chạy container:

docker run --rm -it --security-opt seccomp=custom-seccomp.json nginx

Thiết lập Custom AppArmor Profile chống Container Breakout

Bên cạnh Seccomp kiểm soát syscalls, AppArmor sẽ đóng vai trò như một người gác cổng, kiểm soát chặt chẽ việc đọc/ghi dữ liệu và thực thi nhị phân của container.

Bước 1: Khởi tạo Profile AppArmor

Tạo một tệp cấu hình tại đường dẫn /etc/apparmor.d/containers/docker-deny-write trên máy chủ với nội dung hạn chế quyền ghi vào các thư mục hệ thống nhạy cảm:

#include 

profile docker-deny-write flags=(attach_disconnected,mediate_deleted) {
  #include 

  network,
  capability,

  # Cho phép đọc toàn bộ hệ thống
  /** r,

  # Từ chối ghi vào thư mục hệ thống quan trọng
  deny /bin/** w,
  deny /boot/** w,
  deny /etc/** w,
  deny /lib/** w,
  deny /lib64/** w,
  deny /usr/** w,

  # Cho phép ghi vào thư mục tạm và log dữ liệu ứng dụng
  /tmp/** rw,
  /var/log/** rw,
}

Bước 2: Nạp Profile vào Nhân Linux

Để hệ điều hành nhận diện profile mới, bạn cần thực thi lệnh nạp (parse) sau:

sudo apparmor_parser -r -W /etc/apparmor.d/containers/docker-deny-write

Bước 3: Triển khai Container với AppArmor Profile

Tiến hành chạy container Docker phối hợp cùng cấu hình AppArmor đã nạp:

docker run --rm -it --security-opt apparmor=docker-deny-write ubuntu touch /etc/test_file

Kết quả mong đợi: Hệ thống sẽ ngay lập tức trả về lỗi Permission denied, ngăn chặn hoàn toàn hành vi ghi đè file cấu hình hệ thống từ bên trong container kể cả khi hacker chiếm được quyền root.

Chiến lược kết hợp (Best Practices) cho DevSecOps

Để đạt được mức độ an toàn tối đa cho hệ thống production, việc cấu hình đơn lẻ là chưa đủ. Hãy áp dụng chiến lược phòng thủ chiều sâu (Defense in Depth) dưới đây:

  • Không bao giờ chạy container bằng quyền root: Luôn sử dụng chỉ thị USER trong Dockerfile để hạ cấp đặc quyền của tiến trình xuống user thường.
  • Bật chế độ Read-Only Root Filesystem: Sử dụng cờ --read-only khi chạy docker run để đóng băng toàn bộ hệ thống tệp, buộc hacker không thể tải xuống hoặc thực thi mã độc.
  • Tích hợp vào CI/CD Pipeline: Tự động quét mã nguồn và tệp cấu hình Docker bằng các công cụ như Trivy, Kube-bench hoặc Terrascan để phát hiện sớm các cấu hình sai sót trước khi deploy lên production.

Lời kết

Bảo mật container không phải là một đích đến cố định, mà là một quy trình cải tiến liên tục. Bằng cách định chế riêng các profile AppArmor và Seccomp, doanh nghiệp có thể tự tin xây dựng một môi trường runtime cô lập mạnh mẽ, triệt tiêu tận gốc các vector tấn công Container Breakout, bảo vệ an toàn tuyệt đối cho tài sản số và dữ liệu khách hàng.

Bảo mật Docker Container: Sử dụng AppArmor và Seccomp chuyên sâu chống Container Breakout | DPTCloud