📚 네트워크 · 패킷 분석 › 02. 포트 · 프로토콜 분석 — 77편
이전 글: 76. RDP와 3389 포트 — 원격 접속 노출 위험 · 다음 글: 78. NTP와 로그 시간 동기화
WinRM(Windows Remote Management)은 Windows를 명령 단위로 원격 관리하는 서비스입니다. 표준 프로토콜인 WS-Management(SOAP 메시지를 HTTP로 전달)를 Microsoft가 구현한 것이며, PowerShell Remoting(Enter-PSSession, Invoke-Command)의 기본 통로입니다.
76. RDP와 3389 포트 — 원격 접속 노출 위험가 화면을 원격으로 보내는 방식이라면, WinRM은 명령과 결과를 주고받습니다. 화면이 없어 사용자 눈에 띄지 않고 여러 서버에 동시에 명령을 보낼 수 있어, 운영 자동화와 공격자의 내부 이동 양쪽에서 쓰입니다.
| 항목 | 값 |
|---|---|
| 전송 계층 | TCP |
| 기본 포트 | 5985 (HTTP), 5986 (HTTPS) |
| 과거 포트 | WinRM 1.1 시절 80/443 (현재 기본값 아님) |
| 메시지 형식 | HTTP POST /wsman + SOAP(XML) |
| 기본 인증 | 도메인 환경은 Kerberos(Negotiate), 그 외 NTLM. Basic은 기본 비활성 |
PowerShell Remoting 한 번이 WinRM 위에서 흘러가는 모습입니다.
관리 PC 192.168.10.80 대상 서버 192.168.10.70
│ Invoke-Command -ComputerName SRV01 ...
│ ── TCP 5985 연결 ──────────────────────────→ │ WinRM 서비스(svchost) 리스너
│ ── HTTP POST /wsman (인증 협상) ────────────→ │
│ ←─ 401 + Negotiate → Kerberos/NTLM 인증 ──── │ → 원격 로그온 (Logon Type 3)
│ ── SOAP: Shell 생성 요청 (메시지 암호화) ────→ │
│ │ wsmprovhost.exe 생성
│ ── SOAP: 명령 전달 ────────────────────────→ │ → PowerShell로 실행
│ ←─ SOAP: 실행 결과 ────────────────────────── │
│ ── SOAP: Shell 종료 ───────────────────────→ │ wsmprovhost.exe 종료
↓ ↓
AllowUnencrypted = false).wsmprovhost.exe 프로세스로 실행됩니다.원격 관리 포트를 비교하면 WinRM의 위치가 분명해집니다.
| 비교 | WinRM | RDP | SMB 기반 원격 실행 |
|---|---|---|---|
| 포트 | 5985 / 5986 | 3389 | 445 |
| 전달 대상 | 명령·결과(텍스트) | 화면·입력 | 파일·서비스 제어 |
| 대상 쪽 프로세스 | wsmprovhost.exe | 사용자 세션(explorer 등) | 서비스·임시 실행 파일 |
| 로그온 유형 | 3 (Network) | 10 (RemoteInteractive) | 3 (Network) |
| 사용자 체감 | 없음 | 화면 세션 발생 | 없음 |
활성화 상태는 버전·에디션에 따라 다릅니다.
| 환경 | 일반적인 기본 상태 |
|---|---|
| Windows Server 2012 이후 | WinRM 서비스 실행, 5985 리스너 활성(원격 관리 허용) |
| Windows 10/11 클라이언트 | 서비스 기본 비활성, Enable-PSRemoting 등으로 켜야 함 |
| 5986 HTTPS 리스너 | 기본 없음, 인증서와 함께 별도 구성 |
실습 예시 — 본인 소유 실습용 Windows Server VM(192.168.10.70)에서 관리자 PowerShell로 리스너와 포트를 확인합니다.
# 리스너 목록 (주소·포트·HTTP/HTTPS)
winrm enumerate winrm/config/listener
# 서비스 설정 중 암호화·인증 관련 값
winrm get winrm/config/service
# 5985/5986 리슨 확인
Get-NetTCPConnection -State Listen -LocalPort 5985,5986
# 방화벽 규칙
Get-NetFirewallRule -DisplayGroup "Windows Remote Management" | Select DisplayName,Enabled,Profile
# 관리 PC에서 응답 확인 (WS-Man 식별 정보)
Test-WSMan -ComputerName 192.168.10.70
리스너 출력 형식 예시(값은 환경마다 다름):
Listener
Address = *
Transport = HTTP
Port = 5985
Enabled = true
URLPrefix = wsman
ListeningOn = 192.168.10.70, 127.0.0.1, ::1
Address = *는 모든 인터페이스에서 받는다는 뜻입니다. 접근 범위는 결국 방화벽 규칙(원격 주소 제한)이 결정합니다.
📷 [실습 화면 삽입 위치]
winrm enumerate winrm/config/listener와Get-NetTCPConnection결과로 5985 리슨을 확인한 화면
AllowUnencrypted = true, Basic 인증 허용, TrustedHosts = * 같은 값은 자격 증명과 명령 노출 위험을 키웁니다.| 흔적 위치 | 확인할 수 있는 것 |
|---|---|
| 방화벽·NSM | 5985/5986 연결의 출발지·목적지, HTTP POST /wsman(5985) |
| 대상 Security 로그 | 4624 로그온 성공(Logon Type 3), 계정, 출발지 IP |
| 대상 WinRM 로그 | Microsoft-Windows-WinRM/Operational (원격 Shell 생성 이벤트, 예: 91) |
| 출발 PC WinRM 로그 | 같은 로그의 세션 생성 이벤트(예: 6), 대상 이름 |
| PowerShell 로그 | Microsoft-Windows-PowerShell/Operational 4104(Script Block, 설정 시) |
| EDR·Sysmon | wsmprovhost.exe의 자식 프로세스 생성 |
관제자가 확인할 질문
wsmprovhost.exe 아래에서 어떤 프로세스가 실행되었는가?오탐 주의: SCCM·Ansible·모니터링 도구 등 정상 관리 솔루션이 WinRM을 주기적으로 사용합니다. 출발지 자산, 계정, 실행 주기가 일정한지 먼저 확인합니다(Windows 주요 포트 전체는 86. 내부망 주요 Port에서 다룸).
wsmprovhost.exe로 실행되고, 로그온 유형은 3입니다.