Nmap 으로 SSL 인증서 탐지

NmapBeginner
지금 연습하기

소개

이 랩에서는 Nmap 의 ssl-cert 스크립트를 사용하여 SSL 인증서를 탐지하는 방법을 배우게 됩니다. 이 랩은 IP 주소와 도메인 이름을 스캔하여 주체 (subject), 발급자 (issuer), 유효 기간을 포함한 SSL/TLS 인증서 정보를 검색하고 표시하는 과정을 안내합니다.

Xfce 터미널에서 nmap --script ssl-cert 192.168.1.1nmap --script ssl-cert scanme.nmap.org와 같은 명령을 실행하여 포트 지정, 상세도 증가, 결과를 파일에 저장하는 옵션을 탐색합니다. 마지막으로, 인증서 세부 정보를 검토하고 서비스 탐지 결과와 비교합니다.

nmap --script ssl-cert 192.168.1.1 로 SSL 인증서 스캔 실행

이 단계에서는 Nmap 을 사용하여 지정된 IP 주소에 대한 SSL 인증서 스캔을 수행합니다. Nmap 은 강력한 네트워크 스캔 도구이며, 스크립팅 엔진을 통해 기능을 확장할 수 있습니다. ssl-cert 스크립트는 대상 서버에서 SSL/TLS 인증서 정보를 검색하고 표시하도록 설계되었습니다.

먼저, 기본 명령 구조를 이해해 보겠습니다.

nmap --script ssl-cert <target_ip>

여기서 <target_ip>는 스캔하려는 서버의 IP 주소입니다. 이 경우, IP 주소 192.168.1.1을 스캔합니다.

이제 Xfce 터미널을 엽니다. ~/project 디렉토리에 있는지 확인합니다. 그렇지 않은 경우, cd 명령을 사용하여 해당 디렉토리로 이동합니다.

cd ~/project

다음으로, 다음 명령을 실행하여 SSL 인증서 스캔을 실행합니다.

sudo nmap --script ssl-cert 192.168.1.1

비밀번호를 묻는 메시지가 표시될 수 있습니다. labex 사용자는 비밀번호 없이 sudo 권한을 가지고 있으므로 Enter 키를 누르십시오.

참고: 192.168.1.1은 개인 IP 주소이며 현재 네트워크 구성에서 접근할 수 없을 수 있습니다. 해당 주소에 서버가 없는 경우, 스캔 결과가 반환되지 않거나 시간 초과될 수 있습니다. 테스트 목적으로, scanme.nmap.org 또는 8.8.8.8과 같이 SSL 인증서가 있는 것으로 알려진 공용 IP 주소를 사용할 수 있습니다.

대신 scanme.nmap.org를 스캔해 보겠습니다.

sudo nmap --script ssl-cert scanme.nmap.org

이 명령은 scanme.nmap.org에 연결하여 SSL 인증서 정보를 검색하려고 시도합니다. 출력에는 인증서의 주체 (subject), 발급자 (issuer), 유효 기간 및 Subject Alternative Names (SANs) 과 같은 세부 정보가 표시됩니다.

예시 출력 (실제 출력은 다를 수 있습니다):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.031s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

Nmap done: 1 IP address (1 host up) scanned in 2.18 seconds

이 출력은 scanme.nmap.org에 대한 SSL 인증서 세부 정보를 보여주며, 주체, 발급자 및 유효 날짜를 포함합니다.

nmap --script ssl-cert -p 443 127.0.0.1 로 443 포트 스캔

이 단계에서는 Nmap 과 ssl-cert 스크립트를 사용하여 특정 포트인 443 을 스캔하는 데 집중합니다. 포트 443 은 인터넷을 통한 보안 통신에 사용되는 HTTPS (Hypertext Transfer Protocol Secure) 트래픽의 표준 포트입니다. 포트를 지정함으로써 스캔 범위를 좁히고 해당 포트에서 실행되는 서비스에 대한 SSL 인증서 정보를 검색할 수 있습니다.

