أمان Microsoft Office: كائنات مضمنة



في البداية ، تم بناء بنية Microsoft Office على أساس مفهوم المستندات المركبة ، وهي أيضًا مستندات OLE ، والتي تم الترويج لها بنشاط من قبل Microsoft في فجر Windows 32 بت. في تلك الأيام ، بدت فكرة الجمع "بسلاسة" للجمع بين البيانات ذات التنسيقات المختلفة في وثيقة واحدة مغرية ورائعة ، وقبل تحديد المشاكل الأولى ، تمكنت من النمو بقوة في العديد من المنتجات واسعة النطاق.

كانت "الأخبار السيئة" هي أن الطريقة العالمية لإضافة البيانات (ورمز معالجة هذه البيانات) إلى المستندات أصبحت طريقة عالمية لإدخال الثغرات الأمنية في المنتج ، والتي لا تزال تقدم اليوم مفاجآت سارة لمنشئي باحثي أمان البرامج الضارة .

في وقت لاحق ، تلقت حزمة التطبيق مجموعة غنية إلى حد ما من الأدوات لإضافة الصور والرسوم البيانية والرسوم البيانية وعناصر التحكم التي تم إنشاؤها ومعالجتها بواسطة التطبيق وهي جزء منها في المستندات. من وجهة نظر أمنية ، فإن هذه العناصر أقل اهتمامًا بقليل من العناصر التي ستتم مناقشتها (بشكل أساسي) في المقالة - العناصر التي تستخدم رمز التطبيقات الخارجية التي تمت إضافتها إلى المستندات باستخدام OLE.

تمثيل "القرص" للمستند المركب هو ملف CFBF . ستناقش هذه المقالة تضمين الكائنات في مستندات Microsoft Office (أو بالأحرى جانب الأمان فقط) في سياق البيانات والتعليمات البرمجية المحملة في الذاكرة في وقت التشغيل.

يمكن تقسيم الكائنات المضمنة رسميًا في مستندات Microsoft Office إلى المجموعات التالية:

  • عناصر تحكم ActiveX (عناصر تحكم ActiveX)
  • كائنات OLE المضمنة
  • الملفات المضمنة ( الحزم )
  • عناصر مضمنة غير OLE

عناصر تحكم ActiveX


يمكن تمثيل عناصر تحكم ActiveX كعناصر لإطار برنامج - على سبيل المثال ، الأزرار وأزرار الاختيار والقوائم وحقول الإدخال والنماذج الأخرى - مصممة لإنتاج أحداث معينة أو الاستجابة للأحداث. ذات مرة ، يبدو أنها فكرة جيدة لإنشاء عناصر التحكم هذه عالمية ، مع إمكانية استخدامها في أي تطبيق ، ووضعها لهذا الغرض في مكونات COM .

تمثل صفحات الويب المضمنة في ActiveX خرق أمان Internet Explorer معروفًا ، وزادت إجراءات الأمان بمرور الوقت. تخلت المتصفحات من الشركات المصنعة الأخرى عن دعم ActiveX على الفور. لقد انفصل متصفح Microsoft Edge الجديد أخيرًا مع هذه الآثار من الماضي. ومع ذلك ، لا يزال التضمين في مستندات Office ممكنًا.

تم تصميم ActiveX في المستندات بالاشتراك مع Visual Basic for Applications . ومع ذلك ، لا يُطلب من برنامج VBA تنزيلها وتنشيطها ، ولا يلزم إذن المستخدم لتنزيل العناصر من القائمة البيضاء .

نقاط الضعف في هذا الأخير خطيرة بشكل خاص - الإعدادات الافتراضية التي تم تعيينها عند تثبيت التطبيق لا تنطوي على أي حماية ضد تحميل هذه العناصر ، ولا تحذير للمستخدم. يحتاج المسؤول إلى تشديد الإعدادات من خلال منع تحميل أي عناصر تحكم ActiveX (ومع ذلك ، لاحظ أن ActiveX لا يتم تحميله في وضع التصفح الآمن).
مثال: CVE-2012-0158

