
استكشاف تعليمي معمّق في الحماية المدمجة من البرمجيات الخبيثة في أنظمة Apple: قواعد بيانات التوقيعات، قواعد YARA، تكامل Gatekeeper، ثنائيات المعالجة (الإصلاح)، وسير عمل الكشف في macOS.
استكمالًا لسلسلة مقالات مدونتي حول مقدمة إلى macOS، قررت تخصيص مقالة قصيرة لـ XProtect.
XProtect هو نظام مكافحة الفيروسات وتوقيعات البرامج الضارة المدمج في macOS من Apple.
يعمل كجزء من XProtectService، الذي يفحص التطبيقات والمحتوى القابل للتنفيذ الآخر بحثًا عن توقيعات برامج ضارة معروفة.
يعمل XProtect في الخلفية ويتم تحديثه بصمت بواسطة Apple عبر آلية XProtectRemediator (المزيد حول ذلك لاحقًا).
لديه 3 وظائف رئيسية:
الدليل /Library/Apple/System/Library/CoreServices/XProtect.bundle هو الحزمة الرئيسية التي تحتوي على تكوين XProtect وتعريفات التوقيعات.
هذا دليل نظام للقراءة فقط ويتم تحديثه بصمت بواسطة Apple عبر تحديثات XProtect.
تحت هذا الدليل، يمكننا العثور على بعض الملفات ذات الأهمية، وكلها تُحدَّث دوريًا بواسطة Apple ومحمية بواسطة حماية سلامة النظام (SIP).
الملف /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Resources/XProtect.plist يخزن توقيعات البرامج الضارة التي يستخدمها XProtect للكشف عن التهديدات المعروفة.
يحتوي على إدخالات تربط عائلات البرامج الضارة بقواعد كشف محددة، بما في ذلك التجزئات (hashes) وأنماط أسماء الملفات.
إليك مثال على عائلة برامج ضارة واحدة - Bundalore:
<dict>
<key>Description</key>
<string>OSX.Bundlore.D</string>
<key>LaunchServices</key>
<dict>
<key>LSItemContentType</key>
<string>com.apple.application-bundle</string>
</dict>
<key>Matches</key>
<array>
<dict>
<key>MatchFile</key>
<dict>
<key>NSURLTypeIdentifierKey</key>
<string>com.apple.applescript.script</string>
</dict>
<key>MatchType</key>
<string>Match</string>
<key>Pattern</key>
<string>46617364654153</string>
</dict>
<dict>
<key>MatchFile</key>
<dict>
<key>NSURLTypeIdentifierKey</key>
<string>com.apple.applescript.script</string>
</dict>
<key>MatchType</key>
<string>Match</string>
<key>Pattern</key>
<string>20006500630068006F002000</string>
</dict>
<dict>
<key>MatchFile</key>
<dict>
<key>NSURLTypeIdentifierKey</key>
<string>com.apple.applescript.script</string>
</dict>
<key>MatchType</key>
<string>Match</string>
<key>Pattern</key>
<string>20007C0020006F00700065006E00730073006C00200065006E00630020002D006100650073002D003200350036002D0063006600620020002D007000610073007300200070006100730073003A</string>
</dict>
<dict>
<key>MatchFile</key>
<dict>
<key>NSURLTypeIdentifierKey</key>
<string>com.apple.applescript.script</string>
</dict>
<key>MatchType</key>
<string>Match</string>
<key>Pattern</key>
<string>002D00730061006C00740020002D00410020002D00610020002D00640020007C002000620061007300680020002D0073</string>
</dict>
</array>
</dict>
هذا النص قابل للقراءة إلى حد كبير، والجزء الجدير بالملاحظة الوحيد هو أن وسيط string في كل تطابق هو تمثيل سداسي عشري، على سبيل المثال 002D00730061006C00740020002D00410020002D00610020002D00640020007C002000620061007300680020002D0073 يقابل -salt -A -a -d | bash -s.
هذا، بالطبع، منجم ذهب لمؤلفي البرامج الضارة، الذين يعرفون بالضبط الأنماط التي يجب تجنبها.
الملف /Library/Apple/System/Library/CoreServices/XProtect.bundle/XProtect.meta.plist هو ملف بيانات وصفية يحدد قواعد إضافية لـ XProtect، بما في ذلك سياسات الإنفاذ ومعلومات الإصدارات.
يحدد إصدارات macOS التي تفرض قواعد XProtect معينة والإجراءات المتخذة عند الكشف، بالإضافة إلى قوائم الحظر للإضافات (plugins).
إليك مثال:
<key>JavaWebComponentVersionMinimum</key>
<string>1.6.0_45-b06-451</string>
<key>PlugInBlacklist</key>
<dict>
<key>10</key>
<dict>
<key>com.apple.java.JavaAppletPlugin</key>
<dict>
<key>MinimumPlugInBundleVersion</key>
<string>14.8.0</string>
<key>PlugInUpdateAvailable</key>
<true/>
</dict>
<key>com.apple.java.JavaPlugin2_NPAPI</key>
<dict>
<key>MinimumPlugInBundleVersion</key>
<string>14.8.0</string>
<key>PlugInUpdateAvailable</key>
<true/>
</dict>
<key>com.macromedia.Flash Player ESR.plugin</key>
<dict>
<key>MinimumPlugInBundleVersion</key>
<string>18.0.0.382</string>
<key>PlugInUpdateAvailable</key>
<true/>
</dict>
<key>com.macromedia.Flash Player.plugin</key>
<dict>
<key>MinimumPlugInBundleVersion</key>
<string>32.0.0.101</string>
<key>PlugInUpdateAvailable</key>
<true/>
</dict>
<key>com.microsoft.SilverlightPlugin</key>
<dict>
<key>MinimumPlugInBundleVersion</key>
<string>5.1.41212.0</string>
<key>PlugInUpdateAvailable</key>
<true/>
</dict>
<key>com.oracle.java.JavaAppletPlugin</key>
<dict>
<key>MinimumPlugInBundleVersion</key>
<string>1.8.51.16</string>
<key>PlugInUpdateAvailable</key>
<true/>
</dict>
</dict>
</dict>
كما ترى، تحتوي هذه على معلومات إصدار للإضافات "المحظورة"، على سبيل المثال.
في الإصدارات الحديثة، يبدو أن XProtect بدأ في دعم YARA.
الملف /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Resources/XProtect.yara يحتوي على عدة قواعد YARA بصيغة نصية، إليك مثال قصير منه: