포트 스캔 TCP/TCP half-open/UDP/스텔스(Stealth) 스캔, 스캔 도구 Nmap
포트 스캔
[정의]
포트 스캔(port scan)은 운영 중인 서버에서 열려 있는 포트를 검색하는 것을 의미한다.
[목적]
자신의 서버의 네트워크 서비스들을 점검하기 위해 사용하거나 해커가 해킹을 하기 위해 정보 수집에서 타겟 서버의 정보를 수집하기 위해 사용한다. 알고자하는 패킷에 특정한 패킷을 보냈을 때 돌아오는 응답에 따라 포트가 열려있는지 닫혀있는지 판단한다.
[유형]
- TCP
- TCP half-open
- UDP
- Stealth
TCP
TCP 스캔은 TCP 처음 연결 시 일어나는 3-웨이 핸드쉐이킹을 탐지하는 기법이다. 만약 핸드쉐이킹이 정상적으로 완료되었다면, 해당 TCP 포트는 정상적으로 열려 있는 것으로 판단할 수 있다. 서비스 거부 공격을 막기 위해, 포트 스캐너는 핸드쉐이킹 직후 연결을 종료한다. 이 방식은 일반적인 소켓 connect()를 이용하기 때문에, Nmap 등의 프로그램에서는 이 방식을 연결 스캔(connect scan)으로 부른다.
[시도 및 응답]
- 열려있는 경우 : SYN + ACK
- 닫혀있는 경우 : RST + ACK
[그림1] 열려있는 경우
[그림2] 닫혀있는 경우
TCP half-open
half-open 스캔은 TCP 핸드쉐이킹을 완전히 수행하지 않고, 처음 SYN 패킷만을 받은 후 검사를 완료하는 방식이다. 이 방식은 실제 TCP 연결이 일어나지 않는다. 이 방식을 사용하기 위해서는 TCP 스캔과 같이 connect() 함수를 이용할 수 없고, 포트 스캐너는 이 스캔 작업을 위해 TCP 패킷을 직접 생성한다.
[시도 및 응답]
- 열려있는 경우 : SYN + RST 패킷을 받은 후 응답하지 않는다.
- 닫혀있는 경우 : SYN + ACK 패킷을 받은 후 RST 패킷을 보내 연결을 끊는다.
* FIN를 보냈을 때
- 열려있는 경우 : 응답없음
- 닫혀있는 경우 : RST + ACK
* SYN+ACK를 보냈을 때
- 열려있는 경우 : RST
- 닫혀있는 경우 : RST
[그림1] 열려있는 경우
[그림2] 닫혀있는 경우
UDP
UDP 프로토콜은 TCP와 다르게 핸드쉐이킹 과정이 존재하지 않고, 따라서 일반적으로는 포트가 열려 있다고 하더라도 서버에서 아무런 응답을 하지 않을 수도 있다. 하지만, 많은 시스템에서는 보낸 패킷에 대한 응답이 없을 때 ICMP unreachable 메시지를 보낸다. 많은 UDP 스캐너는 이 메시지를 탐지하는 방향으로 동작한다. 이 방식은 서버에서 ICMP 메시지를 보내지 않는 경우 닫혀 있는 포트를 열려 있다고 판단하는 경우가 존재한다.
다른 방식으로는 각 포트에 따라서 그에 대응하는 프로토콜 패킷을 전송하는 방식이다. 예를 들어, DNS 서버는 53번 포트에서 동작하며, UDP 스캐너는 해당 포트에 DNS 정보 요청 패킷을 보낸 후 응답을 받는 방식이다. 이러한 방식은 잘 알려진 포트와 대응 프로토콜에 대해서만 사용할 수 있다는 한계가 있지만, ICMP 메시지가 없는 경우 활용할 수 있다.
[시도 및 응답]
- 열려있는 경우 : 응답없음
- 닫혀있는 경우 : icmp destination unreachable
[알려진 포트]
1. 포트 631(IPP) : 인터넷 프린팅 프로토콜
2. 포트 161(SNMP) : 간단한 네트워크 관리 프로토콜
3. 포트 123(NTP) : 네트워크 타임 프로토콜
4. 포트 1434(MS-SQL-DS) : 마이크로소프트 SQL 서버
5. 포트 67(DHCPS) : 다이내믹 호스트 구성 프로토콜 서버
6. 포트 53(도메인) : 도메인 네임 시스템DNS 서버
7. 포트 68(DHCPC) : DHCP 클라이언트 포트
8. 포트 520(라우트) : 라우팅 정보 프로토콜RIP
9. 포트 69(TFTP) : 간단한 파일 전송 프로토콜
Stealth
세션을 완전히 성립하지 않고, 공격 대상 시스템의 포트 활성화 여부를 알아내기 때문에 공격 대상 시스템에 로그가 남지 않는다. 따라서 공격 대상의 시스템 관리자는 어떤 IP를 가진 공격자가 자신의 시스템을 스캔 했는지 확인 할 수 없다. 스텔스 스캔은 닫혀있는 포트에 대해서만 응답하고 종류는 ACK, NULL, X-MAS스캔 등이 있다.
[유형]
- ACK or FIN : ack 혹은 FIN flag만 보내는 스캔
- NULL : flag를 하나도 보내지 않는 스캔
- X-MAS : 모든 flag를 보내거나 FIN, PSH, URG flag를 보내는 스캔
[시도 및 응답]
- 열려있는 경우 : 응답없음
- 닫혀있는 경우 : RST
[그림1] ACK, FIN 열려있는 경우
[그림2] ACK, FIN 닫혀있는 경우
[그림3] X-MAS 닫혀있는 경우
[특징]
- 호스트 탐지 : 네트워크 상에서 컴퓨터들을 확인한다. 예를 들어 ping 응답이나 특정포트가 열린 컴퓨터들을 나열한다.
- 포트 스캔 : 하나 혹은 그 이상의 대상 컴퓨터들에 열린 포트들을 나열한다.
- 버전 탐지 : 응용프로그램의 이름과 버전 번호를 확인하기 위해 원격 컴퓨터의 서비스를 확인 한다.
- OS 탐지 : 원격으로 OS와 네트워크 장치의 하드웨어 특성을 확인 한다.
옵션 | 설명 |
-sT | 일반적인 TCP 포트스캐닝 |
-sS | half-open 스캔 |
-sP | ping 을 이용한 일반적인 스캔 |
-sU | UDP 포트 스캐닝 |
-PO | 대상 호스트에 대한 ping 응답을 요청하지 않음, log 기록과 filtering 을 피할 수 있음 |
-PT | 일반적이 ICMP ping이 아닌 ACK 패킷으로 ping 을 보내고 RST 패킷으로 응답을 받음 |
-PI | 일반적인 ICMP ping 으로 방화벽이나 필터링에 의해 걸러짐 |
-PB | ping 을 할 때 ICMP ping 과 TCP ping을 동시에 이용 |
-PS | ping 을 할 때 ACK 패킷대신 SYN 패킷을 보내 스캔 |
-O | 대상 호스트의 OS 판별 |
-P | 대상 호스트의 특정 포트를 스캔하거나, 스캔할 포트의 범위를 지정 |
-D | Decoy 기능으로 대상 호스트에게 스캔을 실행한 호스트의 주소를 속임 |
-F | /etc/services 파일 내에 기술된 포트만 스캔 |
-I | TCP 프로세서의 identd 정보를 가져옴 |
-n | IP 주소를 DNS 호스트명으로 바꾸지 않음, 속도가 빠름 |
-R | IP 주소를 DNS 호스트명으로 바꿔서 스캔, 속도가 느림 |
-o | 스캔 결과를 택스트 파일로 저장 |
-i | 스캔 대상 호스트의 정보를 지정한 파일에서 읽어서 스캔 |
-h | 도움말 보기 |
[출처] 위키 백과, https://asecurity.so, http://wildpup.cafe24.com, http://www.hacure.com
'Security > network' 카테고리의 다른 글
DHCP(Dynamic Host Configuration Protocol) (0) | 2017.04.25 |
---|---|
Wireshark(와이어샤크) 설치 및 사용법 +필터링 사용법 (0) | 2017.04.20 |
서비스 거부 공격/분산 서비스 거부 공격(DOS/DDOS) (0) | 2017.04.17 |
체크섬(checksum) 계산법 (1) | 2017.04.17 |
[스니핑 공격 기법]ARP Spoofing/ARP Cache Poisoning/Switch Jamming (0) | 2017.04.14 |