nmap 명령어

네트워크 탐지 및 포트 스캐닝을 위한 명령어로, nmap [scan type] [option] 목적지 형식을 사용한다.

 

systemctl stop firewalld

 

본격적으로 실습에 들어가기전에, 공격 대상이 될 Rocky 의 방화벽을 가동 중지시켜야 한다. 

 

 

-sn 옵션 (네트워크 스캐닝)

특정 네트워크 대역에서 동작하고 있는 host 의 IP 주소를 확인한다.

 

nmap -sn 10.10.10.0/24

 

현재 10.10.10.0/24 네트워크 상에는, 10.10.10.10 과 10.10.10.254 의 IP 주소가 살아있음을 확인할 수 있다.

 

KALI 에서의 패킷 캡쳐
Rocky 에서의 패킷 캡쳐

-sn 옵션을 통해 network ping 스캐닝을 수행하면, KALI 에서 10.10.10.0/24 네트워크를 향해 대역의 첫 IP 부터 순차적으로 ping ICMP requst 보내게 된다. 이 때, 활성화되어있는 host 인 Rokcy 10.10.10.10 이 reply 하면 해당 주소가 살아있음이 확인되므로 networking 이 수행된 것을 확인할  수 있다.

 

이때, 와이어샤크 필터를 통해 ICMP 패킷만을 확인할 수 있다.

 

icmp&&ip.src==10.10.10.10&&ip.dst==20.20.20.20

 

출발지의 IP 주소가 10.10.10.10, 도착지의 IP 주소가 20.20.20.20 인 ICMP 패킷을 확인한다.

 

icmp&&ip.src==20.20.20.20&&ip.dst==10.10.10.10

 

출발지의 IP 주소가 20.20.20.20, 도착지의 IP 주소가 10.10.10.10 인 ICMP 패킷을 확인한다.

 

icmp[0]==8&&ip.src==10.10.10.0/24&&ip.dst==20.20.20.0/24

 

ICMP 패킷 헤더 맨 첫 부분인 type 필드를 통해, request 패킷만을 검색한다. (request 는 type 8번을 사용한다.) 또한, 특정 네트워크 주소가 아닌 네트워크 대역으로도 검색이 가능하다.

 

icmp[0]==0&&ip.src==10.10.10.0/24&&ip.dst==20.20.20.0/24

 

ICMP 패킷 헤더 맨 첫 부분인 type 필드를 통해, reply 패킷만을 검색한다. (request 는 type 0번을 사용한다.)

 

따라서, ping 패킷을 막아 다음과 같은 취약점을 보완해야 한다.

 

cat 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

 

Rocky 에서 icmp_echo_ignore_all 의 값을 1로 수정하여, ICMP ping 패킷을 차단한다.

 

하지만, ping scanning 이 여전히 수행되는 것을 확인할 수 있을 것이다. 왜일까? ICMP 의 timestamp 때문이다. 

 

firewall-cmd --add-icmp-block={echo-request,echo-reply,timestamp-reply,timestamp-request}
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -p icmp --icmp-type 3 -j DROP

 

따라서, 다음과 같이 echo 와 timestamp 를 모두 차단하도록 설정한다.

 

*network 스캔 보안 대책*

원리 : 특정 네트워크 대역에 ping 을 보내서 request [8] 에 대한 reply [0] 을 확인


칼리   == (request[8]) ===> 서버
칼리   <== (reply[0] ) ==== 서버 OUTPUT 


보안대책 : icmp reply를 차단, 허용된 ARP만 접근 허가 (NAC, ip와 mac주소를 매칭) 

hping3 -1 -a 20.20.20.200 10.10.10.10


20.20.20.20 의 IP 주소가 마치 20.20.20.200 의 IP 주소로 ping 을 보낸 것처럼 IP Spoofing 이 이루어진 것을 확인할 수 있다. 주의할 점은 20.20.20.20 의 MAC 주소와 20.20.20.200 의 MAC 주소가 동일하다는 것이다. 따라서 허용된 ARP 만을 접근 허가하도록 하여, MAC 주소를 통한 차단으로 ping scanning 의 취약점을 보완할 수 있다.

 

 

-sU 옵션 (UDP 스캔)

UDP를 사용하는 포트 및 서비스만을 스캐닝한다. 포트가 열려있다면 무응답 이고, 닫혀있다면 ICMP Unreachable 오류 메시지가 응답으로 온다.

 

현재, Rocky 리눅스의 UDP 를 사용하는 named 데몬이 활성화된 상태이다.

 

nmap -sU 10.10.10.10 -p 50-55

 

하지만, UDP 스캐닝을 수행했을 때 domain 서비스가 close 상태인 것을 확인할 수 있다.

 

Rocky 의 name-server 가 local 에서만 사용 가능하도록 설정되어있기 때문이다.

 

vi /etc/named.conf
-> listen-on port 53 { any; };
-> allow-query     { any; };

service named.service restart -> 네임 서버 데몬 재실행

 

따라서, named 데몬의 설정 파일인 /etc/named.conf 파일을 다음과 같이 수정한다.

 

nmap -sU 10.10.10.10 -p 50-55

 

파일 수정 후 named.serivce 데몬을 재실행하게 되면,  UDP 스캐닝을 수행했을 때 domain 서비스가 open 상태로 변화한 것을 확인할 수 있다.

 

Rocky -> service firewalld start
KALI -> nmap -sU 10.10.10.10 -p 53-55

 

Rocky 에서 방화벽을 재구동한 뒤, KALI 에서 UDP 스캐닝을 진행하게 되면 domain 서비스가 filtered 상태로 변한 것을 확인할 수 있다.

 

이때 패킷을 캡쳐해보면, KALI 공격자가 UDP 패킷을 계속해서 보낼 때 Rocky 서버 공격 대상에서는 Destination Unreachable 오류 메시지로 응답하는 것을 확인할 수 있다.

 

firewall-cmd --permanent -add-port 53/udp
firewall-cmd --reload
firewall-cmd --list-all

nmap -sU 10.10.10.10 -p 53-55

 

방화벽 정책에 53/udp 포트만을 추가하여 방화벽을 해제하도록 설정하면, domain 서비스만 open 상태로 변한 것을 확인할 수 있다.

 

이때 패킷을 캡쳐해보면, KALI 공격자가 UDP 패킷을 계속해서 보내지만 Rocky 서버 공격 대상에서는 아무런 응답이 없음을 확인할 수 있다.

 

*UDP 스캔 보안 대책*

장점 : 단방향이기 때문에 로그가 남기 어려움 , 방화벽 활성화 여부 확인 가능
단점 : icmp에 확실한 증거가 남기 때문에 발각이 쉬움 (주기적인 unrechable) 
          방화벽에 의해 패킷이 차단될 경우 open / closed의 여부 확인이 어려움 (filtered)
대책: 필요한 UDP 포트만 오픈, 주기적인 모니터링을 통해 ICMP unreachable 을 확인하여 UDP 스캔으로 의심되는 패킷 차단

 

 

 

 

공부하면서 정리한 내용을 글로 작성하였습니다.

혹시나 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다 :)

COMMENT