사용할 명령은 다음과 같습니다.

nmap --script ssl-cert -p 443 127.0.0.1

이 명령을 자세히 살펴보겠습니다.

  • nmap: Nmap 명령줄 스캐너입니다.
  • --script ssl-cert: SSL 인증서 정보를 검색하기 위해 ssl-cert 스크립트를 사용하도록 지정합니다.
  • -p 443: 이 옵션은 Nmap 에게 포트 443 만 스캔하도록 지시합니다.
  • 127.0.0.1: 이는 루프백 주소 (loopback address) 이며, localhost 라고도 합니다. 자신의 머신을 나타냅니다.

이제 Xfce 터미널을 열고 ~/project 디렉토리에 있는지 확인합니다.

cd ~/project

다음 명령을 실행하여 localhost 의 포트 443 을 스캔합니다.

sudo nmap --script ssl-cert -p 443 127.0.0.1

127.0.0.1은 자신의 머신을 나타내므로, 이 명령은 LabEx VM 에서 포트 443 에서 실행되는 모든 서비스에서 SSL 인증서를 검색하려고 시도합니다. 포트 443 에서 수신 대기하는 서비스가 없으면 Nmap 은 해당 포트가 닫혀 있다고 보고합니다.

LabEx VM 에서 HTTPS 를 사용하도록 구성된 웹 서버 또는 다른 서비스가 있는 경우, 다음과 유사한 출력을 볼 수 있습니다 (실제 출력은 인증서 및 서버 구성에 따라 다릅니다).

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).

PORT    STATE SERVICE
443/tcp closed https

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

이 예제에서 출력은 포트 443 이 닫혀 있음을 보여줍니다. 이는 localhost 에서 해당 포트에서 수신 대기하는 서비스가 없음을 의미합니다. 서비스가 실행 중이었다면, 이전 단계와 유사하게 SSL 인증서 세부 정보가 포함되었을 것입니다.

포트 443 에서 HTTPS 가 활성화된 서버에 대해 이 명령을 테스트하려면, 127.0.0.1을 해당 서버의 IP 주소 또는 도메인 이름으로 바꿀 수 있습니다. 예를 들어:

sudo nmap --script ssl-cert -p 443 scanme.nmap.org

이렇게 하면 scanme.nmap.org의 포트 443 을 스캔하고 SSL 인증서 정보를 검색합니다.

nmap -v --script ssl-cert 192.168.1.1 로 상세 정보 추가

이 단계에서는 Nmap 명령에 상세 정보 (verbosity) 를 추가합니다. Nmap 에서 상세 정보는 스캔 중에 표시되는 정보의 양을 늘리는 것을 의미합니다. 이는 Nmap 이 무엇을 하고 있는지 이해하고 문제를 해결하는 데 도움이 될 수 있습니다. -v 옵션은 상세 정보 수준을 높입니다. -v를 여러 번 사용하면 (예: -vv 또는 -vvv) 상세 정보가 더욱 증가합니다.

사용할 명령은 다음과 같습니다.

nmap -v --script ssl-cert 192.168.1.1

이 명령을 자세히 살펴보겠습니다.

  • nmap: Nmap 명령줄 스캐너입니다.
  • -v: 이 옵션은 상세 정보 수준을 높여 더 자세한 출력을 제공합니다.
  • --script ssl-cert: SSL 인증서 정보를 검색하기 위해 ssl-cert 스크립트를 사용하도록 지정합니다.
  • 192.168.1.1: 이는 대상 IP 주소입니다.

이제 Xfce 터미널을 열고 ~/project 디렉토리에 있는지 확인합니다.

cd ~/project

상세 정보와 함께 SSL 인증서 스캔을 실행하려면 다음 명령을 실행합니다.

sudo nmap -v --script ssl-cert 192.168.1.1

앞서 언급했듯이, 192.168.1.1은 개인 IP 주소이며 접근할 수 없을 수 있습니다. 해당 주소에 서버가 없는 경우, 스캔 결과가 반환되지 않거나 시간 초과될 수 있습니다. 테스트 목적으로, scanme.nmap.org와 같이 SSL 인증서가 있는 것으로 알려진 공용 IP 주소를 사용할 수 있습니다.

