📚 네트워크 · 패킷 분석 › 02. 포트 · 프로토콜 분석 — 97편
이전 글: 96. IDS Alert의 Port · 다음 글: 98. 포트·프로토콜 보안 점검 체크리스트
포트 기반 공격 징후란 패킷 내용을 보지 않고도 포트 번호, 방향, 빈도, 분포만으로 관찰할 수 있는 이상 신호를 말합니다. 방화벽 로그·NetFlow처럼 내용이 없는 로그만 있어도 확인할 수 있어서, 관제의 1차 선별(트리아지)에 많이 쓰입니다.
단, 징후는 증거가 아니라 조사를 시작할 이유입니다. 대부분의 징후에는 비슷하게 보이는 정상 원인이 있으므로, 이 글은 각 징후마다 "무엇을 더 확인해야 하는가"를 함께 정리합니다.
앞선 글과의 범위 구분은 다음과 같습니다.
| 주제 | 다루는 글 |
|---|---|
| 노출되면 안 되는 포트가 열린 상태 | 99. 서버 1대의 포트 노출 현황 종합 분석 |
| 서버에 불필요하게 LISTEN 중인 포트 | 89. 비표준 포트에서 동작하는 서비스 식별 |
| 허용 포트(443)를 쓰는 비정상 외부 통신 | 90. 정상 포트로 위장한 통신 — 443을 쓰는 비정상 트래픽 |
| 포트 스캔과 정상 접속 구분 | 95. Firewall Log의 Port |
| 트래픽 흐름에서 보이는 포트 패턴 전체 조망 | 이 글 |
공격 단계마다 쓰이는 포트와 방향이 달라, 포트 패턴을 보면 어느 단계의 흔적인지 추정할 수 있습니다.
[정찰] 외부 → 우리 대역 : 여러 포트 / 한 포트 스윕
↓
[초기 접근] 외부 → 노출 서비스 : 22·3389·웹 포트로 반복 시도
↓
[실행·거점] 감염 호스트 → 외부 : 드문 목적지·비표준 포트 아웃바운드
↓
[내부 확산] 내부 호스트 → 다른 내부 호스트 : 445·135·3389·5985·22
↓
[유출·영향] 내부 → 외부 : 대용량 전송 / 내부 → 다수 : 파일 공유 대량 쓰기
같은 포트라도 어느 단계의 방향에서 나타났는지가 해석을 바꿉니다. 예를 들어 445는 외부 → 내부이면 노출 탐색, 내부 PC → PC이면 확산, 내부 → 외부이면 자격 증명 노출 위험 신호입니다.
대표 징후를 포트 패턴 중심으로 정리합니다.
| 징후 | 포트 패턴 | 추가 확인 | 흔한 오탐 원인 |
|---|---|---|---|
| 관리 포트 반복 시도 | 외부 → 22·3389 다수 연결, 짧은 세션 반복 | 서비스 인증 실패 로그, 이후 성공 여부 | 사용자의 비밀번호 오입력, 자동화 스크립트 설정 오류 |
| 동일 포트 스윕 | 1 출발지 → 여러 IP의 같은 포트(445, 3389, 22, 6379 등) | 출발지 자산, 시도한 IP 범위 | 자산관리·백신·점검 서버 |
| 내부 확산 | 내부 PC → 다른 PC의 445·135·3389·5985 | 인증 이벤트(로그온 유형 3·10), 원격 서비스 생성 | 관리자 원격 지원, 배포 솔루션 |
| 비정상 아웃바운드 포트 | 내부 → 외부 비표준 포트, 25, 23, IRC류 포트 | 연결 프로세스, 목적지 평판·도메인 | 업무용 SaaS·원격 지원 도구 |
| 내부 DNS·NTP 우회 | 일반 호스트 → 외부 53·123 직접 | 설정된 DNS 서버, 질의 내용 | 개발 PC 수동 설정, 일부 IoT 장비 |
| 외부로 나가는 445·139 | 내부 → 외부 445 | 링크·문서로 유도된 접속 여부 | 거의 없음(대부분 차단 대상) |
| 새 LISTEN 포트의 외부 연결 | 서버의 이전에 없던 포트로 인바운드 | 포트를 연 프로세스·생성 시각 | 신규 서비스 배포 |
| 반사·증폭 공격 응답 | 외부 → 우리 IP로 출발지 포트 53·123·1900·11211 UDP 대량 유입, 요청 없음 | 우리가 보낸 요청이 있었는가 | 대형 DNS 응답(정상 질의에 대한) |
| 우리 자산이 반사기로 악용 | 내부 서버가 53·123·161·1900 UDP 응답을 외부로 대량 송신 | 해당 서비스의 외부 노출 여부 | 정상 공개 DNS 서버 |
여러 징후가 시간 순서대로 이어지면 신뢰도가 크게 올라갑니다. 예를 들어 "외부 → 22 반복 시도 → 같은 출발지의 22 인증 성공 → 그 서버에서 내부 22 스윕"은 개별 징후 하나보다 훨씬 강한 근거입니다.
분석 방법 예시 — 방화벽 로그를 포트 패턴별로 선별하는 순서입니다. 아래 로그는 형식 예시(값은 환경마다 다름)이며, 실제 장비 필드명은 96. IDS Alert의 Port을 참고합니다.
time action src_ip src_port dst_ip dst_port proto bytes
10:01:02 deny 203.0.113.50 51544 192.168.10.20 3389 TCP 60
10:01:03 deny 203.0.113.50 51545 192.168.10.21 3389 TCP 60
10:01:03 deny 203.0.113.50 51546 192.168.10.22 3389 TCP 60
10:14:40 allow 192.168.10.35 50110 192.168.10.36 445 TCP 18420
10:14:41 allow 192.168.10.35 50112 192.168.10.37 445 TCP 17990
10:14:41 allow 192.168.10.35 50114 192.168.10.38 445 TCP 18105
10:30:00 allow 192.168.10.40 49820 198.51.100.7 8443 TCP 1320
10:31:00 allow 192.168.10.40 49826 198.51.100.7 8443 TCP 1318
| 줄 묶음 | 포트 패턴 | 징후 | 다음 확인 |
|---|---|---|---|
| 10:01, 외부 → 여러 IP의 3389 | 동일 포트 스윕 | 외부 정찰 | 3389가 허용된 IP가 있는지, 같은 출발지의 후속 시도 |
| 10:14, PC → 여러 PC의 445, 허용·바이트 있음 | 내부 확산 의심 | 우선순위 높음 | .35의 로그온 이벤트, 원격 서비스 생성, .35의 이전 행위 |
| 10:30, 같은 목적지 8443에 1분 간격 비슷한 크기 | 비정상 아웃바운드 + 주기성 | C2 의심 | 연결 프로세스, 도메인·평판(90. 정상 포트로 위장한 통신 — 443을 쓰는 비정상 트래픽) |
실습 예시 — 본인 실습 서버(Linux)에서 새로 생긴 LISTEN 포트를 확인하는 방법입니다(Rocky/Ubuntu 공통).
# 기준 목록 저장 후, 나중에 비교
ss -Htlnu | awk '{print $1, $5}' | sort > /tmp/listen_base.txt
ss -Htlnu | awk '{print $1, $5}' | sort | diff /tmp/listen_base.txt -
| 흔적 위치 | 확인 가능한 징후 |
|---|---|
| 경계 방화벽 로그 | 외부 스윕, 관리 포트 반복 시도, 비정상 아웃바운드 포트 |
| 내부 방화벽·NetFlow | PC 간 445·3389·5985 확산 |
| IDS | 임계치 기반 스캔·무차별 대입 Alert, 포트-프로토콜 불일치 |
| 호스트(EDR·Sysmon·ss) | 연결을 만든 프로세스, 새 LISTEN 포트 |
| 인증 로그 | 반복 실패 후 성공, 새 출발지의 원격 로그온 |
관제자가 확인할 질문
오탐 주의: 단일 징후만으로 차단·격리를 결정하지 않습니다. 특히 내부 스윕·확산 패턴은 관리 솔루션과 모양이 같으므로 예외 목록과 변경 작업 일정을 먼저 대조합니다.