ينفذ هذا المستودع أداة للتحقق من أن البقع مضمون لتكافؤ التتبع (PATE).
الهدف من ذلك هو إثبات أن تصحيحات الأمان المطبقة على الثنائيات تزيل فقط السلوكيات السيئة ، أو وصفها بدقة لمطور التصحيح. يدعم Verifier ثنائيات PowerPC و AARCH32 (تتطلب حاليًا ثنائيات ELF المرتبطة بشكل ثابت).
أسرع طريقة للبدء هي بناء صورة Docker واستخدام الأداة عبر Docker. لمزيد من تعليمات الإنشاء المتعمقة ، راجع قسم التطوير أدناه.
أولاً ، قم ببناء صورة Docker مع الأمر:
Docker Build -Platform Linux/AMD64. -T باتي
بعد ذلك ، قم بتشغيل المدقق على مثال:
Docker Run --rm -it -Platform Linux/AMD64 -V "$ (PWD)"/الاختبارات/التكامل/الحزمة/exe:/الهدف pate -Original /target/Packet.exe -patched /target/packet.patched.exe -s parse_packet
يقبل Verifier وسيطات سطر الأوامر التالية:
-H ،-مساعدة في إظهار نص المساعدة
-O ،-ex exe الأصلي الأصل الثنائي
-P ،-ثنائي مرقح مصحح
-B ،-معلومات كتلة اسم ملف blockinfo المتعلقة بالثنائيات
-S ،-startymbol arg arg تحليل التحليل من الوظيفة مع هذا الرمز
-D ،-لا تكتشف Nodcispery أزواج الوظائف بشكل ديناميكي بناءً على
المكالمات.
-Solver Arg
شروط. واحدة من CVC4 ، yices ، أو Z3
(افتراضي: Yices)
-وقت الزمن ARRG المهلة للتحقق من الأهداف الفردية في ثوانٍ
(افتراضي: 300)
-الزمنية الزمنية arg the the timeout للتحقق من الأهداف الإرشادية في ثوانٍ
(افتراضي: 10)
-الأوطنية الأنيقة تلميح ARG
تحليل مواصفات Anvill لاكتشاف الرمز
تلميحات
-مقصورة-تلميح الأرجح
تحليل مواصفات Anvill لاكتشاف الرمز
تلميحات
-الأداء الأصلي-الجلبات الجبلية ARG
تحليل ملف JSON يحتوي على وظيفة احتمالية
اسم/تلميحات العنوان
-تلميحات مسبقة
تحليل ملف JSON يحتوي على وظيفة احتمالية
اسم/تلميحات العنوان
-أوريج-CSV-function تلميح arg
تحليل ملف CSV يحتوي على اسم/عنوان الوظيفة
تلميحات
-ملاءمة CSV-Functions Arg
تحليل ملف CSV يحتوي على اسم/عنوان الوظيفة
تلميحات
-الأوطنية-تلميحات-تلميحات ARG ARG ARS
تلميحات
-مشتركة BSI تلميح ARG ARG PARSE ملف JSON يحتوي على اسم/عنوان الوظيفة
تلميحات
-لا تلميحات لا تستخرج البيانات الوصفية من معلومات قزم في
الثنائيات
-v ،-arvosity arrge arvosity of logging output (الافتراضي: info)
-save-macaw-cfgs dir save macaw cfgs إلى الدليل المقدم
-ملف ملصق ملصق التفاعل
احفظ التفاعلات مع SMT Solver خلال الرمز الرمزي
التنفيذ لهذا الملف
-ملف مقاوم للضمان
ملف لحفظ نتائج إثبات مثيرة للاهتمام في JSON
شكل
-ملف ملف السطوع ملف لحفظ سجلات التصحيح
-e ،-وضع أخطاء errormodode arg arg
(افتراضي: ThrowonanyFailure)
-r ،-RescopeMode Arg متغير فشل معالجة الفشل في الإنقاذ
(افتراضي: throwoneqrescopefailure)
-تخطي الوظائف التي لا تسميها التحليلات للوظائف بدون رموز
-تخطي-divergent-control-flow
<rected>
-تهدف areiv-regs arg حساب حالة تكافؤ كافية ل
إنشاء المساواة على السجلات المعطاة بعد
Toplevel Pointpoint Returns. <rected>
-ignore-segments arg skip scip (0-indexed) عند تحميل قزم
-json-toplevel تشغيل toplevel في وضع json-output (الوضع التفاعلي
فقط)
-شرائح علامات ARG-PATERAMENTS فقط على أنها قراءة فقط (0-INDEXED) عند التحميل
قزم
-اسم الملف النخبي حفظ Macaw CFGS إلى الدليل المقدم
-asssume-stack-scope أضف افتراضات إضافية حول تحديد إطار المكدس
أثناء مكالمات الوظيفة (غير آمن)
-ignore-warnings arg لا ترفع أي من أنواع التحذير المعينة
-Always-Classify-Return دائمًا في حل فشل المصنف بالافتراض
تعود الوظيفة ، إن أمكن.
وصف قسم البدء السريع أمرًا لتشغيل المدقق في حالة اختبار باستخدام حاوية Docker. سيغطي هذا القسم بعض الأوامر المفيدة للسيناريوهات الأخرى.
إذا كان لديك ملف tar لصورة Docker للمقرر ، فيمكنك تثبيته باستخدام الأمر:
Docker Load -I/Path/TO/PATE.TAR
لتشغيل المدقق عبر Docker بعد هذا:
Docker Run -RM -it -Platform Linux/AMD64 Pate -Help
للاستفادة من المدقق مع Docker ، من المفيد تعيين دليل على نظام الملفات المحلي في حاوية Docker لتتمكن من حفظ ملفات الإخراج. على افتراض أن الثنائيات الأصلية patched.exe هي original.exe .
MKDIR VERIFIERDATA
CP Original.exe patched.exe everifierdata/
Docker Run -RM -it -Platform Linux/AMD64
-v `pwd`/everifierdata`:/everifierdata pate
-أوريغنسيون /فيردياتا/original.exe
-patched /verifierdata/patched.exe
-مقاوم---json /verifierdata/report.json
-log-file /vilefierdata/pate.log
-save-macaw-CFGS /everifierdata /cfgs
سيقوم هذا الأمر بتشغيل المحقرة على الثنائيات وإسقاطك في حلقة المطبوعة القراءة ، حيث يمكنك استكشاف إخراج التحقق بشكل تفاعلي.
بشكل افتراضي ، يبدأ التحقق من التحقق من نقطة إدخال البرنامج الرسمية. غالبًا ما لا يكون هذا مفيدًا جدًا (ويمكن أن يكون مشكلة في الثنائيات المعقدة مع _start كبيرة تسبب مشكلة لاكتشاف الكود لدينا). بالإضافة إلى ذلك ، للتغييرات مع نطاق التأثير المعروف (أو على الأقل) ، فإن تحليل الوظائف المتأثرة فقط أسرع بكثير. لتحديد نقطة إدخال التحليل بدلاً من ذلك ، سيبدأ تمرير خيار -s <function_symbol> التحليل من الوظيفة المقابلة للرمز المحدد. لاحظ أن هذا يتطلب توفير رموز وظيفية للثنائيات (إما كرموز تصحيح مدمجة أو بشكل منفصل في أحد تنسيقات التلميحات).
على الرغم من أنها غير سليمة ، إلا أنه من المفيد في بعض الأحيان معالجة استدعاء الوظيفة باعتبارها عدم وجود OP. على سبيل المثال ، يمكن أن يكون تجاهل الوظائف الكبيرة التي لم تتغير ومن غير المرجح أن يكون لها تأثير على الصواب (على سبيل المثال ، وظائف التشفير الكبيرة من المكتبات الموثوقة) تحسين الأداء بشكل كبير. لاستخدام هذه الميزة ، تمرير ملف تكوين إلى المحقرة باستخدام خيار --blockinfo ، مع التأكد من أن ملف التكوين يتضمن التوجيهات التالية:
تجاهل الوظائف الأصلية = [<aded> ، ...] تجاهل الوظائف المشتركة = [<aded> ، ...]
حيث كل من القوائم عبارة عن قائمة بعناوين الوظائف التي يجب تجاهلها. على الرغم من أن القائمتين محددتين بشكل منفصل ، إلا أنه من المؤكد أنه ينبغي "محاذاة" بين الثنائيات (أي ، على الأرجح ، على الأرجح أن تجاهل وظيفة في الثنائي الأصلي يعني أن الوظيفة المقابلة في الثنائي المرقص تحتاج أيضًا إلى تجاهلها).
يستفيد المدقق من البيانات الوصفية القزم بطريقتين:
لحقن البيانات الوصفية القزم في ثنائيات بدونها (على سبيل المثال ، ثنائيات تجردها) ، نوصي باستخدام أداة القزم. كمثال على استخدام dwarf-writer من خلال صورة Docker الخاصة به على افتراض وجود هدف ( target-binary.exe ) والبيانات الوصفية في تنسيق anvill json ( target-binary.exe.json ):
Docker Load -i Dwarf-Writer-Docker.tar.tar
mkdir dwarfwriterdata
CP Target-binary.exe Target-binary.exe.json dwarfwriterdata/
Docker Run -RM -it -v `pwd`/dwarfwriterdata:/dwarfwriterdata dwarf -writer
-أنفيل /dwarfwriterdata/target-binary.exe.json
/dwarfWriterData/target-binary.exe
/dwarfWriterData/target-binary-dwarf.exe
سيؤدي ذلك إلى إنتاج نسخة من التعريفات الثنائية مع البيانات الوصفية القزمية في DwarfWriterData/target-binary-dwarf.exe .
إذا كان لديك أداة llvm-dwarfdump ، فيمكنك استخدامها لتفقد البيانات الوصفية التي تم إنشاؤها. سيستفيد pate Verifier تلقائيًا من تلميحات البيانات الوصفية القزمية ما لم يتم توجيهها لتجاهلها.
يأخذ Verifier ثنائيين كمدخلات: ثنائي أصلي وثنائي مصحح. الافتراض هو أنه تم تطبيق بعض التصحيح الموجهة للأمن على الثنائي الأصلي الذي يحافظ إلى حد كبير سلوكه ، ولكنه قد يصلح بعض السلوكيات غير المرغوب فيها. ثم يحاول المدقق إثبات أن الثنائيات تظهر نفس السلوك الذي يمكن ملاحظته ؛ إذا لم يستطع ذلك ، فإنه ينتج ملخصًا تفاضليًا يصف الظروف التي بموجبها يعرض الثنائي المصحح سلوكًا مختلفًا عن الأصل. يمكّن ذلك مطوري التصحيح من فهم تأثير تصحيحاتهم على دلالات البرنامج وتقييم ما إذا كان التأثير مقصورًا على مسارات التنفيذ التي قصدواها.
لا يتطلب التحقق من مواصفات مقدمة يدويًا من المستخدمين ؛ بدلاً من ذلك ، يعامل البرنامج الأصلي باعتباره المواصفات السلوكية المطلوبة. هذا الترتيب يجعل PATE مؤيدًا علائقيًا ، لأنه يتعلق بالثنائي المصحح إلى الأصل. يعتمد Verifier على عدد من المكتبات الحالية لاكتشاف التعليمات البرمجية الثنائية والتنفيذ الرمزي للبرامج (بما في ذلك برامج رمز الجهاز). تقريبًا ، يعمل المدقق:
تتم كتابة أداة PATE في Haskell وتتطلب برنامج التحويل البرمجي لـ GHC (نختبر مع 9.6) وأداة بناء cabal لتجميعها. يمكن تحقيق البناء من المصدر من خلال:
git clone [email protected]: galoisinc/pate.git CD PATE تحديث الجهاز الفرعي GIT -init cp cabal.project.dist cabal.project Cabal تكوين PKG: بات ./pate.sh -help
يتطلب التحقق من SMT Solver أن يكون متاحًا في PATH . الافتراضي هو yices - z3 و cvc4 قد يعمل أيضًا ولكن لا يتم اختبارهما بانتظام باستخدام Pate.
تعتمد هذه المادة على العمل الذي تدعمه وكالة المشاريع البحثي المتقدمة للدفاع (DARPA) ومركز الحرب البحرية في المحيط الهادئ (NIWC Pacific) بموجب رقم العقد N66001-20-C-4027. أي آراء أو النتائج والاستنتاجات أو التوصيات المعبر عنها في هذه المواد هي آراء المؤلفين (المؤلفين) ولا تعكس بالضرورة وجهات نظر DARPA & NIWC Pacific.