Bảo mật container và nguồn gốc bản build

Tài liệu này trình bày cách Fystack đảm bảo các bản build container có thể kiểm chứng, chống giả mạo thông qua provenance tuân thủ SLSA, ký mật mã không cần khóa (keyless) và nhật ký minh bạch công khai. Nhờ đó, chúng tôi có thể chứng minh rằng mọi container image production đều bắt nguồn từ một Git commit cụ thể và chưa bị giả mạo.


1. Tổng quan

Mỗi image production được build bằng Docker BuildKit với metadata SLSA Level 3 provenance và SPDX SBOM được nhúng sẵn. Mọi artifact đều được ký keyless bằng Sigstore Cosign và được ghi lại trong nhật ký minh bạch Rekor, tạo nên một dấu vết kiểm toán bất biến.

Chuỗi toàn vẹn:

Chuỗi toàn vẹn

Git Commit → SLSA Provenance → Cosign Signature → Rekor Transparency Log

Base image distroless

Fystack sử dụng image distroless để giảm thiểu các vector tấn công từ hệ điều hành. Image distroless chỉ chứa ứng dụng và các dependency runtime của nó, loại bỏ trình quản lý gói, shell và các tiện ích khác có thể bị khai thác.

Kiến trúc container distroless
Click to open the full-size diagram

Distroless Dockerfile

Dockerfile
FROM golang:1.25 AS builder

ARG TARGETOS=linux
ARG TARGETARCH=amd64

WORKDIR /src

COPY go.mod go.sum ./
RUN --mount=type=cache,target=/go/pkg/mod \
    go mod download

COPY . .

RUN --mount=type=cache,target=/go/pkg/mod \
    --mount=type=cache,target=/root/.cache/go-build \
    CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
    go build -o /out/mpcium ./cmd/mpcium

FROM gcr.io/distroless/base-debian12:latest

USER nonroot:nonroot
WORKDIR /app

COPY --from=builder /out/mpcium /app/mpcium

ENTRYPOINT ["/app/mpcium"]

Cách tiếp cận này:

  • Thu hẹp bề mặt tấn công bằng cách loại bỏ các gói hệ điều hành không cần thiết
  • Chạy dưới người dùng không phải root để tăng cường bảo mật
  • Sử dụng cache mount của BuildKit để build nhanh và hiệu quả hơn
  • Tạo ra image cuối cùng tối giản (thường <20MB đối với binary Go)

2. Provenance và ký bản build

Pipeline CI/CD an toàn: SLSA Level 3 provenance với ký keyless và nhật ký minh bạch
Click to open the full-size diagram

Pipeline CI/CD an toàn: SLSA Level 3 provenance với ký keyless và nhật ký minh bạch

SLSA Level 3 Provenance

Workflow: .github/workflows/docker-push.yml Trigger: push: tags: ['v*.*.*'] Permissions: id-token: write

Mỗi bản build được gắn tag sẽ tạo ra:

  • SLSA provenance: Bao gồm URI nguồn và commit SHA.
  • SBOM (SPDX 2.3): Liệt kê các dependency và metadata của gói.
  • Tag bất biến: docker.io/fystack/apex/{service}:{version} và {version}-{sha}.

Xác minh provenance

bash
docker buildx imagetools inspect docker.io/fystack/apex/api:v1.0.0 \
  --format '{{ json .Provenance.SLSA }}' | jq -r '.predicate.buildDefinition.resolvedDependencies[0].uri'
# Expected: https://github.com/fystack/apex/commit/<sha>

Ký mật mã (Cosign Keyless)

Mỗi image và attestation được ký bằng định danh OIDC của GitHub Actions, loại bỏ rủi ro quản lý khóa riêng tư. Các chữ ký được lưu trong Rekor, một nhật ký minh bạch công khai, chỉ cho phép ghi thêm.

Tạo chữ ký (trong CI):

Ký image

bash
cosign sign \
  --identity-token "https://token.actions.githubusercontent.com" \
  docker.io/fystack/apex/api@sha256:<digest>

Xác minh chữ ký:

Xác minh chữ ký

bash
cosign verify \
  --certificate-identity-regexp="github.com/fystack/apex/.github/workflows/docker-push.yml@*" \
  --certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
  docker.io/fystack/apex/api:v1.0.0

