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

ตอนที่ 23: โดย Akash Mukherjee ในเมาน์เทนวิว รัฐแคลิฟอร์เนีย (กรกฎาคม 2021)
ตอนก่อนหน้า

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

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

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

ตั้งแต่ปีที่แล้ว สำหรับแต่ละบิลด์ ระบบจะสร้างบิลด์ที่ยืนยันได้ ไฟล์ 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 ด้านดังนี้

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

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