📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 233편
이전 글: 232. SSH Brute Force · 다음 글: 234. Firewall에서 Scan 흔적 찾기
관제 화면에서 "한 출발지에서 짧은 시간에 연결이 많다"는 이벤트는 두 가지 전혀 다른 행위일 수 있습니다. Scan은 "무엇이 열려 있는가"를 묻는 정찰이고, Brute Force는 "이 문을 열 수 있는가"를 시도하는 인증 공격입니다. 둘을 잘못 분류하면 우선순위가 뒤집힙니다. 스캔은 대부분 기록·감시로 끝나지만, 대입 공격은 계정 탈취 여부 확인이 반드시 필요합니다.
| 구분 | Scan | Brute Force |
|---|---|---|
| 질문 | 어떤 호스트·포트·서비스가 있는가 | 어떤 계정·비밀번호가 맞는가 |
| 목적지 포트 | 여러 포트(또는 여러 호스트의 한 포트) | 인증 서비스 1개 포트에 집중 |
| 세션 | 짧거나 미완성(SYN만, RST 종료) | 연결 수립 후 인증 교환까지 진행 |
| 데이터량 | 거의 없음 | 연결마다 일정량(키 교환·인증 메시지) |
| 서비스 로그 | 거의 없음 또는 배너 확인 흔적 | 인증 실패 로그 다수 |
| 위험 판단 기준 | 열린 포트·후속 활동 | 성공 로그인 여부 |
두 행위를 가르는 판단 흐름입니다. 첫 번째 기준은 목적지 포트 분포, 두 번째는 세션이 인증 단계까지 갔는가입니다.
"한 출발지, 짧은 시간, 연결 多" 이벤트
↓
[1] 목적지 포트가 여러 개인가?
├─ 예 → 수직 스캔 (한 호스트 × 多 포트)
└─ 아니오 (한 포트) ↓
[2] 목적지 호스트가 여러 개인가?
├─ 예, 호스트당 1~2회 → 수평 스캔(스윕)
└─ 호스트당 多회 ↓
[3] 세션이 수립되고 데이터가 오갔는가? 서비스에 인증 실패 로그가 있는가?
├─ 예 → Brute Force (호스트가 여럿이면 여러 서버 대상 대입)
└─ 아니오 → 반복 연결 확인·배너 확인 → 스캔 또는 장애·헬스체크 검토
수평 스캔과 다수 서버 대입이 가장 헷갈립니다. 둘 다 "여러 호스트 × 22번 포트"로 보이기 때문입니다. 차이는 호스트당 연결 횟수와 서비스 로그에 있습니다.
| 지표 | 22번 수평 스캔 | 여러 서버 대상 SSH 대입 |
|---|---|---|
| 호스트당 연결 수 | 1~2회 | 수십 회 이상 |
| 세션 길이 | 1초 미만, SYN만인 경우 多 | 수 초, 인증 교환 포함 |
| 서버 → 클라이언트 바이트 | 0 또는 배너 정도 | 연결마다 수 KB 수준 |
| sshd 로그 | 배너 교환 없이 끊긴 연결 흔적 가능 | Failed password 다수 |
[preauth] 연결 종료). 정확한 문구는 OpenSSH 버전에 따라 다릅니다.같은 출발지에 대한 방화벽 세션 로그 집계 형식 예시입니다(값은 환경마다 다름).
# 형식 예시 — 출발지 203.0.113.80, 10분간 22/tcp 세션 요약
목적지 세션 수 평균 지속 평균 수신 바이트(서버→클라이언트)
192.168.20.11 1 0.2초 0
192.168.20.12 1 0.3초 41
192.168.20.13 148 4.1초 2,960
분석 방법 — .11과 .12는 호스트당 1회, 데이터가 없거나 배너 크기뿐이므로 스캔의 모양입니다. .13은 148회 연결에 연결마다 수 KB가 오가므로 인증 단계까지 진행된 대입의 모양입니다. .13의 인증 로그를 반드시 확인합니다.
실습 예시 — 본인 소유 실습 환경의 Suricata flow 이벤트에서 출발지의 목적지별 연결 수와 응답 바이트를 집계하는 방어 측 명령입니다(필드 구성은 버전·설정에 따라 다를 수 있음).
sudo jq -r 'select(.event_type=="flow" and .src_ip=="203.0.113.80" and .dest_port==22)
| [.dest_ip, .flow.bytes_toclient] | @tsv' /var/log/suricata/eve.json \
| awk '{c[$1]++; b[$1]+=$2} END{for(h in c) print h, c[h], b[h]/c[h]}' | sort -k2 -rn
| 결과 모양 | 분류 | 다음 확인 |
|---|---|---|
| 목적지 多, 연결 1회, 바이트 0 | 수평 스캔 | 열린 호스트 목록, 후속 접속 |
| 목적지 1, 연결 多, 바이트 일정 | 대입 | 인증 로그의 계정·성공 여부 |
| 둘 다 순차적으로 발생 | 스캔 → 대입 연계 | 하나의 사건으로 묶어 타임라인 작성 |
관제자가 확인할 질문
오탐 주의: 모니터링 시스템의 포트 헬스체크(여러 서버 × 한 포트, 짧은 연결)는 수평 스캔과 비슷하고, 잘못 설정된 자동화 계정은 대입과 비슷합니다. 출발지 자산 확인이 분류보다 먼저입니다. 탐지 규칙에서 두 패턴을 다르게 세는 방법은 291. Port Scan 탐지, 292. Brute Force 탐지를 참고합니다.