상세 정보와 함께 scanme.nmap.org를 스캔해 보겠습니다.

sudo nmap -v --script ssl-cert scanme.nmap.org

이제 출력에는 Nmap 이 거치는 다양한 단계, 프로빙하는 포트, 발생하는 오류 또는 경고와 같은 스캔 프로세스에 대한 더 많은 정보가 포함됩니다.

예시 출력 (실제 출력은 다를 수 있습니다):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
NSE: Loaded 1 script for scanning.
Initiating Ping Scan at 10:00
Scanning scanme.nmap.org (45.33.32.156) [2 ports]
Completed Ping Scan at 10:00, 0.03s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:00
Completed Parallel DNS resolution of 1 host. at 10:00, 0.01s elapsed
Initiating Connect Scan at 10:00
Scanning scanme.nmap.org (45.33.32.156) [1000 ports]
Discovered open port 22/tcp on 45.33.32.156
Completed Connect Scan at 10:00, 2.15s elapsed (1000 total ports)
NSE: Script scanning scanme.nmap.org (45.33.32.156)
NSE: Starting runlevel 1 (of 1) scan.
Initiating NSE at 10:00
Completed NSE at 10:00, 0.02s elapsed
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.031s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

NSE: Script Post-scanning.
Initiating NSE at 10:00
Completed NSE at 10:00, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 2.34 seconds

"Initiating Ping Scan", "Completed Connect Scan", "NSE: Script scanning"과 같은 스캔 프로세스에 대한 추가 정보를 확인하십시오. 이 추가 정보는 Nmap 의 작동 방식을 이해하고 문제를 진단하는 데 유용할 수 있습니다.

nmap --script ssl-cert -oN ssl.txt 127.0.0.1 로 SSL 결과 저장

이 단계에서는 Nmap 스캔 결과를 파일에 저장하는 방법을 배웁니다. 이는 나중에 분석하거나 다른 사람과 결과를 공유하는 데 유용합니다. Nmap 은 다양한 형식으로 출력을 저장하기 위한 여러 옵션을 제공합니다. -oN 옵션은 출력을 "일반 (normal)" 사람이 읽을 수 있는 형식으로 저장합니다.

사용할 명령은 다음과 같습니다.

nmap --script ssl-cert -oN ssl.txt 127.0.0.1

이 명령을 자세히 살펴보겠습니다.

  • nmap: Nmap 명령줄 스캐너입니다.
  • --script ssl-cert: SSL 인증서 정보를 검색하기 위해 ssl-cert 스크립트를 사용하도록 지정합니다.
  • -oN ssl.txt: 이 옵션은 Nmap 에게 출력을 일반 형식으로 ssl.txt라는 파일에 저장하도록 지시합니다.
  • 127.0.0.1: 이는 대상 IP 주소 (localhost) 입니다.

이제 Xfce 터미널을 열고 ~/project 디렉토리에 있는지 확인합니다.

cd ~/project

SSL 인증서 스캔을 실행하고 결과를 ssl.txt에 저장하려면 다음 명령을 실행합니다.

sudo nmap --script ssl-cert -oN ssl.txt 127.0.0.1

스캔이 완료되면 ~/project 디렉토리에 ssl.txt라는 파일이 생성됩니다. 이 파일에는 대상에 대한 SSL 인증서 정보 (있는 경우) 를 포함하여 Nmap 스캔의 출력이 포함되어 있습니다.

파일이 생성되었고 스캔 결과를 포함하는지 확인하려면 cat 명령을 사용하여 파일의 내용을 표시할 수 있습니다.

cat ssl.txt

127.0.0.1에서 SSL 인증서가 있는 서비스가 실행 중인 경우, 출력에서 인증서 세부 정보를 볼 수 있습니다. 서비스가 실행 중이지 않으면 파일에는 스캔에 대한 정보가 포함되지만 인증서 세부 정보는 포함되지 않습니다.

