📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 213편
이전 글: 212. OS Detection · 다음 글: 214. 특정 Port Scan
Version Detection(버전 탐지) 은 211. Service Detection에서 확인한 서비스가 어떤 제품의 몇 버전인지까지 알아내는 단계입니다. "SSH가 있다"에서 끝나지 않고 "OpenSSH 8.9"까지 확인하는 것입니다.
버전 정보가 중요한 이유는 알려진 취약점(CVE)과 바로 연결되기 때문입니다. 공격자에게 버전은 사용할 공격 코드의 선택 기준이고, 방어자에게는 노출된 버전이 패치 대상인지 확인하는 기준입니다.
| 단계 | 알아내는 것 | 예 |
|---|---|---|
| 포트 스캔 | 포트 상태 | 22/tcp open |
| 서비스 탐지 | 프로토콜 | SSH |
| 버전 탐지 | 제품·버전·부가 정보 | OpenSSH 8.9p1, 배포판 표기 |
버전 정보는 대부분 서비스가 스스로 알려주는 문자열에서 나옵니다. 서버 선발화 서비스는 연결 직후 배너에, HTTP는 응답 헤더와 오류 페이지에 제품·버전을 담는 경우가 많습니다. 배너가 없으면 도구는 더 구체적인 요청을 차례로 보내 응답 형식의 미세한 차이로 버전을 좁힙니다.
서비스 탐지 결과 (예: 80/tcp = HTTP)
↓
배너·헤더 수집 ── 버전 문자열 있음 → 제품·버전 판단
│
없음
↓
더 구체적인 요청을 추가로 전송 (같은 포트에 새 연결 반복)
↓
응답 코드·헤더 순서·오류 메시지 형식 비교 → 버전 범위 추정
↓
방어 측 흔적: 같은 포트에 서비스 탐지보다 많은 세션, 다양한 요청 형식, 오류 응답 증가
| 서비스 | 버전이 드러나는 위치 | 형식 예시 |
|---|---|---|
| SSH | 연결 직후 식별 문자열 | SSH-2.0-OpenSSH_8.9p1 Ubuntu-3 |
| HTTP | Server 헤더, 기본 오류 페이지 | Server: Apache/2.4.57 (Rocky Linux) |
| FTP·SMTP | 220 인사 메시지 | 220 (vsFTPd 3.0.5) |
| 웹 애플리케이션 | X-Powered-By 등 부가 헤더 | 언어·프레임워크 버전 |
GET / 같은 요청은 정상 방문과 구분되지 않습니다. 판단은 짧은 시간 여러 포트·여러 형식이 섞였는지로 합니다.| 기준 | 서비스 탐지 | 버전 탐지 |
|---|---|---|
| 목표 | 프로토콜 식별 | 제품·버전 식별 |
| 포트당 요청 | 적음 | 더 많음(배너가 없을 때) |
| 서비스 로그 | preauth 종료, 형식 오류 | 동일 + 특이 경로·메서드 요청 |
| 노출 영향 | 공격 대상 선정 | 공격 코드 선정 |
실습 예시 — 본인 소유 서버가 어떤 버전 정보를 노출하는지 점검하고, 수집된 버전 정보를 Zeek로 확인하는 방어 측 명령입니다(값은 환경마다 다름).
# 자기 웹 서버의 응답 헤더 점검
curl -sI http://192.168.10.20/ | grep -iE '^(server|x-powered-by):'
# Zeek software.log: 관찰된 트래픽에서 식별된 소프트웨어·버전
zeek-cut host software_type unparsed_version < software.log | sort -u
# Zeek ssh.log: 서버·클라이언트 식별 문자열
zeek-cut id.orig_h id.resp_h client server < ssh.log
결과 형식 예시(값은 환경마다 다름):
Server: Apache/2.4.57 (Rocky Linux) OpenSSL/3.0.7
X-Powered-By: PHP/8.1.14
192.168.10.20 HTTP::SERVER Apache/2.4.57 (Rocky Linux) OpenSSL/3.0.7
192.168.10.21 SSH::SERVER OpenSSH_8.9p1 Ubuntu-3
배너 최소화 설정 예시(적용 전 서비스 영향 확인 필요):
| 대상 | 설정 | 효과 |
|---|---|---|
| Apache | ServerTokens Prod, ServerSignature Off | Server 헤더를 제품명만, 오류 페이지 서명 제거 |
| Nginx | server_tokens off; | 헤더·오류 페이지의 버전 제거 |
| PHP | expose_php = Off | X-Powered-By 헤더 제거 |
| OpenSSH(Ubuntu) | DebianBanner no | 배포판 부가 문자열 제거(프로토콜·제품 버전은 남음) |
| 흔적 위치 | 확인 내용 |
|---|---|
| 서비스 로그 | 같은 출발지의 다양한 형식 요청, 오류 응답 증가 |
| 방화벽 세션 로그 | 열린 포트당 세션 수 증가, 짧은 지속 시간 |
| IDS | 스캔 도구 특징 요청 관련 Alert(룰셋에 따라 다름) |
| Zeek | software.log·ssh.log의 노출 버전 |
관제자가 확인할 질문
오탐 주의: 취약점 점검 솔루션, 자산관리 시스템, 인증서 만료 점검 도구도 같은 흔적을 만듭니다. 출발지가 예외 목록에 있고 공유된 일정과 맞는지 먼저 확인합니다. 검색 엔진·연구 목적 스캐너의 배너 수집도 외부에서 상시 관찰됩니다(229. 외부망 정찰).