ICMP Bypass Scanning / ICMP 스캐닝 방화벽 우회 전략

2018. 1. 4. 23:12보안 & 해킹/Network

1. 개요


ICMP를 이용하여 장비가 통신이 가능한지 판단하는데, 운영체제에서 DDoS 공격이나 악용당할 것을 우려해 막아놓을 때가 있다. 하지만 단순히 ICMP를 막아놓더라도 스캔이 가능한데 방법을 알아본다.



2. 서버 측 설정


테스트 운영체제는 칼리와 ubuntu14.04 운영체제다. 유닉스, 리눅스 운영체제라면 별다른 점은 없을 것이다. 리눅스에서 아래와 같이 icmp_echo_ignore_all 설정을 바꾸어 ICMP 패킷을 막는다. 기본 설정은 icmp 패킷을 허용하는 0이 설정되어 있다.


echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all


3. ICMP 방화벽 우회 스캔

3.1 Timestamp Request 패킷을 이용한다.
이는 원격지 시스템의 현재 시각을 알아보기 위한 방식의 패킷이다. 송신자가 패킷을 보낸시각과 수신자가 패킷을 받은 시각, 그리고 그동안 걸린시간으로 공격 대상의 현재 시스템 시각을 알 수 있다. 

장비 간의 통신에서 현재 시스템 시각은 각각 다를 수 있기 때문에 어플리케이션의 구동에 문제가 생길 수 있다. 이를 방지하기 위하여 만들어진 패킷이지만, Reply 반응은 상대 시스템이 활성화되어 있음을 의미한다.




공격자 측에서 hping3를 이용하여 패킷을 보내본다.




hping3 -1 192.168.10.4 -c 1

-1 : ICMP 타입 패킷

-c : 패킷 숫자


이처럼 리눅스의 ICMP패킷이 막혀있기 때문에 위와같이 Echo Ping Request 요청에 응답하는 패킷이 없다.





이번에는 Timestamp Request 패킷을 보내보자.



아까와 다르게 time값이 도착한다. 어떤 값이 도착하던 간에 응답이 왔으므로 해당호스트는 살아있다는 것을 알 수 있다.

hping3 -1 192.168.10.4 -c 1 -C 13

-C : ICMP 패킷을 보내는데 13번은 ICMP 패킷의 Time Request Type을 의미한다.


이렇게 ICMP 패킷을 차단해놓았음에도 불구하고 서버측으로 부터 응답이 온다. Type은 13번인 Timestamp로 요청하고 14번으로 응답하였다.


ICMP 패킷의 Type는 주로 0, 3, 5, 8, 11번이 많이 사용되기에 13번은 잘 모르는 경우가 있다.


이번에는 NMAP으로 실습해보자.


nmap 옵션은 다음과 같다.


nmap --disable-arp-ping -sn -PP 192.168.10.4

--disable-arp-ping : 내부 네트워크 실습환경의 특성상 arp 스캔으로 정보를 획득하려 시도하는데 이를 막는다.


-sn : 마찬가지로 포트스캔을 막는다.


-PP : TimeStamp 패킷으로 스캔한다. 





NMAP으로도 Timestamp 패킷을 생성하고 응답을 확인할 수 있다.




rfc792[각주:1]의 ICMP Type 13번은 아래와 같다.



Type 13번은 timestamp 요청, 14번은 응답형태다.




3.2 Information Request 패킷을 이용한다.


이 패킷은 자신의 디스크가 없는 시스템이 스스로 IP를 설정할 수 있게 하는 패킷으로, 자신의 네트워크를 찾기 위해 개발되었다. 


공격자측에서 icmpush를 이용하여 패킷을 보낼 수 있다. 하지만 리눅스 운영체제는 응답하지 않아 실습을 하지 않았다. 그리고 이제는 잘 쓰이지 않는 패킷 Type이다. 이는 아래 표를 참고하라.


공격 명령어

icmpush -info 192.168.10.4

해당하는 기술문서는 rfc792이고 Packet의 Type은 Request 15, Response 16번 이다.






3.3 ICMP Address Mask Request를 이용한다.


이 패킷은 자신이 속한 네트워크의 서브넷 마스크를 알기 위해 보내는 패킷이다.



공격 명령어

icmpush -mask 192.168.10.4

역시 리눅스 커널 2.2~2.6 까지만 동작하기에 실습을 하지 않았다.


해당하는 기술문서는 rfc950[각주:2]이고 Packet의 Type은 Request 17, Response 18번이다.

AM = Address Mask




4. 방어책


인터네트워크에서 시간을 동기화하는 것은 까다로운 일이므로 Timestamp 패킷만으로 할 수 없다. 그래서 나온 것이 NTP(Network Time Protocol)이다. 따라서 Timestamp 아웃바운드 패킷을 차단하는 것을 추천한다. 하지만 장비나 어플리케이션의 작동에 영향이 있을 수도 있다.


윈도우

(윈도우는 기본 방화벽 정책으로 막혀있다.)

netsh advfirewall firewall add rule name="Block Type 13 ICMP V4" protocol=icmpv4:13,any dir=in action=block

위와 같이 icmp 13번 Type의 방화벽을 막거나 아웃바운드 패킷을 막는다.



리눅스(우분투 기준)

iptables -A OUTPUT -p icmp --icmp-type 13 -j DROP
ufw enable

마찬가지로 아웃바운드 패킷을 막되 13번을 막는다.




5. 운영체제별 Non Echo ICMP 패킷의 작동 여부(Default)


 운영체제

 Information

Timestamp

Address Mask 

Linux Kernel(2.2~2.6) 

X

Free BSD

X

솔라리스

X

HP-UX

O

윈도우 2000 이상

X



6. 결론


- 일반적으로 막는 ICMP 패킷 방어 설정은 리눅스와 윈도우에서 여전히 Timestamp 패킷을 허용한다. 공격자는 ICMP DDoS 공격을 할 수도 있다. 

- 서버 관리자는 아웃바운드 정책으로 막을 수 있지만, 이는 어플리케이션의 실행 오류를 야기할 수 있다. 

- 하지만 이제는 NTP(Network Time Protocol)를 이용하여 시간동기화를 하므로 차단설정을 해도 문제 없을 것이다.








  1. https://tools.ietf.org/html/rfc792 [본문으로]
  2. https://tools.ietf.org/html/rfc950 [본문으로]

'보안 & 해킹 > Network' 카테고리의 다른 글

TCP 송,수신 과정  (0) 2018.10.16
NAT(Network Address Translation)의 장단점  (0) 2018.01.03
포트 번호에 대하여  (0) 2018.01.02