Nmap 포트스캔
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 |
댓글