얼마 전 KumbiaPHP 프레임워크 커뮤니티의 한 회원이 문제 해결을 도와주면서 Nmap 도구를 소개해 주었습니다. 몇 가지 조사를 해보니 이 도구, 애플리케이션, 명령어 등 원하는 명칭으로 부르는 모든 것을 찾을 수 있었습니다.
많은 컴퓨터 보안 관련 기사, 책, 영화에서 Nmap은 가장 중요한 보안 유틸리티 중 하나로 언급됩니다.
Nmap(네트워크 매퍼에서 제공)은 컴퓨터 네트워크의 보안을 검사, 관리 및 감사하기 위한 무료 소프트웨어 유틸리티입니다. 온라인 호스트, 호스트의 열린 포트, 호스트에서 실행 중인 서비스 및 애플리케이션, 운영 체제, 네트워크에서 실행 중인 방화벽/필터 및 그 유형을 감지합니다. 재감사 작업에 탁월하며 많은 수의 네트워크에서 빠른 스캔을 수행하도록 설계되었지만 개별 호스트에서도 동일하게 사용할 수 있습니다. 가장 강력한 포트 스캐너로 인정받고 있습니다. 그리고 기본적으로 세 가지 용도로 사용됩니다:
- 보안 감사.
- 정기적인 네트워크 테스트.
- 향후 공격을 위한 정보 수집자(해커).
Nmap은 무료 소프트웨어이므로 무료로 사용할 수 있습니다. 기본적으로 MacOSX, Microsoft Windows, GNU/Linux, OpenBSD, Solaris 등 모든 운영 체제에 맞는 버전이 있습니다.
Nmap 작동 방식
스텔스 스캐닝과 같은 다양한 탐지 회피 기술을 사용할 수 있습니다. 특정 포트, 특정 IP 범위 간, 기본 패킷인 SYN뿐만 아니라 Null, FIN, Xmas 및 ACK 패킷 사용, 특정 포트에 대한 스캔을 지원합니다. 즉, 특정 유형의 패킷이 각 포트로 전송되고 스캐너가 버전과 서비스를 찾을 수 있는 일부 신호로 응답합니다.
중요 개념
포트란: 포트는 두 대의 컴퓨터(호스트)가 정보를 교환하는 영역입니다.
서비스란: 서비스란 ssh 또는 텔넷과 같은 특정 유틸리티와 교환되는 정보 유형입니다.
방화벽이란: 방화벽은 컴퓨터로 들어오고 나가는 트래픽을 수락하거나 거부합니다.
SYN 패킷이란: 간단히 말해, TCP 연결을 설정하려는 시도를 여는 패킷이라고 할 수 있습니다.
Nmap의 경우 포트는 세 가지 방식이 있을 수 있다는 점에 유의하세요:
열림: 포트에 연결할 수 있고 데몬이 수신 대기 중입니다.
닫힘: 포트에 연결할 수 있지만 수신 중인 데몬이 없습니다.
필터링됨: 포트에 액세스할 수 없으며 방화벽이 포트를 필터링합니다.
Linux에 설치
데비안 또는 우분투 기반이라면 간단한 명령으로 설치할 수 있습니다:
sudo apt-get install nmap
다른 배포판을 사용하는 경우 해당 배포판의 리포지토리에서 검색하여 해당 배포판이 있는지 100% 확인할 수 있습니다. 다른 운영 체제를 사용하는 경우 이 페이지로 이동하여 다운로드하세요.
Nmap 사용 방법
가장 기본적인 사용 방법은 콘솔에 다음과 같이 입력하는 것입니다:
nmap
192.168.1.1
nmap 명령 뒤에 IP 또는 도메인을 입력합니다. 이 기본 사용법은 간단한 스캔 후 열려 있는 포트만 반환합니다. 스캔하는 IP의 보안에 따라 이 방법으로 스캔을 수행하면 스캔이 차단될 수 있습니다. 시스템에 로그를 남기지 않는 보다 신중한 방법은 다음과 같습니다:
nmap -sS 192.168.1.1
스캔 수정자에는 여러 유형이 있으며, 가장 중요한 것은 가장 적절한 조합을 식별하는 것이며, 스캔을 수행하는 데 사용할 수 있는 수정자는 다음과 같습니다:
sT는 TCP를 통해 포트 스캔을 시도합니다. 이 기술의 장점은 sS와 달리 권한이 있는 사용자가 필요하지 않다는 것입니다.
sU는 UDP 포트 스캔을 위한 것으로, 방화벽 뒤에 있을 수 있는 상위 포트를 발견하려고 할 때 유용하며 속도가 느리지만 보다 정확한 감사가 가능합니다.
sA ACK 메시지는 포트가 열려 있는지 확인하기 위해 시스템이 응답하도록 하는 데 사용되며, 일부 방화벽은 이러한 메시지를 필터링하지 않으므로 경우에 따라 효과적일 수 있습니다.
sX는 일부 잘못 구성된 방화벽을 통과하고 네트워크 내에서 렌더링되는 서비스를 감지할 수 있습니다.
sN은 일부 잘못 구성된 방화벽을 통과하여 네트워크 내에서 제공되는 서비스를 감지할 수 있습니다.
sF는 일부 잘못 구성된 방화벽을 통과하고 네트워크 내에서 제공되는 서비스를 감지할 수 있습니다.
sP 이 수정자는 네트워크에서 어떤 시스템이 가동 중인지(실행 중인지) 식별하는 데 도움이 되므로 Ping과 유사하게 보다 구체적인 테스트를 수행할 수 있습니다.
sV는 시스템에서 열린 포트를 기준으로 서비스를 식별하려고 시도합니다. 이를 통해 각 서비스를 개별적으로 평가하여 취약점을 찾을 수 있습니다.
따라서 이 옵션을 사용하면 시스템에서 3계층(네트워크) 이상의 프로토콜이 응답하는 것을 식별할 수 있으므로 평가하려는 네트워크 또는 시스템의 특성을 더 쉽게 파악할 수 있습니다.
스캔 옵션 외에도 도구를 더 활용할 수 있는 옵션을 지정할 수 있으며, 가장 자주 사용되는 옵션 중에는 핑을 피하거나 화면에 모든 결과를 최대한 자세히 표시하는 옵션이 있는데, 이러한 옵션이 무엇인지 살펴 보겠습니다:
b 피해자가 바운스 공격에 취약한지 확인하려면 다음을 수행합니다.
n은 -sP를 더 빠르게 만들기 위해 DNS 변환을 수행하지 않습니다.
vv 도구의 출력을 화면에 자세히 표시합니다.
f를 사용하면 방화벽이나 다른 시스템에서 추적을 수행하기 훨씬 더 복잡한 방식으로 분할이 가능합니다.
oN은 출력을 파일로 리디렉션합니다.
oX는 출력을 XML 파일로 리디렉션합니다.
-스타일시트 이 옵션을 사용하면 XML 출력을 읽기 쉽게 만들기 위해 스타일시트가 사용됩니다.
P0은 일부 방화벽에서 차단을 피하는 데 유용한 스캔을 시작하기 전에 대상 시스템을 핑하지 않아야 함을 나타냅니다.
p는 스캔 포트 또는 포트 범위를 지정하는 데 사용됩니다.
T는 들어오는 패킷의 속도를 감지하는 일부 시스템에서 간과할 수 있도록 스캔의 전체 속도를 지정하는 데 사용됩니다.
몇 가지 예를 살펴보겠습니다:
nmap -sV -P0 -O -O -vv -o file.txt 192.168.1.1
위의 명령은 선택한 IP에서 포트 스캔을 실행하고 컴퓨터에서 Ping이 실행되는 것을 방지하며, 이 외에도 반환되는 헤더에 따라 각 포트에 대해 운영 체제를 감지하려고 시도하고 실행 중인 서비스가 감지되면 해당 정보를 file.txt에 남깁니다.
nmap 192.168.1.0/24
위의 명령은 전체 네트워크를 검사합니다.
nmap 192.168.1.100 -p 10-200
위의 명령은 다양한 포트를 검색합니다.