hhkb.dev

BLOG

2025-11-18 / 호스트기반모의해킹 · 06

서비스 스캐닝

1. 개요

포트 스캐닝이 "문이 열려 있는가?"를 보는 단계라면, 서비스 스캐닝은 "그 문 뒤에 어떤 서비스가 있고, 버전은 무엇인가?"를 확인하는 단계다.

  • 포트 번호만으로 실제 서비스를 단정할 수는 없다. 예를 들어 2222 포트에서 SSH가 돌 수도 있고, 웹 서비스가 돌아갈 수도 있다.
  • 목표: 정확한 서비스명과 버전 정보를 확보해, 이후 취약점(CVE) 확인으로 이어지게 만드는 것이다.

2. 배너 그래빙(Banner Grabbing)

서비스에 연결했을 때 서버가 보내주는 초기 환영 메시지(Banner)를 수집하는 기법이다.

2.1 패시브 배너 그래빙(Passive Banner Grabbing)

단순히 TCP 연결(3-Way Handshake)을 맺고, 서버가 먼저 보내는 메시지를 기다리는 방식이다.

동작 예시는 아래처럼 볼 수 있다.

(Connect)
Server: "220 (vsFTPd 3.0.3)"  <-- 이것이 배너

서버가 자발적으로 정보를 노출하는 경우 유용하고, Nmap -sT에서도 일부는 자연스럽게 확인된다.

2.2 액티브 서비스 프로빙(Active Service Probing)

보안 설정이 된 서버는 연결만 해서는 아무 말도 하지 않는 경우가 많다.

이럴 때는 Nmap이 다양한 프로브 패킷(Probe Packets)을 보내고, 돌아오는 응답 패턴(Response Pattern)을 비교해 서비스를 추정한다.

  • 도구: nmap -sV [IP]
  • 참고: Nmap은 nmap-service-probes 데이터베이스를 바탕으로 미지의 응답을 서비스 시그니처와 매칭한다.

3. Nmap 스크립트 엔진(Nmap Scripting Engine, NSE)

Nmap 기능을 확장하는 스크립트 도구다. Lua 언어로 작성된다.

  • 기본 스크립트 실행: nmap -sC [IP] 또는 --script=default
    가장 보편적으로 쓰는 기본 스크립트 세트를 실행한다.
  • 예시: FTP 서비스가 보이면 ftp-anon 같은 스크립트가 익명 로그인(Anonymous Login) 여부를 바로 확인해 주기도 한다.
  • 경로: 리눅스 기준 /usr/share/nmap/scripts/에 저장된다.

4. 수동 점검과 클라이언트 활용

자동화 도구(Nmap)가 실패하거나 정밀 분석이 필요할 때 사용한다.

4.1 넷캣(Netcat, nc)

서버와 직접 대화하듯 응답을 확인할 때는 nc가 단순하고 편하다.

nc [IP] [PORT]
(연결 후 HELP, HEAD / HTTP/1.0 등의 명령어 입력)

Wireshark를 함께 보면 주고받는 패킷 안에서 추가 헤더나 에러 메시지 같은 단서를 찾기 좋다.

4.2 전용 클라이언트(Native Clients)

프로토콜 전용 클라이언트를 쓰면 더 자연스러운 응답을 얻을 때가 많다.

  • FTP: ftp [IP]
  • Web: curl -v [URL] 또는 웹 브라우저
  • SMB/Samba: enum4linux, crackmapexec

5. 실무에서는?

핵심은 Nmap 결과만 그대로 받아 적고 끝내지 않는 것이다.

  1. -sV, -sC로 먼저 전체 윤곽을 잡는다.
  2. 중요 포트나 식별이 애매한 서비스는 nc나 전용 클라이언트로 직접 확인한다.
  3. 수집한 서비스명과 버전 정보는 나중에 취약점 검색에 바로 쓸 수 있게 정리해 둔다.