보안되지 않은 네트워크는 권한이 없는 사용자에게 쉬운 액세스 포인트 역할을 하는 노출된 네트워크 포트가 존재하기 때문에 무결성과 기밀성에 상당한 위험을 초래할 수 있습니다. 공개적으로 액세스 가능한 포트에서 원치 않는 서비스가 작동하면 알려진 취약점을 통해 네트워크가 악용될 가능성이 높아져 사이버 공격이 발생할 가능성이 높아질 수 있습니다. 따라서 모든 네트워크 포트를 정기적으로 모니터링하고 보안을 유지하여 잠재적인 침해를 방지하는 것이 중요합니다.
잠재적 위험으로부터 네트워크를 강화하기 위해 Linux 시스템에서 열린 포트를 스캔하고 시각화하는 절차를 이해합니다.
네트워크 포트란 무엇인가요?
네트워크 포트는 시스템의 논리적 진입점 역할을 하며, 이를 통해 다양한 서비스를 호스팅할 수 있게 해줍니다. 각 포트는 16비트 정수를 사용하여 식별되므로 최대 65535개의 고유 포트가 존재할 수 있습니다.
포트는 집의 창문과 문에 비유할 수 있으며, 집과 컴퓨터 모두에 대한 다양한 액세스 포인트 역할을 합니다. 포트에는 시스템 포트(1~1023번), 등록 포트(1024~49151번), 임시 또는 동적 포트(49152~65535번으로 구성) 등 세 가지 주요 분류가 있습니다.
인터넷 연결이 필요한 애플리케이션이 시작되면 네트워크를 통해 데이터를 송수신하기 위해 동적 포트가 사용됩니다. 그럼에도 불구하고 웹 서버 또는 SSH 서버를 시작하는 동안 일반적으로 시스템 포트 또는 등록된 포트에 바인딩됩니다.
웹 서버를 제공하는 HTTP의 경우 기본 시스템 포트는 80이고 SSH의 경우 포트 범위와 같은 이러한 규정은 인터넷 할당 번호 기관(IANA)에서 개발했습니다. 포트에 관한 RFC를 통해 모든 포트와 그 기능에 대한 전체 목록을 확인할 수 있습니다.
잠재적인 보안 위험을 최소화하기 위해 널리 퍼져 있는 취약한 포트를 파악하는 것은 해당 포트를 적절히 폐쇄하거나 보호하는 데 매우 중요합니다.
netstat로 열린 포트 확인
Netstat는 Linux 시스템과 관련된 네트워크 통계를 검사할 수 있는 유명한 유틸리티입니다. 이 도구는 net-tools 제품군의 필수 구성 요소를 형성합니다.
명령을 찾을 수 없습니다”.
최신 운영 체제에서 netstat 명령의 기능을 활용하려면 먼저 net-tools 패키지를 설치해야 할 수 있습니다. 설치가 완료되면 netstat 명령을 실행하여 포트가 열려 있는지 확인할 수 있습니다.netstat를 사용하여 열린 포트를 확인하는 과정은 다음 단계를 포함합니다:
netstat -tuln
“어시스턴트” 명령은 사용자가 다양한 작업을 완료할 수 있도록 지원과 도움을 제공하기 위해 고안된 도구입니다. 질문에 대한 답변, 안내, 사용자 선호도와 필요에 따른 권장 사항 제공 등 다양한 용도로 사용할 수 있습니다. 이 명령의 목적은 사용자가
에 더 쉽게 액세스할 수 있도록 하는 것입니다. 기호 “⭐”-t는 TCP(전송 제어 프로토콜) 포트가 있음을 나타냅니다.
“-u” 기호는 네트워크 통신 세션 또는 구성 설정에 UDP(사용자 데이터그램 프로토콜) 포트가 있음을 나타내는 데 사용됩니다.
`netstat -l` 명령은 시스템에서 활성 수신 포트 목록을 표시합니다. 현재 상태에 관계없이 모든 포트를 보려면 대체 구문인 `netstat -a`를 사용할 수 있습니다.
특정 포트의 지정을 나타내기 위해 서비스 이름 확인 대신 숫자 표기를 사용하는 것은 “SSH”를 “포트 22″로 대체하는 것으로 설명됩니다. 이는 네트워크 통신이 식별 목적으로 지정된 이름에 의존하지 않고 해당 포트 번호에서 작동하는 특정 서비스로 향한다는 것을 의미합니다.
ss로 열린 포트 확인
netstat 유틸리티의 최신 버전은 “ss”라고 합니다. 이는 현재 모든 Linux 배포판에 포함된 표준 기능이며, 개방형 포트를 확인하는 구문은 netstat와 유사합니다.
명령줄 도구 “ss”를 사용하여 네트워크 포트의 가용성을 확인하는 방법은 다음과 같습니다:
ss -tuln
이 명령은 게임 내 개체에 대한 정보를 요청하는 명령으로, 특히 유휴 상태, 마우스 오른쪽 버튼 클릭, 특정 아이템 또는 동작 사용 등 다양한 방법으로 상호작용할 때 해당 개체가 어떤 역할을 하는지 묻습니다.
기호 “⭐”-t는 TCP(전송 제어 프로토콜) 포트가 있음을 나타냅니다.
약어 “-u”는 네트워크 통신 컨텍스트에서 UDP(사용자 데이터그램 프로토콜) 포트를 나타내는 데 사용됩니다.
`sudo lsof -i :
명령에 ‘-n’ 플래그를 사용하면 해당 서비스나 애플리케이션을 공개하는 대신 지정된 포트의 숫자 값을 표시합니다.예를 들어, ‘-n’ 플래그와 함께 ‘show port 21’ 명령을 사용하면 FTP(파일 전송 프로토콜) 서비스에서 사용 중인 포트는 표시하지 않고 포트 번호를 나타내는 정수만 표시합니다.
Nmap으로 열린 포트 확인
Nmap은 네트워크 보안 침투 테스트에 기여한 것으로 유명한 사이버 보안 및 네트워킹 분야에서 널리 인정받는 툴입니다. 핵심 기능은 시스템의 개방형 포트를 식별하여 취약성 및 악용 가능성에 대한 세부 정보를 제공하는 것입니다.
또한 침입 탐지/방지 시스템(IDS/IPS)과 방화벽이 모두 설치된 원격 시스템의 네트워크 포트를 검사해야 하는 경우, Nmap은 적절한 명령줄 옵션을 사용하여 이러한 보안 조치를 우회할 수 있는 기능을 갖추고 있으므로 걱정할 필요는 없습니다.
초보 사용자를 위해 특별히 설계된 이 방대한 가이드를 통해 Nmap의 다양한 기능을 자세히 살펴보세요. 방화벽을 우회할 수는 있지만 완전히 신뢰할 수 없으므로 권장하지 않습니다. 대신 SSH를 통해 대상 서버에 연결하고 거기에서 Nmap 스캔을 수행하세요.
주어진 지침을 좀 더 정제된 문구로 제안해도 될까요? 네트워크 연결을 검사하고 대상 시스템에서 열린 포트를 식별하려면 Nmap에서 다음 명령을 활용하세요:
nmap -sTU -sV <ip-address> -T 5 --min-rate 9000 --min-parallelism 9000 --initial-rtt-timeout 50ms --max-rtt-timeout 3000ms --max-retries 50 -Pn --disable-arp-ping -n --script vuln,exploit,auth -v -oX <filename>
매개 변수 ‘-sTU’는 수행할 스캔 유형, 즉 TCP 연결 스캔과 UDP 스캔을 지정하는 데 사용됩니다.
타이머 5를 공격적인 타이밍 템플릿으로 설정하면 빠른 스캔을 위해 지정되지만, 이 구성은 적절한 보호 조치를 구현하지 않으면 시스템이 잠재적인 서비스 거부 공격에 노출될 수 있습니다.
“서비스 스캔”이라는 주제어와 함께 동사 구를 사용하는 것은 “-sV”로 표시된 에이전트가 수행하는 작업에 의해 시작됩니다.
값이 `9000`인 `–min-rate` 옵션은 스캔하는 동안 초당 9000개 이상의 패킷을 전송하도록 Nmap에 지시합니다.
초기 RTT 시간 제한 50밀리초는 스캔을 계속 진행하기 전에 Nmap이 전송하는 각 SYN 패킷의 응답을 기다리도록 지시합니다.
“–max-rtt-timeout 3000ms” 지시문은 스캔할 대상 호스트의 응답을 최대 3000밀리초 동안 기다리도록 Nmap에 지정합니다.
매개변수 `min_parallelism`은 스크립트 동시 실행 제한을 나타내는 최소값 9000으로 설정되어 있습니다.
`–최대 재시도` 값이 `50`으로 설정되어 실패 시 최대 50회까지 대상 포트와의 연결을 시도하도록 Nmap에 지시합니다.
핑 프로빙을 비활성화하도록 Pn을 설정합니다.
“–disable-arp-ping”으로 표시된 앞서 설명한 지시어는 ARP 프로빙 프로세스를 비활성화하는 효과가 있습니다.
옵션 “-n”은 DNS(도메인 이름 시스템) 쿼리 확인 프로세스를 중단합니다.
유틸리티 ‘vuln,exploit,auth’는 노출된 네트워크 포트 내에서 다양한 취약성을 평가하는 일련의 스크립트를 실행합니다.
`-v` 옵션은 상세하고 포괄적인 출력을 생성합니다.
앞서 언급한 애플리케이션은 조사 결과를 XML(확장 가능한 마크업 언어)로 포맷된 문서로 보존합니다.
“-6” 매개변수에 음수 값을 지정하여 IPv6 주소를 검색하는 옵션을 활성화 또는 비활성화할 수 있습니다.
lsof로 열린 포트 확인
Linux 운영 체제에서 lsof 명령을 사용하면 공개되지 않은 파일을 카탈로그화할 수 있습니다. 하지만 특정 매개 변수를 통합하면 호스트 장치에서 노출된 인터넷 상호 연결 및 포털을 식별하는 것이 가능해집니다. lsof를 사용하여 열린 포트를 확인하는 절차는 다음 단계를 포함합니다:
lsof -i -n
“ps” 명령은 Linux 및 Unix 기반 운영 체제에서 일반적으로 사용되는 명령으로, 시스템에서 현재 실행 중인 프로세스에 대한 정보를 표시합니다. 출력에는 프로세스 ID, 상위 프로세스 ID, 사용자 이름, 프로그램 이름, CPU 사용률, 메모리 사용량 및 프로세스와 관련된 기타 세부 정보와 같은 열이 표시됩니다. 애플리케이션의 문제를 해결하거나 여러 프로세스의 리소스 사용률을 파악하는 데 유용할 수 있습니다.
`ip` 명령은 Linux 시스템의 모든 네트워크 및 인터넷 프로토콜(IP) 구성 파일을 나열하는 데 사용됩니다. 여기에는 라우팅 테이블, 인터페이스에 할당된 IP 주소, 기본 게이트웨이, DNS 서버 등과 같은 파일이 포함됩니다. 이 명령의 출력은 네트워킹 문제를 해결하거나 새 연결을 구성하는 데 유용할 수 있습니다.
앞서 언급한 문은 입력에 하이픈(-)을 사용하면 지정된 도메인 내에서 호스트 이름이 올바르게 확인되지 않음을 나타냅니다.
netcat으로 열린 포트 확인
넷캣은 사용자가 표준 입출력 스트림을 통해 TCP 및 UDP 연결과 상호 작용할 수 있는 다용도 명령줄 도구입니다. 이 기능은 Netcat의 광범위한 기능 중 한 가지 측면에 불과하며, 자세한 내용은 man netcat 명령을 통해 매뉴얼 페이지를 참조하면 확인할 수 있습니다.
포트 스캔을 위해 네트워크 유틸리티 도구 “netcat”을 사용하려면 다음 단계를 따르세요:
nc -zv <ip-address> <start_port-end_port> | grep -v "refused"
“ping” 명령은 인터넷 프로토콜(IP) 네트워크에서 두 장치 간의 연결을 테스트하는 데 사용되는 네트워크 진단 도구입니다. 지정된 IP 주소로 에코 요청 메시지를 보내고 응답을 기다리는 방식으로 작동하며, 응답은 일련의 데이터 패킷이 주고받는 것으로 표시됩니다.
“scanner -z” 명령은 스캔 모드에서 NetCAT 도구를 활성화하여 네트워크 테스트를 수행하고 대상 시스템 또는 장치에서 열린 포트를 검색할 수 있도록 하는 데 사용됩니다.
`-v` 옵션은 터미널에서 명령을 실행하는 동안 호출하면 자세한 보고서를 생성합니다.
`grep -v “refused”` 명령은 “refused” 문자열이 포함된 줄을 필터링하여 결과 출력을 표시하므로 닫힌 포트에서 `netcat` 명령을 실행할 때 발생할 수 있는 “연결 거부” 메시지로 터미널이 복잡해지는 것을 방지할 수 있습니다.
앞서 언급한 프로세스는 상세 모드에서 “netcat” 도구를 사용할 때 “grep” 명령의 기능을 활성화하기 위해 필요할 수 있는 선택적 단계입니다. 그 이유는 “netcat”은 결과를 표준 오류(기호 “2”로 표시)로 출력하기 때문에 “grep”을 사용하여 이 정보를 캡처하려면 표준 오류 스트림을 표준 출력(기호 “1”로 표시)으로 지정한 다음 “grep”을 통해 라우팅해야 하기 때문입니다.
네트워크를 더 깊이 알수록 더 잘 방어할 수 있습니다
시스템에서 운영 중인 개방형 포트와 서비스를 파악하는 것은 외부 위협으로부터 시스템을 보호하는 데 효과적인 방법입니다. 이를 통해 불필요한 서비스를 식별하여 종료하고, 더 이상 사용되지 않는 서비스를 찾고, 바인드 또는 리버스 셸 백도어와 같은 악성 파일이 시스템에서 작동하는지 여부를 확인할 수 있습니다.
침입 탐지 시스템(IDS)은 포괄적인 네트워크 보안을 보장하기 위한 중요한 구성 요소입니다. IDS를 구현함으로써 조직은 네트워크에서 발생하는 모든 상황을 모니터링하고 사전 정의된 규칙 세트를 구현하여 무단 액세스 시도를 차단할 수 있습니다.