포트 스캔

위키백과, 우리 모두의 백과사전.

포트 스캔(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]

각주[편집]