ตอนที่ 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 และโครงสร้างพื้นฐาน ได้ช่วยให้เราสามารถตรวจสอบได้ว่ารหัส และการกำหนดค่าตรงตามมาตรฐานขั้นต่ำด้านความปลอดภัย นี่คือการควบคุมสำคัญที่ใช้จำกัดความสามารถ ของบุคคลภายในที่อาจเป็นอันตรายหรือบัญชีภายในที่ถูกบุกรุก แก้ไขซอฟต์แวร์ที่เราแจกจ่ายให้กับผู้ใช้