كانت CVE-2012-0158 واحدة من أخطر نقاط الضعف في مستندات Office في عام 2012. احتوى رمز التحميل لعنصر Microsoft ListView Control 6.0 من مكتبة MSCOMCTL.OCX على إمكانية تجاوز سعة المخزن المؤقت ، مما سمح باستبدال عنوان الإرجاع وتنفيذ التعليمات البرمجية العشوائية. نظرًا لوجود العنصر في "القائمة البيضاء" الخاصة بـ ActiveX ، بدأ التحميل فورًا عند فتح المستند. تم إصلاح الثغرة الأمنية حاليًا ، ولا يزال عنصر تحكم ListView يعتبر "آمنًا".

إضافة ActiveX إلى مستند


لإضافة عنصر تحكم إلى مستند Microsoft Office (للبساطة ، خذ Word) ، استخدم واجهة المستخدم لفتح علامة التبويب "المطور" (تم تكوين رؤيتها في قائمة "خيارات Word") وحدد عناصر التحكم -> أدوات من الإصدارات السابقة -> عناصر تحكم ActiveX. ستعرض القائمة مجموعة من الرموز المقابلة لعناصر Microsoft Forms ، بالإضافة إلى القدرة على تحديد ActiveX من القائمة المكونة من العناصر المتاحة في النظام والتي يتم تحديدها وفقًا لعدد من المعايير.



لا تتوافق القائمة المعروضة مع مجموعة العناصر التي يمكن تحميلها بالفعل في المستند ، وبالتالي لا يمكن توجيهها عند البحث عن العناصر المعرضة للخطر. يحتوي التحقق المتطور متعدد المستويات لـ ActiveX الذي تم تنزيله على عدة مراحل ، ويختلف عن إصدارات Office ويختلف من التحديث إلى التحديث ، لذا فإن الطريقة الأكثر أمانًا للتحقق من إمكانية التنزيل هي "إنشاء" ملف المستند يدويًا مع العنصر محل الاهتمام ومحاولة فتحه في Office. يتم وصف تنسيقات المستندات المحتملة أدناه.

عرض البرنامج


كل عنصر ActiveX هو في الأساس كائن من فئات COM التي تلبي متطلبات معينة. يتم تحميل عنصر باستخدام نظام COM الفرعي ، ويتم تضمين الكود القابل للتنفيذ في إحدى الوحدات ، والتي تكون عادةً "خارجية" لتطبيق الحاوية. مثل أي كائن COM ، يمكن تنفيذ عنصر ActiveX كملف DLL ، أو كملف EXE قابل للتنفيذ. في الحالة الأولى ، سيتم تحميل المكتبة في مساحة عنوان الحاوية ، في الثانية - سيتم معالجة العنصر في عملية منفصلة ، مع نقل البيانات بين الحاوية والكائن من خلال تنظيم COM.

مثل أي كائن COM ، يحتوي ActiveX على واجهات وخصائص وطرق .

الواجهات هي في الأساس مجموعة من الواجهات القياسية التي يجب أن تحتوي عليها فئة ActiveX للتحميل والتفاعل الكامل مع الحاوية ، على وجه الخصوص ، IOleControl و IOleObject.

قد يؤدي عدم وجود أي واجهات ضرورية إلى تقليل وظيفة العنصر أو مقاطعة تحميله في مرحلة ما.
مثال: CVE-2015-2424
ارتبطت الثغرة CVE-2015-2424 بعنصر فئة TaskSymbol من مكتبة mmcndmgr.dll. لم يكن العنصر مخصصًا للاستخدام في المستندات ، ولم يقم بتصدير واجهة IDispatch. في عملية تحميل عنصر ، تلقى الإجراء الذي طلب هذه الواجهة خطأ ودمر الهيكل الداخلي للعنصر ، مما أدى إلى ضعف نوع الاستخدام بعد الاستخدام المجاني. في الوقت الحالي ، لا يُسمح بتنزيل العنصر (على الرغم من ذلك ، لا يزال من الممكن العثور عليه في القائمة لإضافته إلى قائمة "المطور"). لم يتم حل مشكلة الضعف نفسها.
بالإضافة إلى تلك القياسية ، تقوم كل فئة ActiveX بتصدير الواجهة "الرئيسية" ، والتي تمثل وظيفتها الفريدة. على سبيل المثال ، بالنسبة للفئة Forms.CommandButton.1 ، هذا هو ICommandButton.

يمكنك عرض واجهات ActiveX باستخدام أداة OleView المضمنة في حزمة Microsoft Visual Studio.



