📚 네트워크 · 패킷 분석 › 02. 포트 · 프로토콜 분석 — 88편
이전 글: 87. 내부망 필수 포트와 외부 노출 금지 포트 · 다음 글: 89. 비표준 포트에서 동작하는 서비스 식별
위험 Port는 포트 번호 자체가 위험하다는 뜻이 아니라, 그 포트에서 보통 동작하는 서비스의 성질 때문에 노출되거나 악용될 때 피해가 큰 포트를 말합니다. 같은 3389라도 VPN 뒤의 관리망에서만 열려 있으면 위험도가 낮고, 인터넷에 바로 열려 있으면 매우 높습니다.
포트를 "외부 공개 가능 / 내부 전용 / 외부 노출 금지"로 나누는 정책 기준은 이전 글 87. 내부망 필수 포트와 외부 노출 금지 포트에서 다뤘습니다. 이 글은 한 단계 앞에서 "왜 그 포트가 위험 목록에 올라가는가" 를 위험 요인별로 정리합니다.
위험도 ≈ 서비스 성질(이 글의 6가지 요인)
× 노출 범위(인터넷 / 내부 전체 / 특정 대역)
× 설정 상태(인증·암호화·패치·기본값 여부)
세 요소 중 하나라도 줄이면 위험도가 내려갑니다. 서비스 성질은 바꾸기 어렵기 때문에, 실제 대응은 노출 범위와 설정 상태를 조정하는 방향으로 이루어집니다.
위험 요인 여섯 가지와 대표 포트입니다. 한 포트가 여러 요인에 동시에 해당할 수 있습니다.
| 위험 요인 | 왜 위험한가 | 대표 포트 (기본값 기준) |
|---|---|---|
| ① 평문 전송 | 계정·명령·데이터가 암호화 없이 전송되어 경로상에서 노출 | 21 FTP, 23 Telnet, 110 POP3, 143 IMAP, 80 HTTP, 161 SNMPv1/v2c |
| ② 인증 부재·약한 기본값 | 설정하지 않으면 인증 없이 접근 가능한 구현이 있음 | 6379 Redis, 11211 Memcached, 2375 Docker API(평문), 9200 Elasticsearch(버전·설정에 따라), 27017 MongoDB(구버전 기본값) |
| ③ 원격 제어 | 인증에 성공하면 곧바로 시스템 조작 가능 | 22 SSH, 3389 RDP, 5985/5986 WinRM, 5900 VNC |
| ④ 취약점 이력 | 인증 전 원격 코드 실행 취약점이 반복적으로 보고된 서비스 | 445 SMB, 3389 RDP, 135 RPC |
| ⑤ 반사·증폭 | 작은 UDP 요청에 큰 응답 → 출발지 위조 시 제3자 공격에 악용 | 53 DNS, 123 NTP, 161 SNMP, 1900 SSDP, 11211 Memcached(UDP), 389 CLDAP |
| ⑥ 정보 노출 | 호스트·계정·공유·서비스 목록을 알려 줌 | 111 rpcbind, 137 NetBIOS-NS, 161 SNMP, 389 LDAP(익명 조회 허용 시) |
④의 예로 SMBv1의 MS17-010(2017, 웜 확산에 악용), RDP의 CVE-2019-0708(BlueKeep, 인증 전 원격 코드 실행)이 잘 알려져 있습니다. 개별 취약점보다 중요한 것은 "이 서비스는 인증 전에 공격 면이 넓다" 는 성질입니다.
요인별로 공격자가 노리는 결과와 관제에서 먼저 보이는 흔적이 다릅니다.
① 평문 → 경로상 수집 → 흔적: 평문 인증 트래픽 자체 (패킷에서 계정 문자열)
② 인증 부재 → 바로 데이터 접근 → 흔적: 외부 IP의 짧은 연결 후 데이터 조회·쓰기 명령
③ 원격 제어 → 인증 대입·탈취 → 흔적: 인증 실패 반복 → 성공 → 이후 행위
④ 취약점 → 인증 없이 실행 → 흔적: IDS 익스플로잇 시그니처, 서비스 비정상 종료
⑤ 반사·증폭 → 우리가 가해 경로 → 흔적: 우리 서버의 외부행 UDP 응답 급증
⑥ 정보 노출 → 다음 공격 준비 → 흔적: 조회성 요청 후 다른 포트로의 후속 접근
같은 서비스도 보완 수단에 따라 위험 요인이 사라지거나 줄어듭니다. 포트 번호만 보고 판단하지 않고, 아래 대체·보완 여부를 함께 확인합니다.
| 위험 서비스 | 보완·대체 수단 | 남는 위험 |
|---|---|---|
| Telnet 23 | SSH 22로 대체 | SSH도 ③ 원격 제어 요인은 남음 |
| FTP 21 | SFTP(SSH 기반) 또는 FTPS | FTPS는 데이터 채널 포트 관리 필요 |
| SNMPv1/v2c 161 | SNMPv3(인증·암호화) | 외부 노출 시 ⑤·⑥ 여전히 가능 |
| Redis 6379 | 루프백 바인드, 인증 설정 | 인증 정보가 평문 설정 파일에 남음 |
| RDP 3389 | NLA, VPN·게이트웨이 경유, MFA | 취약점 패치 여부에 계속 의존 |
| Docker API 2375 | TLS 적용 2376, 소켓 파일만 사용 | 인증서 관리 실패 시 동일 위험 |
또 위험 포트는 방향마다 의미가 다릅니다.
| 방향 | 445 예시 | 3389 예시 |
|---|---|---|
| 외부 → 내부 | 노출 탐색·취약점 공격 시도 | 인증 대입, 취약점 스캔 |
| 내부 → 내부 | 파일 공유(정상) 또는 확산 | 관리자 원격 접속 또는 측면 이동 |
| 내부 → 외부 | 자격 증명 해시 노출 위험 — 대부분 차단 대상 | 외부 원격 지원 도구·정책 위반 가능 |
실습 예시 — 본인 소유 실습 서버(Linux)에서 위 표의 위험 포트 중 무엇이 LISTEN 중이고 어떤 주소에 바인드되어 있는지 확인합니다(Rocky/Ubuntu 공통, root 권한 필요). 점검 절차 전체는 98. 포트·프로토콜 보안 점검 체크리스트을 참고합니다.
# 위험 포트 목록과 LISTEN 소켓 대조 (TCP·UDP)
RISKY='21|23|110|143|161|111|137|445|135|3389|5900|5985|6379|11211|2375|9200|27017'
sudo ss -tulnp | awk -v r=":($RISKY)\$" 'NR==1 || $5 ~ r'
출력 형식 예시(값은 환경마다 다름, 일부 열 생략):
Netid State Local Address:Port Process
tcp LISTEN 0.0.0.0:6379 users:(("redis-server",pid=1204,fd=6))
udp UNCONN 0.0.0.0:161 users:(("snmpd",pid=880,fd=6))
위 예시라면 두 가지를 판단합니다. Redis가 0.0.0.0에 바인드되어 ② 요인이 노출 범위와 결합했는지, SNMP가 v2c 커뮤니티 문자열로 동작하며 ①·⑤·⑥에 해당하는지입니다.
분석 방법 예시 — ⑤ 반사·증폭 악용 여부는 "요청은 적은데 우리 서버가 내보낸 응답이 큰" 흐름으로 확인합니다. 방화벽 세션 로그 형식 예시입니다.
src=198.51.100.23 sport=41000 dst=192.168.10.53 dport=53 proto=udp sent=64 rcvd=3050
src=198.51.100.23 sport=41000 dst=192.168.10.53 dport=53 proto=udp sent=64 rcvd=3048
요청 바이트 대비 응답 바이트가 수십 배이고 같은 출발지에서 짧은 간격으로 반복되면, 출발지 IP가 위조된 요청(실제 피해자 IP)일 가능성을 고려합니다.
| 위험 요인 | 주로 흔적이 남는 곳 | 우선 확인 |
|---|---|---|
| ① 평문 | 패킷 캡처, IDS 평문 인증 룰 | 어느 구간에서 평문 인증이 오가는가 |
| ② 인증 부재 | 방화벽 허용 로그, 서비스 로그(있다면) | 외부·비인가 출발지의 접근 여부 |
| ③ 원격 제어 | 서비스 인증 로그, Windows 로그온 이벤트 | 실패 반복 뒤 성공 여부 |
| ④ 취약점 | IDS/IPS Alert, 서비스 크래시 로그 | 대상 시스템의 패치 수준 |
| ⑤ 반사·증폭 | 방화벽·NetFlow 바이트 비율 | 우리 서버의 외부행 UDP 응답량 |
| ⑥ 정보 노출 | 방화벽 허용 로그, IDS 조회 탐지 | 조회 후 같은 출발지의 후속 접근 |
관제자가 확인할 질문
오탐 주의: 위험 포트로의 접근이 곧 공격은 아닙니다. 인터넷에 공개된 서버는 위험 포트로 끊임없이 스캔을 받으므로, 차단된 시도보다 허용된 연결과 그 이후 행위에 우선순위를 둡니다. 위험 포트 접근 징후의 패턴별 해석은 97. Port 기반 공격에서 이어집니다.