네트워크2020. 9. 19. 19:47
반응형

Port Scanning (포트 스캐닝) 

ICMP, UDP, TCP (Open,  Half Open,  Ack,  Stealth 등)

 

스캐닝 ( Scanning )이란 ?

- 스캐닝은 특정 대상을 탐색하는 행위로서 주로 ICMP, TCP, UDP 등의 패킷들을 조합하여

서버에 질의를 보내 돌아오는 반응을 확인하여 정보를 수집할 수 있습니다.

- 열려있는 포트, 어떤 서비스를 제공하는지, 데몬 버전, OS 버전, 취약점 등 다양하게

정보를 얻을 수 있습니다.

 

스캐닝의 이해

 

- 왜 사용하는가 ?

주로 해커가 악의적인 공격을 수행하기 위해 타겟의 취약점, 서비스 정보 등 정보를 얻기 위한 사전 작업을 위해 사용합니다.

 

- 어떻게 이용할 수 있는가 ?

핵심은 어떤 포트를 열고 서비스를 진행 중인지 아는 것 입니다.

가령 특정 회사에서 445번 포트를 열고 서비스하고 있는 것을 알게 된다면 SMB 취약점을 이용해 랜섬웨어 공격을 진행 할 수 있습니다.

어떤 포트를 열고 있는지 알게 된다면 해당 취약점을 이용해 공격을 수행 할 수 있습니다.

 

스캐닝을 진행할 때 목적, 상황에 따라 여러 방법으로 나뉘게 되는데, 대표적으로 ICMP, TCP, UDP 3가지 유형의 스캔을 예시로 들어 실습화면과 병행하여 설명하겠습니다.

실습환경은 KaliLinux, CentOS7, Windows 10을 사용하였으며

실습도구로는 Nmap, WhireShark를 사용하였습니다.

 

1. ICMP

Ping을 보내 호스트로부터 응답을 얻어 통신 상태를 확인하기 위해 사용합니다.

주로 Ping, Tracert, Traceroute 명령어를 사용해 통신 상태를 확인하게 되는데,

목적지까지 거쳐가는 라우터(게이트웨이) 경로를 확인하거나, 돌아오는 응답 패킷을 보고 호스트의 OS를 간접적으로 유추가 가능합니다.

-Traceroute는 옵션을 통해 ICMP나 TCP 프로토콜로도 사용할 수 있지만, 기본적으로 UDP 프로토콜을 사용합니다.

 

OS

TTL

Window Size

Linux(Kernel 2.4 ~ 2.6)

64

5840

FreeBSD

64

5720

Windows 7, Server 2008

128

8192

Cisco Router (IOS 12.4)

255

4128

위의 표는 각 OS별 일반적인 기본 TTL값과 Window Size 입니다.

 

아래는 Ping 명령어를 사용한 방법입니다.

상대 호스트 서버가 닫힌 경우

ping을 보내도 호스트에게 연결할 수 없음이라는 메시지가 나타납니다.

 

상대 호스트 서버가 열려 있는 경우

1) KaliLinux -> Windows 10

 

상대 서버가 열려있다면,

Windows 10으로부터 돌아오는 TTL 값이 128을 확인 할 수 있습니다.

상대 서버가 열린 것을 확인하고 추가적으로 Windows 10으로 보내는걸 몰랐다고 가정해도 돌아오는 TTL 값을 통해 Windows OS라는 것을 간접적으로 유추해 볼 수 있습니다.

 

2) Windows 10 -> KaliLinux

 

상대 호스트로부터 돌아오는 TTL 값이 64임을 확인하고

OS가 리눅스 계열임을 유추해 볼 수 있습니다.

 

 

 

2. TCP, UDP 스캔의 원리

TCP 연결 방식과 플래그들을 조합하여 여러 방식으로 타켓을 스캔합니다.

(1) TCP 3-Way HandShake

TCP의 정상적인 연결과정입니다.

SYN 패킷으로 연결을 시도하여 SYN + ACK 패킷으로 응답을 받으면 ACK 패킷을 보내고 세션을 수립합니다.

(2) TCP 4-Way HandShake

TCP의 정상적인 종료 과정입니다.

FIN, ACK 패킷으로 종료를 알리고 그에 맞는 응답을 받아 정상적으로 종료합니다.

 

3. UDP 스캔

UDP 스캔은 열리거나 필터링된 포트는 반응이 없고 닫힌 포트는 ICMP Unreacheable 패킷이 반환된다는 점을 이용한 기법입니다.

Nmap Option중 -sU를 사용하여 UDP Scan을 진행하여 scan이 이루어지는 과정을 WhireShark로 패킷을 캡쳐한 화면입니다.

 

(열린 포트)

포트가 열려있을 때는 패킷이 반환되지 않고 보내기만 하는 것을 확인 할 수 있습니다.

 

