ক্রোমিয়াম ক্রনিকল #23: ক্রোম ইনফ্রায় যাচাইকৃত বিল্ড

পর্ব 23: মাউন্টেন ভিউ, CA (জুলাই, 2021)-এ আকাশ মুখার্জি দ্বারা
আগের পর্বগুলো

যখন আমরা ক্রোম তৈরি করি, তখন অনেক অংশ পরিবেশে অবদান রাখে যা একটি শিল্পকর্মের আউটপুটকে প্রভাবিত করে। ওএস থেকে, ইনস্টল করা সমর্থনকারী লাইব্রেরি, তৃতীয় পক্ষের নির্ভরতা, ইনস্টল করা সরঞ্জাম এবং রানটাইম পরিবেশ নিজেই; এই প্রতিটি বিভিন্ন নিরাপত্তা স্বাস্থ্যবিধি স্তর সঙ্গে নির্মিত হয়.

ঐতিহাসিকভাবে, Google বাইনারি অনুমোদন ব্যবহার করে, একটি অভ্যন্তরীণ রানটাইম এনফোর্সমেন্ট চেক যা Google-এ নিয়োজিত প্রোডাকশন সফ্টওয়্যার এবং কনফিগারেশন সঠিকভাবে পর্যালোচনা করা হয়েছে এবং এর প্রমাণ পাওয়া যায় কিনা তা নিশ্চিত করে অভ্যন্তরীণ ঝুঁকি কমিয়ে দেয়।

শনাক্ত না করেই LUCI-তে তৈরি আর্টিফ্যাক্টের বিল্ড এবং সাপ্লাই চেইন যাতে কোনো একক ব্যক্তি আপস করতে না পারে তা নিশ্চিত করার মাধ্যমে, Google আমরা ব্যবহারকারীদের কাছে পাঠানো সফ্টওয়্যারের ঝুঁকি কমায়।

গত বছর থেকে শুরু করে, প্রতিটি বিল্ডের জন্য, সিস্টেমটি একটি যাচাইযোগ্য বিল্ড ম্যানিফেস্ট তৈরি করে — একটি স্বাক্ষরিত JWT যা বিল্ডে প্রবেশ করা উৎসগুলি, উত্পাদিত বাইনারি এবং আর্টিফ্যাক্টগুলির ক্রিপ্টোগ্রাফিক হ্যাশ এবং সম্পূর্ণ বিল্ড প্যারামিটারগুলিকে সম্পূর্ণরূপে বর্ণনা করে৷ এই বিল্ড ম্যানিফেস্টটি আমাদেরকে উত্সগুলিতে ফিরে একটি আর্টিফ্যাক্ট ট্রেস করতে সক্ষম করে, এইভাবে বিল্ড প্রক্রিয়া এবং এর আউটপুটগুলি যাচাইযোগ্য করে তোলে।

এছাড়াও, ম্যানিফেস্টটি আমাদের যাচাই করতে সক্ষম করে যে বিল্ট আর্টিফ্যাক্টটি পরিবর্তন করা হয়নি কারণ কোনো পরিবর্তন স্বাক্ষরটিকে বাতিল করে দেবে। সামগ্রিকভাবে, এটি বিশ্বস্ত সিস্টেমগুলির মধ্যে অতিক্রম করার সময় আর্টিফ্যাক্টগুলির জন্য আমাদের একটি চেইন-অফ-কাস্টডি প্রদান করে৷

বাইনারি অনুমোদন একটি দ্বি-পদক্ষেপ সিস্টেম হিসাবে প্রয়োগ করা হয়। সিস্টেম বিল্ড টাইম তথ্যের সাথে একটি উদ্ভব উৎপন্ন করে; সফ্টওয়্যার স্বাক্ষর বা ইনস্টল করার আগে নীতির প্রয়োগ ঘটে।

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টি ক্ষেত্রে বিভক্ত:

  • উত্স নিয়ন্ত্রণ: বিল্ডে যাওয়া ডেটা রক্ষা করে।
  • বিল্ড: সেই প্রক্রিয়াটিকে রক্ষা করে যা উৎসকে বাইনারিতে রূপান্তর করে।
  • উত্স: যাচাইযোগ্য বিল্ড ম্যানিফেস্ট ধারণ করে প্রত্যয়ন।
  • নীতি: প্রদত্ত প্রেক্ষাপটে একটি প্রদত্ত শিল্পকর্ম যোগ্য কিনা তা নির্ধারণ করে এমন নিয়ম।

Chrome এবং পরিকাঠামোর জন্য CI এবং CD প্রক্রিয়ার অংশ হিসাবে একটি নীতি প্রয়োগকারী চেক প্রয়োগ করা আমাদেরকে যাচাই করতে সক্ষম করেছে যে কোড এবং কনফিগারেশন নিরাপত্তার জন্য নির্দিষ্ট ন্যূনতম মান পূরণ করে। এটি একটি জটিল নিয়ন্ত্রণ যা আমরা ব্যবহারকারীদের মধ্যে বিতরণ করি এমন সফ্টওয়্যার সংশোধন করার জন্য সম্ভাব্য দূষিত অভ্যন্তরীণ বা আপোসকৃত অভ্যন্তরীণ অ্যাকাউন্টের ক্ষমতা সীমিত করতে ব্যবহৃত হয়।