
एप्पल के अंतर्निहित मैलवेयर सुरक्षा में शैक्षिक गहन अध्ययन: सिग्नेचर डेटाबेस, YARA नियम, Gatekeeper एकीकरण, रिमेडिएशन बाइनरी, और macOS डिटेक्शन प्रवाह।
macOS परिचय पर अपनी ब्लॉगपोस्ट श्रृंखला को जारी रखते हुए, मैंने XProtect को एक छोटी ब्लॉगपोस्ट समर्पित करने का निर्णय लिया है।
XProtect, macOS के लिए Apple का अंतर्निर्मित एंटीवायरस और मैलवेयर सिग्नेचर सिस्टम है।
यह XProtectService के भाग के रूप में कार्य करता है, जो ज्ञात मैलवेयर सिग्नेचर के लिए एप्लिकेशन और अन्य निष्पादन योग्य सामग्री को स्कैन करता है।
XProtect पृष्ठभूमि में कार्य करता है और Apple द्वारा XProtectRemediator तंत्र के माध्यम से चुपचाप अपडेट किया जाता है (इस पर बाद में और अधिक)।
इसके 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 नियम हैं, यहाँ इसका एक छोटा उदाहरण है:
rule XProtect_MACOS_SLEEPYSTEGOSAURUS_SYM {
meta:
description = "MACOS.SLEEPYSTEGOSAURUS.SYM"
uuid = "BB4F7D16-C939-4047-A9AF-E74E7B51FAC1"
strings:
$a1 = { 45 78 65 63 43 6D 64 }
$a2 = { 47 65 74 48 6F 73 74 49 6E 66 6F }
$a3 = { 52 75 6E 53 63 72 69 70 74 }
$a4 = { 52 75 6E 53 63 72 69 70 74 55 72 6C }
$a5 = { 4C 61 75 6E 63 68 50 6C 69 73 74 }
$a6 = { 43 68 65 63 6B 50 72 6F 63 65 73 73 }
$a7 = { 43 68 65 63 6B 49 6E }
$a8 = { 52 75 6E 43 6D 64 46 69 6C 65 }
$a9 = { 53 68 6F 77 48 74 6D 6C }
$a10 = { 50 6C 69 73 74 48 65 6C 70 65 72 }
$a11 = { 4C 61 75 6E 63 68 64 48 65 6C 70 65 72 }
$a12 = { 43 6F 6D 6D 61 6E 64 46 69 6C 65 }
$a13 = { 57 72 69 74 65 50 6C 69 73 74 }
$a14 = { 4A 53 4F 4E 46 69 6C 65 50 72 6F 63 65 73 73 6F 72 }
$a15 = { 43 68 72 6F 6D 65 48 65 6C 70 65 72 }
$a16 = { 53 61 6E 64 62 6F 78 65 72 }
condition:
Macho and filesize < 2MB and all of them
}
यह YARA नियमों के बारे में ब्लॉगपोस्ट नहीं है, लेकिन पहले की तरह - यह मैलवेयर लेखकों के लिए एक सोने की खान है (जैसे 43 68 65 63 6B 50 72 6F 63 65 73 73 CheckProcess है)।
यहाँ आप देख सकते हैं कि Apple ने XProtect को Gatekeeper के साथ एकीकृत करने के लिए कैसे डिज़ाइन किया है - हालाँकि यह फ़ाइल अधिकतर syspolicyd द्वारा उपयोग की जाती है।
फ़ाइल /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Resources/gk.db एक SQLite डेटाबेस है जिसमें ब्लॉक करने के लिए फ़ाइल हैश और टीम आईडी की "ब्लैकलिस्ट" होती है।
आप इसे sqlite3 उपयोगिता के साथ देख सकते हैं:
jbo@McJbo ~ $ sqlite3 "/Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Resources/gk.db" .schema
CREATE TABLE settings (name TEXT, value TEXT, PRIMARY KEY (name));
CREATE TABLE blocked_hashes (hash BLOB, hash_type INTEGER, flags INTEGER, PRIMARY KEY (hash, hash_type));
CREATE TABLE blocked_teams (team_id TEXT, flags INTEGER, PRIMARY KEY (team_id));
jbo@McJbo ~ $ sqlite3 "/Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Resources/gk.db" "SELECT * FROM blocked_teams LIMIT 5;"
F9X83Q5222|1
Q6XAB4776L|0
DK5C9Y86C8|0
8VK2WEPW22|0
5LWMEF3EX3|0
jbo@McJbo ~ $
यह फिर से मैलवेयर लेखकों के लिए रोचक जानकारी है, उदाहरण के लिए - यह जानने के लिए कि उन्होंने अपने मैलवेयर पर हस्ताक्षर करने के लिए जिस टीम आईडी का उपयोग किया था, वह Apple के रडार पर कब है।
जबकि XProtect बाइनरी /Library/Apple/System/Library/CoreServices/XProtect.app/Contents/MacOS/ के अंतर्गत स्थित है, वहाँ आपको अतिरिक्त बाइनरीज़ मिलेंगी।
वे विशिष्ट परिवारों के लिए रेमेडिएशन फ़ाइलें हैं:
jbo@McJbo ~ $ ls -l /Library/Apple/System/Library/CoreServices/XProtect.app/Contents/MacOS/
total 47256
-rwxr-xr-x 1 root wheel 513696 Feb 27 16:54 XProtect
-rwxr-xr-x 1 root wheel 2498784 Feb 27 16:54 XProtectRemediatorAdload
-rwxr-xr-x 1 root wheel 2367952 Feb 27 16:54 XProtectRemediatorBadGacha
-rwxr-xr-x 1 root wheel 2053968 Feb 27 16:54 XProtectRemediatorBlueTop
-rwxr-xr-x 1 root wheel 2332752 Feb 27 16:54 XProtectRemediatorBundlore
-rwxr-xr-x 1 root wheel 2299648 Feb 27 16:54 XProtectRemediatorCardboardCutout
-rwxr-xr-x 1 root wheel 2333248 Feb 27 16:54 XProtectRemediatorColdSnap
-rwxr-xr-x 1 root wheel 2052736 Feb 27 16:54 XProtectRemediatorCrapyrator
-rwxr-xr-x 1 root wheel 2859040 Feb 27 16:54 XProtectRemediatorDolittle
-rwxr-xr-x 1 root wheel 2205520 Feb 27 16:54 XProtectRemediatorDubRobber
-rwxr-xr-x 1 root wheel 2334752 Feb 27 16:54 XProtectRemediatorEicar
-rwxr-xr-x 1 root wheel 2053120 Feb 27 16:54 XProtectRemediatorFloppyFlipper
-rwxr-xr-x 1 root wheel 2053616 Feb 27 16:54 XProtectRemediatorGenieo
-rwxr-xr-x 1 root wheel 2053504 Feb 27 16:54 XProtectRemediatorGreenAcre
-rwxr-xr-x 1 root wheel 2332800 Feb 27 16:54 XProtectRemediatorKeySteal
-rwxr-xr-x 1 root wheel 4659088 Feb 27 16:54 XProtectRemediatorMRTv3
-rwxr-xr-x 1 root wheel 2382448 Feb 27 16:54 XProtectRemediatorPirrit
-rwxr-xr-x 1 root wheel 2333024 Feb 27 16:54 XProtectRemediatorRankStank
-rwxr-xr-x 1 root wheel 2299728 Feb 27 16:54 XProtectRemediatorRoachFlight
-rwxr-xr-x 1 root wheel 2384416 Feb 27 16:54 XProtectRemediatorSheepSwap
-rwxr-xr-x 1 root wheel 2053232 Feb 27 16:54 XProtectRemediatorSnowBeagle
-rwxr-xr-x 1 root wheel 2350624 Feb 27 16:54 XProtectRemediatorSnowDrift
-rwxr-xr-x 1 root wheel 2019712 Feb 27 16:54 XProtectRemediatorToyDrop
-rwxr-xr-x 1 root wheel 2105696 Feb 27 16:54 XProtectRemediatorTrovi
-rwxr-xr-x 1 root wheel 2332768 Feb 27 16:54 XProtectRemediatorWaterNet
jbo@McJbo ~ $
एक नया XProtect System एप्लिकेशन, जो /Library/Apple/System/Library/CoreServices/XProtect.app के रूप में संग्रहीत है, macOS Monterey में पेश किया गया था, और यह XProtect Remediator चलाने के लिए ज़िम्मेदार है।
पारंपरिक XProtect (जो मुख्य रूप से सिग्नेचर-आधारित पहचान का उपयोग करता था) के विपरीत, XProtect Remediator संक्रमित सिस्टम से मैलवेयर को सक्रिय रूप से स्कैन करता है और हटाता है।
यह एक पृष्ठभूमि प्रक्रिया के रूप में चलता है और उपयोगकर्ता के हस्तक्षेप के बिना पहचाने गए खतरों को स्वचालित रूप से हटा सकता है।
निर्देशिका /Library/Apple/System/Library/CoreServices/XProtect.app/Contents/Resources में सक्रिय स्कैनिंग के लिए रेमेडिएशन स्क्रिप्ट और अतिरिक्त पहचान तर्क होते हैं।
फ़ाइल /Library/Apple/System/Library/CoreServices/XProtect.app/Contents/Resources/com.apple.XProtect.agent.scan.plist में समय-समय पर स्कैन कब चलाने हैं, इसके बारे में सेटिंग्स होती हैं।
उदाहरण के लिए:
<key>com.apple.XProtect.PluginService.agent.slow.scan</key>
<dict>
<key>Repeating</key>
<true/>
<key>PowerNap</key>
<true/>
<key>CPUIntensive</key>
<true/>
<key>DiskIntensive</key>
<true/>
<key>AllowBattery</key>
<false/>
<key>Priority</key>
<string>Utility</string>
<key>Interval</key>
<integer>604800</integer>
</dict>
यह कुछ प्रदर्शन शर्तों और स्कैन की अवधि (604800 सेकंड = हर 7 दिनों में एक बार) को दर्शाता है।
आपमें से कुछ ने MRT (Malware Removal Tool) के बारे में सुना होगा।
/Library/Apple/System/Library/CoreServices/MRT.app में संग्रहीत, MRT एक और macOS सुरक्षा घटक है जो XProtect के साथ मिलकर कार्य करता है।
यह उस मैलवेयर को हटाने के लिए ज़िम्मेदार है जिसे XProtect ने पहचाना है और पृष्ठभूमि में चुपचाप संचालित होता है।
पहचाने गए खतरों को खत्म करने में MRT, XProtect की तुलना में अधिक आक्रामक है और दुर्भावनापूर्ण फ़ाइलों को तब भी हटा सकता है, जब वे वर्तमान में चल रही हों।
ध्यान दें कि XProtect के विपरीत, MRT कॉन्फ़िगरेशन फ़ाइलें नहीं रखता है - सब कुछ बाइनरी में ही बेक किया हुआ होता है।
यहाँ तक कि मुख्य बाइनरी (/Library/Apple/System/Library/CoreServices/MRT.app/Contents/MacOS/MRT) के स्ट्रिंग्स को देखने से भी रोचक स्ट्रिंग्स प्रकट होती हैं, उदाहरण के लिए:
import sys,base64;exec(base64.b64decode('
import sys,base64,warnings;warnings.filterwarnings('ignore');exec(base64.b64decode('
import sys;import re, subprocess;cmd = "ps -ef | grep Little\ Snitch | grep -v grep"
जब किसी ब्राउज़र या एप्लिकेशन (जैसे, Safari, Mail, Messages) के माध्यम से कोई फ़ाइल डाउनलोड की जाती है, तो उसे क्वारंटाइन फ़्लैग (com.apple.quarantine) से चिह्नित किया जाता है - मैंने Gatekeeper के बारे में अपनी पिछली ब्लॉगपोस्ट में उस फ़्लैग का उल्लेख पहले ही किया है।
Gatekeeper जाँचता है कि फ़ाइल हस्ताक्षरित और नोटराइज़्ड (notarized) है या नहीं। यदि नहीं है, तो उपयोगकर्ता को निष्पादन से पहले एक चेतावनी प्राप्त होती है।
यदि निष्पादन की अनुमति दी जाती है, तो XProtect फ़ाइल को अपने ज्ञात मैलवेयर सिग्नेचर (जैसे XProtect.plist, XProtect.yara आदि से) के विरुद्ध स्कैन करता है।
यदि मैलवेयर का पता चलता है, तो सिस्टम निष्पादन रोक देता है। यदि मैलवेयर ज्ञात है और उसे रेमेडिएट किया जा सकता है, तो XProtect Remediator या MRT उसे हटा या निष्प्रभावी कर सकता है।
Apple XProtectService प्रक्रिया के माध्यम से XProtect, MRT, और XProtect Remediator को पृष्ठभूमि में चुपचाप अपडेट करता है।
इस वर्ष की शुरुआत में, CheckPoint ने Banshee नामक एक मैलवेयर सैंपल के बारे में एक ब्लॉगपोस्ट प्रकाशित किया है।
इसे काफी ध्यान मिला क्योंकि इसने उसी एन्क्रिप्शन एल्गोरिदम का उपयोग किया जो XProtect Remediator बाइनरीज़ "अपने YARA नियमों को छिपाने" के लिए उपयोग करती हैं।
एल्गोरिदम स्वयं सरल है:
def macos_xprotect_string_decryption(encrypted: bytes, encr_key: int) -> str:
"""
Author: @Check Point Research
Decrypts MacOS Xprotect binaries & Banshee Stealer encrypted strings.
"""
decrypted = "".join(
chr(
(encr_key >> ((i * 8) & 0x38) & 0xFF) ^ encrypted[i]
)
for i in range(len(encrypted))
)
return decrypted.partition("\\x00")[0]
जाहिर है, मैलवेयर लेखकों ने सोचा कि इस एल्गोरिदम पर स्थिर रूप से हस्ताक्षर (statically signed) नहीं किया जा सकता (क्योंकि यह गारंटी के साथ गलत सकारात्मक (false positives) उत्पन्न करता है)।
मुझे अधिकांश रेमेडिएटर बाइनरीज़ में समान कोड मिला, उदाहरण के लिए:
10000592a if (data_1000ffe7e != 0)
10000592c void* rax_1 = &data_1000fb0a0
100005933 int64_t i = 0
100005951 do
100005940 *rax_1 = *rax_1 ^ (0x363a34363a303900 u>> (i.b & 0x38)).b
100005943 i = i + 8
100005947 rax_1 = rax_1 + 1
100005951 while (i != 0x26ef0)
100005953 data_1000ffe7e = 0
जिस सुरक्षा शोधकर्ता ने शुरुआत में यह पता लगाया (ald3ns), उन्होंने XPR-dump नामक एक टूल जारी किया है जो नवीनतम XProtect संस्करण पर अभी भी कार्य करता प्रतीत होता है। आपको इसे ज़रूर देखना चाहिए!
इस ब्लॉगपोस्ट से सबसे बड़ी सीख यह है कि XProtect हमलावरों के साथ (किसी भी एंटीवायरस की तरह) लुकाछिपी का खेल खेलता है - ब्लैकलिस्टिंग, YARA चलाना या सरल स्थिर सिग्नेचर सभी दायरे में हैं।
यह तथ्य कि ये फ़ाइलें सभी एंडपॉइंट्स पर तैनात की जाती हैं और उनका विश्लेषण करना आसान है, मैलवेयर लेखकों के लिए उन कई जाँचों को आसानी से बायपास करना काफी आसान बना देता है।
जुड़े रहें!
Jonathan Bar Or (https://jonathanbaror.com)