تحدد واجهة عنصر الأساليب والخصائص الخاصة به . تمثل الخصائص بعض البيانات التي تحدد مظهر عنصر ما وتشغيله. يقوم مطور عنصر ActiveX بتعيين اسم محدد لكل خاصية ، مثل BackColor أو GridLineWidth ، ونوع ، على سبيل المثال ، سلسلة أو عدد صحيح أو دقة مزدوجة حقيقية. للصور والرموز النقطية ، هناك نوع من الممتلكات مثل صورة. يمكن لبرنامج العميل تعيين الخصائص الفردية لعنصر التحكم عن طريق تعيين مؤشرات وقيم الأعداد الصحيحة الخاصة بهم.

من وجهة نظر التنفيذ على مستوى منخفض ، يكون التقسيم إلى الأساليب والخصائص رسميًا ، حيث يتم تمثيل "الخصائص" بمجموعة من طرق get / set. ومع ذلك ، هناك اختلاف كبير: لا يمكن استدعاء طرق عنصر (واجهته الرئيسية) إلا بشكل برمجي ، في حالة مستندات Office ، فقط من برنامج VBA قيد التشغيل. من وجهة نظر أمنية ، هذا ليس باهتمام كبير ، لأن تنفيذ VBA هو بالفعل حل وسط لنظام التشغيل. يتم حفظ الخصائص في المستند وعندما يتم فتحها ، سيتم معالجتها وتحميلها في الهياكل في الذاكرة حتى إذا كان تنفيذ VBA محظورًا .

من وجهة نظر البرمجيات ، من جانب العنصر ، للحفاظ على خصائصه وحالته في الوثيقة ، توفر الحاوية واجهات IStream و IStorage و IPropertyBag . لم يعد تنفيذها وعرض البيانات في ملف قرص مصدر قلق لعنصر ActiveX ، ويعتمد بالكامل على الحاوية وتنسيق المستند. وتجدر الإشارة إلى أن مجموعة وتنسيق البيانات المخزنة قد تتوافق مع مجموعة خصائص تم تصديرها "بشكل عام" ، أو قد تكون مختلفة تمامًا. فكر في أمثلة التنفيذ المتعلقة بـ Microsoft Office.

ملف مركب (CFBF)


تنسيق مستند Office القديم ، حيث تم تخصيص ObjectPool لتخزين منخفض المستوى وأدلة فرعية منفصلة داخله لتخزين بيانات ActiveX. يحتوي الدفق "\ 001CompObj" على معرف الفئة ، والذي يحدد في النهاية فئة الكائن المحمل. سيؤدي استبدال المعرف مباشرة في ست عشري إلى محاولة تحميل كائن من فئة مختلفة تمامًا.



Office Open XML


تنسيق مستند XML الحديث. الملف عبارة عن أرشيف مضغوط. يتم تخزين بيانات عنصر تحكم ActiveX في دليل ActiveX الفرعي في ملفات ذات أسماء بسيطة مثل activeX1.xml.



ملف مثال:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ax:ocx ax: classid="{D7053240-CE69-11CD-A777-00DD01143C57} " ax: persistence="persistPropertyBag" xmlns:ax="http://schemas.microsoft.com/office/2006/activeX" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<ax:ocxPr ax:name="Caption" ax:value="CommandButton1"/>
<ax:ocxPr ax:name="Size" ax:value="2540;847"/>
<ax:ocxPr ax:name="FontName" ax:value="Calibri"/>
<ax:ocxPr ax:name="FontHeight" ax:value="225"/>
<ax:ocxPr ax:name="FontCharSet" ax:value="204"/>
<ax:ocxPr ax:name="FontPitchAndFamily" ax:value="2"/>
<ax:ocxPr ax:name="ParagraphAlign" ax:value="3"/>
</ax:ocx>


في هذه الملفات ، يشار إلى معرفات الفئة في شكل نصي. سيؤدي استبدال المعرف أيضًا إلى محاولة تحميل عنصر من فئة أخرى.

بعد ذلك ، يحتوي الملف على إشارة إلى نوع تخزين البيانات للكائن: persistPropertyBag أو persistStorage أو persistStream. إذا كان العنصر يدعم خصائص persistPropertyBag ، فيمكن تخزين بياناته في نفس الملف النصي ، انظر المثال أعلاه. إذا كان يحتاج إلى تخزين أو دفق ثنائي ، فسيتم حفظ البيانات في ملف باسم نوع activeX1.bin ، وهو ملف CFBF .



