Cisco IOS Firewall 3: IP Fragments, ICMP Flooding

┌─ 트래픽 필터링
├─ Established 필터링
├─ Dynamic ACL
├─ Reflexive ACL
├─ CBAC
├─ IP Fragments 공격 방지
└─ ICMP Flooding 공격 방지


[IP Fragments 공격 방지]

IP 프로토콜은 MTU크기(1500Byte)가 초과할 때, 데이터를 분할하여 전송한다. 예를 들어, 데이터 크기가 5000Byte면, 1500Byte, 1500Byte, 1500Byte, 500Byte로 나누어 전송하는 것이다.

그러나 이 특성을 이용하여 IP 헤더를 조작한 뒤 분할된 패킷을 특정 서버에 무한으로 전송시킨다. 지속적으로 분할된 패킷을 받는 서버는 서버 연결이 불안정해지고, 서버가 다운되는 문제가 발생한다.

이러한 문제는 라우터에서 분할된 패킷을 필터링하면 쉽게 해결할 수 있다.

R2는 외부에서 분할된 패킷이 들어오는 것을 막아야 한다.
설정을 하기 전, R1에서 R3로 분할 패킷 보내는 것을 디버깅해보자.
(디버깅은 아래의 명령어 참고)

R1(config)# access-list 110 permit icmp any any
R1(config)# exit
R1# debug ip packet 110

4000Byte를 보내면, 패킷을 분할 후 보내는 것을 확인할 수 있다.

[설정]
– R2에서 분할 패킷 필터링 설정.

R2(config)# ip access-list extended Fragments_Deny
R2(config-ext-nacl)# deny ip any 6.6.6.0 0.0.0.3 fragments
R2(config-ext-nacl)# deny ip any 192.168.20.0 0.0.0.255 fragments
R2(config-ext-nacl)# permit ip any any
R2(config-ext-nacl)# exit
R2(config)#
R2(config)# int fa0/0
R2(config-if)# ip access Fragments_Deny in

[확인]
– R1에서 R3로 분할 패킷 전송하면 응답이 없다.

– R2에서 패킷 4개가 차단된 것을 확인할 수 있다.


[ICMP Flooding 공격 방지]

트러블슈팅할 때, 기본적으로 확인해보는 것 중 하나가 PING 테스트다. 이 PING이 바로 ICMP를 이용한다. ‘ICMP Echo’ 요청 메세지를 전송하면, ‘ICMP Reply’ 응답 메세지를 전송한다. ICMP Flooding 공격은 이 동작 과정을 이용한다. ‘ICMP Echo’ 요청 메세지를 무한으로 전송해 목표 대상에게 서비스 거부, 서버 다운 문제를 야기시킨다. 앞전에 살펴본 트래픽 필터링으로 ICMP를 거부하거나 QoS Policing을 이용해 ICMP 용량을 제한하여 막을 수 있다.

R2는 외부로부터 오는 ICMP를 차단해야 한다.

[설정]

R2(config)# access-list 110 permit icmp any any echo
R2(config)# access-list 110 permit icmp any any echo-reply
R2(config)# 
R2(config)# int fa0/0
R2(config)# rate-limit input access-group 110 128000 8000 8000 conform-action transmit exceed-action drop

[확인]

– R1에서 R3로 8000Byte 패킷 전송

PING 테스트 결과, 중간 중간 실패되는 것을 볼 수 있다.

– R2에서 rate-limit 확인

conformed 52 packets: 52개 패킷 처리 / exceeded 13 packets: 한도 초과된 13개 패킷 드랍

답글 남기기

이메일 주소는 공개되지 않습니다.