(닫힌 포트)

포트가 닫혀 있을 땐 ICMP Unreachable이 반환되는 것을 확인 할 수 있습니다.

 

 

 

 

4. TCP 스캔

1) Open Scan

TCP를 이용한 스캔 방법 중 가장 기본적인 스캔이라 볼 수 있으며, 포트가 열려있는지 확인 할 수 있습니다.

3-Way HandShake 과정을 거처기에 스캔 결과에 대한 신뢰도는 높지만 진행 속도가 느리다는 점과 상대방 시스템에 로그가 남아 실질적으로는 거의 사용되지 않는 방법이라 볼 수 있습니다.

Nmap Option중 -sT를 사용하여 TCP Scan을 진행하여 scan이 이루어지는 과정을 WhireShark로 패킷을 캡쳐한 화면입니다.

(열린 포트)

포트가 열려있다면 SYN을 보내고 SYN + ACK를 받아 ACK를 보내고 RST, ACK로 세션을 종료합니다.

 

 

(닫힌 포트)

포트가 닫혀있다면 SYN 패킷을 보내면 RST + ACK 패킷이 돌아오고 종료되는 것을 확인 할 수 있습니다.

 

 

2) Half Open Scan

Open Scan이 진행되는 방식과 유사하지만, 세션을 완전히 연결하지 않고 포트의 활성화 여부를 판단합니다.

상대방이 구형 장비를 사용하고 있는 경우엔 RST, ACK 패킷을 둘 다 받아야 감시 로그를 생성할 수 있기 때문에 이 방법을 사용하면 스캔 흔적을 지우는게 가능합니다.

Nmap Option중 -sS를 사용하여 TCP Scan을 진행하여 scan이 이루어지는 과정을 WhireShark로 패킷을 캡쳐한 화면입니다.

 

(열린 포트)

스캔을 진행할 때 열린 포트인 경우 Open Scan에서는 최종적으로

전달하던 ACK 패킷을 전달하지 않고 RST 패킷을 보내주면서 연결을 종료합니다.

 

 

(닫힌 포트)

포트가 닫혀 있는 경우엔 Open Scan 방식과 마찬가지로 RST + ACK 패킷이 돌아오면서

세션이 종료 되는 것을 알 수 있습니다.

 

 

 

 

3) TCP Ack Scan

ACK Scan은 1), 2) 방법과 다르게 SYN 보내지않고 ACK패킷을 보내고 이때 포트가 열린 상태든 닫힌 상태든 똑같이 RST 응답을 받습니다. 하지만 방화벽에서 필터링이 이루어진다면 응답이 없거나, ICMP 에러 메시지를 받게 됩니다.

(위의 그림은 방화벽 필터링이 되지 않을 경우입니다. )

그렇기에 포트의 열림 여부를 확인한다기 보단 상대방쪽에서 방화벽 필터링이 되고 있는지 여부를 확인할 목적으로 사용 됩니다.

 

Nmap Option중 -sA를 사용하여 TCP Scan을 진행하여 scan이 이루어지는 과정을 WhireShark로 패킷을 캡쳐한 화면입니다.

(방화벽 필터링 존재)

방화벽 필터링이 존재하기 때문에 ACK 패킷을 보낸 뒤 ICMP 에러 메시지를 받는 것을 확인 할 수 있습니다.

 

 

(방화벽 필터링 존재 X)

ACK를 보내고 RST로 응답을 받는 것을 보고 상대방쪽에서 방화벽 필터링이 이루어지지 않는 것을 확인 할 수 있습니다.

 

 

 

 

4) TCP Stealth Scan

 

FIN (FIN Flag), X-MAS(FIN, PSH, URG), NULL(모든 Flag 비설정) Scan 방식을 통합하여 Stealth Scan이라 칭합니다.

이 기법은 비정상적인 TCP Flag 조합을 이용한 기법이며, 열린 포트에 대해서는 응답이 없지만 닫힌 포트의 경우는 RST 패킷이 반환되어 돌아옵니다.

비정상적인 패킷에 대해 응답이 없는 점을 노린 스캔 방식이며, 보안탐지 우회를 위해 많이 사용되었으나 현재는 거의 다 탐지됩니다.

 

 

Stealth Scan은 과정과 결과가 비슷하기에 Nmap Option중 -sX를 사용하여 X-MAS만 사용해서 TCP Scan을 진행했습니다.

scan이 이루어지는 과정을 WhireShark로 패킷을 캡쳐한 화면입니다.

(열린 포트)

열린 포트에 대해서 돌아오는 응답이 없는 것을 확인할 수 있습니다.

 

 

(닫힌 포트)

닫힌 포트의 경우 RST+ACK 패킷이 돌아오면서 세션이 종료되는 것을 확인 할 수 있습니다.

 

 

 

 

 

반응형
Posted by 보안 학생