
क्रॉस-प्लेटफॉर्म इंटरैक्टिव शैल Microsoft Defender for Endpoint Live Response के लिए
| विशेषता | विवरण |
|---|
| प्लेटफ़ॉर्म | PowerShell Core 7.0+ (Windows, Linux, macOS) |
| API मोड | आंतरिक (पोर्टल, निकट-रीयलटाइम) और आधिकारिक (सार्वजनिक, स्टेटलेस) |
| निष्पादन | स्वेच्छित कमांड + 25 मूल LR कमांड |
| प्रमाणीकरण | 7 प्रमाणीकरण विधियाँ, एकीकृत मेनू, स्वतः-ताज़ा |
| लाइसेंस | MIT |
LaraC2 Shell दो स्वतंत्र API पथों के माध्यम से MDE Live Response से जुड़ता है -- आंतरिक पोर्टल API (स्थायी सत्र, ~2-5s विलंब) और आधिकारिक सार्वजनिक API (प्रति-कमांड, ~20-60s विलंब)। यह स्वचालित रूप से एक्ज़ीक्यूटर स्टब्स अपलोड करता है, दर सीमाओं को पारदर्शी रूप से संभालता है, और मशीन प्रबंधन, लाइब्रेरी प्रबंधन और एक अंतर्निहित सहायता प्रणाली के साथ एक पूर्ण REPL प्रदान करता है।
| दस्तावेज़ | उद्देश्य |
|---|---|
| उपयोगकर्ता गाइड | चरण-दर-चरण सेटअप, प्रमाणीकरण और संचालन |
| कमांड संदर्भ | सभी कमांड, रूटिंग, बैचिंग, टैब पूर्णता |
| त्रुटि संदर्भ | HTTP कोड, शेल त्रुटियाँ, प्रमाणीकरण त्रुटियाँ, समाधान |
| प्रदर्शन | आंतरिक बनाम आधिकारिक विलंबता, थ्रूपुट, सीमाएँ |
| आर्किटेक्चर | आंतरिक, प्रमाणीकरण श्रृंखलाएँ, एंडपॉइंट, फ़ाइल लेआउट |
| योगदान | कैसे योगदान करें, परीक्षण करें, PR सबमिट करें |
| सुरक्षा नीति | निजी तौर पर कमज़ोरी की रिपोर्ट कैसे करें |
| संदर्भ | पूर्व कला, संबंधित अनुसंधान, क्रेडिट |
| अस्वीकरण | प्राधिकरण, क्रेडिट |
connect कमांड पुनः-प्रमाणीकरण करता हैmulti कमांडMachine.LiveResponse + Library.Manage अनुमतियों वाला एक MDE ऐप पंजीकरण (आधिकारिक मोड)git clone https://github.com/akefallonitis/larac2shell.git cd larac2shell pwsh -File shell/Invoke-MDEShell.ps1
बस इतना ही। पहली बार लॉन्च करने पर शेल एक एकीकृत 7-विधि प्रमाणीकरण मेनू प्रस्तुत करता है — एक चुनें, प्रमाणित करें, एक मशीन चुनें, और आप REPL में हैं। कोई कॉन्फ़िग फ़ाइल नहीं, कोई फ़्लैग नहीं, सेटअप करने के लिए कुछ नहीं।```
Select API mode:
Internal API (security.microsoft.com — near real-time, ~2-5s/cmd)
1 Credentials + MFA username + password, TOTP/push/SMS [auto-refresh]
2 Software passkey FIDO2/WebAuthn JSON key file [auto-refresh]
3 ESTS cookie ESTSAUTHPERSISTENT from browser (~24hr)
4 Temporary Access Pass one-time admin-issued code
5 Direct sccauth + XSRF cookies from browser DevTools (~1hr)
Official API (api.securitycenter.microsoft.com — CI/CD ready, ~20-60s/cmd)
6 Device code browser login (interactive)
7 Client credentials app registration with client secret
Auth method (1-7):
विकल्प 1-5 आंतरिक मोड सेट करते हैं, 6-7 आधिकारिक सेट करते हैं। आप बाद में पुनः प्रारंभ किए बिना मोड बदल सकते हैं — इनलाइन मोड स्विच करना नीचे देखें।
[INT myhost C:]> mode Current mode: Internal API Switch with: 'mode internal' or 'mode official'.
[INT myhost C:]> mode official [Mode] Switching from Internal API to official... (auth menu for official mode opens) [Mode] Now in official mode. Run 'machines' to list targets or 'connect <name|id>' to select one.
`mode <target>` किसी भी मौजूदा LR सत्र को डिस्कनेक्ट करता है, पुरानी प्रमाणीकरण स्थिति को साफ़ करता है, और लक्ष्य मोड के लिए प्रमाणीकरण प्रवाह को फिर से चलाता है। जब यह वापस आता है तो आप बिना किसी मशीन चुने नए मोड में प्रमाणित हो जाते हैं — सूचीबद्ध करने के लिए `machines` चलाएँ, या सीधे लक्ष्य पर जाने के लिए `connect <name|id>` चलाएँ। पुनरारंभ की आवश्यकता नहीं है।
### CLI शॉर्टकट (वैकल्पिक)```powershell
# Pre-select the mode (narrows the auth menu to 1-5 or 6-7)
pwsh -File shell/Invoke-MDEShell.ps1 -Mode internal
pwsh -File shell/Invoke-MDEShell.ps1 -Mode official
# Pre-select a machine (skips the picker)
pwsh -File shell/Invoke-MDEShell.ps1 -Machine myhost
# Software passkey path (internal mode)
pwsh -File shell/Invoke-MDEShell.ps1 -PasskeyPath ./keys/passkey.json
# Non-interactive single command (exits with remote command's exit code)
pwsh -File shell/Invoke-MDEShell.ps1 -Machine myhost -Command 'whoami'
केवल एक परिदृश्य के लिए उपयोग किया जाता है: क्लाइंट सीक्रेट के साथ आधिकारिक मोड, गैर-संवादात्मक रूप से। अन्य सभी प्रमाणीकरण विधियाँ आपको संवादात्मक रूप से संकेत देती हैं और डिस्क पर कुछ भी संग्रहीत नहीं करती हैं। यदि आपको अनअटेंडेड क्लाइंट-क्रेडेंशियल्स प्रमाणीकरण की आवश्यकता नहीं है, तो आप इस अनुभाग को पूरी तरह से छोड़ सकते हैं।```powershell Copy-Item shell/config/shell-config.example.json shell/config/shell-config.json
pwsh -File shell/Invoke-MDEShell.ps1 -Config shell/config/shell-config.json
कॉन्फ़िग स्कीमा (सभी फ़ील्ड वैकल्पिक हैं सिवाय `official.tenantId` + `official.clientId` जब क्लाइंट क्रेडेंशियल का उपयोग कर रहे हों):
| अनुभाग | फ़ील्ड | विवरण |
|---------|-------|-------------|
| `official` | `tenantId` | Azure AD किरायेदार ID |
| `official` | `clientId` | एप पंजीकरण क्लाइंट ID |
| `official` | `clientSecret` | क्लाइंट सीक्रेट (डिवाइस कोड के लिए `useDeviceCode: true` सेट करें और इसे छोड़ दें) |
| `official` | `useDeviceCode` | क्लाइंट क्रेडेंशियल के बजाय डिवाइस कोड फ़्लो का उपयोग करने के लिए `true` |
| `defaults` | `defaultMachine` | स्टार्टअप पर मशीन का पूर्व-चयन करें (नाम सबस्ट्रिंग या ID उपसर्ग) |
| `defaults` | `commandTimeoutSeconds` | क्लाइंट-साइड टाइमआउट सीलिंग। `0` = सर्वर तय करता है (1800s तक)। |
| `defaults` | `pollIntervalOfficial` | आधिकारिक API पोल अंतराल सेकंड में (डिफ़ॉल्ट 2) |
| `defaults` | `pollIntervalInternal` | आंतरिक API पोल अंतराल सेकंड में (डिफ़ॉल्ट 1) |
**सुरक्षा**: `clientSecret` वाले किसी भी कॉन्फ़िग फ़ाइल पर फ़ाइलसिस्टम अनुमतियों को प्रतिबंधित करें। `clientSecret` कभी भी कमांड लाइन पर स्वीकार नहीं किया जाता — केवल कॉन्फ़िग फ़ाइल। सभी आंतरिक-मोड क्रेडेंशियल (उपयोगकर्ता नाम, पासवर्ड, TOTP सीक्रेट, कुकीज़) इंटरैक्टिव रूप से संकेत दिए जाते हैं और कभी डिस्क पर संग्रहीत नहीं होते।
---
## प्रमाणीकरण विधियाँ
शेल स्टार्टअप पर एक एकीकृत 7-विधि प्रमाणीकरण मेनू प्रस्तुत करता है। मोड (आंतरिक/आधिकारिक) चुनाव से प्राप्त होता है।
| # | मोड | विधि | कैसे | स्वचालित-रिफ़्रेश |
|---|------|--------|-----|--------------|
| 1 | आंतरिक | क्रेडेंशियल + TOTP | इंटरएक्टिव प्रॉम्प्ट | हाँ (मौन) -- केवल जब TOTP सीक्रेट प्रदान किया गया हो। पुश/SMS MFA के साथ सत्र स्वचालित-रिफ़्रेश नहीं हो सकता। |
| 2 | आंतरिक | सॉफ़्टवेयर पासकी | `-PasskeyPath` पैराम या प्रॉम्प्ट | हाँ (मौन) |
| 3 | आंतरिक | ESTS कुकी | इंटरएक्टिव प्रॉम्प्ट | नहीं (~24घंटे) |
| 4 | आंतरिक | अस्थायी एक्सेस पास | इंटरएक्टिव प्रॉम्प्ट | नहीं (एक-बार) |
| 5 | आंतरिक | प्रत्यक्ष sccauth + XSRF | इंटरएक्टिव प्रॉम्प्ट | नहीं (~1घंटा) -- XSRF स्वचालित-रिफ़्रेश लागू नहीं होता; शेल सीधे प्रदान की गई कुकीज़ को स्वचालित-रिफ़्रेश नहीं करता। |
| 6 | आधिकारिक | डिवाइस कोड | ब्राउज़र लॉगिन | नहीं (~1घंटा) |
| 7 | आधिकारिक | क्लाइंट क्रेडेंशियल | कॉन्फ़िग फ़ाइल | हाँ (मौन) |
`connect` कमांड सत्र समाप्त होने पर पुनः प्रमाणित करता है, मूल रूप से चयनित उसी विधि का उपयोग करके। बिना स्वचालित-रिफ़्रेश वाली विधियाँ फिर से इंटरैक्टिव रूप से प्रॉम्प्ट करती हैं।
**इन-मेमोरी क्रेडेंशियल हैंडलिंग**: विधि 1 के लिए, प्रदान किया गया पासवर्ड और TOTP सीक्रेट शेल प्रक्रिया के जीवनकाल के लिए मेमोरी (सादे स्ट्रिंग के रूप में, `$script:Int_ReauthParams` के अंदर) में बनाए रखा जाता है ताकि मौन पुनः-प्रमाणीकरण बिना देखरेख के चल सके। स्ट्रिंग ऑब्जेक्ट PowerShell रनस्पेस में रहते हैं; वे डिस्क पर क्रमबद्ध नहीं होते या कमांड लाइन पर पारित नहीं होते। यदि वह जोखिम आपके खतरे के मॉडल के लिए स्वीकार्य नहीं है, तो इसके बजाय विधि 2 (पासकी/HSM) या विधि 7 (क्लाइंट क्रेडेंशियल) का उपयोग करें।
---
## शेल कमांड्स
### शेल नियंत्रण
| कमांड | विवरण |
|---------|-------------|
| `help [command]` | मदद दिखाएं (वैकल्पिक रूप से किसी विशिष्ट कमांड के लिए) |
| `help commands` | सभी मूल LR कमांड को विवरण के साथ सूचीबद्ध करें |
| `status` | कनेक्शन स्थिति, प्रमाणीकरण स्थिति, मशीन जानकारी दिखाएं |
| `config` | लाइव रिस्पांस कॉन्फ़िगरेशन दिखाएं |
| `connect [name\|id]` | पुनः प्रमाणित करें (यदि समाप्त हो गया है) और एक मशीन चुनें |
| `disconnect` | वर्तमान LR सत्र डिस्कनेक्ट करें और मशीन साफ़ करें |
| `multi [options] <cmd>` | एकाधिक मशीनों पर कमांड चलाएं (`-top N`, `-filter pattern`) |
| `session [list]` | वर्तमान सत्र जानकारी या सभी कैश्ड सत्र दिखाएं |
| `mode` | वर्तमान API मोड दिखाएं |
| `mode internal\|official` | API मोड इनलाइन स्विच करें — वर्तमान सत्र डिस्कनेक्ट करता है, पुरानी प्रमाणीकरण स्थिति को हटाता है, और लक्ष्य मोड के लिए प्रमाणीकरण मेनू फिर से चलाता है। बाद में `machines` या `connect` के साथ उठाएं |
| `exit` / `quit` / `q` | शेल से बाहर निकलें |
### मशीन प्रबंधन
| कमांड | विवरण |
|---------|-------------|
| `machines [refresh]` | मशीनों को सूचीबद्ध करें और एक चुनें (रिफ़्रेश = फोर्स रीलोड) |
| `connect [name\|id]` | नाम सबस्ट्रिंग या ID उपसर्ग द्वारा मशीन से कनेक्ट करें |
### मूल लाइव रिस्पांस कमांड्स (कुल 25)
| कमांड | विवरण |
|---------|-------------|
| `run <script> [args]` | MDE लाइब्रेरी से एक स्क्रिप्ट चलाएं |
| `getfile <path>` | रिमोट मशीन से एक फ़ाइल डाउनलोड करें |
| `putfile <name>` | रिमोट वर्किंग डायरेक्टरी में एक लाइब्रेरी फ़ाइल अपलोड करें |
| `processes` | चल रही प्रक्रियाओं की सूची बनाएं |
| `connections` | सक्रिय नेटवर्क कनेक्शन की सूची बनाएं |
| `cd <path>` | वर्किंग डायरेक्टरी बदलें (आंतरिक मोड) |
| `dir [path]` | डायरेक्टरी सामग्री सूचीबद्ध करें |
| `findfile <name>` | सभी ड्राइव पर नाम से फ़ाइल खोजें |
| `trace` | डायग्नोस्टिक ट्रेस जानकारी दिखाएं |
| `analyze <path>` | गहन विश्लेषण के लिए एक फ़ाइल सबमिट करें |
| `remediate <path>` | एक फ़ाइल को क्वारंटाइन/सुधारें |
| `undo <actionId>` | पिछली सुधार कार्रवाई को पूर्ववत करें |
| `registry <key>` | रजिस्ट्री कुंजियाँ/मान क्वेरी करें (केवल Windows) |
| `scheduledtasks` | अनुसूचित कार्यों की सूची बनाएं |
| `persistence` | सामान्य स्थायित्व स्थानों की जाँच करें |
| `drivers` | लोडेड ड्राइवरों की सूची बनाएं (केवल Windows) |
| `services` | सेवाओं की सूची बनाएं |
| `startupfolders` | स्टार्टअप फ़ोल्डर सामग्री सूचीबद्ध करें (केवल Windows) |
| `fileinfo <path>` | विस्तृत फ़ाइल जानकारी प्राप्त करें |
| `prefetch` | प्रीफ़ेच डेटा सूचीबद्ध करें (केवल Windows) |
| `log` | डायग्नोस्टिक लॉग देखें |
| `jobs` | पृष्ठभूमि कार्यों की सूची बनाएं (आंतरिक मोड) |
| `fg <jobId>` | एक पृष्ठभूमि कार्य को अग्रभूमि में लाएं (आंतरिक मोड) |
| `library` | लाइब्रेरी फ़ाइलों का प्रबंधन करें (सूची, अपलोड, डाउनलोड, हटाएं) |
| `status` | सत्र स्थिति और डायग्नोस्टिक्स दिखाएं |
### कमांड उपनाम
| उपनाम | हल करता है |
|-------|-------------|
| `ls` | `dir` |
| `ps` | `processes` |
| `download` | `getfile` |
| `process` | `processes` |
| `netstat` | `connections` |
### मनमाना कमांड्स
कोई भी इनपुट जो बिल्ट-इन कमांड से मेल नहीं खाता, उसे मनमाना कमांड माना जाता है और B64 एक्ज़ीक्यूटर स्टब के माध्यम से रिमोट मशीन पर निष्पादित किया जाता है। उदाहरण: `whoami`, `ipconfig`, `cat /etc/hostname`।
- Windows लक्ष्य: कमांड UTF-16-LE Base64-एन्कोडेड होता है और `executor_b64.ps1` (PowerShell ScriptBlock) के माध्यम से निष्पादित होता है
- Linux/macOS लक्ष्य: कमांड UTF-8 Base64-एन्कोडेड होता है और `executor_b64.sh` (bash) के माध्यम से निष्पादित होता है
**पाइपलाइन डिटेक्शन**: पाइप (`|`), सेमीकोलन (`;`), रीडायरेक्ट (`>>`), या सबएक्सप्रेशन (`$(`) वाले कमांड हमेशा B64-रैप किए जाते हैं, भले ही पहला शब्द एक मूल LR क्रिया हो। उदाहरण के लिए, `dir C:\ | Select-Object` मूल `dir` के बजाय B64 के माध्यम से जाता है।
### लाइब्रेरी प्रबंधन
| कमांड | विवरण |
|---------|-------------|
| `library` | MDE लाइब्रेरी में सभी फ़ाइलों की सूची बनाएं |
| `library refresh` | API से लाइब्रेरी सूची को फोर्स-रिफ़्रेश करें |
| `library upload <path>` | लाइब्रेरी में एक स्थानीय फ़ाइल अपलोड करें |
| `library delete <name>` | नाम से लाइब्रेरी से एक फ़ाइल हटाएं |
| `library download <name>` | लाइब्रेरी से एक फ़ाइल की सामग्री डाउनलोड करें (आंतरिक API: सीधा; आधिकारिक API: एक मशीन चुने जाने के बाद एंडपॉइंट के लाइब्रेरी कैश से `getfile` के माध्यम से -- सिंक में 10 मिनट तक लग सकता है) |
### कार्रवाई प्रबंधन
| कमांड | विवरण |
|---------|-------------|
| `actions` | वर्तमान मशीन के लिए लंबित/प्रगति पर कार्रवाइयों की सूची बनाएं |
| `actions all` | सभी मशीनों पर सभी हालिया कार्रवाइयों की सूची बनाएं |
| `actions cancel <id>` | ID द्वारा कार्रवाई रद्द करें (आंशिक मिलान समर्थित) |
---
## आर्किटेक्चर
### आंतरिक बनाम आधिकारिक API
LaraC2 Shell उसी MDE लाइव रिस्पांस बैकएंड के लिए दो स्वतंत्र API पथ प्रदर्शित करता है। आंतरिक API पोर्टल के समान वेबसॉकेट-जैसे सत्र मॉडल को दर्पण करता है और लगभग-वास्तविक-समय प्रतिक्रिया देता है। आधिकारिक API Microsoft के दस्तावेज़ित REST एंडपॉइंट का उपयोग करता है और ऑटोमेशन के लिए उपयुक्त है।
| | आंतरिक API | आधिकारिक API |
|---|---|---|
| आधार URL | `security.microsoft.com/apiproxy/mtp/liveResponseApi/` | `api.securitycenter.microsoft.com/api/` |
| सत्र | स्थायी (30-मिनट कीपअलाइव, स्वचालित-पुनःकनेक्ट) | प्रति-कमांड (स्टेटलेस) |
| पोल अंतराल | ~1s (लगभग-वास्तविक-समय) | 2s |
| एकाधिक-कमांड | साझा सत्र के भीतर अनुक्रमिक | बैचेड (प्रति API कॉल 5 तक) |
| प्रमाणीकरण | स्व-निहित (ESTS/पासकी/TOTP -> sccauth) | OAuth2 क्लाइंट क्रेडेंशियल या डिवाइस कोड |
| डिफ़ॉल्ट टाइमआउट | 1800s (सर्वर तय करता है, क्लाइंट नहीं) | 1800s (सर्वर तय करता है, क्लाइंट नहीं) |
#### LaraC2 कच्चे API से परे क्या जोड़ता है
| चरण | कच्चा आधिकारिक API | LaraC2 शेल |
|------|-----------------|-------------|
| स्टब अपलोड | मैनुअल: मल्टीपार्ट बनाएं, POST करें, विरोध संभालें | कनेक्ट पर स्वचालित, 409 ओवरराइड |
| B64 एन्कोड | मैनुअल: प्रति OS UTF-16LE/UTF-8 चुनें | OS का स्वचालित पता लगाएं, स्वचालित-एन्कोड |
| RunScript बनाएं | मैनुअल: ScriptName + Args पैराम के साथ JSON | सीधे कमांड टाइप करें |
| पोल + लाएं | मैनुअल: लूप + डाउनलोड लिंक + JSON पार्स | पारदर्शी: साफ आउटपुट लौटाता है |
| त्रुटि हैंडलिंग | मैनुअल: 400/401/403/409/429/503 की जाँच करें | स्वचालित: पुनः प्रयास, बैकऑफ़, मार्गदर्शन |
| एकाधिक-कमांड | मैनुअल: Commands[] ऐरे बनाएं | 5 तक स्वचालित बैचिंग |
### मुख्य बाधा
आधिकारिक API और आंतरिक API प्रति-मशीन कार्रवाई कतार साझा करते हैं। वे एक ही मशीन पर एक साथ नहीं चल सकते।
### दर सीमा (पारदर्शी)
| सीमा | मान | हैंडलिंग |
|-------|-------|----------|
| LR कमांड प्रति मिनट | 10 | Retry-After हेडर के साथ 429 प्रतिक्रिया |
| लाइब्रेरी अपलोड प्रति मिनट | 100 | स्लाइडिंग विंडो कतार |
| लाइब्रेरी अपलोड प्रति घंटा | 1500 | प्रति घंटा काउंटर |
| HTTP 429 बहुत अधिक अनुरोध | -- | Retry-After हेडर के लिए सोएं (डिफ़ॉल्ट 35s) |
| ActiveRequestAlreadyExists | -- | विरोधी कार्रवाई रद्द करें + निश्चित बैकऑफ़ (10s, फिर 15s 12 रीट्राइज़ तक) |
| बियरर टोकन समाप्ति (आधिकारिक) | ~1 घंटा | समाप्ति से पहले स्वचालित-रिफ़्रेश |
| sccauth समाप्ति (आंतरिक) | ~1 घंटा | यदि क्रेडेंशियल संग्रहीत हैं तो मौन पुनः-प्रमाणीकरण |
| LR सत्र निष्क्रियता | 30 मिनट | स्वचालित-पुनःकनेक्ट |
| XSRF रोटेशन | 4 मिनट | पारदर्शी रिफ़्रेश |
---
## लगभग-वास्तविक-समय शेल व्यवहार्यता
एक उत्पादन MDE किरायेदार पर मापी गई विलंबता, Windows, Linux, और macOS लक्ष्यों पर:
| संचालन | आंतरिक API | आधिकारिक API |
|-----------|-------------|-------------|
| `whoami` (B64) | 4-9s | 20-46s |
| `dir` (मूल) | 2-4s | 14-25s |
| `processes` (मूल) | 3-15s | 20-175s |
| `connections` (मूल) | 2-4s | ~15s |
| `services` (मूल) | 2-5s | ~15s |
| `hostname` (B64) | 4-7s | 11-16s |
| सत्र कनेक्ट (पहला cmd) | 9-15s | N/A (स्टेटलेस) |
| क्रॉस-मशीन स्विच | 7-10s | 15-30s |
**आंतरिक API: लगभग-वास्तविक-समय में सक्षम।** सत्र पुन: उपयोग के साथ, मूल कमांड 2-5s में प्रतिक्रिया देते हैं। यह MDE द्वारा अनुमत वास्तविक-समय के जितना करीब है। बाध्यता लक्ष्य पर SenseIR एजेंट है, फ्रेमवर्क नहीं।
**आधिकारिक API: ऑटोमेशन-ग्रेड।** स्टेटलेस आर्किटेक्चर के कारण प्रति कमांड न्यूनतम ~15s (सबमिट करें, पोल करें, लाएँ)। स्क्रिप्टेड ऑटोमेशन और CI/CD के लिए उपयुक्त, इंटरैक्टिव उपयोग के लिए नहीं।
---
## क्रॉस-OS समर्थन
Linux और macOS एंडपॉइंट दोनों API मोड के माध्यम से पूरी तरह समर्थित हैं।
| लक्ष्य OS | आंतरिक API औसत | आधिकारिक API औसत |
|-----------|-----------------|-----------------|
| Windows | ~7s | ~30s |
| Linux | ~6s | ~26-33s |
| macOS | ~6s | ~26-33s |
**क्या ध्यान दें**:
1. `.sh` स्टब्स में **जरूर** यूनिक्स लाइन एंडिंग (LF, CRLF नहीं) होनी चाहिए अन्यथा bash 'ambiguous redirect' के साथ विफल होता है।
2. आधिकारिक API लाइब्रेरी अपलोड Linux/macOS एंडपॉइंट पर `.sh` फ़ाइलों को **सिंक नहीं** करता है। पहले आंतरिक API (पोर्टल) या Defender पोर्टल UI के माध्यम से अपलोड करें। एक बार अपलोड होने के बाद, आधिकारिक API RunScript ठीक काम करता है।
3. `executor_b64.sh` एक बार ठीक से अपलोड होने पर Linux और macOS पर काम करता है।
---
## परीक्षण
परीक्षण सूट में 712 ऑफ़लाइन यूनिट टेस्ट, 301 आधिकारिक-API एकीकरण परीक्षण, 251 आंतरिक-API एकीकरण परीक्षण, साथ ही एक कॉन्फ़िगरेबल स्ट्रेस-टेस्ट ड्राइवर शामिल है।
### पूर्वापेक्षाएँ```powershell
Install-Module -Name Pester -MinimumVersion 5.0.0 -Force -Scope CurrentUser
यूनिट परीक्षण जो module loading, B64 encoding, command building, alias resolution, tokenizer, rate limiter, auth crypto, session management, error paths, और सभी auth flows को Pester Mock के माध्यम से कवर करते हैं।```powershell Invoke-Pester ./tests/shell/LaraC2Shell.Offline.Tests.ps1 -Output Detailed
### आंतरिक API परीक्षण (पोर्टल कुकीज़ आवश्यक)
एकीकरण परीक्षण जो sccauth auth, सत्र जीवनचक्र, सभी मूल आदेश, B64 निष्पादन, क्रॉस-ओएस लक्ष्यीकरण को कवर करते हैं।```powershell
$env:LARAC2_SCCAUTH = 'your-sccauth-cookie'
$env:LARAC2_XSRF = 'your-xsrf-token'
Invoke-Pester ./tests/shell/LaraC2Shell.Internal.Tests.ps1 -Output Detailed
pwsh -File tests/shell/LaraC2Shell.Stress.Tests.ps1 -Config config.json -Mode official -Rounds 5
pwsh -File tests/shell/LaraC2Shell.Stress.Tests.ps1 -Config config.json -Mode both -Scenario crossos
### CI/CD (GitHub Actions)
| कार्य | ट्रिगर | प्लेटफ़ॉर्म | आवश्यकताएँ |
|-----|---------|-----------|--------------|
| PSScriptAnalyzer Lint | प्रत्येक push/PR | Ubuntu | कोई नहीं |
| ऑफ़लाइन परीक्षण | प्रत्येक push/PR | Ubuntu + Windows + macOS | कोई नहीं |
| ऑनलाइन परीक्षण (आधिकारिक) | सशर्त | Ubuntu | `LARAC2_ONLINE_TESTS` चर + `LARAC2_CONFIG` गुप्त |
| तनाव परीक्षण | मैन्युअल प्रेषण | Ubuntu | `LARAC2_CONFIG` गुप्त |
---
## समस्या निवारण
| त्रुटि | कारण | समाधान |
|-------|-------|------------|
| `ActiveRequestAlreadyExists` | लक्ष्य पर कोई अन्य LR कमांड चल रहा है | स्वचालित रूप से नियंत्रित (आधिकारिक मोड): विरोधाभासी कार्रवाई रद्द करें + निश्चित 10s/15s बैकऑफ़ 12 पुनर्प्रयास तक। आंतरिक मोड: केवल प्रतीक्षा करें। उपयोगकर्ता कार्रवाई की आवश्यकता नहीं है। |
| HTTP 429 | दर सीमा पार हो गई (10 कमांड/मिनट) | स्वचालित रूप से नियंत्रित: Retry-After अवधि के लिए सोता है और पुनर्प्रयास करता है। |
| Linux/macOS पर "script not found" | .sh स्टब एंडपॉइंट से सिंक नहीं हुआ | आंतरिक API या Defender पोर्टल UI के माध्यम से अपलोड करें। आधिकारिक API अपलोड .sh फ़ाइलों को सिंक नहीं करते। |
| Linux/macOS पर "ambiguous redirect" | .sh स्टब में CRLF लाइन एंडिंग हैं | LF लाइन एंडिंग के साथ पुनः सहेजें और पुनः अपलोड करें। |
| बड़े कमांड पर HTTP 400 | B64 पेलोड ~30 KB से अधिक है | इसके बजाय `library upload` + `run <script>` का उपयोग करें। |
| HTTP 401 | टोकन/सत्र समाप्त हो गया | शेल क्लाइंट क्रेडेंशियल, TOTP और पासकी के लिए स्वचालित रूप से रिफ्रेश करता है। अन्य विधियों के लिए, `connect` टाइप करें। |
| HTTP 403 | अपर्याप्त अनुमतियाँ | आधिकारिक: `Machine.LiveResponse` + `Library.Manage` स्कोप जांचें। आंतरिक: सुरक्षा ऑपरेटर भूमिका जांचें। |
| HTTP 404 | मशीन नहीं मिली | पुनः लोड करने के लिए `machines refresh` चलाएँ। |
---
## आवश्यकताएँ
| आवश्यकता | विवरण |
|-------------|--------|
| PowerShell Core | 7.0 या बाद का (`pwsh`) |
| MDE App Registration | आधिकारिक मोड के लिए आवश्यक (`Machine.LiveResponse` + `Library.Manage` अनुमतियाँ) |
| ऑपरेटिंग सिस्टम | Windows, Linux, या macOS (शेल किसी पर भी चलता है; लक्ष्य कोई भी MDE-पंजीकृत OS हो सकता है) |
सभी प्रमाणीकरण स्व-निहित है — कोई बाहरी मॉड्यूल आवश्यक नहीं। आंतरिक मोड प्रमाणीकरण प्रवाह [XDRInternals](https://github.com/MSCloudInternals/XDRInternals) पर आधारित हैं, जो Fabian Bader और Nathan McNulty द्वारा बनाया गया है।
---
## फ़ाइल लेआउट```
shell/
Invoke-MDEShell.ps1 Main shell entry point (REPL, dispatch, help)
modules/
Auth-Official.ps1 OAuth2 client credentials + device code
Auth-Internal.ps1 Self-contained ESTS/passkey/TOTP/TAP authentication
Auth-Crypto.ps1 Crypto helpers: TOTP, WebAuthn, passkey signing, Key Vault
Rate-Limiter.ps1 429/backoff/ActiveRequest handling
Invoke-LRCommand.ps1 Command execution (both modes, B64 stubs, multi-machine)
Get-Machines.ps1 Machine list + picker
Manage-Library.ps1 Library file management + auto-init stubs
Manage-Actions.ps1 Action list/cancel
config/
shell-config.example.json Config template (copy and fill in)
stubs/
executor_b64.ps1 Windows PS B64 executor (auto-uploaded)
executor_b64.sh Linux/macOS bash B64 executor (auto-uploaded)
tests/
shell/
LaraC2Shell.Offline.Tests.ps1 Unit tests (no tenant needed)
LaraC2Shell.Online.Tests.ps1 Integration tests (Official API)
LaraC2Shell.Internal.Tests.ps1 Integration tests (Internal API)
LaraC2Shell.Stress.Tests.ps1 Stress/throughput driver (configurable scenarios)
docs/
USER_GUIDE.md Step-by-step usage guide
COMMAND_REFERENCE.md All commands, routing, batching
ERROR_REFERENCE.md Error messages and fixes
PERFORMANCE_COMPARISON.md Stress test data and API comparison
LICENSE में निहित शर्तें देखें।
| संसाधन | लेखक | विवरण |
|---|---|---|
| XDRInternals | Fabian Bader, Nathan McNulty | आंतरिक पोर्टल प्रमाणीकरण प्रवाह (ESTS, passkey, TOTP, TAP) |
| Running Arbitrary Commands | Jon Glass | लाइव रिस्पॉन्स कमांड निष्पादन तकनीक |
| Troubleshoot Live Response | Jeffrey Appel | LR आर्किटेक्चर, WpnService, सत्र निदान |
| MDE Internals 0x05 | Olaf Hartong (FalconForce) | संवेदनशील कार्रवाइयों के लिए MDE टेलीमेट्री, डिटेक्शन इंजीनियरिंग |
| DefenderHarvester | Olaf Hartong | MDE टेलीमेट्री निर्यात अवधारणाएँ |
| Run Live Response API | Microsoft | आधिकारिक API दस्तावेज़ीकरण |
| Library Methods API | Microsoft | लाइब्रेरी प्रबंधन API दस्तावेज़ीकरण |