포트 스캔(port scan)은 운영 중인 서버에서 열려 있는 TCP/UDP 포트를 검색하는 것을 의미한다.[1]

포트 스캔 방식 편집

TCP 스캔 편집

TCP 스캔은 TCP 처음 연결 시 일어나는 3-웨이 핸드쉐이킹을 탐지하는 기법이다. 만약 핸드쉐이킹이 정상적으로 완료되었다면, 해당 TCP 포트는 정상적으로 열려 있는 것으로 판단할 수 있다. 서비스 거부 공격을 막기 위해, 포트 스캐너는 핸드쉐이킹 직후 연결을 종료한다.

이 방식은 일반적인 소켓 connect()를 이용하기 때문에, Nmap 등의 프로그램에서는 이 방식을 연결 스캔(connect scan)으로 부른다.

SYN 스캔 편집

SYN 스캔은 TCP 핸드쉐이킹을 완전히 수행하지 않고, 처음 SYN 패킷만을 받은 후 검사를 완료하는 방식이다. 이 방식은 실제 TCP 연결이 일어나지 않기 때문에 'half-open 스캔"으로 부르기도 한다.

이 방식을 사용하기 위해서는 TCP 스캔과 같이 connect() 함수를 이용할 수 없고, 포트 스캐너는 이 스캔 작업을 위해 TCP 패킷을 직접 생성한다.

UDP 스캔 편집

UDP 프로토콜은 TCP와 다르게 핸드쉐이킹 과정이 존재하지 않고, 따라서 일반적으로는 포트가 열려 있다고 하더라도 서버에서 아무런 응답을 하지 않을 수도 있다. 하지만, 많은 시스템에서는 보낸 패킷에 대한 응답이 없을 때 ICMP unreachable 메시지를 보낸다. 많은 UDP 스캐너는 이 메시지를 탐지하는 방향으로 동작한다. 이 방식은 서버에서 ICMP 메시지를 보내지 않는 경우 닫혀 있는 포트를 열려 있다고 판단하는 경우가 존재한다.

다른 방식으로는 각 포트에 따라서 그에 대응하는 프로토콜 패킷을 전송하는 방식이다. 예를 들어, DNS 서버는 53번 포트에서 동작하며, UDP 스캐너는 해당 포트에 DNS 정보 요청 패킷을 보낸 후 응답을 받는 방식이다. 이러한 방식은 잘 알려진 포트와 대응 프로토콜에 대해서만 사용할 수 있다는 한계가 있지만, ICMP 메시지가 없는 경우 활용할 수 있다.

포트 스윕 편집

포트 스윕(port sweep)은 시스템에서 동작하는 특정 프로그램을 탐지하기 위해 포트를 검사하는 것을 의미한다.[2] 포트 스윕은 시스템의 취약점을 탐지하기 위해 사용하기도 하는데, 특정 포트를 사용하는 프로그램에 취약점이 있다면 그 포트가 열려 있는 서버를 찾아 공격하면 되기 때문이다. 가령, 마이크로소프트 SQL 서버의 취약점을 이용하는 컴퓨터 웜은 TCP 1433 포트를 검사한다.[3]

각주 편집