Điều này chứng minh:

  • Image được build bởi một GitHub workflow đáng tin cậy.
  • Chữ ký hợp lệ và có dấu thời gian trong Rekor.
  • Không tồn tại khóa ký thủ công nào có thể bị đánh cắp hoặc lạm dụng.

3. Xác minh và khôi phục khi có sự cố

Nếu nghi ngờ có tấn công, image bị giả mạo hoặc tấn công từ nội bộ, hãy thực hiện trình tự xác minh sau để chứng minh tính xác thực:

Bước 1: Truy xuất provenance

Truy xuất provenance

bash
cosign verify-attestation --type slsaprovenance docker.io/fystack/apex/api:v1.0.0 | jq .

Hiển thị URI của commit nguồn, repository và định danh workflow.

Bước 2: Xác minh chữ ký và bản ghi minh bạch

Xác minh chữ ký và nhật ký Rekor

bash
cosign verify \
  --certificate-identity-regexp="github.com/fystack/apex/.github/workflows/docker-push.yml@*" \
  --certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
  docker.io/fystack/apex/api:v1.0.0

rekor-cli search --artifact docker.io/fystack/apex/api:v1.0.0

Xác nhận chữ ký image hợp lệ và bản ghi của nó tồn tại trong nhật ký công khai của Rekor kèm dấu thời gian.

Bước 3: Xác minh tính toàn vẹn của Git commit

Xác minh commit

bash
git show <commit-sha>

Xác nhận commit được tham chiếu trong provenance vẫn tồn tại và chưa bị viết lại.

Bước 4: Đối chiếu SBOM

Xác minh SBOM

bash
docker buildx imagetools inspect docker.io/fystack/apex/api:v1.0.0 | jq '.SBOM'

Xác nhận các dependency khớp với repository nguồn đã được xác minh và metadata SBOM.

Chuỗi bằng chứng cuối cùng:

Chuỗi bằng chứng

Rekor Timestamp → Cosign Signature → Provenance Commit URI → Git Commit Hash

Nếu cả bốn yếu tố khớp nhau, image được chứng minh là bắt nguồn từ một commit đáng tin cậy và chưa bị giả mạo.

Danh sách kiểm tra xác minh

Bước

Lệnh

Kết quả mong đợi

  1. Xác minh chữ ký
cosign verify ...

Thông báo thành công hiển thị định danh GitHub OIDC

  1. Kiểm tra nhật ký Rekor
rekor-cli search --artifact <image>

Bản ghi nhật ký kèm dấu thời gian

  1. Kiểm tra provenance
cosign verify-attestation --type slsaprovenance ...

URI của commit và ID của workflow

  1. Xác nhận commit tồn tại
git show <sha>

Metadata của commit khớp với provenance

  1. Kiểm tra SBOM
docker buildx imagetools inspect ...

Có metadata SPDX 2.3


4. Tăng cường bảo mật và thực hành tốt nhất

Biện pháp kiểm soát

Mục đích

Ghim base image theo digest

Ngăn chặn sai lệch chuỗi cung ứng và việc ghi đè tag.

Tag phiên bản bất biến

Không cho phép ghi đè các tag phiên bản đã tồn tại.

Yêu cầu commit được ký trên GitHub

Đảm bảo các commit nguồn đã được xác thực.

Tin cậy nội dung registry

Bắt buộc tính bất biến của tag trên OCI registry.

Nhúng SBOM

Đảm bảo khả năng truy vết dependency.

Thực thi chính sách bất biến

Ngăn chặn việc push lên registry vào các tag đã tồn tại.

Kiểm toán với immudb

Lưu kết quả xác minh (digest của image + commit SHA) trong nhật ký chống giả mạo.


5. Tóm tắt

Pipeline build này mang lại cho Fystack một dòng dõi có thể chứng minh và kiểm chứng bằng mật mã từ Git commit đến container được triển khai.

Nó đảm bảo:

  • Provenance chuỗi cung ứng minh bạch và có thể kiểm toán.
  • Không phụ thuộc vào khóa bí mật.
  • Khả năng chống giả mạo từ nội bộ hoặc bên ngoài.
  • Tuân thủ SLSA Level 3 và các thực hành tốt nhất của Sigstore.

Tóm lại: mọi container của Fystack không chỉ có thể tái tạo, mà còn có thể chứng minh tính xác thực.