📚 네트워크 · 패킷 분석 › 02. 포트 · 프로토콜 분석 — 85편
이전 글: 84. Linux Service Port · 다음 글: 86. 내부망 주요 Port
Windows는 설치 직후부터 여러 서비스 포트를 엽니다. 파일 공유, 원격 관리, 이름 해석, 장치 탐색처럼 기본으로 동작하는 기능이 많기 때문입니다. 그래서 Linux 서버보다 "기본으로 보이는 포트"의 목록이 길고, 이 목록을 모르면 정상 포트를 의심하거나 반대로 비정상 포트를 정상으로 넘기게 됩니다.
이 글은 Windows에서 자주 보이는 포트를 역할별로 묶어 정리합니다. SMB·RDP·WinRM·LDAP의 동작은 개별 글에서 다뤘으므로, 여기서는 포트 목록과 "어디서 보이면 정상인가"에 집중합니다.
| 묶음 | 포트 | 개별 글 |
|---|---|---|
| 파일 공유 | 445/TCP, (레거시) 137/UDP·138/UDP·139/TCP | 73. SMB와 445 포트 — 내부 확산의 통로 |
| 원격 호출 | 135/TCP + 동적 RPC 포트 | 이 글 |
| 원격 접속·관리 | 3389/TCP·UDP(RDP), 5985/TCP·5986/TCP(WinRM) | 76. RDP와 3389 포트 — 원격 접속 노출 위험, 77. WinRM |
| 도메인 인증 | 88, 389, 636, 3268, 3269, 464 | 72. LDAP·Kerberos 포트 — 인증 인프라 트래픽 개요 |
| 이름 해석·탐색 | 5355/UDP(LLMNR), 5353/UDP(mDNS), 1900/UDP(SSDP), 3702/UDP(WS-Discovery) | 이 글 |
Windows 포트에서 가장 헷갈리는 부분은 RPC(Remote Procedure Call) 입니다. 135번은 "어느 포트로 가면 원하는 서비스가 있는지" 알려 주는 안내 창구(Endpoint Mapper)이고, 실제 통신은 그때그때 배정되는 동적 포트에서 일어납니다.
클라이언트 192.168.10.30 서버 192.168.10.10
│ │ 서비스들이 동적 포트에 등록
│ ── TCP 135 연결: "이 인터페이스(UUID) 어디?" ─→│ Endpoint Mapper
│ ←──────────── "49xxx 포트로 오세요" ────────── │
│ │
│ ── TCP 49xxx 연결: 실제 RPC 호출 ───────────→ │ 해당 서비스
↓ ↓
방화벽 로그에는 135 연결 직후 같은 서버의 49152 이상 포트 연결이 이어서 남음
이름 해석 계열은 DNS 실패 시 로컬 네트워크에 멀티캐스트로 묻는 방식입니다. LLMNR(5355)과 NetBIOS 이름 서비스(137)는 같은 서브넷 안의 누구나 응답할 수 있어 보안상 약점이 됩니다(5절).
역할별로 "정상적으로 보이는 위치"를 정리하면 다음과 같습니다.
| 포트 | 프로토콜 | 정상적으로 LISTEN하는 곳 | 비고 |
|---|---|---|---|
| 135/TCP | MS-RPC Endpoint Mapper | 거의 모든 Windows | 외부 노출 금지 대상 |
| 137/UDP, 138/UDP, 139/TCP | NetBIOS 이름·데이터그램·세션 | NetBIOS over TCP/IP가 켜진 호스트 | 최신 환경에서는 비활성화 권고 |
| 445/TCP | SMB | 파일 서버, 도메인 컨트롤러, 대부분의 PC | PC 간 445 연결은 확인 대상 |
| 3389/TCP·UDP | RDP | 원격 데스크톱을 켠 서버·PC | UDP는 전송 성능 향상용 |
| 5985/TCP, 5986/TCP | WinRM (HTTP / HTTPS) | 서버 OS(기본 활성화되는 경우 많음), 설정한 PC | PowerShell 원격 관리 |
| 88, 389, 636, 3268, 3269, 464 | Kerberos, LDAP 등 | 도메인 컨트롤러 | 일반 PC가 LISTEN하면 이상 |
| 53/TCP·UDP | DNS | DNS 역할을 가진 서버(대개 DC) | |
| 5355/UDP | LLMNR | 대부분의 Windows 클라이언트 | 멀티캐스트 224.0.0.252 |
| 1900/UDP, 3702/UDP | SSDP, WS-Discovery | 클라이언트(장치 탐색) | 외부 노출 시 증폭 공격 악용 가능 |
Windows는 서비스 이름과 프로세스가 1:1이 아닙니다. 여러 서비스가 svchost.exe 하나를 공유하므로, 포트를 연 프로세스가 svchost.exe로만 보이면 서비스 이름을 한 번 더 확인해야 합니다. 또 445는 커널 드라이버가 처리하므로 PID가 4(System)로 표시됩니다.
실습 예시 — 본인 소유 Windows VM에서 LISTEN 포트와 서비스를 연결합니다(명령 프롬프트 / PowerShell).
# LISTEN 포트와 PID
netstat -ano | findstr LISTENING
# PowerShell: TCP LISTEN 목록과 프로세스 이름
Get-NetTCPConnection -State Listen |
Select-Object LocalAddress, LocalPort, OwningProcess,
@{n='Process';e={(Get-Process -Id $_.OwningProcess).ProcessName}} |
Sort-Object LocalPort
# UDP 엔드포인트
Get-NetUDPEndpoint | Sort-Object LocalPort
# svchost PID에 묶인 서비스 이름 확인 (PID는 예시)
tasklist /svc /fi "PID eq 1234"
# 동적 포트 범위 확인
netsh int ipv4 show dynamicport tcp
출력 형식 예시(값은 환경마다 다름, 일부 생략):
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1234
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 1500
TCP 0.0.0.0:5985 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 800
TCP 192.168.10.30:139 0.0.0.0:0 LISTENING 4
| 줄 | 해석 포인트 |
|---|---|
| 135, PID 1234 | tasklist /svc로 보면 RpcSs 등 RPC 관련 서비스가 묶인 svchost |
| 445·5985, PID 4 | 커널(HTTP.sys, SMB 드라이버)이 받는 포트라 System으로 보임 |
| 49664 이상 | 동적 RPC 포트. 부팅 시 여러 시스템 서비스가 등록 |
| 139, 특정 IP에만 | NetBIOS over TCP/IP가 켜진 인터페이스에 바인딩 |
Linux와의 비교는 84. Linux Service Port를 참고합니다.
| 흔적 위치 | 확인할 수 있는 것 |
|---|---|
Windows 방화벽 로그 (pfirewall.log) | 허용·차단된 연결의 출발지·목적지 포트(로깅 설정 시) |
| 보안 이벤트 5156/5157 | WFP가 허용/차단한 연결(필터링 플랫폼 감사 설정 시) |
| 보안 이벤트 4624 | 로그온 유형 3(네트워크, SMB·WinRM 등), 10(RDP) |
| Sysmon 이벤트 ID 3 | 네트워크 연결을 만든 프로세스(설치·설정 시) |
| 네트워크 방화벽·IDS | 135 → 동적 포트 연결, PC 간 445·3389·5985 |
관제자가 확인할 질문
svchost.exe로 보이는 포트는 어떤 서비스에 묶여 있는가?오탐 주의: 도메인 환경에서는 PC → DC의 135·445·88·389, DC 간 동적 RPC 포트 연결이 대량으로 발생하는 것이 정상입니다. 백신·자산관리·배포 솔루션도 PC의 445·135에 주기적으로 접속하므로 출발지 자산부터 확인합니다.
svchost.exe는 tasklist /svc로 서비스 이름을 확인합니다.