Tìm kiếm trang web

Docker: Vá Các Lỗ Hổng Ảnh với Trivy và Copa


Các hình ảnh container Docker thường chứa các lỗ hổng bảo mật kế thừa từ các gói hệ điều hành cơ sở của chúng. Thay vì xây dựng lại hình ảnh từ đầu, bạn có thể sử dụng Trivy để quét lỗ hổng và Copa để vá chúng trực tiếp. Hướng dẫn này trình bày cách xác định và khắc phục các lỗ hổng của container trên các hệ thống Ubuntu, Debian, RHEL, CentOS và Fedora bằng cách sử dụng hai công cụ mã nguồn mở mạnh mẽ này.

Trong hướng dẫn này bạn sẽ học:

  • Cách cài đặt trình quét lỗ hổng Trivy trên Ubuntu/Debian
  • Cách cài đặt công cụ vá container Copa
  • Cách quét các hình ảnh Docker để tìm lỗ hổng hệ điều hành
  • Cách tự động vá các lỗ hổng trong container
  • Cách xác minh các hình ảnh đã vá không còn lỗ hổng

Tóm tắt bài viết: Quét các hình ảnh Docker để tìm lỗ hổng với Trivy và tự động vá chúng bằng Copa.

BướcLệnh/Hành động
1. Quét hình ảnh
sudo trivy image --vuln-type os --ignore-unfixed IMAGE_NAME
2. Xuất báo cáo JSON
trivy image --vuln-type os --ignore-unfixed -f json -o report.json IMAGE_NAME
3. Bắt đầu BuildKit
sudo docker run --detach --rm --privileged -p 127.0.0.1:8888:8888/tcp --name buildkitd --entrypoint buildkitd moby/buildkit:v0.11.4 --addr tcp://0.0.0.0:8888
4. Hình ảnh bản vá
sudo copa patch -i IMAGE_NAME -r report.json -t patched -a tcp://0.0.0.0:8888

Bước 1: Cài đặt Trình quét lỗ hổng Trivy

Trivy là một công cụ quét lỗ hổng mã nguồn mở được phát triển bởi Aqua Security. Nó phát hiện các lỗ hổng trong gói hệ điều hành, các phụ thuộc ứng dụng và hình ảnh container.

Ubuntu/Debian

  1. Cài đặt các phụ thuộc: Đầu tiên, cài đặt các gói wget và gnupg cần thiết để thêm kho lưu trữ:

    $ sudo apt-get install wget gnupg -y
  2. Thêm khóa GPG của Trivy: Tải xuống và thêm khóa ký của kho lưu trữ Trivy:

    $ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
  3. Thêm kho lưu trữ Trivy: Thêm kho lưu trữ chính thức của Trivy vào danh sách nguồn của bạn:

    $ echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
  4. Cài đặt Trivy: Cập nhật danh sách gói và cài đặt Trivy:

    $ sudo apt-get update
    $ sudo apt-get install trivy -y

RHEL/CentOS/Fedora

  1. Thêm kho Trivy: Tạo tệp kho Trivy:

    # sudo tee /etc/yum.repos.d/trivy.repo << 'EOF'
    [trivy]
    name=Trivy repository
    baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://aquasecurity.github.io/trivy-repo/rpm/public.key
    EOF
  2. Cài đặt Trivy: Sử dụng dnf hoặc yum để cài đặt:

    # sudo dnf install trivy -y

Kiểm tra cài đặt bằng cách xem phiên bản:

$ trivy --version

Bước 2: Cài đặt Công cụ Vá Lỗi Copa

Copa (Copacetic) là một dự án sandbox của CNCF cho phép vá các hình ảnh container trực tiếp mà không cần phải xây dựng lại toàn bộ. Nó sử dụng các báo cáo lỗ hổng từ các công cụ quét như Trivy để áp dụng các bản cập nhật bảo mật. Copa được phân phối dưới dạng một tệp nhị phân duy nhất hoạt động trên tất cả các bản phân phối Linux.

  1. Tải xuống tệp nhị phân Copa: Lấy tệp nhị phân đã được xây dựng sẵn từ trang phát hành chính thức trên GitHub của Copa:

    $ wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gz
  2. Giải nén tệp lưu trữ: Giải nén tệp tar đã tải về:

    $ tar -xzf copa_0.9.0_linux_amd64.tar.gz
  3. Cài đặt Copa: Di chuyển tệp nhị phân vào đường dẫn hệ thống của bạn:

    $ sudo mv copa /usr/local/bin/
  4. Xác minh cài đặt: Xác nhận rằng Copa đã được cài đặt đúng cách:

    $ copa --version

Bước 3: Quét hình ảnh container để tìm lỗ hổng