RTF


في مستند rtf ، يتم تعريف عنصر ActiveX بواسطة علامات \ object \ objocx . تحتوي العلامة \ objdata على مخزن خصائص العنصر كتعبير سداسي لملف CFBF.

{\object\objocx\f37\objsetsize\objw1440\objh480{\*\objclass Forms.CommandButton.1}
{\*\objdata 010500000200000016000000
466f726d732e436f6d6d616e64427574746f6e2e31000000000000000000000e0000
d0cf11e 0a1b11ae1000000000000000000000000000000003e000300feff090006


التنزيل من الملف


عملية تحميل ActiveX من مستند بأكمله بسيطة للغاية. ينشئ تطبيق الحاوية كائنًا نظيفًا للفئة المحددة ، ويطلب واجهة التخزين المحددة منه ، ويوفر مؤشرًا للتخزين أو الدفق أو "حزمة الخصائص".

تصفية العناصر التي يمكن تحميلها خطوات عديدة. بادئ ذي بدء ، يتم حذف الفئات المحددة في القائمة السوداء المعروفة باسم Office COM Kill Bit (تلميح التسجيل * OFFICE_KEY * \ Common \ COM Compatibility). على سبيل المثال ، تحتوي علامات مكافحة التنزيل على فئات مثل Microsoft Scriptlet Component و Microsoft Web Browser.

سوف تذهب الطبقات المتبقية من خلال التحميل الأولي. هذا يعني أنه سيتم تحميل مكتبة الارتباط الحيوي (DLL) في تطبيق الحاوية ، أو سيتم تشغيل عملية خادم COM المطبق في ملف EXE. فقط بعد ذلك سيتم تنفيذ بقية عمليات الفحص ، بما في ذلك المرحلة الابتدائية - وما إذا كان الكائن ، في الواقع ، ممثل ActiveX.
مثال: CVE-2015-6128
في عام 2015 ، اكتشف الباحث أنه يمكن استخدام وحدات COM المسبقة التحميل لتجاوز ASLR وتنفيذ التعليمات البرمجية التعسفية عن طريق تحميل مكتبات ديناميكية وهمية. إن CVE-2015-6128 الذي تم إصداره لاحقًا ليس كلمة عن Microsoft Office.
إذا كان المعرف يعرف بالفعل ActiveX ، فسيخضع لعدة عمليات تحقق أخرى في عدة قوائم بالأبيض والأسود.

قائمة تمهيد ActiveX من .docx على Windows 7 و Office 2016 نظيفين في الإعدادات الافتراضية.
{00024522-0000-0000-C000-000000000046} RefEdit.Ctrl
{02AF6DD2-77E6-44DF-B3E1-57CF1476D8EA} Microsoft Forms 2.0 OptionButton
{04082FC6-E032-49F2-A263-FE64E9DA1FA3} Microsoft Forms 2.0 HTML TEXT
{0B314611-2C19-4AB4-8513-A6EEA569D3C4} Microsoft Slider Control, version 6.0
{13D557B6-A469-4362-BEAF-52BFD0F180E2} Microsoft Forms 2.0 HTML TextAREA
{19FED08E-EFD1-45da-B524-7BE4774A6AEE} Microsoft Forms 2.0 ListBox
{20DD1B9E-87C4-11D1-8BE3-0000F8754DA1} Microsoft Date and Time Picker Control 6.0 (SP4)
{227B1F3B-C276-4DE0-9FAA-C0AD42ADDCF0} Microsoft Forms 2.0 HTML RESET
{232E456A-87C3-11D1-8BE3-0000F8754DA1} Microsoft MonthView Control 6.0 (SP4)
{3D0FD779-0C2D-4708-A9BA-62F7458A5A53} Microsoft Forms 2.0 ToggleButton
{444D2D27-02E8-486B-9018-3644958EF8A9} FieldListCtrl.2 Object
{4C599241-6926-101B-9992-00000B65C6F9} Microsoft Forms 2.0 Image
{5052A832-2C0F-46c7-B67C-1F1FEC37B280} Microsoft Forms 2.0 Label
{5512D110-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML SUBMIT
{5512D112-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML IMAGE
{5512D114-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML RESET
{5512D116-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML CHECKBOX
{5512D118-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML OPTION
{5512D11A-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML TEXT
{5512D11C-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML Hidden
{5512D11E-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML Password
{5512D122-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML SELECT
{5512D124-5CC6-11CF-8D67-00AA00BDCE1D} Microsoft Forms 2.0 HTML TextAREA
{556C2772-F1AD-4DE1-8456-BD6E8F66113B} Microsoft ImageList Control 6.0 (SP6)
{585AA280-ED8B-46B2-93AE-132ECFA1DAFC} Microsoft StatusBar Control 6.0 (SP6)
{5CBA34AE-E344-40CF-B61D-FBA4D0D1FF54} Microsoft Forms 2.0 HTML CHECKBOX
{5E90CC8B-E402-4350-82D7-996E92010608} Microsoft Forms 2.0 HTML OPTION
{603C7E80-87C2-11D1-8BE3-0000F8754DA1} Microsoft UpDown Control 6.0 (SP4)
{6240EF28-7EAB-4dc7-A5E3-7CFB35EFB34D} Microsoft Forms 2.0 ScrollBar
{65BCBEE4-7728-41A0-97BE-14E1CAE36AAE} Microsoft Office List 16.0
{6C177EBD-C42D-4728-A04B-4131892EDBF6} Microsoft Forms 2.0 ComboBox
{787A2D6B-EF66-488D-A303-513C9C75C344} Microsoft Forms 2.0 HTML Password
{79176FB0-B7F2-11CE-97EF-00AA006D2776} Microsoft Forms 2.0 SpinButton
{86F56B7F-A81B-478d-B231-50FD37CBE761} Microsoft Forms 2.0 CommandButton
{87DACC48-F1C5-4AF3-84BA-A2A72C2AB959} Microsoft ImageComboBox Control, version 6.0
{8B2ADD10-33B7-4506-9569-0A1E1DBBEBAE} Microsoft Toolbar Control 6.0 (SP6)
{8BD21D10-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 TextBox
{8BD21D20-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 ListBox
{8BD21D30-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 ComboBox
{8BD21D40-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 CheckBox
{8BD21D50-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 OptionButton
{8BD21D60-EC42-11CE-9E0D-00AA006002F3} Microsoft Forms 2.0 ToggleButton
{9432194C-DF54-4824-8E24-B013BF2B90E3} Microsoft Forms 2.0 HTML SUBMIT
{95F0B3BE-E8AC-4995-9DCA-419849E06410} Microsoft TreeView Control 6.0 (SP6)
{978C9E23-D4B0-11CE-BF2D-00AA003F40D0} Microsoft Forms 2.0 Label
{9A948063-66C3-4F63-AB46-582EDAA35047} Microsoft TabStrip Control 6.0 (SP6)
{9BDAC276-BE24-4F04-BB22-11469B28A496} Microsoft Forms 2.0 HTML IMAGE
{A0E7BF67-8D30-4620-8825-7111714C7CAB} Microsoft ProgressBar Control, version 6.0
{CCDB0DF2-FD1A-4856-80BC-32929D8359B7} Microsoft ListView Control 6.0 (SP6)
{D7053240-CE69-11CD-A777-00DD01143C57} Microsoft Forms 2.0 CommandButton
{DCA0ED3C-B95D-490f-9C60-0FF3726C789A} Microsoft Forms 2.0 Image
{DD4CB8C5-F540-47ff-84D7-67390D2743CA} Microsoft Forms 2.0 TextBox
{DFD181E0-5E2F-11CE-A449-00AA004A803D} Microsoft Forms 2.0 ScrollBar
{E9729012-8271-4e1f-BC56-CF85F914915A} Microsoft Forms 2.0 CheckBox
{EA778DB4-CE69-4da5-BC1D-34E2168D5EED} Microsoft Forms 2.0 SpinButton
{EAE50EB0-4A62-11CE-BED6-00AA00611080} Microsoft Forms 2.0 TabStrip
{F14E8B03-D080-4D3A-AEBA-355E77B20F3D} Microsoft Forms 2.0 HTML SELECT
{F8CF7A98-2C45-4c8d-9151-2D716989DDAB} Microsoft Visio Document
{FB453AD8-2EF4-44D3-98A8-8C6474E63CE4} Microsoft Forms 2.0 HTML Hidden
{FDEA20DB-AC7A-42f8-90EE-82208B9B4FC0} Microsoft Forms 2.0 TabStrip
{FE38753A-44A3-11D1-B5B7-0000C09000C4} Microsoft Flat Scrollbar Control 6.0 (SP4)

يمكنك أن ترى أن مكونات مجموعة Microsoft Forms تشغل مكانًا هامًا في القائمة. هذه مجموعة من عناصر التحكم التي تأتي مع Office ، ويمكنك رؤيتها في لوحة تحكم ActiveX. في البداية ، تم تسجيلهم جميعًا على أنهم "آمنون" ، ولكن مع مرور الوقت أصبح من الواضح أن الأمر ليس كذلك بالنسبة للعناصر الفردية. على سبيل المثال ، يقوم عنصر الإطار بتحميل أي ActiveX آخر دون التحقق من أي قوائم (في أحدث الإصدارات ، يكون هذا "ثابتًا" ، ولكن القائمة السوداء الخاصة بالإطار تختلف عن المكتب العام). لهذا السبب ، لا يمكن تحميل بعض عناصر Microsoft Forms إلا في مستند بإذن من المستخدم. يتطلب Microsoft Forms Frame أيضًا موافقة المستخدم (في الإعدادات الافتراضية) ، ولكنه يسمح لك بتنزيل بعض العناصر من قائمة Kill Bit التي تعذر تحميلها في ظروف أخرى.

لذلك ، إذا تمكن أحد المهاجمين من إقناع المستخدم بالسماح بتحميل ActiveX ، فإن Frame سيساعده على توسيع الترسانة بشكل كبير بسبب عناصر مثل ، على سبيل المثال ، متصفح الويب.

تم توثيق تنسيق تخزين خاصية Microsoft Forms جزئيًا بواسطة مواصفات [MS-OFORMS] .

أثناء فحص ActiveX ، اتضح أن مجموعة الفئات لـ doc و docx و rtf مختلفة ، وهناك أيضًا قوائم مختلفة من ActiveX المتاحة لتطبيق يعمل بالطريقة المعتادة ويعمل في وضع التشغيل الآلي .

تكمل العديد من التطبيقات الشائعة هذه القوائم باستخدام ActiveX الخاص بها. إذا تم اكتشاف ثغرة أمنية ، فسوف تنعكس في النشرة على أنها تتعلق بالتطبيق الذي تعد جزءًا منه. ومع ذلك ، قد تكون مستندات Office هي الطريقة الوحيدة لاستغلال الثغرة الأمنية.
مثال: Flash ActiveX
كان Flash ActiveX محبوبًا بشكل خاص من قبل كتّاب الفيروسات بسبب نقاط ضعفهم التي يمكن اكتشافها باستمرار ومكان دائم في القوائم البيضاء لـ IE و Office. ظهرت أول نقاط الضعف المعروفة في هذا المكون في عام 2008 ، تم إغلاق واحدة من آخر CVE-2018-4878 في فبراير من هذا العام. مع تلاشي شعبية IE ، أصبحت مستندات Office الطريقة الرئيسية لتوزيع برمجيات إكسبلويت لفلاش.

عناصر بيانات OLE المضمنة


تم تصميم عناصر OLE التي تم تنفيذها لتنفيذ مفهوم "المستند في المستند" مع القدرة على تحرير البيانات الموضعية لمختلف التنسيقات التي تتم معالجتها بواسطة التطبيقات الأخرى. مثل ActiveX ، يتم تنفيذ مستندات OLE على أساس COM.

يمكنك إضافة عنصر OLE إلى مستند Word كما يلي: افتح علامة التبويب "إدراج" وحدد نص -> كائن. يعرض البرنامج قائمة أنواع المستندات التي تم تسجيل معالجات OLE لها. كما هو الحال مع ActiveX ، لا تتطابق هذه القائمة مع مجموعة الفئات التي يمكن تحميلها بالفعل كمستندات OLE.



عرض البرنامج


كما هو الحال في ActiveX ، يتم تمثيل تطبيق أي مستند OLE بواسطة فئة COM المقابلة ، التي تتم في شكل DLL أو EXE. يقوم المكون بتصدير واجهات الخدمة اللازمة ، ويتم حفظ الحالة في مستند الحاوية من خلال واجهات IPersist *.

في مستند CFBF ، يتم تخزين بيانات كائن OLE في تخزين المستوى الثاني ObjectPool. تشبه مجموعة مؤشرات الترابط بشكل عام عناصر تحكم ActiveX المقابلة.



في مستندات Open Office XML ، يتم تخزين بيانات كائن OLE في دليل التضمين الفرعي ، في ملف تخزين CFBF باسم نوع oleObject1.bin.



في مستندات RTF ، يتم تخزين معلومات الكائن تحت العلامة \ object \ objemb \ . يحتوي القسم أيضًا على وحدة تخزين مشفرة على هيئة تمثيل سداسي لملف CFBF.

{\object\objemb\objw8307\objh553{\*\objclass WordPad.Document.1}
{\*\objdata 010500000200000013000000576f72645061642e446f63756d656e742e31000000000000000000000a0000
d0cf11e 0a1b11ae100000000


يتميز تنسيق RTF بحقيقة أنه يدعم علامة \ objupdate ، التي تسبب التنشيط التلقائي للعنصر ، بينما تكون عناصر OLE بشكل افتراضي غير نشطة عند التحميل.
مثال: CVE-2017-11882
جعلت الثغرة CVE-2017-11882 OLE لمكون محرر المعادلات بسبب معالجة الكائن في عملية منفصلة من الممكن عملية مستقرة وعالمية. تسببت العلامة \ objupdate في قيام Word بتحميل المكون المعرض للهجوم فور فتح المستند.
مثال: عناصر Excel المضمنة مع فيروس الماكرو
اكتشف الباحثون وثائق rtf ضارة لا تستخدم أي نقاط ضعف جديدة. تحتوي المستندات على عدة مستندات Excel مع وحدات ماكرو ككائنات مضمنة. يتم الحساب على أساس حقيقة أن المستخدم الذي ، بعد فتح المستند عدة مرات متتالية ، يرفض تنفيذ الماكرو ، ونتيجة لذلك ، "يستسلم" ويسمح بالتنفيذ. في الوقت الحالي ، لا تزال التقنية تعمل.


هناك اختلاف كبير عن ActiveX في حالة عناصر OLE المضمنة وهو أن معرف الفئة مكتوب مباشرة إلى ملف التخزين بواسطة وظيفة WriteClassStg. هذه التقنية موروثة منذ زمن طويل جدًا ، عندما طورت Microsoft بحماس مفهوم "التسلسل" وتخزين الكائنات بحالتها بتنسيق CFBF. يحفظ مستند الحاوية أيضًا معرف الفئة للعنصر الذي تم تنفيذه ، ولكن سيتم تحميل كائن الفئة المحدد في المستودع. يمكن استبدال هذا المعرف بإجبار التطبيق على تحميل كائن غير مخصص لهذه الأغراض على الإطلاق.
من الممكن تعديل بيانات العنصر ، مما يؤدي في بعض الحالات إلى تحديد نقاط الضعف.

تخضع كائنات OLE أيضًا للعديد من عمليات التحقق من قابلية التنزيل ، مما يجعل من الصعب الحصول على قائمة كاملة بالعناصر التي يمكن تحميلها. تختلف مجموعة العناصر التي يمكن تحميلها ككائنات OLE عن قائمة ActiveX المحملة. على وجه الخصوص ، يتم فحصها في قائمة KillBit غير المملوكة لـ Office ، ولكن بواسطة Internet Explorer (توافق HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ ActiveX).

OLE عن طريق الارتباط


يميز OLE بين آليتين لتضمين محتوى في مستند - تضمين مستند OLE مباشرةً وإنشاء ارتباط داخل مستند آخر إلى مستند آخر. في حالة تضمين كائن OLE حسب المرجع ، يحتوي المستند الرئيسي على إشارة إلى مسار ملف المستند المضمن. يمكن أن يكون المسار محليًا أو شبكة ، أو عنوان إنترنت. يتم تحديد معالج OLE بواسطة ملحق الملف ، ويجب تسجيل المعالج المقابل في نظام التشغيل.
مثال: CVE-2017-0199
تتمثل ثغرة CVE-2017-0199 في إمكانية إضافة تنسيق hta "كائن حسب المرجع" إلى المستند. هذا الأخير هو html مع القدرة على تنفيذ التعليمات البرمجية ، أي أنه في الواقع ملف قابل للتنفيذ. قام المعالج بتنزيل hta وتنفيذه تلقائيًا ، مما يسمح لك بتنفيذ تعليمات برمجية عشوائية عند فتح مستند.
قبل تحديث الكائن المضمن ، يطلب التطبيق إذن المستخدم. في هذه الحالة ، يتم تنزيل الملف مسبقًا ، والذي يمكن أن يعمل على الكشف عن معلومات حول المستخدم.

الملفات المضمنة (الحزم)


تدعم مستندات Office القدرة على إضافة أي ملف (كائن -> إنشاء من ملف أو مجرد سحب رمز الملف وإفلاته في حقل التحرير). من الناحية الفنية ، يتم تنفيذ ذلك عن طريق إضافة عنصر Object Packager مضمّن إلى المستند الذي يكتب الملف المطلوب إلى البيانات الخاصة به. يسمح لك Object Packager باستبدال أيقونة الملف وتوقيعه ، بالإضافة إلى تحديد سطر الأوامر لفتحه. يمكن أن يتضمن ملفات "حسب المرجع" عندما يتم فتح الملف ليس من تخزينه الخاص ، ولكن على طول المسار المحدد ، بما في ذلك مسار الشبكة .

في الآونة الأخيرة ، تم قطع وظيفة Object Packager بشكل كبير ، وفي البداية يمكن للعنصر حفظ أي ملفات ، بما في ذلك الملفات القابلة للتنفيذ ، والروابط ، وحتى سطر الأوامر. كل ما كان على المستخدم فعله لبدء المحتوى هو النقر نقرًا مزدوجًا فوق الرمز الموجود في نص المستند.
مثال: الملفات في نص رسالة Outlook
تتيح لك رسائل Outlook ، والتي هي أيضًا مستندات مركبة ، إضافة عناصر Object Packager إلى نص الرسالة . بالنسبة للمستخدم ، يبدو العنصر كصورة تم تحديدها بشكل عشوائي من قبل مهاجم. النقر المزدوج على الصورة يفتح الملف المحزوم. يجب على المهاجم اختيار نوع البيانات من تلك التي لم تخضع بعد لسياسات الأمان المشددة .



لم يتم تنفيذ العناصر المضمنة باستخدام OLE


في الوقت الحالي ، قد يكون أكبر تهديد / اهتمام بالعناصر بخلاف عناصر OLE هو الصور التي تمت إضافتها إلى المستند حسب المرجع . عند فتح مستند في وضع غير محمي ، يتم تنزيل الصور تلقائيًا ، مما قد يؤدي إلى الكشف عن موقع وهوية المستخدم الذي قام بتنزيل المستند من خلال إخفاء هوية الوكلاء أو تلقي مستند سري من أطراف أخرى. تم تنفيذ هذه التقنية ، على وجه الخصوص ، في أداة خربشات ، والتي هي في خدمة المخابرات الأمريكية.
على شبكة محلية في Windows ، يتيح تنزيل الصور تلقائيًا حسب المرجع إمكانية استغلال ثغرة NTLMRelay . إن آلية ربط الصور غير متوافقة مع متطلبات الأمان لشبكات ActiveDirectory ، حيث إن المسؤول الذي يتلقى مثل هذا المستند ينفذ بشكل أساسي رمز مهاجم يتمتع بامتيازات إدارية كاملة.

طرق الأمن


ما الذي يمكن فعله؟ الكل في الكل ، قليلا.

الطريقة الأكثر فعالية للحماية من الثغرات الموجودة في الكائنات المضمنة في مستندات Office هي وضع العرض المحمي . في هذا الوضع ، يتم استبعاد كلاً من تحميل الكائنات وتحميل البيانات من مصادر خارجية. لسوء الحظ ، يتطلب الانتقال إلى وضع كامل الميزات إجراءات مستخدم أساسية يتم استثارتها بسهولة من خلال أساليب الهندسة الاجتماعية.



يمكن تعطيل عناصر تحكم ActiveX في إعدادات مركز التوثيق



لاحظ أن هذا لا يعمل لعناصر OLE المضمنة.

Source: https://habr.com/ru/post/ar423933/


All Articles