네트워크 보안을 위한 Nmap SYN 스캔 수행

NmapBeginner
지금 연습하기

소개

이 랩에서는 은밀한 포트 정찰을 위한 네트워크 보안의 핵심 기술인 Nmap SYN 스캔에 대해 배우게 됩니다. SYN 스캔은 완전한 TCP 연결을 설정하지 않고 대상 시스템의 열린 포트를 효율적으로 식별하므로 기존 방식보다 탐지하기 어렵습니다. 이는 보안 전문가가 네트워크 취약점을 평가하고 방어력을 강화하는 데 매우 중요합니다.

이 랩을 마치면 SYN 스캔을 수행하고, 결과를 해석하며, 네트워크 보안 평가에서 그 중요성을 인식하는 방법을 이해하게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 99%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

스캔을 위한 대상 서비스 생성

이 단계에서는 Nmap SYN 스캔을 연습할 수 있는 제어된 환경을 만들 것입니다. 어떤 네트워크나 시스템을 스캔하기 전에, 윤리적인 스캔에는 적절한 권한이 필요하다는 것을 이해하는 것이 중요합니다. 법적 문제를 피하기 위해 안전하게 스캔할 수 있는 자체 서비스를 설정할 것입니다.

  1. 먼저, 터미널을 열어야 합니다. 터미널은 명령을 입력하여 컴퓨터의 운영 체제와 상호 작용할 수 있는 텍스트 기반 인터페이스입니다. 터미널을 연 후에는 프로젝트 디렉토리로 이동합니다. 프로젝트 디렉토리는 이 실험과 관련된 모든 파일이 저장될 위치입니다. 다음 명령을 사용하여 현재 디렉토리를 프로젝트 디렉토리로 변경합니다.

    cd /home/labex/project
  2. 이제 널리 사용되는 프로그래밍 언어인 Python 을 사용하여 간단한 HTTP 서버를 만들 것입니다. HTTP 서버는 웹 브라우저와 같은 클라이언트에 웹 페이지를 제공할 수 있는 소프트웨어입니다. Python 에는 이러한 서버를 쉽게 설정할 수 있는 내장 기능이 있습니다. 이 서버를 Nmap SYN 스캔의 대상으로 사용할 것입니다. 터미널에서 다음 명령을 실행합니다.

    python -m http.server --bind localhost 8080 &

    이 명령은 포트 8080 에서 간단한 웹 서버를 시작합니다. 포트는 컴퓨터 네트워크의 통신 엔드포인트입니다. 서로 다른 서비스는 서로 다른 포트를 사용하여 통신합니다. 명령 끝에 있는 &는 서버를 백그라운드에서 실행합니다. 즉, 서버가 계속 실행되며 동일한 터미널 창을 사용하여 다른 명령을 실행할 수 있습니다.

  3. 서버를 시작한 후에는 실제로 실행 중인지 확인해야 합니다. 시스템에서 열린 네트워크 연결을 확인하여 이를 수행할 수 있습니다. ss 명령은 열린 네트워크 연결에 대한 정보를 포함하여 소켓 통계를 표시할 수 있는 도구입니다. 이를 사용하여 서버가 포트 8080 에서 수신 대기 중인지 확인합니다. 다음 명령을 실행합니다.

    ss -tulwn | grep 8080

    |ss 명령의 출력을 가져와 grep 명령의 입력으로 사용하는 파이프 연산자입니다. grep 명령은 ss 명령의 출력에서 문자열 8080을 검색합니다. 서버가 실행 중이면 다음과 유사한 출력이 표시됩니다.

    tcp   LISTEN 0      1            0.0.0.0:8080       0.0.0.0:*

    이 출력은 서버가 포트 8080 에서 수신 대기 중임을 나타내며, 이는 서버가 성공적으로 실행 중이며 스캔할 준비가 되었음을 의미합니다.

Nmap SYN 스캔 이해 및 수행

