The Chromium Chronicle #23: Chrome Infra में वेरिफ़ाइड बिल्ड

एपिसोड 23: माउंटेन व्यू, कैलिफ़ोर्निया में आकाश मुखर्जी का गाना (जुलाई 2021)
पिछले एपिसोड

जब हम Chrome बनाते हैं, तो कई चीज़ें पर्यावरण में मदद करती हैं. इससे, किसी आर्टफ़ैक्ट के आउटपुट पर असर पड़ता है. इनमें से हर एक ओएस में, सहायक लाइब्रेरी, तीसरे पक्ष की डिपेंडेंसी, इंस्टॉल किए गए टूल, और रनटाइम एनवायरमेंट इंस्टॉल किए गए हैं. इनमें से हर एक को अलग-अलग सुरक्षा हाइजीन लेवल के साथ बनाया गया है.

अब तक Google, बाइनरी ऑथराइज़ेशन का इस्तेमाल करता है. यह एक इंटरनल रनटाइम एनफ़ोर्समेंट जांच है. इससे यह पक्का किया जाता है कि Google में डिप्लॉय किए गए प्रोडक्शन सॉफ़्टवेयर और कॉन्फ़िगरेशन की सही तरीके से समीक्षा की गई हो और यह पता लगाया जा सके कि उनके सोर्स का पता लगाया जा सकता है या नहीं.

Google यह पक्का करता है कि कोई भी व्यक्ति LUCI पर बनाए गए आर्टफ़ैक्ट की सप्लाई चेन और उसके बिल्ड को हैक न कर सके, लेकिन Google इस बात का पता नहीं लगा पाता, इस तरह के सॉफ़्टवेयर का जोखिम Google, उपयोगकर्ताओं को भेजे जाने वाले सॉफ़्टवेयर पर करता है.

पिछले साल की शुरुआत में, हर बिल्ड के लिए सिस्टम एक पुष्टि करने लायक बिल्ड मेनिफ़ेस्ट बनाता है. यह एक हस्ताक्षर किया गया JWT होता है, जिसमें इसमें शामिल किए गए सोर्स की पूरी जानकारी दी जाती है. इसमें, बनाई गई बाइनरी और आर्टफ़ैक्ट के क्रिप्टोग्राफ़िक हैश से, और पूरे बिल्ड पैरामीटर की जानकारी दी जाती है. बिल्ड मेनिफ़ेस्ट हमें सोर्स से आर्टफ़ैक्ट को ट्रेस करने में मदद करता है. इससे बिल्ड प्रोसेस और उसके आउटपुट की पुष्टि की जा सकती है.

इसके अलावा, मेनिफ़ेस्ट हमें यह पुष्टि करने में भी मदद करता है कि बनाए गए आर्टफ़ैक्ट में कोई बदलाव नहीं किया गया है, क्योंकि किसी भी बदलाव से हस्ताक्षर अमान्य हो सकता है. कुल मिलाकर, इससे हमें उन आर्टफ़ैक्ट की सुरक्षा की चेन मिलती है जो भरोसेमंद सिस्टम के बीच स्विच करते हैं.

बाइनरी ऑथराइज़ेशन को दो चरणों वाले सिस्टम के तौर पर लागू किया जाता है. सिस्टम, बिल्ड टाइम की जानकारी के साथ एक 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."""

ज़रूरी शर्तों को करीब चार हिस्सों में बांटा गया है:

  • सोर्स कंट्रोल: यह सुविधा, बिल्ड में शामिल डेटा की सुरक्षा करती है.
  • बिल्ड: सोर्स को बाइनरी में बदलने वाली प्रोसेस को सुरक्षित रखता है.
  • सिद्धांत: ऐसा प्रमाणित जिसमें ऐसे बिल्ड मेनिफ़ेस्ट शामिल हों जिसकी पुष्टि की जा सके.
  • नीति: ऐसे नियम जो यह तय करते हैं कि कोई आर्टफ़ैक्ट, किसी कॉन्टेक्स्ट में ज़रूरी शर्तें पूरी करता है या नहीं.

Chrome के लिए सीआई और सीडी प्रोसेस के तहत, नीति लागू करने से जुड़ी जांच लागू करने और इन्फ़्रास्ट्रक्चर की मदद से हमें यह पुष्टि करने में मदद मिली है कि कोड और कॉन्फ़िगरेशन, सुरक्षा के लिए ज़रूरी सबसे कम मानकों को पूरा करते हैं. यह एक ज़रूरी कंट्रोल है, जिसका इस्तेमाल करके नुकसान पहुंचाने वाले इनसाइडर या मैलवेयर के हमले का शिकार हो चुके इनसाइडर खाते की, उपयोगकर्ताओं को दिए जाने वाले सॉफ़्टवेयर में बदलाव करने की क्षमता को सीमित किया जाता है.