Trước khi vá, bạn cần xác định các lỗ hổng trong ảnh container của mình. Các bước sau đây sử dụng linuxconfig/instantprivacy làm ví dụ – hãy thay thế nó bằng tên ảnh của bạn.

  1. Kéo hình ảnh container: Tải hình ảnh bạn muốn quét:

    $ sudo docker pull linuxconfig/instantprivacy
  2. Quét lỗ hổng bảo mật: Chạy Trivy để quét các lỗ hổng ở cấp hệ điều hành. Tham số --ignore-unfixed loại trừ các lỗ hổng chưa có bản vá:

    $ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy
  3. Xuất báo cáo JSON: Copa yêu cầu kết quả quét ở định dạng JSON:

    $ trivy image --vuln-type os --ignore-unfixed -f json -o instantprivacy.json linuxconfig/instantprivacy

Bước 4: Vá hình ảnh container bằng Copa

Copa sử dụng BuildKit để áp dụng các bản vá cho hình ảnh container.

  1. Bắt đầu container BuildKit: Khởi chạy BuildKit dưới dạng container có quyền đặc biệt:

    $ sudo docker run --detach --rm --privileged \
      -p 127.0.0.1:8888:8888/tcp \
      --name buildkitd \
      --entrypoint buildkitd \
      moby/buildkit:v0.11.4 \
      --addr tcp://0.0.0.0:8888
  2. Xác minh BuildKit đang chạy: Xác nhận container đã khởi động thành công:

    $ sudo docker ps

  3. vá hình ảnh container: Sử dụng Copa để áp dụng các bản vá bảo mật. Cờ -t chỉ định thẻ cho hình ảnh đã vá:

    $ sudo copa patch \
      -i docker.io/linuxconfig/instantprivacy \
      -r instantprivacy.json \
      -t patched \
      -a tcp://0.0.0.0:8888

    Copa tải về các bản cập nhật bảo mật và tạo một lớp hình ảnh mới với các bản vá đã được áp dụng. Hình ảnh đã được vá sẽ được gán nhãn là linuxconfig/instantprivacy:patched.

Bước 5: Xác minh hình ảnh đã vá

  1. Quét hình ảnh đã vá: Xác nhận tất cả các lỗ hổng đã được khắc phục:

    $ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patched
  2. Kiểm tra hình ảnh đã vá: Xác minh hình ảnh đã vá chạy đúng cách:

    $ sudo docker run --name=instantprivacy -d -p 8118:8118 linuxconfig/instantprivacy:patched
    $ export http_proxy="http://localhost:8118"
    $ curl api.ipify.org
    45.84.107.174
  3. Dọn dẹp: Dừng container BuildKit khi hoàn tất:

    $ sudo docker stop buildkitd

Kết luận

Bạn đã quét thành công hình ảnh container Docker để tìm các lỗ hổng bảo mật bằng Trivy và tự động vá chúng bằng Copa. Cách tiếp cận này nhanh hơn so với việc xây dựng lại hình ảnh từ đầu và chỉ thêm một lớp vá duy nhất, giữ nguyên cấu trúc hình ảnh gốc. Đối với môi trường sản xuất, hãy tích hợp các công cụ này vào pipeline CI/CD của bạn để tự động quét và vá các hình ảnh container trước khi triển khai. Để biết thêm thông tin, hãy tham khảo tài liệu chính thức của Trivy và trang web dự án Copa.

Câu hỏi thường gặp

  1. Copa có thể vá những loại lỗ hổng nào? Copa chỉ vá các lỗ hổng ở cấp hệ điều hành (như các gói Debian, Ubuntu, Alpine hoặc RHEL). Nó không thể vá các phụ thuộc ở cấp ứng dụng như các gói npm, module Python pip hoặc module Go. Đối với những trường hợp đó, bạn cần xây dựng lại ứng dụng với các phụ thuộc đã được cập nhật.
  2. Tại sao tôi cần BuildKit để chạy Copa? Copa sử dụng khả năng phân tích và gộp của BuildKit để tạo ra một lớp hình ảnh mới chỉ chứa các tệp đã được vá. BuildKit chạy dưới dạng một container có quyền đặc biệt, xử lý việc thao tác hình ảnh ở mức thấp. Nếu không có BuildKit, Copa không thể áp dụng các bản vá lên hệ thống tệp của container.
  3. Tôi có thể vá các hình ảnh từ kho lưu trữ riêng không? Có, Copa hỗ trợ các kho lưu trữ riêng. Bạn cần xác thực bằng docker login trước khi chạy lệnh vá. Copa sử dụng thông tin đăng nhập Docker của bạn để lấy hình ảnh gốc và đẩy kết quả đã vá nếu cần.
  4. Điều gì sẽ xảy ra nếu Copa không thể vá tất cả các lỗ hổng? Một số lỗ hổng có thể chưa có bản vá. Cờ --ignore-unfixed trong Trivy sẽ loại trừ những lỗ hổng này khỏi báo cáo. Copa sẽ vá tất cả những gì đã có bản vá. Chạy lại Trivy mà không có --ignore-unfixed để xem tất cả các lỗ hổng, bao gồm cả những lỗ hổng đang chờ bản vá.
  5. Làm thế nào để cập nhật Copa lên phiên bản mới nhất? Tải phiên bản mới nhất từ trang phát hành GitHub của Copa và thay thế tệp nhị phân trong /usr/local/bin/. Kiểm tra phiên bản hiện tại bằng copa --version.