이제 대상 서비스가 실행 중이므로 SYN 스캔에 대해 자세히 알아보겠습니다. SYN 스캔은 네트워크 보안 테스트의 중요한 부분으로, 대상 시스템에서 열린 포트를 발견할 수 있게 해줍니다. 이 섹션에서는 SYN 스캔이 어떻게 작동하는지 배우고, 강력한 네트워크 스캔 도구인 Nmap 을 사용하여 HTTP 서버에 대해 SYN 스캔을 수행하는 방법을 배우겠습니다.

SYN 스캔이란?

실제 스캔을 시작하기 전에 SYN 스캔의 기본 메커니즘을 이해하는 것이 중요합니다. 이를 위해 먼저 일반적인 TCP 연결이 어떻게 설정되는지 살펴보겠습니다.

일반적인 TCP 연결

일반적인 TCP 연결에서는 3-way 핸드셰이크가 발생합니다. 이는 클라이언트와 서버 간의 안정적인 연결을 설정하기 위한 기본적인 프로세스입니다.

  • 1 단계: 클라이언트에서 SYN 패킷 전송
    클라이언트는 SYN (synchronize) 패킷을 서버로 전송하여 연결을 시작합니다. 이 패킷은 대화를 시작하라는 요청과 같으며, 서버가 통신할 준비가 되었는지 묻습니다.
  • 2 단계: 서버에서 SYN-ACK 패킷 전송
    SYN 패킷을 수신하면 서버가 사용 가능하고 통신할 의사가 있는 경우 SYN-ACK (synchronize-acknowledge) 패킷으로 응답합니다. 이 패킷은 클라이언트의 요청을 확인하고 서버가 연결을 시작할 준비가 되었음을 나타냅니다.
  • 3 단계: 클라이언트에서 ACK 패킷 전송
    마지막으로, 클라이언트는 ACK (acknowledge) 패킷을 전송하여 3-way 핸드셰이크를 완료합니다. 이 단계 이후 TCP 연결이 완전히 설정되고 클라이언트와 서버 간에 데이터를 교환할 수 있습니다.

SYN 스캔 프로세스

반면에 SYN 스캔은 다른 접근 방식을 사용합니다.

  • 1 단계: Nmap 에서 SYN 패킷 전송
    스캔 도구인 Nmap 은 초기 SYN 패킷을 대상 포트로 전송합니다. 이는 일반적인 TCP 연결의 첫 번째 단계와 유사합니다.
  • 2 단계: 대상에서 SYN-ACK 응답
    대상 포트가 열려 있으면 일반적인 TCP 연결과 마찬가지로 SYN-ACK 패킷으로 응답합니다.
  • 3 단계: Nmap 에 의한 연결 종료
    핸드셰이크를 완료하기 위해 최종 ACK 패킷을 전송하는 대신 Nmap 은 연결을 종료합니다. 이렇게 하면 전체 연결이 설정되지 않으므로 스캔을 탐지하기가 더 어렵습니다. 또한, 스캔되는 각 포트에 대해 전체 3-way 핸드셰이크를 완료하는 전체 연결 스캔보다 빠릅니다.

SYN 스캔 수행

1 단계: 프로젝트 디렉토리로 이동

먼저, 올바른 프로젝트 디렉토리에 있는지 확인해야 합니다. 스캔 결과를 이 디렉토리 내의 파일에 저장할 것이므로 중요합니다. 프로젝트 디렉토리로 이동하려면 터미널에서 다음 명령을 실행합니다.

cd /home/labex/project

2 단계: SYN 스캔 실행

이제 Nmap 을 사용하여 SYN 스캔을 수행할 준비가 되었습니다. 터미널에서 다음 명령을 실행합니다.

sudo nmap -sS localhost -p 8080 > /home/labex/project/nmap-syn-scan-results.txt

이 명령을 분석하여 각 부분이 무엇을 하는지 이해해 보겠습니다.

  • sudo: 이 명령은 권한을 높여 후속 명령을 실행하는 데 사용됩니다. SYN 스캔은 원시 네트워크 패킷을 전송하는 것과 관련되므로 루트 권한이 필요하므로 nmap 명령을 실행하려면 sudo를 사용해야 합니다.
  • nmap: 이것은 우리가 사용하고 있는 네트워크 스캔 도구입니다. Nmap 은 네트워크 탐색 및 보안 감사에 널리 사용됩니다.
  • -sS: 이 옵션은 SYN 스캔을 수행하려는 것을 지정합니다.
  • localhost: 이것은 스캔 대상입니다. 이 경우 자체 머신을 스캔하고 있습니다.
  • -p 8080: 이 옵션은 Nmap 에 포트 8080 만 스캔하도록 지시합니다. 로컬 머신에서 이 특정 포트가 열려 있는지 확인하는 데 관심이 있습니다.
  • > /home/labex/project/nmap-syn-scan-results.txt: 이 명령 부분은 nmap-syn-scan-results.txt라는 파일로 nmap 스캔의 출력을 프로젝트 디렉토리로 리디렉션합니다. 이렇게 하면 나중에 결과를 검토할 수 있습니다.

3 단계: 스캔 결과 보기

스캔이 완료되면 결과를 볼 수 있습니다. 터미널에서 다음 명령을 실행합니다.

cat /home/labex/project/nmap-syn-scan-results.txt

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

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

PORT     STATE SERVICE
8080/tcp open  http-proxy

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

이 출력은 귀중한 정보를 제공합니다. 포트 8080 이 로컬 머신에서 열려 있고 HTTP 서비스를 실행하고 있음을 확인합니다. 이 정보는 추가 보안 분석 또는 네트워크 문제 해결에 사용할 수 있습니다.

스캔 결과 분석 및 보안 영향

SYN 스캔을 수행한 후에는 결과를 해석하고 보안 영향을 이해하는 것이 중요합니다. 이 단계는 네트워크의 잠재적 위험을 식별하는 데 도움이 되므로 필수적입니다. 자세한 내용을 살펴보겠습니다.

스캔 결과 해석

  1. 먼저, 스캔 결과를 자세히 살펴보겠습니다. cat 명령을 사용하여 Nmap SYN 스캔 결과를 저장하는 파일의 내용을 볼 것입니다. cat 명령은 터미널에서 파일의 내용을 표시하는 간단한 방법입니다.

    cat /home/labex/project/nmap-syn-scan-results.txt

    이 명령을 실행하면 출력이 표시됩니다. 출력의 각 부분이 의미하는 바는 다음과 같습니다.

    • Host is up: 이 메시지는 대상 호스트가 네트워크를 통해 연결할 수 있음을 나타냅니다. 호스트가 작동 중이면 스캔이 대상과 통신할 수 있었음을 의미합니다.
    • 지연 시간 값: 이는 대상이 스캔에 얼마나 빨리 응답했는지 보여줍니다. 지연 시간이 짧을수록 대상이 더 빨리 응답했음을 의미합니다.
    • 8080/tcp open: 이는 대상 호스트의 포트 8080 이 열려 있고 들어오는 연결을 수락할 준비가 되었음을 나타냅니다. 열린 포트는 공격자에게 잠재적인 진입점이 될 수 있습니다.
    • http-proxy: 이것은 포트 8080 에서 어떤 서비스가 실행되고 있는지에 대한 Nmap 의 추측입니다. Nmap 은 스캔 중에 수신하는 응답을 기반으로 서비스를 식별하려고 시도합니다.
  2. 실제 보안 평가에서 대상 호스트의 각 열린 포트는 여러 가지를 나타냅니다.

    • 공격자의 잠재적 진입점: 공격자는 열린 포트를 사용하여 대상 시스템에 액세스할 수 있습니다. 예를 들어, 웹 서버가 열린 포트에서 실행 중인 경우 공격자는 웹 애플리케이션의 취약점을 악용하려고 시도할 수 있습니다.
    • 취약점이 있을 수 있는 서비스: 열린 포트에서 실행되는 모든 서비스는 보안 결함이 있을 가능성이 있습니다. 이러한 취약점은 공격자가 시스템을 손상시키는 데 악용될 수 있습니다.
    • 보안이 필요한 공격 표면의 일부: 공격 표면은 공격자가 시스템에 진입하려고 시도할 수 있는 모든 지점의 합계입니다. 열린 포트는 이 공격 표면의 일부이며 적절하게 보호해야 합니다.

보안 모범 사례

네트워크를 보호할 때는 다음과 같은 모범 사례를 따라야 합니다.

  1. 필요한 포트만 열어야 합니다: 불필요한 포트를 열면 네트워크의 공격 표면이 증가합니다. 사용하지 않는 포트를 닫으면 공격자의 잠재적 진입점 수를 줄일 수 있습니다.
  2. 각 열린 포트는 합법적인 비즈니스 목적을 수행해야 합니다: 포트가 열려 있는 경우 웹 서버 또는 데이터베이스 서비스 실행과 같은 유효한 이유가 있어야 합니다. 이렇게 하면 네트워크가 효율적이고 안전하게 사용되도록 하는 데 도움이 됩니다.
  3. 악용을 방지하기 위해 모든 서비스를 최신 상태로 유지해야 합니다: 소프트웨어 공급업체는 보안 취약점을 수정하기 위해 정기적으로 업데이트를 릴리스합니다. 서비스를 최신 상태로 유지하면 알려진 위협으로부터 네트워크를 보호할 수 있습니다.
  4. 방화벽 규칙은 민감한 포트에 대한 액세스를 제한해야 합니다: 방화벽을 사용하여 네트워크의 특정 포트에 액세스할 수 있는 사용자를 제어할 수 있습니다. 적절한 방화벽 규칙을 설정하면 권한이 있는 사용자 또는 시스템에만 민감한 포트에 대한 액세스를 제한할 수 있습니다.

환경 정리

  1. 이제 이전에 시작한 HTTP 서버를 중지하여 환경을 정리해야 합니다. 먼저, HTTP 서버의 프로세스 ID (PID) 를 식별해야 합니다. PID 는 시스템에서 실행 중인 각 프로세스에 할당된 고유한 번호입니다. ps aux 명령을 사용하여 실행 중인 모든 프로세스를 나열한 다음 결과를 필터링하여 HTTP 서버 프로세스를 찾습니다.

    ps aux | grep "http.server" | grep -v grep

    이 명령을 실행하면 다음과 유사한 출력이 표시됩니다.

    labex      1234  0.0  0.1  31116  3164 pts/0    S    12:00   0:00 python -m http.server 8080

    출력의 두 번째 열은 HTTP 서버 프로세스의 PID 를 보여줍니다.

  2. 다음으로, PID 를 사용하여 서버를 중지합니다. 프로세스에 종료 신호를 보내는 kill 명령을 사용합니다. 다음 명령은 HTTP 서버 프로세스를 자동으로 찾아 종료합니다.

    kill $(ps aux | grep "http.server" | grep -v grep | awk '{print $2}')

    이 명령은 먼저 이전과 동일한 필터링 방법을 사용하여 HTTP 서버 프로세스의 PID 를 찾은 다음 PID 를 kill 명령에 전달합니다.

  3. 마지막으로, 서버가 중지되었는지 확인해야 합니다. 소켓 통계를 표시하는 데 사용되는 ss 명령을 사용합니다. 출력을 필터링하여 포트 8080 에 대한 정보만 표시하면 서버가 계속 실행 중인지 확인할 수 있습니다.

    ss -tulwn | grep 8080

    서버가 성공적으로 중지된 경우 이 명령의 출력이 없어야 하며, 이는 서버가 더 이상 포트 8080 에서 수신 대기하지 않음을 나타냅니다.

요약

이 Lab 에서는 네트워크 보안 정찰의 핵심 기술인 Nmap SYN 스캔을 수행하고 이해하는 방법을 배웠습니다. Python HTTP 서버를 사용하여 제어된 환경을 설정하고, SYN 스캔을 수행하여 열린 포트를 찾고, 결과를 분석하고, 테스트 환경을 정리했습니다. 이러한 기술은 윤리적인 네트워크 스캔 및 취약성 평가에 필수적입니다.

SYN 스캔을 이해하면 보안 전문가가 탐지 위험을 줄이면서 잠재적인 네트워크 취약성을 효율적으로 감지할 수 있습니다. 사이버 보안 여정을 진행하면서 이러한 기술을 적용하기 전에 항상 네트워크를 스캔할 권한이 있는지 확인하십시오.