
Microsoft Defender for Endpoint Live Response를 위한 크로스 플랫폼 대화형 셸
Microsoft Defender for Endpoint Live Response를 위한 크로스 플랫폼 대화형 셸
| 기능 | 세부 사항 |
|---|---|
| 플랫폼 | PowerShell Core 7.0+ (Windows, Linux, macOS) |
| API 모드 | 내부 (포털, 준실시간) 및 공식 (공개, 상태 비저장) |
| 실행 | 임의 명령 + 25개의 네이티브 LR 명령 |
| 인증 | 7가지 인증 방법, 통합 메뉴, 자동 갱신 |
| 라이선스 | MIT |
LaraC2 Shell은 두 개의 독립적인 API 경로(내부 포털 API(지속적 세션, ~2-5초 지연 시간) 및 공식 공개 API(명령당, ~20-60초 지연 시간))를 통해 MDE Live Response에 연결합니다. 실행기 스텁을 자동으로 업로드하고, 속도 제한을 투명하게 처리하며, 시스템 관리, 라이브러리 관리 및 내장 도움말 시스템을 갖춘 완전한 REPL을 제공합니다.
| 문서 | 목적 |
|---|---|
| 사용자 가이드 | 단계별 설정, 인증 및 작동 방법 |
| 명령 참조 | 모든 명령, 라우팅, 배치, 탭 완성 |
| 오류 참조 | HTTP 코드, 셸 오류, 인증 오류, 해결 방법 |
| 성능 | 내부 vs 공식 지연 시간, 처리량, 제한 |
| 아키텍처 | 내부 구조, 인증 체인, 엔드포인트, 파일 레이아웃 |
| 기여 방법 | 기여 방법, 테스트, 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` = 서버가 결정 (최대 1800초) |
| `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(클라이언트 자격 증명)을 대신 사용하십시오.
---
## 쉘 명령
### 쉘 제어