CoPP(Control Plane Policing)
서버가 아닌 네트워크 장비를 대상으로 DoS공격이 진행되는 경우 이를 방어하기 위한 기법으로 네트워크 장비는 자신이 목적지가 아닌 트래픽은 Data Plane으로 처리하여 CPU에 문제가 발생하지 않지만 자신을 대상으로 한 트래픽은 Control Plane에서 처리하기 때문에 CPU에 부하가 발생된다. 이에 대한 공격을 방어하고 서비스가 안전하게 지속될 수 있도록 하는 기술이다.
네트워크 장비는 데이터의 흐름을 처리하는 데이터 플레인, 보안 정책, 라우팅 경로 등을 처리하는 컨트롤 플레인으로 나눠진다. 따라서 서버에 대한 공격일 때는 데이터 플레인을 이용하여 라우터에 부하가 없는 것이다. CBAC같은 stateful inspection 기반의 방화벽이 실행되고 있다면 라우터에 대한 직접적인 공격이 아니더라도 라우터에 부하가 올 수 있다. 아무튼 traffic policing 이라는 QoS 기법을 알아야 한다. traffic policing은 네트워크 혼잡 상황에서 허용된 수치 이상의 패킷을 폐기하여 혼잡을 회피하는 기술이다. 자세한 내용은 아래에 첨부하겠다. 따라서 데이터 플레인에서 컨트롤 플레인으로 흐르는 트래픽도 하나의 인터페이스로 보고 traffic policing을 적용하여 공격으로 추정되는 트래픽을 폐기하도록 하여 공격을 제어할 수 있는 것이다.
https://404notonc.tistory.com/142
실습
이론 확인
우분투에서 victim으로 syn flooding 공격
69%까지 사용량이 오른 것을 볼 수 있다 (더 지켜보려 했으나 컴이 죽으려 해서 멈췄다)
피해자는 리소스가 부족해지고, 공격을 받고있는 와중에도 피해자와 공격자 사이의 라우터는 위에서 공부한 이론대로 이상없이 잘 돌아가는 것을 확인할 수 있다.
CoPP 설정
CoPP를 위한 ACL 설정하고 CoPP용의 ACL과 일치하는 클래스 맵을 구성한다.
#확장 ACL 설정
access-list extended [acl name]
permit icmp any any
permit tcp any any eq 22
#패킷 분류 정의
class-map [name]
match [ip precednece/ip dscp/access-group]
#우리 경우에선
match access-group name [acl-name]
클래스에 대한 서비스 정책 맵을 구성한다. police + 정책 순으로 적게 되는데 여러 정책을 적용하고 싶을시 police + enter 후 정책 설정을 하게 된다.
policy-map [name]
class [class-map name]
police { bits-per-second [normal-burst-bytes] [maximum-burst-bytes [pir peak-rate-bps]]} | [conform-action action] [exceed-action action] [violate-action action]
#나같은 경우엔 그냥 기본적으로 설정했다.
police 100000 conform-action transmit exceed-action drop violation-action drop
#100kbps 이상으로 들어오면 패킷을 드랍한다라는 뜻
위의 형식으로 대부분 작성 하지만 CoPP class-map에는 다양한 설정값이 있다. 아래의 내용은 시스코 문서의 내용을 대충 번역하고 내가 알아들은 내용으로 쓴 것이라 좀 다를 수 있다.
용어 | 설정 내용 및 뜻 |
bc | cir을 넘기지 않거나 혼잡을 발생시키지 않으면서 한번에 보낼 수 있는 최대 크기의 패킷양 |
cir(committed information rate) | 인터넷 서비스 공급자가 정상적인 조건에서 작동하도록 보장하는 회선의 대역폭 |
rate-bps | 평균 트래픽 속도 지정 |
burst-bytes | 버스트 바이트에 일반 버스트 크기를 지정한다. |
bc burst-bytes | 버스트 또는 허용 가능한 버스트 크기 지정 |
bc burst-ms | 적합한 버스트 크기를 입력한다. 기본값은 250이다 |
burst-ms | 적합한 버스트를 지정한다. |
conform-action | rate가 설정된 버스트 값보다 낮을때 실행한다 |
excedd-action | 속도가 준수하면서 conform 버스트 내에서 존재할때 |
violation-action | coform 버스트 바이트와 초과된 버스트 바이트보다 클때 |
drop | 패킷을 버린다 |
transmit | 패킷을 전송한다 |
#앞서 작성한 정책을 컨트롤 플레인에 적용한다
control-plane
service-policy input [policy-map name]
확인 메세지와 함께 새로운 정책이 적용된 것을 알 수 있다.
결과
show policy-map control-plane input
#명령어로 설정된 copp 확인
#class-default에는 알 수 없는 모든 트래픽이 포함되고
#정상적인 상황에서는 안에 아무것도 없어야 한다고 하네여,,값이 왜 있지
#제한된 양의 트래픽을 허용하고 모니터링하면 일반적으로 거부되는 트래픽, 식별되지 않는 트래픽
#들이 이곳에 감지된다고 합니다.
설정한 이후 처음 이론을 확인하기 위한 공격보다 훨씬 오랫동안 공격했는데도 cpu 사용량이 31%초과로 올라가지 않는 것을 확인할 수 있었다.
control-plane을 확인해보면 copp가 정상적으로 적용되어 81 packet과 126350 개의 패킷이 버려진 것을 확인할 수 있다.
설정 종합
access-list extended [acl name]
permit icmp any any
permit tcp any any eq 22
permit ospf any any
class-map [name]
match access-group name [acl-name]
policy-map [name]
class [class-map name]
police 100000 conform-action transmit exceed-action drop violation-action drop
#100kbps 보다 적을때 통신하고 그 외에는 차단하라
control-plane
service input [policy-map name]
show policy-map control-plane input
#설정 확인
'네트워크 > 네트워크 일반' 카테고리의 다른 글
cisco 유저 비밀번호 생성 보안 설정(password,패스워드 보안) (0) | 2023.02.21 |
---|---|
MTU 딥 다이브 (0) | 2023.02.21 |
VRF(Virtual routing and forwarding)-lite (0) | 2023.02.16 |
라우팅 보안 설정 (0) | 2023.01.25 |
802.1AE,MACsec (1) | 2023.01.23 |