Try Attack/Network Hacking[basic]

Nmap 포트스캔

D4tai1 2018. 11. 4.

1. Nmap

▶ Network Map(네트워크 지도)의 약자이다.

▶ 네트워크에 연결되어있는 호스트OS의 종류를 알 수 있다.

▶ 서버의 열린포트를 확인할 수 있다.

▶ 서비스하는 프로그램의 버전을 확인할 수 있다.

 

1) 환경

- kali linux 2018.1 운영체제의 공격자 클라이언트

- 공격자 클라이언트에 설치된 wireshark 프로그램

- ubuntu 16.04 운영체제의 희생자 클라이언트

- 희생자 클라이언트에 설치된 vsftpd 데몬

 

2) 사전지식

- 보통 공격을 시도할 때는 [주소스캔] - [포트스캔] - [운영체제 및 버전확인] - [연결된 서비스확인] - [CVE리스트에서 취약점확인] 이런 식으로 진행된다.

 [1] 주소스캔

  ▶ 브로드캐스트주소로 ICMP패킷을 전송하여 네트워크에 존재하는 호스트 IP주소를 확인한다.

  ▶ 외부서버는 보통 접속시에 알게되므로 ..

 

 [2] 포트스캔

  ▶ 열려있는 포트에서 어떤서비스가 동작하는지 확인하기위해 포트스캐닝 툴을 사용한다.

  ▶ 조사는 하지만 실제 피해는 발생하지 않는다.

 

 [3] 운영체제 및 버전확인

  ▶ 스택핑거프린팅(TTL, Window Size)을 이용하여 확인한다.

 

 [4] 연결된 서비스확인

  ▶ 열린포트를 보고 해당 포트가 어떤 서비스를 하는지 확인한다.

 

 [5] CVE리스트에서 취약점확인

  ▶ 해당서비스의 최신취약점을 찾아서 공격을 시도한다.

 

3) 시연

 [1] IP주소 확인(공격자)

 

  ▶ 공격자의 IP는 192.168.234.101이다.

 

 [2] IP주소 확인(희생자)

  ▶ 희생자의 IP는 192.168.234.103이다.

 

 [3] Nmap을 이용한 포트스캔(공격자)

  ▶ [nmap 192.168.234.103] 명령어를 이용하여 열려있는 포트를 스캔한다.

  ▶ 21번포트가 오픈되어 있는 것을 확인할 수 있다.

 

 [4] 열려있는 포트 확인(희생자)

  ▶ [netstat -atun | grep LISTEN] 명령어를 이용하여 확인해보니 21번이 열려있는 것을 확인할 수 있었다.

 

 [5] wireshake로 확인(공격자) - TCP Half Open

  ▶ nmap을 실행하니 공격자의 포트 42565에서 출발하여 희생자의 포트를 전부 두들겨보고 있었다.

  ▶ 두드리는 과정.. 여기서 필요한 지식이 TCP Half Open이다.

  ▶ TCP Half Open이란?

  - 불완전한 세션과정(3way-handshake 중 송신자가 SYN을 보낸 상태)에서 수신자는 로그를 남기지 않는 것을 말한다.

  - 로그를 남기지 않는 이유는 수신자가 [SYN+ACK] 패킷을 전송하면 상대가 다시 나에게 [SYN] 패킷을 전송해 줄 것이라고 생각하기 때문이다.

  - 송신자가 공격자이고, 수신자가 희생자라고 생각하고 아래 그림을 살펴보겠다.

  [1) 열린포트로의 접근]

  - 공격자가 열린포트로 [SYN]패킷을 전송할 경우 희생자는 [SYN + ACK] 패킷을 전송한다.

  - 공격자는 현재 포트는 열렸음을 확인하고 [RST]패킷을 전송하여 강제로 연결을 종료한다.

  - 이 경우 완전히 연결되지 않았으므로 로그에 남지 않는다.

  - 위에 와이어샤크 그림을 보면 더욱 자세히 알 수 있다.

  ▶ 공격자가 42565에서 희생자의 21번포트로 [SYN]패킷을 전송한다.

  ▶ 21번 포트가 열려 있으므로 희생자는 [SYN+ACK]패킷을 공격자에게 전송한다.

  ▶ 공격자는 [RST]패킷을 전송하여 연결을 끊는다.

  ▶ 공격자는 희생자로부터 [SYN+ACK]패킷이 왔으므로 포트가 열린 것을 확인할 수 있다.

 

[2) 닫힌포트로의 접근]

  - 공격자가 닫힌포트로 [SYN]패킷을 전송할 경우 희생자는 [RST + ACK] 패킷을 전송한다.

  - 공격자는 현재 포트가 닫힌 것을 확인한다.

  - 위에 와이어샤크 그림을 보면 더욱 자세히 알 수 있다.

  ▶ 21번 포트를 제외한 모든 포트가 공격자에게 [RST+ACK]패킷을 전송하는 것을 확인할 수 있다.

  ▶ 공격자는 희생자로부터 [RST+ACK]패킷이 왔으므로 포트가 닫힌 것을 확인할 수 있다.

 

