Chromium Chronicle #23: Bản dựng đã xác minh trong Cơ sở hạ tầng Chrome

Tập 23: Tác giả: Akash Mukherjee ở Mountain View, CA (Tháng 7 năm 2021)
Các tập trước

Khi chúng tôi xây dựng Chrome, nhiều thành phần góp phần tạo ra môi trường ảnh hưởng đến đầu ra của cấu phần phần mềm. Từ hệ điều hành, các thư viện hỗ trợ đã cài đặt, các phần phụ thuộc bên thứ ba, các công cụ đã cài đặt và chính môi trường thời gian chạy; mỗi thư viện này được xây dựng với nhiều mức độ đảm bảo bảo mật.

Trước đây, Google sử dụng uỷ quyền nhị phân, một quy trình kiểm tra thực thi thời gian chạy nội bộ để giảm thiểu rủi ro nội bộ bằng cách đảm bảo rằng phần mềm sản xuất và cấu hình được triển khai tại Google được xem xét đúng cách và có nguồn gốc có thể truy vết được.

Bằng cách đảm bảo rằng không một ai có thể xâm phạm bản dựng và chuỗi cung ứng cấu phần phần mềm được xây dựng trên LUCI mà không bị phát hiện, Google sẽ giảm thiểu rủi ro đối với phần mềm mà chúng tôi vận chuyển đến người dùng.

Kể từ năm ngoái, đối với mỗi bản dựng, hệ thống sẽ tạo một tệp kê khai bản dựng có thể xác minh – một JWT đã ký mô tả đầy đủ các nguồn được đưa vào bản dựng, hàm băm mã hoá của các tệp nhị phân và cấu phần phần mềm được tạo, cùng các tham số bản dựng đầy đủ. Tệp kê khai bản dựng này cho phép chúng ta truy vết cấu phần phần mềm từ các nguồn, từ đó giúp quy trình xây dựng và kết quả của quy trình xây dựng có thể xác minh được.

Ngoài ra, tệp kê khai cũng cho phép chúng tôi xác minh cấu phần phần mềm được tạo đã không bị sửa đổi vì mọi thay đổi sẽ làm mất hiệu lực chữ ký. Nhìn chung, việc này cung cấp cho chúng tôi một chuỗi hành trình cho các cấu phần phần mềm khi chúng truyền tải giữa các hệ thống đáng tin cậy.

Ủy quyền nhị phân được triển khai dưới dạng hệ thống gồm 2 bước. Hệ thống tạo ra provenance với thông tin về thời gian xây dựng; việc thực thi chính sách diễn ra trước khi ký hoặc cài đặt phần mềm.

def CreateProvenance(self, build_manifest: Mapping[str, Any]):
  """Builder generates and signs provenance given build manifest. Signed JWT is placed
  alongside built artifact."""

Đối với Chrome, trước khi ký các cấu phần phần mềm đã tạo bằng cơ sở hạ tầng ký của Google, chính sách này được thực thi để đáp ứng các yêu cầu bảo mật tối thiểu cụ thể của bản dựng.

def VerifyProvenance(self, artifact_hash: str, provenance: str):
  """Provenance is verified using a policy engine service before signing an artifact."""

Các yêu cầu được chia thành khoảng 4 khía cạnh:

  • Kiểm soát nguồn: bảo vệ dữ liệu được đưa vào bản dựng.
  • Build (Tạo): bảo vệ quá trình chuyển đổi nguồn thành tệp nhị phân.
  • Chứng minh: chứng thực có chứa tệp kê khai bản dựng có thể xác minh.
  • Chính sách: quy tắc xác định xem cấu phần phần mềm nhất định có đủ điều kiện trong ngữ cảnh nhất định hay không.

Việc triển khai quy trình kiểm tra việc thực thi chính sách trong các quy trình CI và CD cho Chrome, đồng thời cơ sở hạ tầng đã cho phép chúng tôi xác minh rằng mã và cấu hình đáp ứng một số tiêu chuẩn tối thiểu về bảo mật. Đây là một biện pháp kiểm soát quan trọng dùng để hạn chế khả năng một người nội bộ có khả năng độc hại hoặc tài khoản nội bộ bị xâm phạm trong việc sửa đổi phần mềm mà chúng tôi phân phối cho người dùng.