
Lehrreicher Deep Dive in den integrierten Malware-Schutz von Apple: Signaturdatenbanken, YARA-Regeln, Gatekeeper-Integration, Remediation-Binaries und der macOS-Erkennungsablauf.
In Fortsetzung meiner Blogserie zur Einführung in macOS habe ich beschlossen, einen kurzen Blogbeitrag XProtect zu widmen.
XProtect ist das integrierte Antiviren- und Malware-Signatursystem von Apple für macOS.
Es arbeitet als Teil des XProtectService, der Anwendungen und andere ausführbare Inhalte auf bekannte Malware-Signaturen scannt.
XProtect läuft im Hintergrund und wird von Apple über den XProtectRemediator-Mechanismus still aktualisiert (dazu später mehr).
Es hat 3 Hauptfunktionen:
Das Verzeichnis /Library/Apple/System/Library/CoreServices/XProtect.bundle ist das Haupt-Bundle, das die XProtect-Konfiguration und die Signaturdefinitionen enthält.
Dies ist ein schreibgeschütztes Systemverzeichnis und wird von Apple über XProtect-Updates still aktualisiert.
Darunter finden wir einige interessante Dateien, die alle regelmäßig von Apple aktualisiert und durch die System Integrity Protection (SIP) geschützt werden.
Die Datei /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Resources/XProtect.plist speichert Malware-Signaturen, die XProtect zur Erkennung bekannter Bedrohungen verwendet.
Sie enthält Einträge, die Malware-Familien spezifischen Erkennungsregeln zuordnen, einschließlich Hashes und Dateinamenmustern.
Hier ist ein Beispiel für eine Malware-Familie – 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>
Das ist recht gut lesbar; der einzige bemerkenswerte Punkt ist, dass das string-Argument in jedem Treffer eine Hexadezimaldarstellung ist, z. B. entspricht 002D00730061006C00740020002D00410020002D00610020002D00640020007C002000620061007300680020002D0073 -salt -A -a -d | bash -s.
Das ist natürlich eine Goldgrube für Malware-Autoren, die genau wissen, welche Muster sie vermeiden müssen.
Die Datei /Library/Apple/System/Library/CoreServices/XProtect.bundle/XProtect.meta.plist ist eine Metadatendatei, die zusätzliche Regeln für XProtect definiert, einschließlich Durchsetzungsrichtlinien und Versionsinformationen.
Sie legt fest, welche macOS-Versionen bestimmte XProtect-Regeln durchsetzen und welche Aktionen bei Erkennung ergriffen werden, sowie Blacklists für Plugins.
Hier ist ein Beispiel:
<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>
Wie Sie sehen können, enthalten diese zum Beispiel Versionsinformationen für „blockierte" Plugins.
In neueren Versionen scheint XProtect begonnen zu haben, YARA zu unterstützen.
Die Datei /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Resources/XProtect.yara enthält mehrere YARA-Regeln im Textformat; hier ist ein kurzes Beispiel daraus: