📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 237편
이전 글: 236. IPS에서 Scan 차단 이벤트 확인 · 다음 글: 238. Suricata Scan 탐지

1. 개념

Snort는 스캔을 두 경로로 알립니다. 하나는 스캔 전용 모듈(Snort 2의 sfPortscan 전처리기, Snort 3의 port_scan inspector)이고, 다른 하나는 일반 규칙(임계치·시그니처 규칙)입니다. Snort 자체와 규칙 문법은 287. Snort란 무엇인가, 288. Snort Rule 기초에서 다뤘습니다. 이 글은 관제자가 Snort 스캔 Alert를 받았을 때 어떤 정보를 읽어야 하는가에 집중합니다.

경로Alert 식별판단 근거
스캔 전용 모듈GID 122 계열, 메시지 앞 (portscan)고유 포트·호스트 수, 실패 응답
임계치 규칙GID 1(일반 규칙), 로컬 sid일정 시간 안 일치 횟수
시그니처 규칙GID 1, 룰셋의 스캔 범주스캔 도구 특유의 패킷 모양

GID(Generator ID)는 "어느 구성 요소가 Alert를 만들었는가"를 뜻합니다. 규칙 Alert는 보통 GID 1이고, 전처리기·inspector가 만든 이벤트는 고유 GID를 가집니다.


2. 동작 원리

스캔 전용 모듈은 규칙처럼 패킷 한 개를 보고 판단하지 않고, 출발지별로 시간 창 안의 행동을 모아서 판단합니다.

패킷 관찰
   ↓
[집계] 출발지 → 목적지별 연결 시도, 고유 포트 수, 고유 호스트 수
   ↓
[응답 확인] 대상의 거절 응답(RST, ICMP Unreachable) 비율
   ↓
[유형 판정]
   ├─ 한 대상 × 多 포트   → Portscan
   ├─ 多 대상 × 적은 포트 → Portsweep
   ├─ 多 출발지 → 한 대상 → Distributed / Decoy Portscan
   └─ 응답 없이 필터링된 경우 → Filtered 계열
   ↓
Alert (GID 122) + 부가 정보(개수·범위)

Snort 2 문서 기준으로 민감도(sense_level) 는 low·medium·high가 있으며, low는 대상의 거절 응답(오류 패킷) 을 근거로 판단해 오탐이 적은 대신 필터링된 환경의 스캔을 놓칠 수 있고, 높을수록 더 넓게 잡지만 오탐이 늘어납니다. Snort 3의 설정 이름과 기본값은 버전 문서로 확인합니다.


3. 주요 특징

스캔 모듈 Alert의 메시지는 스캔의 모양을 그대로 알려 줍니다(대표 예, 전체 목록과 SID 번호는 버전 문서 확인).

메시지(예)모양관제 해석
(portscan) TCP Portscan한 출발지 → 한 대상 多 포트특정 서버 표적 정찰
(portscan) TCP Portsweep한 출발지 → 多 대상열린 서비스 가진 호스트 찾기
(portscan) TCP Distributed Portscan多 출발지 → 한 대상분산 정찰, 출발지 목록 확보
(portscan) TCP Decoy Portscan위조 출발지 섞임실제 출발지 식별 필요
(portscan) ... Filtered ...응답 없음(필터링)방화벽이 대부분 막음
UDP·ICMP 계열프로토콜별 동일 개념해당 프로토콜 노출 확인
  • Snort 2의 sfPortscan은 로그 파일 옵션을 켜면 부가 정보(우선순위 개수, 연결 개수, IP 개수, 포트 개수·범위 등)를 남길 수 있습니다. 이 값이 스캔 규모를 판단하는 핵심 자료입니다.
  • 모듈 Alert는 대표 패킷 하나에 붙어 기록되므로, Alert의 목적지 포트 하나로 범위를 판단하지 않습니다.

4. 예시

Snort fast alert 형식의 스캔 Alert 형식 예시입니다(값은 환경마다 다름, SID 번호는 예시).

09/30-02:05:07.412345  [**] [122:1:1] (portscan) TCP Portscan [**] [Priority: 3] {PROTO:255} 203.0.113.60 -> 192.168.20.10
09/30-02:07:30.118200  [**] [1:1001501:1] LOCAL possible TCP SYN scan from external [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 203.0.113.60:40112 -> 192.168.20.10:3389

분석 방법 — 첫 줄은 모듈 Alert(GID 122)이며 포트 정보 없이 출발지·목적지만 있습니다. 모듈 이벤트는 실제 트래픽이 아니라 요약을 위한 가상의 패킷에 붙는 경우가 있어 프로토콜 표기가 일반 패킷과 다를 수 있습니다. 둘째 줄은 로컬 임계치 규칙(GID 1)입니다.

실습 예시 — 본인 소유 실습 환경의 alert 파일에서 GID별·출발지별 스캔 Alert를 집계하는 방어 측 명령입니다(파일 위치는 설치 방식에 따라 다름, 예: /var/log/snort/alert).

# GID 122(스캔 모듈) Alert의 출발지 집계
grep "\[122:" /var/log/snort/alert | grep -oE "\} [0-9.]+" | sort | uniq -c | sort -rn

# 같은 출발지의 다른 범주 Alert (후속 활동 확인)
grep "203.0.113.60" /var/log/snort/alert | grep -v "\[122:" | cut -d']' -f3 | sort | uniq -c
확인 결과해석
122 Alert만 있고 후속 없음정찰 단계에서 멈춤
122 Portscan 후 같은 대상에 웹 공격 규칙 Alert표적 정찰 → 공격 시도 연계
Portsweep의 대상이 내부 대역 전체, 출발지 내부내부 정찰, 우선순위 상향

5. 보안 관점

  • 스캔 모듈은 규칙이 없는 새 도구·기법도 행동으로 잡을 수 있다는 장점이 있지만, 느린 스캔이나 분산 스캔은 시간 창과 기준을 벗어날 수 있습니다.
  • Decoy 유형은 출발지 목록 대부분이 위조일 수 있으므로, 목록 전체를 차단하면 제3자를 막게 됩니다. 응답을 받아 후속 접속을 한 출발지가 실제 출발지일 가능성이 높습니다.
  • 민감도를 높이면 탐지는 늘지만 Alert 피로가 커집니다. 내부 구간은 높게, 인터넷 구간은 낮게 두는 식으로 구간별 조정을 검토합니다.

6. SOC 관점

관제자가 확인할 질문

  • Alert가 모듈(GID 122) 인가, 규칙(GID 1) 인가?
  • 유형이 Portscan·Portsweep·Distributed·Decoy·Filtered 중 무엇인가?
  • 부가 정보나 방화벽·흐름 기록으로 본 실제 대상 포트·호스트 수는?
  • 같은 출발지의 다른 범주 Alert가 이어졌는가?
Snort 스캔 Alert
   ↓ GID로 경로 구분 (122 모듈 / 1 규칙)
   ↓ 유형·부가 정보로 규모 판단
   ↓ 방화벽·흐름 기록으로 성립 연결 확인
   ↓ 같은 출발지 후속 Alert 검색
판정 → 기록 / 억제 검토 / 사건 전환

오탐 주의: 네트워크 관리 시스템의 자산 탐색, NAT 뒤 다수 사용자가 한 IP로 보이는 경우, DNS·NTP 서버처럼 많은 호스트와 통신하는 서버는 Portsweep·Distributed 유형과 일치할 수 있습니다. 이런 출발지는 모듈의 무시 목록(ignore 설정)으로 좁혀 관리합니다. 탐지 기준 설계는 291. Port Scan 탐지를 참고합니다.


7. 핵심 정리

  • Snort는 스캔 전용 모듈(GID 122 계열)과 일반 규칙(GID 1) 두 경로로 스캔을 알립니다.
  • 모듈은 출발지별 행동을 모아 Portscan·Portsweep·Distributed·Decoy·Filtered 유형으로 판정합니다.
  • 민감도가 낮을수록 오탐이 적지만 필터링 환경의 스캔을 놓칠 수 있습니다.
  • 모듈 Alert는 대표 패킷에 붙으므로 부가 정보와 방화벽·흐름 기록으로 규모를 확인합니다.
  • Decoy 유형은 위조 출발지가 섞여 있어 후속 접속을 한 출발지를 실제 출발지로 추정합니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글