macOS Gatekeeper / Quarantine / XProtect
Reading time: 23 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Gatekeeper
Gatekeeper ni kipengele cha usalama kilichoundwa kwa mifumo ya uendeshaji ya Mac, kilichokusudia kuhakikisha kwamba watumiaji wanatumia tu programu zinazotegemewa kwenye mifumo yao. Inafanya kazi kwa kuhakiki programu ambayo mtumiaji anapakua na kujaribu kufungua kutoka vyanzo vya nje ya Duka la Programu, kama vile programu, plug-in, au kifurushi cha installer.
Mekaniki kuu ya Gatekeeper inategemea mchakato wa uthibitishaji. Inakagua ikiwa programu iliyopakuliwa imeandikwa na mtengenezaji anayekubalika, kuhakikisha uhalali wa programu hiyo. Zaidi ya hayo, inathibitisha ikiwa programu hiyo imeandikwa na Apple, ikithibitisha kwamba haina maudhui mabaya yanayojulikana na haijabadilishwa baada ya kuandikwa.
Zaidi, Gatekeeper inaimarisha udhibiti wa mtumiaji na usalama kwa kuwataka watumiaji kuidhinisha ufunguzi wa programu zilizopakuliwa kwa mara ya kwanza. Ulinzi huu husaidia kuzuia watumiaji kukimbiza kwa bahati mbaya msimbo wa utendaji ambao unaweza kuwa na madhara ambao wanaweza kuwa wameukosea kwa faili ya data isiyo na madhara.
Application Signatures
Saini za programu, pia zinajulikana kama saini za msimbo, ni sehemu muhimu ya miundombinu ya usalama ya Apple. Zinatumika ku thibitisha utambulisho wa mwandishi wa programu (mtengenezaji) na kuhakikisha kwamba msimbo haujabadilishwa tangu ilipotiwa kwa mara ya mwisho.
Hivi ndivyo inavyofanya kazi:
- Kusaini Programu: Wakati mtengenezaji yuko tayari kusambaza programu yao, wan asaini programu kwa kutumia funguo ya faragha. Funguo hii ya faragha inahusishwa na cheti ambacho Apple inatoa kwa mtengenezaji wanapojisajili katika Programu ya Wataalamu wa Apple. Mchakato wa kusaini unajumuisha kuunda hash ya kijiografia ya sehemu zote za programu na kuificha hash hii kwa funguo ya faragha ya mtengenezaji.
- Kusambaza Programu: Programu iliyosainiwa kisha inasambazwa kwa watumiaji pamoja na cheti cha mtengenezaji, ambacho kinafunguo ya umma inayolingana.
- Kuthibitisha Programu: Wakati mtumiaji anapakua na kujaribu kuendesha programu, mfumo wa uendeshaji wa Mac unatumia funguo ya umma kutoka kwa cheti cha mtengenezaji kufichua hash. Kisha inarejesha hash kulingana na hali ya sasa ya programu na kulinganisha hii na hash iliyofichuliwa. Ikiwa zinakubaliana, inamaanisha programu hiyo haijabadilishwa tangu mtengenezaji aisaini, na mfumo unaruhusu programu hiyo kuendesha.
Saini za programu ni sehemu muhimu ya teknolojia ya Gatekeeper ya Apple. Wakati mtumiaji anajaribu kufungua programu iliyopakuliwa kutoka mtandao, Gatekeeper inathibitisha saini ya programu. Ikiwa imeandikwa na cheti kilichotolewa na Apple kwa mtengenezaji anayejulikana na msimbo haujabadilishwa, Gatekeeper inaruhusu programu hiyo kuendesha. Vinginevyo, inazuia programu hiyo na kumjulisha mtumiaji.
Kuanzia macOS Catalina, Gatekeeper pia inakagua ikiwa programu hiyo imeandikwa na Apple, ikiongeza safu ya ziada ya usalama. Mchakato wa kuandikwa unakagua programu hiyo kwa masuala ya usalama yanayojulikana na msimbo mbaya, na ikiwa ukaguzi huu unakubalika, Apple inaongeza tiketi kwa programu ambayo Gatekeeper inaweza kuthibitisha.
Check Signatures
Wakati wa kuangalia kielelezo cha malware unapaswa kila wakati kuangalia saini ya binary kwani mtengenezaji aliyeisaini anaweza kuwa tayari husika na malware.
# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
# Check if the app’s contents have been modified
codesign --verify --verbose /Applications/Safari.app
# Get entitlements from the binary
codesign -d --entitlements :- /System/Applications/Automator.app # Check the TCC perms
# Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app
# Sign a binary
codesign -s <cert-name-keychain> toolsdemo
Notarization
Mchakato wa notarization wa Apple unatumika kama kinga ya ziada kulinda watumiaji kutokana na programu zinazoweza kuwa na madhara. Unahusisha mwandishi kuwasilisha programu yao kwa uchunguzi na Huduma ya Notary ya Apple, ambayo haipaswi kuchanganywa na Mapitio ya Programu. Huduma hii ni mfumo wa kiotomatiki unaochunguza programu iliyowasilishwa kwa uwepo wa maudhui mabaya na matatizo yoyote yanayoweza kutokea na saini ya msimbo.
Ikiwa programu hiyo inasimama ukaguzi huu bila kuibua wasiwasi wowote, Huduma ya Notary inaunda tiketi ya notarization. Mwandishi anahitajika kuunganisha tiketi hii na programu yao, mchakato unaojulikana kama 'stapling.' Zaidi ya hayo, tiketi ya notarization pia inachapishwa mtandaoni ambapo Gatekeeper, teknolojia ya usalama ya Apple, inaweza kuipata.
Wakati wa usakinishaji au utekelezaji wa kwanza wa programu na mtumiaji, uwepo wa tiketi ya notarization - iwe imeunganishwa na executable au kupatikana mtandaoni - inaarifu Gatekeeper kwamba programu hiyo imetolewa na Apple. Kama matokeo, Gatekeeper inaonyesha ujumbe wa maelezo katika dirisha la uzinduzi wa awali, ikionyesha kwamba programu hiyo imefanyiwa ukaguzi wa maudhui mabaya na Apple. Mchakato huu hivyo huongeza ujasiri wa mtumiaji katika usalama wa programu wanazosakinisha au kuendesha kwenye mifumo yao.
spctl & syspolicyd
caution
Kumbuka kwamba kuanzia toleo la Sequoia, spctl
haiwezeshi kubadilisha usanidi wa Gatekeeper tena.
spctl
ni chombo cha CLI cha kuorodhesha na kuingiliana na Gatekeeper (pamoja na daemon ya syspolicyd
kupitia ujumbe wa XPC). Kwa mfano, inawezekana kuona hali ya GateKeeper kwa:
# Check the status
spctl --status
caution
Kumbuka kwamba ukaguzi wa saini wa GateKeeper unafanywa tu kwa faili zenye sifa ya Quarantine, si kwa kila faili.
GateKeeper itakagua ikiwa kulingana na mapendeleo & saini binary inaweza kutekelezwa:
.png)
syspolicyd
ndiye daemon mkuu anayehusika na kutekeleza Gatekeeper. Inashikilia hifadhidata iliyoko katika /var/db/SystemPolicy
na inawezekana kupata msimbo wa kusaidia hifadhidata hapa na templeti ya SQL hapa. Kumbuka kwamba hifadhidata hiyo haina vizuizi vya SIP na inaweza kuandikwa na root na hifadhidata /var/db/.SystemPolicy-default
inatumika kama nakala ya awali endapo nyingine itaharibika.
Zaidi ya hayo, bundles /var/db/gke.bundle
na /var/db/gkopaque.bundle
zina faili zenye sheria ambazo zinaingizwa katika hifadhidata. Unaweza kuangalia hifadhidata hii kama root kwa:
# Open database
sqlite3 /var/db/SystemPolicy
# Get allowed rules
SELECT requirement,allow,disabled,label from authority where label != 'GKE' and disabled=0;
requirement|allow|disabled|label
anchor apple generic and certificate 1[subject.CN] = "Apple Software Update Certification Authority"|1|0|Apple Installer
anchor apple|1|0|Apple System
anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists|1|0|Mac App Store
anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and (certificate leaf[field.1.2.840.113635.100.6.1.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID
[...]
syspolicyd
pia inatoa seva ya XPC yenye operesheni tofauti kama assess
, update
, record
na cancel
ambazo pia zinaweza kufikiwa kwa kutumia Security.framework
's SecAssessment*
APIs na spctl
kwa kweli inazungumza na syspolicyd
kupitia XPC.
Tazama jinsi sheria ya kwanza ilivyomalizika kwa "App Store" na ya pili kwa "Developer ID" na kwamba katika picha iliyopita ilikuwa imewezeshwa kutekeleza programu kutoka kwa App Store na waendelezaji waliotambulika.
Ikiwa unabadilisha mipangilio hiyo kuwa App Store, sheria za "Notarized Developer ID" zitaondoka.
Pia kuna maelfu ya sheria za aina GKE :
SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
cdhash H"5fd63f5342ac0c7c0774ebcbecaf8787367c480f"|1|0|GKE
cdhash H"4317047eefac8125ce4d44cab0eb7b1dff29d19a"|1|0|GKE
cdhash H"0a71962e7a32f0c2b41ddb1fb8403f3420e1d861"|1|0|GKE
cdhash H"8d0d90ff23c3071211646c4c9c607cdb601cb18f"|1|0|GKE
Hizi ni hash ambazo zinatoka:
/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
/var/db/gke.bundle/Contents/Resources/gk.db
/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
Au unaweza kuorodhesha taarifa za awali kwa:
sudo spctl --list
Chaguzi --master-disable
na --global-disable
za spctl
zitazima kabisa ukaguzi huu wa saini:
# Disable GateKeeper
spctl --global-disable
spctl --master-disable
# Enable it
spctl --global-enable
spctl --master-enable
Wakati umewezeshwa kabisa, chaguo jipya litajitokeza:
.png)
Inawezekana kuangalia kama App itaruhusiwa na GateKeeper kwa:
spctl --assess -v /Applications/App.app
Inawezekana kuongeza sheria mpya katika GateKeeper kuruhusu utekelezaji wa programu fulani kwa:
# Check if allowed - nop
spctl --assess -v /Applications/App.app
/Applications/App.app: rejected
source=no usable signature
# Add a label and allow this label in GateKeeper
sudo spctl --add --label "whitelist" /Applications/App.app
sudo spctl --enable --label "whitelist"
# Check again - yep
spctl --assess -v /Applications/App.app
/Applications/App.app: accepted
Regarding kernel extensions, the folder /var/db/SystemPolicyConfiguration
contains files with lists of kexts allowed to be loaded. Moreover, spctl
has the entitlement com.apple.private.iokit.nvram-csr
because it's capable of adding new pre-approved kernel extensions which need to be saved also in NVRAM in a kext-allowed-teams
key.
Managing Gatekeeper on macOS 15 (Sequoia) and later
Kuanza katika macOS 15 Sequoia, watumiaji wa mwisho hawawezi tena kubadilisha sera ya Gatekeeper kutoka spctl
. Usimamizi unafanywa kupitia Mipangilio ya Mfumo au kwa kutekeleza wasifu wa usanidi wa MDM na payload ya com.apple.systempolicy.control
. Mfano wa kipande cha wasifu kuruhusu Duka la Programu na waendelezaji waliotambulika (lakini si "Popote"):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>com.apple.systempolicy.control</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>com.example.gatekeeper</string>
<key>EnableAssessment</key>
<true/>
<key>AllowIdentifiedDevelopers</key>
<true/>
</dict>
</array>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadIdentifier</key>
<string>com.example.profile.gatekeeper</string>
<key>PayloadUUID</key>
<string>00000000-0000-0000-0000-000000000000</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadDisplayName</key>
<string>Gatekeeper</string>
</dict>
</plist>
Faili ya Kuzuia
Baada ya kupakua programu au faili, programu maalum za macOS kama vile vivinjari vya wavuti au wateja wa barua pepe huongeza sifa ya faili iliyopanuliwa, inayojulikana kwa jina la "bendera ya kuzuia," kwa faili iliyopakuliwa. Sifa hii inafanya kazi kama kipimo cha usalama ili kuashiria faili kama inatoka kwenye chanzo kisichoaminika (mtandao), na inaweza kubeba hatari. Hata hivyo, si programu zote huongeza sifa hii, kwa mfano, programu maarufu za mteja wa BitTorrent kawaida hupita mchakato huu.
Kuwepo kwa bendera ya kuzuia kunaashiria kipengele cha usalama cha Gatekeeper cha macOS wakati mtumiaji anajaribu kutekeleza faili hiyo.
Katika hali ambapo bendera ya kuzuia haipo (kama ilivyo kwa faili zilizopakuliwa kupitia baadhi ya wateja wa BitTorrent), ukaguzi wa Gatekeeper unaweza kutofanyika. Hivyo, watumiaji wanapaswa kuwa waangalifu wanapofungua faili zilizopakuliwa kutoka kwa vyanzo visivyo salama au visivyojulikana.
[!NOTE] > Kuangalia halali ya saini za msimbo ni mchakato wa rasilimali nyingi unaojumuisha kuunda hashes za kificho za msimbo na rasilimali zake zote zilizofungwa. Zaidi ya hayo, kuangalia halali ya cheti kunahusisha kufanya ukaguzi mtandaoni kwa seva za Apple ili kuona kama kimeondolewa baada ya kutolewa. Kwa sababu hizi, ukaguzi kamili wa saini ya msimbo na uthibitisho ni mgumu kufanywa kila wakati programu inapoanzishwa.
Kwa hivyo, ukaguzi huu ufanywa tu wakati wa kutekeleza programu zenye sifa ya kuzuia.
warning
Sifa hii lazima iwe imewekwa na programu inayounda/kupakua faili.
Hata hivyo, faili ambazo zimewekwa kwenye sanduku zitakuwa na sifa hii imewekwa kwa kila faili wanayounda. Na programu zisizo kwenye sanduku zinaweza kujiwekea zenyewe, au kuashiria funguo ya LSFileQuarantineEnabled katika Info.plist ambayo itafanya mfumo kuweka sifa ya com.apple.quarantine
kwenye faili zilizoundwa,
Zaidi ya hayo, faili zote zinazoundwa na mchakato unaoitwa qtn_proc_apply_to_self
zimewekwa kwenye kuzuia. Au API qtn_file_apply_to_path
inaongeza sifa ya kuzuia kwenye njia maalum ya faili.
Inawezekana kuangalia hali yake na kuwezesha/kuzima (inahitaji root) kwa:
spctl --status
assessments enabled
spctl --enable
spctl --disable
#You can also allow nee identifies to execute code using the binary "spctl"
Unaweza pia kupata kama faili ina sifa ya kupambana na karantini kwa kutumia:
xattr file.png
com.apple.macl
com.apple.quarantine
Angalia thamani ya sifa panuliwa na upate programu ambayo iliandika sifa ya karantini na:
xattr -l portada.png
com.apple.macl:
00000000 03 00 53 DA 55 1B AE 4C 4E 88 9D CA B7 5C 50 F3 |..S.U..LN.....P.|
00000010 16 94 03 00 27 63 64 97 98 FB 4F 02 84 F3 D0 DB |....'cd...O.....|
00000020 89 53 C3 FC 03 00 27 63 64 97 98 FB 4F 02 84 F3 |.S....'cd...O...|
00000030 D0 DB 89 53 C3 FC 00 00 00 00 00 00 00 00 00 00 |...S............|
00000040 00 00 00 00 00 00 00 00 |........|
00000048
com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
# 00c1 -- It has been allowed to eexcute this file (QTN_FLAG_USER_APPROVED = 0x0040)
# 607842eb -- Timestamp
# Brave -- App
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded
Kwa kweli, mchakato "unaweza kuweka bendera za karantini kwa faili zinazoundwa" (nimejaribu tayari kutumia bendera ya USER_APPROVED katika faili lililoundwa lakini haitatumika):
Source Code apply quarantine flags
#include <stdio.h>
#include <stdlib.h>
enum qtn_flags {
QTN_FLAG_DOWNLOAD = 0x0001,
QTN_FLAG_SANDBOX = 0x0002,
QTN_FLAG_HARD = 0x0004,
QTN_FLAG_USER_APPROVED = 0x0040,
};
#define qtn_proc_alloc _qtn_proc_alloc
#define qtn_proc_apply_to_self _qtn_proc_apply_to_self
#define qtn_proc_free _qtn_proc_free
#define qtn_proc_init _qtn_proc_init
#define qtn_proc_init_with_self _qtn_proc_init_with_self
#define qtn_proc_set_flags _qtn_proc_set_flags
#define qtn_file_alloc _qtn_file_alloc
#define qtn_file_init_with_path _qtn_file_init_with_path
#define qtn_file_free _qtn_file_free
#define qtn_file_apply_to_path _qtn_file_apply_to_path
#define qtn_file_set_flags _qtn_file_set_flags
#define qtn_file_get_flags _qtn_file_get_flags
#define qtn_proc_set_identifier _qtn_proc_set_identifier
typedef struct _qtn_proc *qtn_proc_t;
typedef struct _qtn_file *qtn_file_t;
int qtn_proc_apply_to_self(qtn_proc_t);
void qtn_proc_init(qtn_proc_t);
int qtn_proc_init_with_self(qtn_proc_t);
int qtn_proc_set_flags(qtn_proc_t, uint32_t flags);
qtn_proc_t qtn_proc_alloc();
void qtn_proc_free(qtn_proc_t);
qtn_file_t qtn_file_alloc(void);
void qtn_file_free(qtn_file_t qf);
int qtn_file_set_flags(qtn_file_t qf, uint32_t flags);
uint32_t qtn_file_get_flags(qtn_file_t qf);
int qtn_file_apply_to_path(qtn_file_t qf, const char *path);
int qtn_file_init_with_path(qtn_file_t qf, const char *path);
int qtn_proc_set_identifier(qtn_proc_t qp, const char* bundleid);
int main() {
qtn_proc_t qp = qtn_proc_alloc();
qtn_proc_set_identifier(qp, "xyz.hacktricks.qa");
qtn_proc_set_flags(qp, QTN_FLAG_DOWNLOAD | QTN_FLAG_USER_APPROVED);
qtn_proc_apply_to_self(qp);
qtn_proc_free(qp);
FILE *fp;
fp = fopen("thisisquarantined.txt", "w+");
fprintf(fp, "Hello Quarantine\n");
fclose(fp);
return 0;
}
Na ondoa sifa hiyo kwa:
xattr -d com.apple.quarantine portada.png
#You can also remove this attribute from every file with
find . -iname '*' -print0 | xargs -0 xattr -d com.apple.quarantine
Na pata faili zote zilizowekwa karantini kwa:
find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.quarantine"
Quarantine information is also stored in a central database managed by LaunchServices in ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
which allows the GUI to obtain data about the file origins. Moreover this can be overwritten by applications which might be interested in hiding its origins. Moreover, this can be done from LaunchServices APIS.
libquarantine.dylib
This library exports several functions that allow to manipulate the extended attribute fields.
The qtn_file_*
APIs deal with file quarantine policies, the qtn_proc_*
APIs are applied to processes (files created by the process). The unexported __qtn_syscall_quarantine*
functions are the ones that applies the policies which calls mac_syscall
with "Quarantine" as first argument which sends the requests to Quarantine.kext
.
Quarantine.kext
The kernel extension is only available through the kernel cache on the system; however, you can download the Kernel Debug Kit from https://developer.apple.com/, which will contain a symbolicated version of the extension.
This Kext will hook via MACF several calls in order to traps all file lifecycle events: Creation, opening, renaming, hard-linkning... even setxattr
to prevent it from setting the com.apple.quarantine
extended attribute.
It also uses a couple of MIBs:
security.mac.qtn.sandbox_enforce
: Enforce quarantine along Sandboxsecurity.mac.qtn.user_approved_exec
: Querantined procs can only execute approved files
Provenance xattr (Ventura and later)
macOS 13 Ventura introduced a separate provenance mechanism which is populated the first time a quarantined app is allowed to run. Two artefacts are created:
- The
com.apple.provenance
xattr on the.app
bundle directory (fixed-size binary value containing a primary key and flags). - A row in the
provenance_tracking
table inside the ExecPolicy database at/var/db/SystemPolicyConfiguration/ExecPolicy/
storing the app’s cdhash and metadata.
Practical usage:
# Inspect provenance xattr (if present)
xattr -p com.apple.provenance /Applications/Some.app | hexdump -C
# Observe Gatekeeper/provenance events in real time
log stream --style syslog --predicate 'process == "syspolicyd"'
# Retrieve historical Gatekeeper decisions for a specific bundle
log show --last 2d --style syslog --predicate 'process == "syspolicyd" && eventMessage CONTAINS[cd] "GK scan"'
XProtect
XProtect ni kipengele cha ndani cha anti-malware katika macOS. XProtect huchunguza programu yoyote inapozinduliwa au kubadilishwa kwa mara ya kwanza dhidi ya hifadhidata yake ya malware inayojulikana na aina za faili zisizo salama. Unaposhusha faili kupitia programu fulani, kama Safari, Mail, au Messages, XProtect kwa otomatiki huangalia faili hiyo. Ikiwa inalingana na malware yoyote inayojulikana katika hifadhidata yake, XProtect itaizuia faili hiyo isifanye kazi na kukujulisha kuhusu tishio hilo.
Hifadhidata ya XProtect inasasishwa mara kwa mara na Apple kwa ufafanuzi mpya wa malware, na sasisho hizi zinashushwa na kufungwa kiotomatiki kwenye Mac yako. Hii inahakikisha kwamba XProtect iko daima na habari za hivi punde kuhusu vitisho vinavyojulikana.
Hata hivyo, inafaa kutambua kwamba XProtect si suluhisho kamili la antivirus. Inachunguza tu orodha maalum ya vitisho vinavyojulikana na haisahihishi skanning ya upatikanaji kama programu nyingi za antivirus.
Unaweza kupata habari kuhusu sasisho la hivi punde la XProtect ukikimbia:
system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistConfigData" | tail -n 5
XProtect iko kwenye. SIP iliyo na ulinzi mahali kwenye /Library/Apple/System/Library/CoreServices/XProtect.bundle na ndani ya bundle unaweza kupata taarifa ambazo XProtect inatumia:
XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist
: Inaruhusu msimbo wenye cdhashes hizo kutumia ruhusa za zamani.XProtect.bundle/Contents/Resources/XProtect.meta.plist
: Orodha ya plugins na nyongeza ambazo haziruhusiwi kupakia kupitia BundleID na TeamID au kuashiria toleo la chini.XProtect.bundle/Contents/Resources/XProtect.yara
: Sheria za Yara kugundua malware.XProtect.bundle/Contents/Resources/gk.db
: Hifadhidata ya SQLite3 yenye hashes za programu zilizozuiliwa na TeamIDs.
Kumbuka kwamba kuna App nyingine katika /Library/Apple/System/Library/CoreServices/XProtect.app
inayohusiana na XProtect ambayo haihusiki na mchakato wa Gatekeeper.
XProtect Remediator: Katika macOS ya kisasa, Apple inatoa skana za mahitaji (XProtect Remediator) ambazo zinafanya kazi mara kwa mara kupitia launchd kugundua na kurekebisha familia za malware. Unaweza kuona skana hizi katika kumbukumbu zilizounganishwa:
log show --last 2h --predicate 'subsystem == "com.apple.XProtectFramework" || category CONTAINS "XProtect"' --style syslog
Si Gatekeeper
caution
Kumbuka kwamba Gatekeeper haitekelezwi kila wakati unapotekeleza programu, ni AppleMobileFileIntegrity (AMFI) tu itakay thibitisha saini za msimbo wa kutekeleza unapotekeleza programu ambayo tayari imefanywa kazi na kuthibitishwa na Gatekeeper.
Kwa hivyo, hapo awali ilikuwa inawezekana kutekeleza programu ili kuikatia akiba na Gatekeeper, kisha kubadilisha faili zisizotekelezwa za programu (kama vile Electron asar au faili za NIB) na ikiwa hakuna ulinzi mwingine ulio kuwekwa, programu hiyo ilitekelezwa na nyongeza za hatari.
Hata hivyo, sasa hii haiwezekani kwa sababu macOS inazuia kubadilisha faili ndani ya bundles za programu. Hivyo, ukijaribu shambulio la Dirty NIB, utagundua kwamba si tena inawezekana kulitumia kwa sababu baada ya kutekeleza programu ili kuikatia akiba na Gatekeeper, huwezi kubadilisha bundle hiyo. Na ikiwa badala yake unabadilisha jina la saraka ya Contents kuwa NotCon (kama ilivyoonyeshwa katika exploit), kisha kutekeleza binary kuu ya programu ili kuikatia akiba na Gatekeeper, itasababisha kosa na haitatekelezwa.
Bypasses za Gatekeeper
Njia yoyote ya kupita Gatekeeper (kufanikiwa kumfanya mtumiaji apakue kitu na kukitekeleza wakati Gatekeeper inapaswa kukataa) inachukuliwa kuwa udhaifu katika macOS. Hizi ni baadhi ya CVEs zilizotolewa kwa mbinu ambazo ziliruhusu kupita Gatekeeper katika siku za nyuma:
CVE-2021-1810
Ilionekana kwamba ikiwa Archive Utility inatumika kwa uchimbaji, faili zenye njia zinazozidi herufi 886 hazipati sifa ya ziada ya com.apple.quarantine. Hali hii bila kukusudia inaruhusu faili hizo kupita ukaguzi wa usalama wa Gatekeeper.
Angalia ripoti ya asili kwa maelezo zaidi.
CVE-2021-30990
Wakati programu inaundwa kwa Automator, taarifa kuhusu kile inachohitaji kutekeleza iko ndani ya application.app/Contents/document.wflow
si katika executable. Executable ni binary ya jumla ya Automator inayoitwa Automator Application Stub.
Hivyo, unaweza kufanya application.app/Contents/MacOS/Automator\ Application\ Stub
kuashiria kwa kiungo cha alama kwa Automator Application Stub nyingine ndani ya mfumo na itatekeleza kile kilichomo ndani ya document.wflow
(script yako) bila kuamsha Gatekeeper kwa sababu executable halisi haina xattr ya karantini.
Mfano wa mahali panatarajiwa: /System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub
Angalia ripoti ya asili kwa maelezo zaidi.
CVE-2022-22616
Katika bypass hii, faili ya zip iliundwa na programu ikianza kubana kutoka application.app/Contents
badala ya application.app
. Hivyo, sifa ya karantini ilitumika kwa faili zote kutoka application.app/Contents
lakini siyo kwa application.app
, ambayo ilikuwa inakaguliwa na Gatekeeper, hivyo Gatekeeper ilipita kwa sababu wakati application.app
iliposhughulikiwa haikuwa na sifa ya karantini.
zip -r test.app/Contents test.zip
Check the original report for more information.
CVE-2022-32910
Hata kama vipengele ni tofauti, matumizi ya udhaifu huu ni sawa sana na ule wa awali. Katika kesi hii, tutaunda Apple Archive kutoka application.app/Contents
hivyo application.app
haitapata sifa ya karantini wakati inakabiliwa na Archive Utility.
aa archive -d test.app/Contents -o test.app.aar
Angalia ripoti asilia kwa maelezo zaidi.
CVE-2022-42821
ACL writeextattr
inaweza kutumika kuzuia mtu yeyote kuandika sifa katika faili:
touch /tmp/no-attr
chmod +a "everyone deny writeextattr" /tmp/no-attr
xattr -w attrname vale /tmp/no-attr
xattr: [Errno 13] Permission denied: '/tmp/no-attr'
Zaidi ya hayo, muundo wa faili wa AppleDouble unakopi faili pamoja na ACE zake.
Katika source code inawezekana kuona kwamba uwakilishi wa maandiko wa ACL ulihifadhiwa ndani ya xattr inayoitwa com.apple.acl.text
utawekwa kama ACL katika faili lililoondolewa. Hivyo, ikiwa umecompress programu katika faili la zip kwa muundo wa faili wa AppleDouble ukiwa na ACL inayozuia xattrs nyingine kuandikwa ndani yake... xattr ya karantini haikuwekwa katika programu:
chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
ditto -c -k test test.zip
python3 -m http.server
# Download the zip from the browser and decompress it, the file should be without a quarantine xattr
Angalia ripoti asilia kwa maelezo zaidi.
Kumbuka kwamba hii inaweza pia kutumika kwa AppleArchives:
mkdir app
touch app/test
chmod +a "everyone deny write,writeattr,writeextattr" app/test
aa archive -d app -o test.aar
CVE-2023-27943
Iligundulika kwamba Google Chrome haikuwa ikipanga sifa ya karantini kwa faili zilizopakuliwa kwa sababu ya matatizo fulani ya ndani ya macOS.
CVE-2023-27951
Mifumo ya faili ya AppleDouble huhifadhi sifa za faili katika faili tofauti inayaanza na ._
, hii husaidia kuhamasisha sifa za faili katika mashine za macOS. Hata hivyo, ilionekana kwamba baada ya kufungua faili la AppleDouble, faili inayaanza na ._
haikupatiwa sifa ya karantini.
mkdir test
echo a > test/a
echo b > test/b
echo ._a > test/._a
aa archive -d test/ -o test.aar
# If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute
Kuweza kuunda faili ambayo haitakuwa na sifa ya karantini, ilikuwa inawezekana kupita Gatekeeper. Njia ilikuwa kuunda programu ya faili la DMG kwa kutumia kanuni ya jina la AppleDouble (anza nayo ._
) na kuunda faili inayoonekana kama kiungo cha sym kwa faili hii iliyofichwa bila sifa ya karantini.
Wakati faili ya dmg inatekelezwa, kwa kuwa haina sifa ya karantini itapita Gatekeeper.
# Create an app bundle with the backdoor an call it app.app
echo "[+] creating disk image with app"
hdiutil create -srcfolder app.app app.dmg
echo "[+] creating directory and files"
mkdir
mkdir -p s/app
cp app.dmg s/app/._app.dmg
ln -s ._app.dmg s/app/app.dmg
echo "[+] compressing files"
aa archive -d s/ -o app.aar
[CVE-2023-41067]
Kukwepa kwa Gatekeeper kulikorekebishwa katika macOS Sonoma 14.0 kuliruhusu programu zilizoundwa kwa makusudi kuendesha bila kuomba. Maelezo yalifichuliwa hadharani baada ya kurekebisha na tatizo lilitumiwa kwa nguvu kabla ya kurekebishwa. Hakikisha Sonoma 14.0 au baadaye imewekwa.
[CVE-2024-27853]
Kukwepa kwa Gatekeeper katika macOS 14.4 (iliyotolewa Machi 2024) kutokana na usimamizi wa libarchive
wa ZIP zenye uharibifu kuliruhusu programu kukwepa tathmini. Sasisha hadi 14.4 au baadaye ambapo Apple ilishughulikia tatizo.
Unarchivers wa wahusika wengine wakisambaza karantini vibaya (2023–2024)
Vulnerabilities kadhaa katika zana maarufu za kutoa (k.m., The Unarchiver) zilisababisha faili zilizotolewa kutoka kwa archives kukosa com.apple.quarantine
xattr, na hivyo kuwezesha fursa za kukwepa Gatekeeper. Daima tegemea macOS Archive Utility au zana zilizorekebishwa unapofanya majaribio, na thibitisha xattrs baada ya kutoa.
uchg (kutoka katika hii talk)
- Unda directory inayojumuisha programu.
- Ongeza uchg kwa programu.
- Funga programu hiyo kuwa faili ya tar.gz.
- Tuma faili ya tar.gz kwa mwathirika.
- Mwathirika anafungua faili ya tar.gz na kuendesha programu.
- Gatekeeper haitakagua programu.
Zuia xattr ya Karantini
Katika kifurushi cha ".app" ikiwa xattr ya karantini haijongezwa, wakati wa kuendesha Gatekeeper haitasababisha.
References
- Apple Platform Security: Kuhusu maudhui ya usalama ya macOS Sonoma 14.4 (inashehimu CVE-2024-27853) – https://support.apple.com/en-us/HT214084
- Eclectic Light: Jinsi macOS sasa inafuatilia asili ya programu – https://eclecticlight.co/2023/05/10/how-macos-now-tracks-the-provenance-of-apps/
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.