서비스 및 버전 탐지

NmapBeginner
지금 연습하기

소개

네트워크 보안 및 시스템 관리 분야에서 포트가 열려 있다는 사실을 아는 것만으로는 부족합니다. 기본적으로 포트 스캐너는 표준 포트 번호를 기반으로 실행 중인 서비스를 추측합니다 (예: 80 번 포트는 항상 HTTP 웹 서버라고 가정). 하지만 관리자는 어떤 포트에서든 원하는 서비스를 실행할 수 있습니다.

이것이 바로 배너 및 버전 탐지가 중요한 이유입니다. 포트 번호는 증거가 아니라 힌트일 뿐입니다. 실제 환경에서는 사용자 지정 포트, 리버스 프록시, 컨테이너 프론트엔드 또는 오해의 소지가 있는 서비스 이름을 사용하는 경우가 빈번합니다.

대상 시스템에서 실제로 무엇이 실행되고 있는지 정확하게 파악하려면 열린 포트를 직접 조사해야 합니다. 이 실습에서는 Nmap 의 버전 탐지 기능을 살펴봅니다. 서비스 배너를 획득하고 정확한 소프트웨어 이름과 버전 번호를 식별하는 방법을 배우게 되며, 이는 취약점 평가의 핵심 단계입니다.

버전 탐지 활성화

이 단계에서는 Nmap 버전 탐지의 기초를 배웁니다. 기본적으로 Nmap 은 포트가 열려 있는지 여부와 정적 조회 테이블을 기반으로 해당 포트에서 일반적으로 실행되는 서비스가 무엇인지만 알려줍니다. 어떤 소프트웨어가 리스닝 중인지 정확히 확인하려면 해당 서비스를 능동적으로 조사해야 합니다.

Nmap 명령어에 -sV 플래그를 추가하여 버전 탐지를 활성화할 수 있습니다. 이는 Nmap 이 열린 포트에 일련의 특정 프로브 (probe) 를 보내고 응답을 분석하여 서비스와 버전을 결정하도록 지시합니다.

즉, Nmap 은 포트 번호만으로 추론하는 것을 멈추고 애플리케이션의 동작을 직접 조사하기 시작합니다.

터미널에서 다음 명령어를 실행하여 로컬 머신을 스캔하고 실행 중인 서비스의 버전을 탐지해 보세요:

nmap -sV -p 80,8080 localhost

다음과 유사한 출력이 표시됩니다:

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000010s latency).
PORT     STATE SERVICE VERSION
80/tcp   open  http    nginx 1.18.0 (Ubuntu)
8080/tcp open  http    SimpleHTTPServer 0.6 (Python 3.10.12)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.51 seconds

출력의 VERSION 열을 확인해 보세요. Nmap 은 80 번 포트가 HTTP 일 것이라고 단순히 추측하는 대신, 해당 포트와 능동적으로 통신하여 Nginx 1.18.0 버전이 실행 중임을 발견했습니다. 또한 8080 번 포트에서 실행 중인 Python HTTP 서버도 성공적으로 식별했습니다.

버전 탐지 강도 조절

이 단계에서는 Nmap 버전 탐지의 공격성을 제어하는 방법을 배웁니다. Nmap 은 0 에서 9 까지의 척도를 사용하여 대상 서비스에 보낼 프로브의 수를 결정합니다.

기본 강도는 7 입니다. 강도가 높을수록 Nmap 은 더 많은 프로브를 시도하므로 서비스를 정확하게 식별할 확률은 높아지지만 시간이 더 오래 걸립니다. 강도가 낮으면 속도는 빠르지만 잘 알려지지 않은 서비스를 식별하지 못할 수 있습니다. --version-intensity 플래그 뒤에 0 에서 9 사이의 숫자를 입력하여 이를 조정할 수 있습니다.

이는 속도와 정확성 사이의 트레이드오프입니다. 대상이 불확실하거나 특이해 보일수록 더 깊은 조사가 가치가 있습니다.

강도를 9 로 설정하여 매우 공격적인 스캔을 시도해 보겠습니다. 이렇게 하면 Nmap 은 데이터베이스에 있는 모든 프로브를 열린 포트에 대해 시도하게 됩니다. 다음 명령어를 실행하세요:

nmap -sV -p 80,8080 --version-intensity 9 localhost

출력은 이전 단계와 비슷해 보이지만, 내부적으로 Nmap 은 훨씬 더 철저하게 조사를 수행했습니다:

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000012s latency).
PORT     STATE SERVICE VERSION
80/tcp   open  http    nginx 1.18.0 (Ubuntu)
8080/tcp open  http    SimpleHTTPServer 0.6 (Python 3.10.12)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

또한 강도 2 의 단축키로 --version-light 플래그를 사용하거나, 강도 9 의 단축키로 --version-all을 사용할 수도 있습니다. 이러한 단축키를 사용하면 정확한 숫자를 기억하지 않고도 스캔 동작을 쉽게 조정할 수 있습니다.

정확한 소프트웨어 버전 식별

이 단계에서는 특정 서비스의 정확한 소프트웨어 버전을 식별하고 결과를 문서화하기 위해 저장하는 데 집중합니다. 보안 평가를 수행할 때 알려진 취약점을 찾으려면 정확한 소프트웨어 버전을 기록해 두는 것이 매우 중요합니다.

모든 포트를 스캔하는 대신 -p 플래그를 사용하여 특정 포트를 타겟팅하고, -oN 플래그를 사용하여 결과를 파일로 저장할 수 있습니다. 이는 특정 서비스를 격리하여 팀과 결과를 공유하고자 할 때 매우 유용합니다.

다음 명령어를 실행하여 80 번 포트만 스캔하고, 버전을 탐지한 뒤 결과를 현재 디렉토리의 version_scan.txt 파일로 저장하세요:

nmap -sV -p 80 localhost -oN version_scan.txt

스캔이 완료되면 cat 명령어를 사용하여 저장된 파일의 내용을 확인할 수 있습니다:

cat version_scan.txt

출력에는 80 번 포트에서 실행 중인 Nginx 서버의 정확한 버전이 표시됩니다:

## Nmap 7.80 scan initiated ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000015s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    nginx 1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

## Nmap done at ...

nginx 1.18.0과 같이 정확한 버전을 문서화해 두면, 이제 취약점 데이터베이스를 검색하여 해당 특정 버전에 알려진 보안 결함이 있는지 확인할 수 있습니다.

요약

이 실습에서는 Nmap 의 강력한 버전 탐지 기능을 살펴보았습니다. -sV 플래그를 사용하여 단순한 포트 스캔을 넘어 서비스를 능동적으로 조사하고 정확한 소프트웨어 이름과 버전을 발견하는 방법을 배웠습니다. 또한 --version-intensity를 사용하여 속도와 정확성 사이의 균형을 맞추는 방법과, 특정 포트를 타겟팅하고 결과를 저장하여 취약점 분석에 활용하는 방법도 익혔습니다. 이러한 기술은 정확한 네트워크 매핑과 보안 감사를 위해 필수적입니다.