
Образовательное углублённое исследование встроенной защиты Apple от вредоносных программ: базы сигнатур, правила YARA, интеграция с Gatekeeper, бинарные файлы для устранения угроз и процесс обнаружения в macOS.
Продолжая мою серию постов о введении в macOS, я решил посвятить короткий пост XProtect.
XProtect — это встроенная антивирусная система macOS и система сигнатур вредоносных программ от Apple.
Она работает как часть XProtectService, которая сканирует приложения и другой исполняемый контент на наличие известных сигнатур вредоносных программ.
XProtect работает в фоновом режиме и незаметно обновляется Apple через механизм XProtectRemediator (подробнее об этом позже).
XProtect выполняет 3 основные функции:
Каталог /Library/Apple/System/Library/CoreServices/XProtect.bundle — это основной бандл, содержащий конфигурацию XProtect и определения сигнатур.
Это системный каталог только для чтения, который незаметно обновляется Apple через обновления XProtect.
Внутри него можно найти несколько интересных файлов, все они периодически обновляются Apple и защищены System Integrity Protection (SIP).
Файл /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Resources/XProtect.plist хранит сигнатуры вредоносных программ, используемые XProtect для обнаружения известных угроз.
Он содержит записи, сопоставляющие семейства вредоносных программ с конкретными правилами обнаружения, включая хэши и шаблоны имён файлов.
Вот пример одного семейства вредоносных программ — 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>46617364554153</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 и какие действия выполняются при обнаружении, а также чёрные списки плагинов.
Вот пример:
<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-правил в текстовом формате. Вот короткий пример: