📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 212편
이전 글: 211. Service Detection · 다음 글: 213. Version Detection

1. 개념

OS Detection(운영체제 탐지) 은 대상 호스트가 보내는 응답 패킷의 세부 값으로 운영체제 종류를 추정하는 정찰입니다. 운영체제마다 TCP/IP 스택 구현이 조금씩 달라서, 같은 요청에도 TTL 초기값, TCP Window 크기, TCP 옵션 순서, 비정상 패킷에 대한 반응이 다르게 나타납니다. 이를 TCP/IP 스택 지문(fingerprint) 이라고 합니다.

방식은 두 가지입니다. 방어자도 쓰는 수동 방식과, 흔적이 뚜렷한 능동 방식입니다.

구분능동(Active) 탐지수동(Passive) 식별
방법대상에 특수한 프로브를 보내 반응 비교이미 오가는 트래픽의 값만 관찰
대상에 남는 흔적비정상 플래그·옵션 패킷 다수없음
정확도비교적 높음참고 수준
방어 측 활용탐지 대상자산 식별, 출발지 OS 추정

2. 동작 원리

능동 탐지는 비교 기준을 얻기 위해 열린 포트 1개와 닫힌 포트 1개가 필요합니다. 그래서 보통 포트 스캔 바로 뒤에 짧게 이어집니다.

포트 스캔으로 열린 포트·닫힌 포트 확보
      ↓
짧은 시간에 프로브 묶음 전송 (도구 공개 문서 기준 대략 아래 유형)
  ├─ 열린 포트로 옵션 조합이 다른 SYN 여러 개
  ├─ ECN 관련 플래그가 설정된 SYN
  ├─ 플래그 조합이 비정상인 TCP (플래그 없음, SYN+FIN+PSH+URG 등)
  ├─ 닫힌 포트로 ACK·SYN, 닫힌 UDP 포트로 UDP 1개
  └─ 코드 값이 특이한 ICMP Echo
      ↓
응답의 TTL·Window·옵션·DF·RST 여부·ICMP 인용 내용 비교
      ↓
지문 DB와 대조해 OS 추정
      ↓
방어 측 흔적: 1~2초 안에 규격 밖 패킷 여러 종류 → IDS 시그니처, 방화벽 INVALID 차단

응답에서 쓰이는 대표 값의 일반적인 경향은 다음과 같습니다(버전·설정에 따라 다름).

값일반적 경향비고
IP TTL 초기값Linux·macOS 64, Windows 128, 네트워크 장비 255수신 TTL은 거친 홉 수만큼 감소
TCP Window 크기OS·버전마다 기본값 다름단독으로는 약한 단서
TCP 옵션 순서MSS·SACK·Timestamp·Window Scale 배치가 다름지문의 핵심 요소
DF 비트설정 여부가 OS마다 다름ICMP 응답에서도 비교

3. 주요 특징

  • 짧고 밀집된 이상 패킷: 수십 개 이하의 패킷이 1~2초 안에 도착하지만, 그 안에 정상 통신에서 보기 어려운 플래그 조합이 여러 종류 섞여 있습니다. 개수보다 다양성이 특징입니다.
  • 정상 스택에서 나오지 않는 조합: SYN과 FIN이 동시에 설정된 패킷, 플래그가 하나도 없는 패킷은 정상 운영체제가 만들지 않습니다(146. 비정상 TCP Traffic 분석).
  • ICMP Echo의 코드 값: 일반 ping은 Code 0을 쓰지만 탐지 프로브에서는 0이 아닌 코드가 쓰일 수 있습니다.
  • 상태 추적 방화벽에서 걸러짐: 세션에 속하지 않는 비정상 패킷은 방화벽에서 INVALID로 차단되는 경우가 많아, 대상까지 도달하지 못하면 추정 정확도가 떨어집니다.
기준정상 트래픽능동 OS 탐지
TCP 플래그SYN, SYN/ACK, ACK, FIN/ACK, RST 등 규격 내플래그 없음, SYN+FIN 등 규격 밖 조합
같은 포트로의 SYN 옵션한 클라이언트는 동일한 옵션 구성연속 SYN마다 옵션 구성이 다름
ICMP Echo Code00이 아닌 값이 섞일 수 있음
선행 트래픽서비스 이용직전 포트 스캔

4. 예시

실습 예시 — 본인 소유 실습망에서 OS 탐지 프로브 흔적을 찾는 방어 측 명령입니다(Rocky/Ubuntu 공통, 값은 환경마다 다름).

# SYN과 FIN이 동시에 설정되었거나 플래그가 없는 TCP 패킷
sudo tcpdump -nn -i ens33 'tcp[13] & 0x03 == 0x03 or tcp[13] == 0'

# 캡처 파일에서 코드가 0이 아닌 ICMP Echo Request 출발지
tshark -r /tmp/os.pcapng -Y 'icmp.type == 8 && icmp.code != 0' -T fields -e ip.src | sort | uniq -c

패킷 요약 형식 예시(값은 환경마다 다름, 일부 필드 생략):

10:05:01.101 203.0.113.45 > 192.168.10.20.22: Flags [S], win 1, options [wscale 10,nop,mss 1460,TS,sackOK]
10:05:01.203 203.0.113.45 > 192.168.10.20.22: Flags [S], win 63, options [mss 1400,wscale 0,sackOK,TS,eol]
10:05:01.410 203.0.113.45 > 192.168.10.20.22: Flags [none], win 128
10:05:01.412 203.0.113.45 > 192.168.10.20.22: Flags [SFPU], win 256
10:05:01.520 203.0.113.45 > 192.168.10.20: ICMP echo request, id 4411, seq 295, length 128
관찰해석
같은 포트로 옵션 구성이 매번 다른 SYN일반 클라이언트가 아닌 프로브 묶음
Flags [none], Flags [SFPU]규격 밖 플래그 조합 → 스택 반응 비교 목적
약 0.5초 안에 TCP·ICMP 유형 혼합짧고 밀집된 지문 수집

📷 [실습 화면 삽입 위치] Wireshark에서 tcp.flags.syn == 1 && tcp.flags.fin == 1 필터 적용 결과와 같은 출발지의 직전 포트 스캔 패킷


5. 보안 관점

  • OS 정보는 공격 도구와 취약점 선택의 기준이 됩니다. 운영체제를 알면 해당 계열의 알려진 취약점부터 시도할 수 있습니다.
  • 경계 방화벽에서 세션 없는 비정상 패킷을 차단하면 능동 탐지 정확도가 떨어집니다. 다만 TTL이나 서비스 배너처럼 정상 응답에서도 OS 단서가 드러나므로 완전한 은닉은 어렵습니다.
  • 방어자는 수동 식별을 역으로 활용할 수 있습니다. 출발지 패킷의 TTL과 옵션으로 공격 출발지의 OS를 추정해 보고서에 참고 정보로 남길 수 있습니다.

6. SOC 관점

흔적 위치확인 내용
IDSOS 탐지 프로브, 비정상 플래그 관련 시그니처(룰셋마다 이름 다름)
방화벽세션 없는 비정상 TCP의 INVALID·차단 이벤트
패킷 캡처플래그·옵션 다양성, ICMP Code
NDR·Zeek직전 포트 스캔과 같은 출발지

관제자가 확인할 질문

  • 같은 출발지의 포트 스캔 직후 1~2초 안에 규격 밖 패킷이 몰렸는가?
  • 프로브가 대상까지 도달했는가(방화벽 차단 여부), 대상이 응답을 보냈는가?
  • 탐지 이후 특정 OS 계열을 노린 공격 시도가 이어졌는가?

오탐 주의: 일부 네트워크 장비·보안 솔루션의 헬스체크나 경로 점검, 손상된 패킷도 규격 밖 플래그로 보일 수 있습니다. 한두 개의 이상 패킷보다 짧은 시간의 여러 유형 조합과 선행 포트 스캔을 함께 보고 판단합니다.


7. 핵심 정리

  • OS Detection은 TCP/IP 스택 구현 차이(TTL, Window, 옵션 순서, 비정상 패킷 반응)로 운영체제를 추정합니다.
  • 능동 탐지는 열린·닫힌 포트가 모두 필요해 포트 스캔 직후 짧게 이어지는 경우가 많습니다.
  • 흔적의 핵심은 짧은 시간 안의 규격 밖 플래그 조합, 매번 다른 SYN 옵션, 특이한 ICMP Code입니다.
  • 상태 추적 방화벽은 세션 없는 비정상 패킷을 차단해 탐지 정확도를 낮추지만 완전한 은닉은 어렵습니다.
  • 수동 식별은 방어자가 출발지 OS를 추정하는 참고 정보로 활용할 수 있습니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글