[6] TCP Open(공격자)

  ▶ [nmap -sT "IP주소"] 명령어로 사용한다.

 [1) 열린포트로의 접근]

  ▶ 완전한 3way-handshake를 맺는다.

  ▶ 그렇기 때문에 로그를 남긴다.

  ▶ 이러한 방식은 잘 사용하지 않는다. 

 

 

 [2) 닫힌포트로의 접근]

 

[7] FIN Scan(공격자)

  ▶ [nmap -sF "IP주소"] 명령어로 사용한다.

 [1) 열린포트로의 접근]

 

  ▶ [FIN]패킷을 전송하여 열린포트를 확인한다.

  ▶ 열려있다면 아무 응답도 오지 않는 것으로 보아 포트가 열린 것을 확인할 수 있다.

  ▶ 세션이 연결되지 않았으므로 로그가 남지 않는다.  

 

 [2) 닫힌포트로의 접근]

  ▶ 닫혀있다면 [RST]패킷이 전송된다.

 

[8] X-mas Scan(공격자)

  ▶ [nmap -sX "IP주소"] 명령어로 사용한다.

 [1) 열린포트로의 접근]

 

  ▶ [FIN, PSH, URG]패킷을 전송하여 열린포트를 확인한다.

  ▶ 열려있다면 아무 응답도 오지 않는 것으로 보아 포트가 열린 것을 확인할 수 있다.

  ▶ 세션이 연결되지 않았으므로 로그가 남지 않는다.  

 

 [2) 닫힌포트로의 접근]

  ▶ 닫혀있다면 [RST]패킷이 전송된다.

 

[9] Null Scan(공격자)

  ▶ [nmap -sN "IP주소"] 명령어로 사용한다.

 [1) 열린포트로의 접근]

 

  ▶ [NULL]패킷을 전송하여 열린포트를 확인한다.

  ▶ 열려있다면 아무 응답도 오지 않는 것으로 보아 포트가 열린 것을 확인할 수 있다.

  ▶ 세션이 연결되지 않았으므로 로그가 남지 않는다.  

 

 [2) 닫힌포트로의 접근]

  ▶ 닫혀있다면 [RST]패킷이 전송된다.

 

[10] UDP Scan(공격자)

  ▶ [nmap -sU "IP주소"] 명령어로 사용한다.

  ▶ UDP가 일방향이지만 스캔이 가능한 이유는 방화벽에서 막힌경우는 ICMP Unreachable 패킷이 전송되기 때문이다.

 [1) 열린포트로의 접근]

 

  ▶ [UDP]패킷을 전송하여 열린포트를 확인한다.

  ▶ 열려있다면 아무 응답도 오지 않는 것으로 보아 포트가 열린 것을 확인할 수 있다.

  ▶ 세션이 연결되지 않았으므로 로그가 남지 않는다.  

 

 [2) 닫힌포트로의 접근]

  ▶ 닫혀있다면 [ICMP Unreachable]패킷이 전송된다.

 

 [11] OS 및 버전확인(공격자)

  ▶ [nmap -sS -p "확인할 포트번호" -O "IP주소"] 명령어를 사용하여

  확인하고 싶은 포트상태와 OS정보 및 커널버전을 확인할 수 있다.

  ▶ -sS는 쓰지 않더라도 위에서 사용한 TCP Half Open을 이용한 스캔과 동일하다.

  ▶ 리눅스 3.2~4.8사이의 버전이라고 나온다.

 

  ▶ [lsb_relese -a] 명령어로 운영체제 버전을 확인해보면 ubuntu 16.04 임을 확인할 수 있다.

  ▶ [cat /etc/issue] 명령어로 다시 확인해봐도 ubuntu 16.04 버전을 사용하고 있다.

 

  ▶ 그러나 커널정보를 확인하였기 때문에 [uname -a] 명령어로 4.13..커널을 사용하는 것을 확인할 수 있다.

 

 [12] 주소검색(공격자)

  ▶ 만약 주소를 몰라서 시도를 할 수 없다면..

  ▶ [nmap "네트워크대역 전체"] 명령어(별표, 아스테리스크 이용)로 공격한다.

  ▶ 예제) [nmap 192.168.234.*]

 

4) 대응방안

 ▶ 불필요하게 열려있는 포트가 있는지, 필요이상으로 노출되었는지 점검하고 차단한다.

'Try Attack > Network Hacking[basic]' 카테고리의 다른 글

iptables  (0) 2018.11.04
FTP서버 해킹  (0) 2018.10.28
DNS Spoofing  (0) 2018.10.21
ARP Spoofing  (0) 2018.10.21

댓글