예를 들어, 포트 443 이 닫혀 있는 경우, ssl.txt 파일에는 다음과 같은 내용이 포함될 수 있습니다.

## Nmap 7.80 scan initiated Tue Oct 27 10:00:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).
PORT    STATE SERVICE
443/tcp closed https
## Nmap done at Tue Oct 27 10:00:00 2023 -- 1 IP address (1 host up) scanned in 0.07 seconds

다른 대상을 스캔하고 결과를 저장하려면, 127.0.0.1을 원하는 IP 주소 또는 도메인 이름으로 바꾸기만 하면 됩니다. 예를 들어:

sudo nmap --script ssl-cert -oN ssl.txt scanme.nmap.org

이렇게 하면 scanme.nmap.org를 스캔하고 결과를 ssl.txt에 저장합니다. 스캔 결과를 확인하려면 cat ssl.txt를 사용하여 ssl.txt의 내용을 확인하는 것을 잊지 마십시오.

Xfce 터미널에서 인증서 세부 정보 검토

이 단계에서는 이전 단계에서 ssl.txt 파일에 저장한 SSL 인증서 세부 정보를 검토합니다. cat 명령을 사용하여 Xfce 터미널에서 파일의 내용을 표시한 다음 인증서 정보를 검사합니다.

먼저, ~/project 디렉토리에 있는지 확인합니다.

cd ~/project

이제 cat 명령을 사용하여 ssl.txt 파일의 내용을 표시합니다.

cat ssl.txt

출력에는 대상에서 SSL 인증서가 있는 서비스가 발견된 경우 SSL 인증서 세부 정보를 포함한 Nmap 스캔 결과가 표시됩니다.

출력을 분석해 보겠습니다. SSL 인증서 정보의 중요한 부분은 일반적으로 다음과 같습니다.

  • Subject (주체): 이 필드에는 인증서가 발급된 도메인 이름 또는 엔터티가 포함되어 있습니다. Subject 필드 내에서 commonName (CN) 속성을 찾습니다.
  • Issuer (발급자): 이 필드는 인증서를 발급한 인증 기관 (CA, Certificate Authority) 을 식별합니다. 다시, commonName (CN) 속성을 찾습니다.
  • Public Key type (공개 키 유형): 사용된 공개 키 알고리즘의 유형을 나타냅니다 (예: RSA, DSA, ECDSA).
  • Public Key bits (공개 키 비트): 키 크기를 비트 단위로 지정합니다 (예: 2048, 4096). 일반적으로 키 크기가 클수록 보안이 강화됩니다.
  • Signature Algorithm (서명 알고리즘): 인증서 서명에 사용된 알고리즘을 나타냅니다 (예: sha256WithRSAEncryption).
  • Not valid before (유효 시작일): 인증서가 유효해지는 날짜와 시간입니다.
  • Not valid after (유효 종료일): 인증서가 만료되는 날짜와 시간입니다. 인증서가 만료되지 않았는지 확인하는 것이 중요합니다.
  • MD5/SHA1: 이는 인증서의 해시 값입니다. MD5 는 취약한 것으로 간주되며, SHA1 도 단계적으로 폐지되고 있습니다. SHA256 이상을 사용하는 것이 좋습니다.
  • -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----: 이는 PEM 형식으로 인코딩된 실제 인증서 데이터입니다.

예를 들어, scanme.nmap.org를 스캔하고 출력을 ssl.txt에 저장한 경우, 출력의 관련 부분은 다음과 같습니다.

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

이 예에서, 인증서는 scanme.nmap.org용이며, Let's Encrypt Authority X3에서 발급되었고, 2048 비트의 RSA 키를 사용하며, SHA256 으로 서명되었음을 알 수 있습니다.

이러한 세부 정보를 검토하여 대상 서비스에서 사용되는 SSL 인증서의 보안 및 유효성에 대한 통찰력을 얻을 수 있습니다.

