📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 244편
이전 글: 243. 시간대와 이벤트 빈도 분석 · 다음 글: 245. Scan과 공격의 연관성 분석
스캔 판단의 기본은 "평소와 다르다" 입니다. 그런데 "평소"를 모르면 모든 대량 연결이 스캔처럼 보이고, 반대로 스캔이 평범해 보이기도 합니다. 이 글은 정상 트래픽과 스캔 트래픽을 가르는 정량 지표와, 그 비교 기준이 되는 기준선(baseline) 을 다룹니다.
정상 통신은 대부분 목적을 달성합니다. 연결이 성립하고, 데이터가 오가고, 같은 서비스를 반복해서 씁니다. 스캔은 질문만 하고 대화하지 않습니다. 연결은 많지만 성립 비율이 낮고, 데이터는 거의 없으며, 대상은 넓게 퍼집니다.
| 지표 | 정상 트래픽(일반적) | 스캔 트래픽(일반적) |
|---|---|---|
| 연결 성립 비율 | 높음 | 낮음(RST·무응답 多) |
| 흐름당 데이터량 | 요청·응답 수 KB 이상 | 0 또는 수십 바이트 |
| 고유 목적지 포트 | 소수(쓰는 서비스만) | 다수 |
| 고유 목적지 호스트 | 업무 대상 서버 몇 대 | 대역 전체 |
| 흐름당 패킷 수 | 수십 개 이상 | 1~3개 |
| 목적지 포트 반복 | 같은 포트 반복 사용 | 포트당 1~2회 |
비교는 같은 출발지(또는 같은 유형 자산)의 평소 값과 현재 값을 나란히 놓는 것입니다.
[기준선 작성] 평소 기간(예: 지난 2주)의 출발지·자산 유형별 지표
│ - 시간당 고유 목적지 포트·호스트 수
│ - 연결 성립 비율, 흐름당 평균 바이트
↓
[현재 값] 의심 구간의 같은 지표
↓
[비교] 기준선 대비 몇 배인가? 어떤 지표가 벗어났는가?
├─ 고유 포트·호스트 ↑ + 성립 비율 ↓ + 바이트 ↓ → 스캔
├─ 연결 수 ↑ + 성립 비율 유지 + 바이트 ↑ → 정상 부하 증가·대량 전송
└─ 연결 수 ↑ + 한 포트 + 인증 실패 로그 → 대입 (233편 참고)
↓
판정 + 벗어난 지표를 근거로 기록
여러 지표를 함께 봐야 합니다. 연결 수 하나만 보면 이벤트 트래픽 증가와 스캔을 구분할 수 없지만, 성립 비율과 데이터량을 더하면 명확히 갈립니다. 대입과의 구분은 233. Brute Force와 Scan 구분에서 다뤘습니다.
응답 플래그 비율은 패킷 수준의 좋은 지표입니다. 정상 TCP 연결 시도는 대부분 SYN/ACK를 받지만, 스캔은 닫힌 포트의 RST 응답이 대다수를 차지합니다.
| 패킷 지표 | 정상 | 스캔 |
|---|---|---|
| SYN 대비 SYN/ACK 비율 | 높음 | 낮음 |
| 서버가 보낸 RST(닫힌 포트 응답) | 드묾 | 많음 |
| ICMP Port Unreachable(UDP) | 드묾 | 많음(UDP 스캔) |
| 한 출발지 포트의 목적지 포트 수 | 1개 | 여러 개인 경우 있음(도구에 따라) |
스캔처럼 보이는 정상 트래픽도 알아 둬야 합니다.
실습 예시 — 본인 소유 실습망에서 캡처한 파일로 출발지별 SYN·SYN/ACK·RST 비율을 비교하는 방어 측 명령입니다(값은 환경마다 다름).
# 출발지별 SYN(연결 시도) 수
tshark -r lab.pcapng -Y 'tcp.flags.syn==1 && tcp.flags.ack==0' -T fields -e ip.src | sort | uniq -c | sort -rn
# 목적지별로 돌려준 SYN/ACK 수와 RST 수 (응답 쪽)
tshark -r lab.pcapng -Y 'tcp.flags.syn==1 && tcp.flags.ack==1' -T fields -e ip.dst | sort | uniq -c
tshark -r lab.pcapng -Y 'tcp.flags.reset==1 && tcp.flags.ack==1' -T fields -e ip.dst | sort | uniq -c
Wireshark에서는 Statistics → Conversations의 TCP 탭에서 출발지별 대화 수, 대화당 패킷·바이트를 정렬하면 "대화는 많은데 대화당 패킷이 2~3개"인 출발지가 바로 드러납니다(110. Conversations).
결과 비교 형식 예시(값은 환경마다 다름):
| 출발지 | SYN | 받은 SYN/ACK | 받은 RST | 대화당 평균 바이트 | 판단 |
|---|---|---|---|---|---|
| 192.168.10.21(업무 PC) | 340 | 336 | 2 | 18 KB | 정상 |
| 192.168.10.60(모니터링) | 1,200 | 1,200 | 0 | 0.3 KB | 헬스체크(정상, 성립 100%) |
| 192.168.10.77 | 2,000 | 14 | 1,960 | 0.06 KB | 스캔 |
분석 방법 — 모니터링 서버도 연결 수가 많고 데이터가 적지만 성립 비율이 100% 이고 대상 포트가 고정되어 있습니다. .77은 성립이 1% 미만이고 나머지는 RST 응답이므로 스캔입니다.
관제자가 확인할 질문
의심 출발지 → 기준선 조회 → 지표 비교
↓
성립 ↓·데이터 ↓·대상 분산 ↑ → 스캔 판정
성립 유지·데이터 ↑ → 정상 부하·전송 (다른 관점 검토)
설명되는 업무 변경 → 기준선 갱신
오탐 주의: 서버 장애 중에는 정상 클라이언트의 성립 비율이 떨어집니다. 이때는 대상 포트가 하나이고 같은 시각 여러 출발지에서 동시에 떨어진다는 점으로 구분합니다. 패킷 수준의 비정상 TCP 특징은 146. 비정상 TCP Traffic 분석을 참고합니다.