
Entra ID और Intune MDM के लिए अनधिकृत डिवाइस एनरोलमेंट टूल। डिवाइस जॉइन, टोकन अधिग्रहण, MDM एनरोलमेंट और OMA-DM चेकइन को स्वचालित करता है ताकि कंडीशनल एक्सेस को बायपास करते हुए पॉलिसियाँ, वाई-फाई क्रेडेंशियल्स, स्क्रिप्ट्स और ऐप्स निकाल सके।
मूल Pytune से प्रेरित होकर, OutOfTune Entra ID में एक दुष्ट उपकरण पंजीकृत करता है, इसे Intune MDM में शामिल करता है, और परिणामी अनुपालन स्थिति की जाँच करता है।
केवल Windows उपकरणों का समर्थन करता है क्योंकि यह मेरा मुख्य लक्ष्य था, भविष्य में अतिरिक्त उपकरण जोड़े जा सकते हैं।
संगत ब्लॉग:
pip install -r requirements.txt
श्रृंखला चरणों में चलती है, प्रत्येक chain_state.json में सहेजी गई स्थिति पर निर्माण करता है।
drs-token -> device-join -> device-token -> mdm-enroll -> mdm-checkin
ROPC (क्रेडेंशियल ज्ञात हैं):
python OutOfTune.py drs-token -u [email protected] -p Password1!
पूर्व-प्राप्त टोकन:
python OutOfTune.py drs-token -u [email protected] -t <drs_access_token>
python OutOfTune.py device-join
python OutOfTune.py device-join -n CORP-LAPTOP-01
आउटपुट <DEVICENAME>.pfx - उपकरण प्रमाणपत्र। पासवर्ड password है।
python OutOfTune.py device-token
python OutOfTune.py device-token --cert CORP-LAPTOP-01.pfx
AAD में उपकरण ऑब्जेक्ट के रूप में प्रमाणित करता है (उपयोगकर्ता के रूप में नहीं)। उपयोगकर्ता-स्कोप वाली CA नीतियों को बायपास करता है।
python OutOfTune.py mdm-enroll
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json
MDM एंडपॉइंट के विरुद्ध SOAP डिस्कवरी चलाता है, फिर WS-Trust PKCS10 नामांकन अनुरोध सबमिट करता है। आउटपुट <DEVICENAME>_mdm.pfx।
Intune को भेजे गए उपकरण हार्डवेयर/OS विशेषताओं को स्पूफ करने के लिए --profile का उपयोग करें (देखें Device Profiles).
python OutOfTune.py mdm-checkin
python OutOfTune.py mdm-checkin -r <refresh_token>
python OutOfTune.py mdm-checkin --cert CORP-LAPTOP-01_mdm.pfx
python OutOfTune.py mdm-checkin -O ./output
python OutOfTune.py mdm-checkin -O ./output --save-syncml ./output/raw
r.manage.microsoft.com के विरुद्ध OMA-DM SyncML लूप चलाता है। Intune उपकरण को लक्षित करने वाली कॉन्फ़िगरेशन प्रोफ़ाइल, ऐप असाइनमेंट और अन्य नीतियों को पुश करेगा। लूप पूरा होने के बाद, खुफिया जानकारी स्वचालित रूप से निकाली और प्रदर्शित की जाती है।
यदि -r प्रदान किया गया है, तो रिफ्रेश टोकन को manage.microsoft.com एक्सेस टोकन के लिए आदान-प्रदान किया जाता है और प्रत्येक SyncML अनुरोध में Authorization: Bearer के रूप में भेजा जाता है। Intune इस टोकन से UPN पढ़ता है और इसे उपकरण के प्राथमिक उपयोगकर्ता के रूप में सेट करता है, जिससे उपयोगकर्ता-स्कोप वाली अनुपालन नीतियाँ बंध जाती हैं। आपको केवल एक बार -r के साथ चलाने की आवश्यकता है ताकि एक उपयोगकर्ता असाइन हो, बाद के सभी चेक-इन रिफ्रेश टोकन के बिना चलाए जा सकते हैं।
-r के बिना उपकरण का कोई प्राथमिक उपयोगकर्ता नहीं होगा।
इस प्रारंभिक चेक-इन के बाद, यदि आप विस्तारित अवधि (आमतौर पर 5-7 दिन) के लिए फिर से चेक-इन नहीं करते हैं, तो "Is Active" के लिए डिफ़ॉल्ट नीति के कारण उपकरण अनुपालन से बाहर हो सकता है। Intune के कॉन्फ़िगरेशन के आधार पर, उपकरण गैर-अनुपालक के रूप में चिह्नित होने से पहले एक अनुग्रह अवधि में प्रवेश कर सकता है। यदि ऐसा होता है, तो mdm-checkin को फिर से चलाएँ। यदि आपने पहले किसी प्राथमिक उपयोगकर्ता को असाइन करने के लिए रिफ्रेश टोकन का उपयोग किया है, तो इसे फिर से सबमिट करने की आवश्यकता नहीं है क्योंकि प्राथमिक उपयोगकर्ता अब Intune बैकएंड में संग्रहीत है।
--save-syncml के साथ सहेजे गए कच्चे XML राउंड को लाइव चेक-इन चलाए बिना पुनः पार्स करें।
python OutOfTune.py parse-checkin --dir ./output/raw -O ./output2
python OutOfTune.py parse-checkin --file ./output/raw/round_001.xml -O ./output2
python OutOfTune.py check -u [email protected] -r <refresh_token>
python OutOfTune.py check -u [email protected] -p Password1!
डिवाइस प्रमाणपत्र से PRT मिंट करता है, इसे IWService टोकन के लिए आदान-प्रदान करता है, और डिवाइस की अनुपालन स्थिति और किसी भी गैर-अनुपालक नियमों के लिए IWService/Devices से क्वेरी करता है।
यदि टेनेंट CA को नामांकन संसाधन के लिए MFA की आवश्यकता है, तो MFA-सत्र रिफ्रेश टोकन के साथ -r का उपयोग करें।
IME SideCarGateway के माध्यम से डिवाइस को असाइन किए गए Win32 ऐप्स और PowerShell स्क्रिप्ट लाता है। केवल MDM क्लाइंट प्रमाणपत्र का उपयोग करता है — कोई उपयोगकर्ता टोकन आवश्यक नहीं।
python OutOfTune.py download-apps
python OutOfTune.py download-apps --cert CORP-LAPTOP-01_mdm.pfx
scripts/<PolicyId>.ps1 में सहेजी जाती हैंapps/<AppName>/ में निकाले जाते हैंडिवाइस को असाइन की गई सक्रिय सुधार स्क्रिप्ट (डिटेक्शन + सुधार जोड़े) लाता है।
python OutOfTune.py get-remediations
python OutOfTune.py get-remediations --cert CORP-LAPTOP-01_mdm.pfx
प्रत्येक नीति remediations/<PolicyId>/ में सहेजी जाती है जिसमें शामिल हैं:
detection.ps1 — डिटेक्शन स्क्रिप्टremediation.ps1 — सुधार स्क्रिप्टparams.json — नीति ID और कोई स्क्रिप्ट पैरामीटरयदि Intune से डिवाइस को हटाना विफल होता है, तो इसे Entra से हटा दें। यह तब Intune के भीतर एक अनुग्रह अवधि में आ जाएगा और बाद में स्वचालित रूप से बना रहेगा।
Intune से डिवाइस हटाएँ:
python OutOfTune.py retire-intune -u [email protected] -r <refresh_token>
Entra ID से डिवाइस ऑब्जेक्ट हटाएँ:
python OutOfTune.py entra-delete
python OutOfTune.py status
नामांकन और चेक-इन के दौरान Intune को भेजे गए डिवाइस गुण JSON प्रोफ़ाइल के माध्यम से पूरी तरह से स्पूफ करने योग्य हैं। इसमें हार्डवेयर पहचानकर्ता, OS संस्करण, निर्माता, और सभी स्व-रिपोर्ट किए गए अनुपालन CSP मान (BitLocker, Firewall, Defender, TPM, Secure Boot) शामिल हैं।
python OutOfTune.py mdm-enroll --profile profiles/dell_win11_ent.json
python OutOfTune.py mdm-checkin # प्रोफ़ाइल स्थिति में सहेजी जाती है और स्वचालित रूप से पुन: उपयोग की जाती है
| फ़ाइल | डिवाइस |
|---|---|
profiles/default.json | डिफ़ॉल्ट मान (VMware / Win10 Enterprise) |
profiles/dell_win11_ent.json | Dell Latitude 5540 / Windows 11 Enterprise 23H2 |
सभी DeviceStatus CSP मान स्वयं-रिपोर्ट किए जाते हैं और Intune द्वारा स्वतंत्र सत्यापन के बिना विश्वसनीय होते हैं। HAS-प्रमाणित अनुपालन जाँच (BitLockerEnabled, SecureBootEnabled via HealthAttestation CSP) के लिए एक वास्तविक TPM की आवश्यकता होती है और इसे इस तरह से स्पूफ नहीं किया जा सकता है।
--debug विस्तृत HTTP + टोकन लॉगिंग
--proxy <url> ट्रैफ़िक को प्रॉक्सी के माध्यम से रूट करें (जैसे http://127.0.0.1:8080)
ये कमांड से पहले जाते हैं:
python OutOfTune.py --debug device-token
python OutOfTune.py --proxy http://127.0.0.1:8080 mdm-checkin
यदि आपके पास पिछले रन से प्रमाणपत्र हैं या विशिष्ट PFX फ़ाइलों का उपयोग करना चाहते हैं:
python OutOfTune.py device-token --cert path/to/device.pfx
python OutOfTune.py mdm-enroll --cert path/to/device.pfx
python OutOfTune.py mdm-checkin --cert path/to/mdm.pfx
python OutOfTune.py check --cert path/to/device.pfx
python OutOfTune.py download-apps --cert path/to/mdm.pfx
python OutOfTune.py get-remediations --cert path/to/mdm.pfx
सभी चरण आउटपुट कार्यशील निर्देशिका में chain_state.json में सहेजे जाते हैं। नए सिरे से शुरू करने के लिए इसे हटाएँ। कुछ भी चलाए बिना वर्तमान स्थिति का निरीक्षण करने के लिए status का उपयोग करें। यदि आप कई उपकरणों से निपट रहे हैं, तो सुनिश्चित करें कि उनमें से प्रत्येक की अपनी स्थिति फ़ाइल हो। डिफ़ॉल्ट स्थिति फ़ाइल को स्क्रिप्ट की शुरुआत में बदला जा सकता है जिससे भी उपकरण से आप छेड़छाड़ कर रहे हैं। प्रमाणपत्र ओवरराइड विकल्पों से सावधान रहें, वे मुख्य रूप से डीबगिंग उद्देश्यों के लिए हैं।
@temp43487580 को भारी श्रेय जाता है जिन्होंने मूल Pytune बनाया और जिनके मूल शोध ने इसे संभव बनाया
| फ़्लैग | विवरण |
|---|
--cert FILE | उपयोग करने के लिए MDM PFX — फ़ाइल नाम से उपकरण नाम स्वचालित रूप से प्राप्त होता है |
-r RT | उपयोगकर्ता रिफ्रेश टोकन — प्राथमिक उपयोगकर्ता सेट करता है (केवल एक बार आवश्यक) |
-O DIR | निकाली गई कलाकृतियों को DIR में सहेजें (wifi/, vpn/, scripts/, certs/, add_values.json, policy_values.json) |
--save-syncml DIR | ऑफ़लाइन पुनः-पार्स करने के लिए प्रति राउंड कच्चा SyncML XML DIR में सहेजें |
-o FILE | पूर्ण कंसोल आउटपुट FILE में लिखें |
| श्रेणी | सहेजा गया | टिप्पणियाँ |
|---|
| वाई-फ़ाई प्रोफ़ाइल | wifi/<SSID>.xml + _psk.txt | यदि मौजूद हो तो सादा-पाठ PSK निकाला गया |
| VPN प्रोफ़ाइल | vpn/<name>.xml | पूर्ण ProfileXML |
| प्रमाणपत्र पेलोड | certs/cert_N.b64 | एन्क्रिप्टेड PFX ब्लॉब (कच्चा, अभी तक डिक्रिप्ट नहीं किया गया) |
| SCEP चुनौतियाँ | प्रदर्शित | CA मॉडल नाम, चुनौती URL |
| स्क्रिप्ट | scripts/<name>.ps1 | OMA-DM के माध्यम से पुश की गई PowerShell स्क्रिप्ट |
| MSI डाउनलोड URL | प्रदर्शित | LOB ऐप्स के लिए सीधे CDN लिंक |
| ODJ ब्लॉब | odj_blob.b64 + odj_strings.txt | ऑफ़लाइन डोमेन जॉइन — पढ़ने योग्य स्ट्रिंग्स निकाली गईं |
| Add मान | add_values.json | अन्य सभी Add कमांड (रूट CA प्रमाणपत्र, MDE ऑनबोर्डिंग, नीति कॉन्फ़िग) |
| Replace मान | policy_values.json | Intune द्वारा सेट की गई नीति CSP मान |
| फ़ील्ड | CSP | टिप्पणियाँ |
|---|
os_version | DevDetail/SwV | न्यूनतम/अधिकतम OS संस्करण अनुपालन जाँच |
os_edition_syncml | WindowsLicensing/Edition | 4 = Enterprise, 48 = Pro |
manufacturer | DevInfo/Man | कुछ नीतियाँ निर्माताओं को व्हाइटलिस्ट करती हैं |
mac_address | SOAP AdditionalContext/MAC | सभी-शून्य एक स्पष्ट संकेतक है |
hw_dev_id_enroll | SOAP AdditionalContext/HWDevID | 64 हेक्स वर्ण |
bitlocker_status | BitLocker/Status/DeviceEncryptionStatus | 2 = एन्क्रिप्टेड (स्वयं-रिपोर्ट) |
encryption_compliance | DeviceStatus/Compliance/EncryptionCompliance | 1 = अनुपालक (स्वयं-रिपोर्ट) |
firewall_status | DeviceStatus/Firewall/Status | 0 = चालू (स्वयं-रिपोर्ट) |
secure_boot_state | DeviceStatus/SecureBootState | 1 = सक्षम (स्वयं-रिपोर्ट, HAS-प्रमाणित नहीं) |
tpm_version | DeviceStatus/TPM/SpecificationVersion | कोई क्रिप्टोग्राफ़िक प्रमाण नहीं |
defender_enabled | Defender/Health/DefenderEnabled | true = चल रहा है |
defender_version | Defender/Health/DefenderVersion | कुछ नीतियाँ न्यूनतम संस्करण लागू करती हैं |