تطوير البرمجيات الآمن / متقدم: المكونات والأدلة والاستجابة / الدرس 14
فصل سلامة الملف عن مصدر البناء
مراجعة البصمات وادعاءات المنتج والتحقق الموثوق وتوقعات الإصدار دون توقيع أو نشر.
في هذه الصفحة
أهداف الدرس
- شرح ما تثبته مقارنة البصمة وما تتركه مجهولا.
- ربط المصدر بالملف الدقيق وتوقعات المنتج المعتمد.
فصل الأسئلة عن ملف برمجي
قد يبقى ملف مطابقا لنسخة منزلة، ومع ذلك يأتي من مصدر غير مقصود أو باني غير موثوق. تختلف مقارنة السلامة وهوية المنتج ومراجعة المصدر وعملية البناء والموافقة في ادعاءاتها. حدد ملف إصدار الورش الدقيق قيد المراجعة وتوقعات منتجه ومدخلاته. لا يحمل اسم مثل secure-release.zip دليلا بذاته. يصف دليل المصدر كيفية إنتاج الملف، ولا تفيد الوثيقة إلا إذا تحققت أصالتها وربطها بالملف وتوقعات السياسة ضمن نموذج ثقة معتمد.
استخدام البصمات لما تدعمه
تتيح البصمة التشفيرية مقارنة الملف ببصمة متوقعة حصلت عليها عبر قناة موثوقة. يحسب البرنامج SHA-256 لسلسلتين عامتين في الذاكرة ويوضح كشف التغير. لا يتحقق من توقيع أو توزيع موثوق أو تنفيذ بناء. إذا أمكن لمهاجم استبدال الملف وبصمته غير الموثقة معا، فلا يثبت تطابقهما كثيرا بشأن الأصل. احفظ مصدر القيمة المتوقعة في المراجعة. ليست البصمة تشفيرا، ولا تستخدم نشر بصمة سر لإخفائه دون تصميم أمني مستقل.
import hashlib
original = b"workshop-release-lab-v1"
changed = b"workshop-release-lab-v2"
expected = hashlib.sha256(original).hexdigest()
assert hashlib.sha256(original).hexdigest() == expected
assert hashlib.sha256(changed).hexdigest() != expected
assert len(expected) == 64
print("local byte-change detection checked")
local byte-change detection checked
يبصم البرنامج الكامل سلاسل تدريب في الذاكرة ولا يقرأ إصدارا أو يتحقق من توقيع أو هوية. تحسب البصمة المتوقعة داخله للتوضيح فلا تقدم ثقة مصدر مستقلة.
ربط دليل المنتج بتوقعات السياسة
يحتاج مدقق المصدر معرفة المنتجين وتوقعات البناء الموثوق بها لهذا الملف. تختلف خطوات فحص بصمة موضوع البيان الموثق وهوية الباني والمصدر والمعاملات المناسبة ضمن الصيغة والسياسة المختارتين. ينمذج البرنامج القرار بعد افتراض تحقق الأصالة في موضع آخر؛ فالقيمة المنطقية حقيقة بيانات معلنة لا فحص توقيع. يستخدم سجلا مخصصا لا شهادة SLSA كاملة. يمنع القيد الصريح تقديم مقارنة قاموس مريحة على أنها تحقق سلسلة توريد.
def accept_reviewed_statement(statement):
return statement["authenticityVerified"] is True and statement["builder"] == "approved-lab-builder" and statement["sourceRevision"] == "lab-revision-8" and statement["artifactMatches"] is True
case = {"authenticityVerified":True, "builder":"approved-lab-builder", "sourceRevision":"lab-revision-8", "artifactMatches":True}
assert accept_reviewed_statement(case) is True
assert accept_reviewed_statement({**case, "builder":"other-builder"}) is False
assert accept_reviewed_statement({**case, "artifactMatches":False}) is False
print("declared provenance-policy facts checked")
declared provenance-policy facts checked
يفحص البرنامج الكامل ثلاث حالات معلنة بمقارنات منطقية ولا ينشئ شهادة أو يتحقق تشفيريا. يجب أن ينشئ المدقق الحقيقي حقائق الأصالة والربط لا يقبلها من مستدع.
مراجعة حد البناء كنظام
يعتمد أمن البناء أيضا على ضوابط المصدر والإعداد المراجع وحل التبعيات والعزل ومن يستطيع تعديل العملية أو دليلها. لا يحقق بيان موقع من منتج غير موثوق أو مخترق سياسة الإصدار تلقائيا. قد تضيف قابلية إعادة البناء مقارنة مفيدة، لكنها خاصية مستقلة تحتاج مدخلات مضبوطة بعناية. لا تدع ثبوتها من مثال تسلسل JSON حتمي. استخدم إصدار SLSA المختار مرجعا لنموذج التهديد وأسئلة التحقق، وسجل الخصائص التي تدعمها المنصة الفعلية وتفحصها.
حفظ الملف الدقيق ونتائج التحقق
ينبغي أن تربط حزمة الإصدار المصدر المراجع وهوية البناء وبصمة الملف وقائمة المكونات ودليل الاختبار ونتيجة التحقق الفعلية. يبقى غياب دليل المصدر أو وجود منتج غير متوقع شرط قرار ظاهرا، ولا يستبدل بقبول واسع لكل شيء. أبق إعداد المنصة والتوقيع خارج هذه التمارين المحلية. يفحص المساق بايتات عامة وحقائق سياسة معلنة فقط؛ وهذا دليل محدود مفيد لفهم التصميم. تبقى التواقيع وجذور الثقة والبناء المستضاف والنشر حدودا غير منفذة تحتاج تصريحا وتحققا مستقلين.
الأخطاء الشائعة وإصلاحها
يسمى تطابق البصمة مصدرا موثوقا
- لماذا يحدث؟
- القيمة المتوقعة غير موثقة مستقلا.
- كيف تصلحه؟
- راجع الثقة وافحص المصدر وفق السياسة.
- كيف تتجنب تكراره؟
- افصل السلامة وأصالة المنتج.
يرسل المستدعي authenticityVerified=true
- لماذا يحدث؟
- يتجاوز الادعاء المدقق.
- كيف تصلحه؟
- أنشئ الأصالة عند حد التحقق.
- كيف تتجنب تكراره؟
- عامل تسميات العميل مدخلا غير موثوق.
يقبل ملف موقع من أي باني
- لماذا يحدث؟
- تفحص الهوية دون التوقعات.
- كيف تصلحه؟
- قارن المنتج والمصدر والمعاملات والربط.
- كيف تتجنب تكراره؟
- احفظ سياسة منتج مراجعة وسلوك فشل مفيدا.
اختبر فهمك
1. هل تثبت بصمة ملف وبصمة متوقعة منسوخة معه أن بناء معتمدا أنتجه؟
اعرض الحل المشروح
لا. تكشف المقارنة اختلافا عن القيمة المتوقعة المختارة، لكنها لا تثبت من قدم القيمة أو كيفية بناء الملف. تحقق من دليل المنتج الموثوق وربطه بالملف وفق السياسة المعتمدة، ثم سجل النتائج الفعلية بدلا من استنتاج المصدر.
2. لماذا يفحص النموذج artifactMatches مستقلا عن builder؟
اعرض الحل المشروح
قد يسمي البيان بانيا معتمدا لكنه يصف ملفا مختلفا. ربط البايتات الدقيقة قيد المراجعة بالبيان الموثق حقيقة مستقلة لازمة. يفترضها النموذج للتعليم، بينما يجب أن ينشئها المدقق الحقيقي تشفيريا ويفرض السياسة المختارة كاملة.
أهم ما تعلمته
- تختلف السلامة والمصدر والعملية والموافقة.
- يوثق المصدر ويربط ويفحص مقابل التوقعات.
- لا تحقق البصمات والنماذج المحلية سلسلة مستضافة.