
Análisis educativo en profundidad de la protección antimalware integrada de Apple: bases de datos de firmas, reglas YARA, integración con Gatekeeper, binarios de remediación y flujo de detección de macOS.
Continuando con mi serie de entradas de blog sobre introducción a macOS, he decidido dedicar una breve entrada a XProtect.
XProtect es el antivirus y sistema de firmas de malware integrado de Apple para macOS.
Funciona como parte de XProtectService, que analiza aplicaciones y otro contenido ejecutable en busca de firmas de malware conocidas.
XProtect trabaja en segundo plano y Apple lo actualiza silenciosamente mediante el mecanismo XProtectRemediator (más sobre esto más adelante).
Tiene 3 funciones principales:
El directorio /Library/Apple/System/Library/CoreServices/XProtect.bundle es el paquete principal que contiene la configuración de XProtect y las definiciones de firmas.
Es un directorio de solo lectura del sistema y Apple lo actualiza silenciosamente mediante las actualizaciones de XProtect.
Dentro de él, podemos encontrar algunos archivos de interés, todos actualizados periódicamente por Apple y protegidos por Protección de Integridad del Sistema (SIP).
El archivo /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Resources/XProtect.plist almacena las firmas de malware que XProtect utiliza para detectar amenazas conocidas.
Contiene entradas que asignan familias de malware a reglas de detección específicas, incluidos hashes y patrones de nombres de archivo.
Aquí hay un ejemplo de una familia de malware: 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>
Esto es bastante legible para humanos; lo único digno de mención es que el argumento string en cada coincidencia está en representación hexadecimal, p. ej., 002D00730061006C00740020002D00410020002D00610020002D00640020007C002000620061007300680020002D0073 corresponde a -salt -A -a -d | bash -s.
Esto es, por supuesto, una mina de oro para los autores de malware, que saben exactamente qué patrones evitar.
El archivo /Library/Apple/System/Library/CoreServices/XProtect.bundle/XProtect.meta.plist es un archivo de metadatos que define reglas adicionales para XProtect, incluidas políticas de aplicación y información de versiones.
Especifica qué versiones de macOS aplican ciertas reglas de XProtect y las acciones tomadas tras la detección, así como listas negras para plugins.
Aquí hay un ejemplo:
<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>
Como puedes ver, estos contienen información de versión para plugins "en lista negra", por ejemplo.
En versiones recientes, XProtect parece haber comenzado a soportar YARA.
El archivo /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Resources/XProtect.yara contiene varias reglas YARA en formato de texto; aquí hay un breve ejemplo: