웹사이트 검색

Nmap을 사용하여 열린 포트를 스캔하는 방법


소개

네트워킹은 많은 신진 시스템 관리자에게 광범위하고 압도적인 주제입니다. 다양한 계층, 프로토콜, 인터페이스, 그리고 이를 이해하기 위해 마스터해야 하는 많은 도구와 유틸리티가 있습니다.

TCP/IP 및 UDP 네트워킹에서 포트는 논리적 통신을 위한 끝점입니다. 단일 IP 주소에는 웹 서버, 애플리케이션 서버 및 파일 서버와 같은 많은 서비스가 실행될 수 있습니다. 이러한 각 서비스가 통신하려면 각각 특정 포트에서 수신 대기하고 통신합니다. 서버에 연결할 때 IP 주소와 포트에 연결합니다.

대부분의 경우 사용하는 소프트웨어가 포트를 지정합니다. 예를 들어 https://linux-console.net에 연결할 때 포트 443에서 linux-console.net 서버에 연결하는 것입니다. 보안 웹 트래픽을 위한 기본 포트. 기본값이므로 브라우저에서 포트를 추가합니다.

이 자습서에서는 포트를 더 자세히 살펴봅니다. netstat 프로그램을 사용하여 열린 포트를 식별한 다음 nmap 프로그램을 사용하여 네트워크에 있는 시스템 포트의 상태에 대한 정보를 얻습니다. 완료되면 일반 포트를 식별하고 시스템에서 열린 포트를 검색할 수 있습니다.

참고: 이 자습서에서는 IPv4 보안을 다룹니다. Linux에서 IPv6 보안은 IPv4와 별도로 유지됩니다. 예를 들어 "nmap\은 기본적으로 IPv4 주소를 스캔하지만 적절한 옵션이 지정된 경우(nmap -6) IPv6 주소도 스캔할 수 있습니다.

VPS가 IPv6용으로 구성된 경우 적절한 도구를 사용하여 IPv4 및 IPv6 네트워크 인터페이스를 모두 보호해야 합니다. IPv6 도구에 대한 자세한 내용은 이 가이드를 참조하십시오. Linux VPS에서 IPv6을 사용하도록 도구를 구성하는 방법

포트 이해

OSI 네트워킹 모델에는 많은 계층이 있습니다. 전송 계층은 주로 서로 다른 서비스와 응용 프로그램 간의 통신과 관련된 계층입니다.

이 계층은 포트가 연결된 기본 계층입니다.

포트 구성을 이해하려면 용어에 대한 약간의 지식이 필요합니다. 다음은 이어지는 토론을 이해하는 데 도움이 되는 몇 가지 용어입니다.

  • 포트: 다른 애플리케이션이나 서비스로 향하는 트래픽을 구별하는 데 도움이 되는 운영 체제 내부에 구현된 주소 지정 가능한 네트워크 위치입니다.\n
  • 인터넷 소켓: IP 주소 및 관련 포트 번호와 데이터를 처리하는 데 사용되는 전송 프로토콜을 지정하는 파일 설명자입니다.\n
  • 바인딩: 응용 프로그램이나 서비스가 인터넷 소켓을 사용하여 입력 및 출력 중인 데이터를 처리할 때 발생하는 프로세스입니다.\n
  • 듣기: 서비스 클라이언트의 요청을 기다리기 위해 포트/프로토콜/IP 주소 조합에 바인딩할 때 서비스가 포트에서 "수신 중\이라고 합니다.\n

요청을 수신하면 수신 대기 중인 동일한 포트를 사용하여 클라이언트와 연결을 설정합니다(적절한 경우). 사용된 인터넷 소켓은 특정 클라이언트 IP 주소와 연결되어 있기 때문에 서버가 동시에 다른 클라이언트에 요청을 수신하고 제공하는 것을 막지는 않습니다.

  • 포트 스캐닝: 포트 스캐닝은 열려 있는 포트와 포트 뒤에 있는 서비스 및 운영 체제에 대한 정보를 얻기 위해 여러 순차 포트에 연결을 시도하는 프로세스입니다.

공통 포트 식별

포트는 1에서 65535 사이의 숫자로 지정됩니다.

  • 1024 아래의 많은 포트는 Linux 및 Unix와 같은 운영 체제가 필수 네트워크 기능에 중요하다고 생각하는 서비스와 연결되어 있으므로 여기에 서비스를 할당하려면 루트 권한이 있어야 합니다.\n
  • 102449151 사이의 포트는 "등록된\ 것으로 간주됩니다. 즉, 다음을 통해 특정 서비스에 대해 "예약\(매우 느슨한 의미에서)이 가능함을 의미합니다. IANA(Internet Assigned Numbers Authority)에 요청을 발행합니다. 엄격하게 적용되지는 않지만 특정 포트에서 실행되는 가능한 서비스에 대한 단서를 제공할 수 있습니다.\n
  • 4915265535 사이의 포트는 등록할 수 없으며 개인용으로 권장됩니다.\n

사용 가능한 포트 수가 방대하기 때문에 특정 포트에 바인딩되는 경향이 있는 대부분의 서비스에 대해 걱정할 필요가 없습니다.

그러나 편재성으로 인해 알아야 할 가치가 있는 포트가 있습니다. 다음은 매우 불완전한 목록입니다.

  • 20: FTP 데이터
  • 21: FTP 제어 포트
  • 22: SSH
  • 23: 텔넷(안전하지 않음, 대부분의 용도에 권장되지 않음)
  • 25: SMTP
  • 43: WHOIS 프로토콜
  • 53: DNS 서비스
  • 67: DHCP 서버 포트
  • 68: DHCP 클라이언트 포트
  • 80: HTTP - 암호화되지 않은 웹 트래픽
  • 110: POP3 메일 포트
  • 113: IRC 네트워크의 식별 인증 서비스
  • 143: IMAP 메일 포트
  • 161: SNMP
  • 194: IRC
  • 389: LDAP 포트
  • 443: HTTPS - 보안 웹 트래픽
  • 587: SMTP - 메시지 전송 포트
  • 631: CUPS 인쇄 데몬 포트
  • 666: DOOM - 이 레거시 게임에는 실제로 자체 특수 포트가 있습니다.

이들은 일반적으로 포트와 관련된 몇 가지 서비스에 불과합니다. 각 문서 내에서 구성하려는 응용 프로그램에 대한 적절한 포트를 찾을 수 있어야 합니다.

대부분의 서비스는 기본 이외의 포트를 사용하도록 구성할 수 있지만 클라이언트와 서버가 모두 비표준 포트를 사용하도록 구성되어 있는지 확인해야 합니다.

/etc/services 파일을 보면 몇 가지 일반적인 포트 목록을 얻을 수 있습니다.

  1. less /etc/services

공통 포트 및 관련 서비스 목록을 제공합니다.

Output
. . . tcpmux 1/tcp # TCP port service multiplexer echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote msp 18/tcp # message send protocol . . .

시스템에 따라 여러 페이지가 표시됩니다. 항목의 다음 페이지를 보려면 SPACE 키를 누르고 프롬프트로 돌아가려면 Q를 누르십시오.

이것은 완전한 목록이 아닙니다. 곧 볼 수 있습니다.

열린 포트 확인

열려 있는 포트를 검색하는 데 사용할 수 있는 여러 가지 도구가 있습니다. 대부분의 Linux 배포판에 기본적으로 설치되는 것은 netstat입니다.

다음 매개 변수와 함께 명령을 실행하여 실행 중인 서비스를 빠르게 검색할 수 있습니다.

  1. sudo netstat -plunt

다음과 같은 결과가 표시됩니다.

Output
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 785/sshd tcp6 0 0 :::22 :::* LISTEN 785/sshd

이것은 서비스와 관련된 포트 및 청취 소켓을 표시하고 UDP 및 TCP 프로토콜을 모두 나열합니다.

nmap 도구는 포트를 식별하는 데 사용할 수 있는 또 다른 방법입니다.

Nmap 사용

네트워크 보안의 일부에는 취약성 테스트 수행이 포함됩니다. 이것은 공격자가 할 수 있는 것과 같은 방식으로 네트워크에 침투하여 약점을 발견하려고 시도하는 것을 의미합니다.

이를 위해 사용 가능한 모든 도구 중에서 nmap이 아마도 가장 일반적이고 강력한 도구일 것입니다.

다음을 입력하여 Ubuntu 또는 Debian 시스템에 nmap을 설치할 수 있습니다.

  1. sudo apt-get update
  2. sudo apt-get install nmap

이 소프트웨어를 설치하면 얻을 수 있는 이점 중 하나는 향상된 포트 매핑 파일입니다. 이 파일을 보면 포트와 서비스 간의 훨씬 더 광범위한 연결을 볼 수 있습니다.

  1. less /usr/share/nmap/nmap-services

다음과 같은 출력이 표시됩니다.

Output
. . . tcpmux 1/tcp 0.001995 # TCP Port Service Multiplexer [rfc-1078] tcpmux 1/udp 0.001236 # TCP Port Service Multiplexer compressnet 2/tcp 0.000013 # Management Utility compressnet 2/udp 0.001845 # Management Utility compressnet 3/tcp 0.001242 # Compression Process compressnet 3/udp 0.001532 # Compression Process unknown 4/tcp 0.000477 rje 5/udp 0.000593 # Remote Job Entry unknown 6/tcp 0.000502 echo 7/tcp 0.004855 echo 7/udp 0.024679 echo 7/sctp 0.000000 . . .

거의 20,000개의 라인이 있는 것 외에도 이 파일에는 인터넷에서 연구 스캔 중에 발견된 해당 포트의 개방 빈도를 나열하는 세 번째 열과 같은 추가 필드가 있습니다.

nmap으로 포트 스캔

Nmap은 호스트에 대한 많은 정보를 공개할 수 있습니다. 또한 대상 시스템의 시스템 관리자가 누군가 악의적인 의도를 가지고 있다고 생각하게 만들 수 있습니다. 따라서 소유한 서버나 소유자에게 알린 상황에서만 테스트하십시오.

nmap 작성자는 scanme.nmap.org에 있는 테스트 서버를 제공합니다.

이 서버 또는 자신의 서버는 nmap을 연습하기에 좋은 대상입니다.

다음은 nmap으로 수행할 수 있는 몇 가지 일반적인 작업입니다. 일부 쿼리에 대해 부분적인 결과가 반환되지 않도록 sudo 권한으로 모두 실행합니다. 일부 명령은 완료하는 데 시간이 오래 걸릴 수 있습니다.

호스트 운영 체제를 검색합니다.

  1. sudo nmap -O scanme.nmap.org

네트워크 검색 부분을 건너뛰고 호스트가 온라인 상태라고 가정합니다. 다른 테스트에서 "참고: 호스트가 다운된 것 같습니다.\라는 응답을 받은 경우에 유용합니다. 다른 옵션에 다음을 추가합니다.

  1. sudo nmap -PN scanme.nmap.org

지정된 IP 주소에서 DNS 역방향 조회를 수행하지 않고 스캔합니다. 이렇게 하면 대부분의 경우 결과 속도가 빨라집니다.

  1. sudo nmap -n scanme.nmap.org

모든 공통 포트 대신 특정 포트를 스캔합니다.

  1. sudo nmap -p 80 scanme.nmap.org

TCP 연결을 스캔하기 위해 nmap은 대상 포트로 3방향 핸드셰이크(아래 설명)를 수행할 수 있습니다. 다음과 같이 실행하십시오.

  1. sudo nmap -sT scanme.nmap.org

UDP 연결을 검색하려면 다음을 입력합니다.

  1. sudo nmap -sU scanme.nmap.org

모든 TCP 및 UDP 열린 포트를 스캔합니다.

  1. sudo nmap -n -PN -sT -sU -p- scanme.nmap.org

TCP "SYN\ 스캔은 TCP가 연결을 설정하는 방식을 이용합니다.

TCP 연결을 시작하기 위해 요청 측은 \동기화 요청\ 패킷을 서버로 보냅니다. 그런 다음 서버는 \동기화 승인\ 패킷을 다시 보냅니다. 그런 다음 원래 발신자는 \acknowledgement 패킷을 다시 서버로 보내고 연결이 설정됩니다.

그러나 "SYN\ 스캔은 서버에서 첫 번째 패킷이 반환될 때 연결을 끊습니다. 이를 "반개방\ 스캔이라고 하며 은밀하게 포트를 스캔하는 방법으로 홍보되었습니다. 연결이 완료되지 않기 때문에 해당 포트와 연결된 트래픽이 수신되지 않습니다.

고급 방화벽을 채택하고 많은 구성에서 불완전한 SYN 요청에 플래그를 지정하여 더 이상 은밀한 것으로 간주되지 않습니다.

SYN 스캔을 수행하려면 다음을 실행하십시오.

  1. sudo nmap -sS scanme.nmap.org

보다 은밀한 접근 방식은 호스트가 TCP 사양을 준수하는 경우 해당 포트가 닫히면 패킷을 다시 보내야 하는 잘못된 TCP 헤더를 보내는 것입니다. 이는 Windows 기반이 아닌 서버에서 작동합니다.

"-sF”, "-sX” 또는 "-sN” 플래그를 사용할 수 있습니다. 모두 우리가 찾고 있는 응답을 생성합니다.

  1. sudo nmap -PN -p 80 -sN scanme.nmap.org

호스트에서 실행 중인 서비스 버전을 확인하려면 이 명령을 시도할 수 있습니다. 서버에서 다른 응답을 테스트하여 서비스 및 버전을 확인하려고 시도합니다.

  1. sudo nmap -PN -p 80 -sV scanme.nmap.org

마지막으로 nmap을 사용하여 여러 시스템을 스캔할 수 있습니다.

한 번에 여러 호스트를 스캔하기 위해 "-” 또는 "/24”로 IP 주소 범위를 지정하려면 다음과 같은 명령을 사용하십시오.

  1. sudo nmap -PN xxx.xxx.xxx.xxx-yyy

또는 다음과 같은 명령을 사용하여 사용 가능한 서비스에 대한 네트워크 범위를 검색합니다.

  1. sudo nmap -sP xxx.xxx.xxx.xxx-yyy

사용할 수 있는 다른 많은 명령 조합이 있지만 이를 통해 네트워킹 취약성 탐색을 시작할 수 있습니다.

결론

포트 구성을 이해하고 서버에 있는 공격 벡터를 발견하는 방법은 정보와 VPS를 보호하는 한 단계에 불과합니다. 그러나 필수 기술입니다.

열려 있는 포트와 해당 포트에서 연결을 허용하는 서비스에서 얻을 수 있는 정보를 검색하면 서버를 잠그는 데 필요한 정보를 얻을 수 있습니다. 악의적인 사용자는 시스템 외부로 유출된 외부 정보를 사용하여 알려진 취약점을 악용하거나 새로운 취약점을 개발할 수 있습니다. 그들이 알아낼 수 있는 것이 적을수록 좋습니다.