127.0.0.1을 스캔했고 SSL 서비스가 실행되지 않은 경우, ssl.txt 파일에는 자세한 인증서 정보가 포함되지 않습니다. 이 경우, 테스트를 위해 SSL 이 활성화된 간단한 웹 서버를 설치하는 것이 좋습니다 (이 랩의 범위를 벗어남).

Xfce 터미널에서 서비스 탐지와 비교

이 단계에서는 Nmap 의 서비스 탐지 기능과 함께 얻은 SSL 인증서 정보를 비교합니다. 이를 통해 탐지된 서비스가 인증서 세부 정보와 일치하는지 확인하고 잠재적인 불일치를 식별할 수 있습니다.

먼저, 대상에 대한 표준 Nmap 서비스 탐지 스캔을 실행해 보겠습니다. 이 예제에서는 127.0.0.1을 대상으로 사용합니다. ~/project 디렉토리에 있는지 확인합니다.

cd ~/project

다음 명령을 실행합니다.

sudo nmap -sV 127.0.0.1

-sV 옵션은 서비스 버전 탐지를 활성화합니다. Nmap 은 각 열린 포트에서 실행 중인 서비스를 확인하려고 시도합니다.

출력에는 열린 포트와 탐지된 서비스가 표시됩니다. 예를 들어:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:30 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000058s latency).
Not shown: 999 closed ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
443/tcp open  ssl/http  ## Example: If a web server with SSL is running

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

이제 서비스 탐지 결과를 이전 단계에서 검토한 SSL 인증서 세부 정보 (ssl.txt 파일에서) 와 비교합니다.

예를 들어, Nmap 의 서비스 탐지가 포트 443 에서 ssl/http를 실행 중인 것으로 식별하고 SSL 인증서의 Subject commonName이 웹 서버와 관련된 도메인 이름과 일치하면 서비스 탐지와 인증서 세부 정보가 일치합니다.

그러나 불일치가 있는 경우 잠재적인 문제가 있음을 나타낼 수 있습니다.

  • Incorrect Service Identification (잘못된 서비스 식별): Nmap 이 포트에서 실행 중인 서비스를 잘못 식별할 수 있습니다.
  • Misconfigured Certificate (잘못 구성된 인증서): 인증서가 제공되는 도메인 이름과 다른 도메인 이름으로 발급되었을 수 있습니다.
  • Man-in-the-Middle Attack (중간자 공격): 공격자가 연결을 가로채 다른 인증서를 제시할 수 있습니다.

불일치를 더 자세히 조사하려면, 더 구체적인 Nmap 스크립트 또는 openssl과 같은 도구를 사용하여 인증서를 직접 검사할 수 있습니다.

예를 들어, 서비스 탐지가 포트 443 에서 http를 표시하지만 SSL 인증서가 다른 도메인에 대한 것이라면 이는 경고 신호입니다. 이는 잘못된 구성 또는 잠재적인 공격을 나타낼 수 있습니다.

요약하면, Nmap 의 서비스 탐지를 SSL 인증서 세부 정보와 비교하면 대상에서 실행 중인 서비스의 무결성과 보안을 확인할 수 있습니다.

요약

이 랩에서는 ssl-cert 스크립트를 사용하여 Nmap 으로 대상 서버에서 SSL/TLS 인증서 정보를 스캔하고 검색했습니다. 특정 IP 주소를 스캔하기 위해 기본 명령 nmap --script ssl-cert <target_ip>를 실행하는 방법을 배웠으며, 테스트를 위해 scanme.nmap.org와 같은 공용 주소를 사용하여 개인 IP 주소와 관련된 잠재적인 문제를 해결했습니다.

또한 sudo를 사용하여 스캔을 실행하는 연습을 했으며, 인증서의 주체 (subject), 발급자 (issuer), 유효 기간과 같은 세부 정보를 포함하는 출력을 관찰했습니다. 이는 SSL 인증서 분석에서 Nmap 의 기능을 더 탐구하기 위한 기반을 제공합니다.