The Chromium Chronicle #23: รุ่นที่ยืนยันแล้วใน Chrome Infra

ตอนที่ 23: โดย Akash Mukherjee ใน Mountain View, CA (กรกฎาคม 2021)
ตอนก่อนหน้า

เมื่อเราสร้าง Chrome จะมีชิ้นส่วนหลายชิ้นที่มีผลกับสภาพแวดล้อมที่มีผลต่อเอาต์พุตของอาร์ติแฟกต์ จากระบบปฏิบัติการที่ติดตั้งไลบรารีที่รองรับ ทรัพยากร Dependency ของบุคคลที่สาม เครื่องมือที่ติดตั้งไว้ และสภาพแวดล้อมรันไทม์เอง ซึ่งแต่ละไลบรารีสร้างขึ้นโดยมีระดับความปลอดภัยที่หลากหลาย

ที่ผ่านมา Google ใช้การให้สิทธิ์แบบไบนารี ซึ่งเป็นการตรวจสอบการบังคับใช้รันไทม์ภายในที่ลดความเสี่ยงจากบุคคลภายในด้วยการตรวจสอบว่าซอฟต์แวร์และการกำหนดค่าเวอร์ชันที่ใช้งานจริงที่ติดตั้งใช้งานใน Google ได้รับการตรวจสอบอย่างถูกต้องและมีต้นทางที่ติดตามได้

Google ลดความเสี่ยงของซอฟต์แวร์ที่เราจัดส่งให้แก่ผู้ใช้ โดยการตรวจสอบว่าไม่มีบุคคลใดสามารถส่งผลกระทบต่อบิลด์และซัพพลายเชนของอาร์ติแฟกต์ที่สร้างด้วย LUCI โดยตรวจไม่พบได้

เริ่มตั้งแต่ปีที่ผ่านมา ในแต่ละบิลด์ ระบบจะสร้างไฟล์ Manifest ของบิลด์ที่ยืนยันได้ ซึ่งเป็น JWT ที่ลงนามอย่างละเอียดซึ่งอธิบายแหล่งที่มาที่เข้าไปในบิลด์ แฮชการเข้ารหัสของไบนารีและอาร์ติแฟกต์ที่สร้างขึ้น รวมถึงพารามิเตอร์บิลด์ที่สมบูรณ์ ไฟล์ Manifest ของบิลด์นี้ช่วยให้เราติดตามอาร์ติแฟกต์กลับไปยังต้นทางได้ ซึ่งทำให้กระบวนการบิลด์และเอาต์พุตยืนยันได้

นอกจากนี้ ไฟล์ Manifest ยังช่วยให้เราตรวจสอบได้ว่าอาร์ติแฟกต์ที่สร้างขึ้นไม่มีการแก้ไข เนื่องจากการเปลี่ยนแปลงใดๆ จะทำให้ลายเซ็นไม่ถูกต้อง โดยรวมแล้ว สิ่งนี้ทำให้เรามีห่วงโซ่การปกป้องวัตถุต่างๆ สำหรับวัตถุที่ข้ามผ่านระบบที่เชื่อถือได้

การให้สิทธิ์แบบไบนารีมีการใช้งานเป็นระบบ 2 ขั้นตอน ระบบจะสร้างprovenanceด้วยข้อมูลเวลาบิลด์ การบังคับใช้นโยบายจะเกิดขึ้นก่อนที่จะลงนามหรือติดตั้งซอฟต์แวร์

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

สำหรับ Chrome ก่อนที่จะรับรองอาร์ติแฟกต์ซอฟต์แวร์ที่สร้างขึ้นโดยใช้โครงสร้างพื้นฐานในการรับรองของ Google ระบบจะบังคับใช้นโยบายเพื่อให้เป็นไปตามข้อกำหนดด้านความปลอดภัยขั้นต่ำที่เฉพาะเจาะจงของบิลด์

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

ข้อกำหนดแบ่งออกเป็น 4 ด้านโดยประมาณ ดังนี้

  • การควบคุมแหล่งที่มา: ปกป้องข้อมูลที่เข้าไปยังบิลด์
  • Build: ปกป้องกระบวนการที่แปลงแหล่งที่มาเป็นไบนารี
  • หลักฐาน: เอกสารรับรองที่มีไฟล์ Manifest ของบิลด์ที่ยืนยันได้
  • นโยบาย: กฎที่กำหนดว่าอาร์ติแฟกต์หนึ่งๆ มีคุณสมบัติในบริบทที่กำหนดหรือไม่

การใช้การตรวจสอบการบังคับใช้นโยบายเป็นส่วนหนึ่งของกระบวนการ CI และ CD สำหรับ Chrome และโครงสร้างพื้นฐานทำให้เรายืนยันได้ว่าโค้ดและการกำหนดค่าเป็นไปตามมาตรฐานขั้นต่ำสำหรับความปลอดภัยหรือไม่ ซึ่งเป็นการควบคุมที่สำคัญซึ่งใช้เพื่อจำกัดความสามารถของบุคคลภายในที่อาจเป็นอันตรายหรือบัญชีภายในที่ถูกบุกรุกในการแก้ไขซอฟต์แวร์ที่เราแจกจ่ายให้แก่ผู้ใช้