본문 바로가기

네트워크

[suricata] 수리카타를 이용한 IPS 테스트

728x90

안녕하세요 여러분 반갑습니다.

 

약 한 달만에 뵙습니다.

 

오늘은 지난번 IDS의 연장선인 IPS를 suricata를 통해 진행해보도록하겠습니다.

 

우선 IDS가 침입 탐지 시스템이었습니다. 네트워크로 들어오는 트래픽에 대해서 단순히 탐지하는 기능이었죠

 

IPS는 조금 다릅니다. 침입 방지 시스템입니다.(침입 차단 시스템이라고도함) P(prevention)

 

IPS는 침입을 탐지하고 탐지한 트래픽에 대해서 수상한 트래픽이 발견되면 정해놓은 rule대로 처리합니다.

 

예를들어 특정 웹서버에 1초에 10번의 접근이 이루어지면 그 트래픽을 차단시킨다. 라는 rule을 적어놓으면 IPS는 해당 rule대로 일을 처리합니다.

 

오늘도 역시 suricata 공식 docs를 참고합시다. 제가 설치한 버전은 5.0.3입니다. 참고하세요

 

suricata.readthedocs.io/en/suricata-5.0.3/setting-up-ipsinline-for-linux.html?highlight=ips

 

13. Setting up IPS/inline for Linux — Suricata 5.0.3 documentation

13.2.1. AF_PACKET IPS mode AF_PACKET capture method is supporting a IPS/Tap mode. In this mode, you just need the interfaces to be up. Suricata will take care of copying the packets from one interface to the other. No iptables or nftables configuration is

suricata.readthedocs.io

요 IPS를 구성하는 네트워크 구성방식에도 종류가 여러개있는 것으로 알고있는데 제가 사용할 방법은 인라인 방식입니다. 또 네트워크 구성이 공식 docs에 적혀있는 것과 조금 상이하다는 점을 미리 말씀드립니다.

 

 

 

수리카타 IPS모드를 실행을 위해서는 iptalbes의 규칙을 추가해줘야합니다.

 

인라인모드란 네트워크 통로 사이에 수리카타를 집어넣어서 패킷을 직접 관리하는 방식입니다.

 

 

해당 블로그에 정리가 잘되어있으니 참고하시기바랍니다. 

run-it.tistory.com/47

 

IDS/IPS 란 무엇일까요 ?

2019년 새해가 밝았습니다 황금 돼지의 해, 올해는 또 얼마나 즐거운 일이 가득할까요 아이 죠항 2019년 첫번째 글, IDS/IPS 란 무엇일까 ? 시작하겠습니다 렛츠 고고고 ~ 1. IDS/IPS 란? IDS + 차단 기능 =

run-it.tistory.com

 

 

 

 

 

그림으로 대략 나타내보면 이런느낌이 됩니다.

 

이를 위해 수리카타로 네트워크 트래픽이 먼저 걸치게 조정을 해야합니다. iptable 규칙 변경을 통해서요

$ sudo iptables -I FORWARD –j NFQUEUE    # iptables 규칙 추가

 

이렇게 해주시고 

$ iptables -L

명령어를 쳐주시면 규칙이 잘 추가된 것을 확인할 수 있습니다. 이제 수정해야할 건 규칙입니다.

 

우선 test.rule 파일을 만들어줍시다.

 

/var/lib/suricata/rules/ 위치에 rule파일을 만들어줍시다. 왜냐하면 suricata.yaml파일에 적힌 기본 룰 위치가 이 경로로 되있기 때문입니다. 

suricata.yaml 파일의 위치는 /etc/suricata/ 에 위치해있습니다.

 

기본 룰 위치는 suricata.yaml 파일에서 변경가능합니다. 

 

test.rules 파일을 만들어줍시다. 기본적으로 기록되는 ping과 ssh접속은 너무 쉬우니 특정 웹을 차단하는 방법을 해봅시다.

 

특정 웹을 차단하기 위해서는 인바운드 아웃바운드 두 개 모두를 차단해줘야합니다.

 

drop tls any any -> any <차단할서버포트> (msg:"차단메시지 :)"; classtype:misc-activity; sid:1000015; priority:1;)
drop tls any <차단할서버포트> -> any any (msg:"차단메시지2"; classtype:misc-activity; sid:1000016; priority:1;)

 

룰에 대한 규칙은 공식문서에 나와있으니 참고하시기바랍니다. 

 

하여튼 저는 tls 프로토콜로 차단할 서버포트로 들어오는 것들과 나가는 트래픽을 차단했습니다. 여기에 좀 더 규칙을 추가하면 1초에 5번의 접근 발생시 차단 같은 조건들도 추가할 수 있습니다. 저도 좀 더 자세한 규칙은 아직 잘 모르겠습니다.

 

이런식으로 규칙을 만들고 suricata.yaml파일 룰 추가하는 곳에 test.rules 파일을 추가해줍시다.

 

suricata.yaml파일 밑에 rule-files 위치에 suricata.rules 기본파일은 주석해줍시다. 안그러면 너무 많이 로그가 남아서 헷갈리니

 

rule-files:
#  - suricata.rules
  - test.rules

자 이제 ips모드를 실행시키는 일만 남았는데요

 

 

sudo suricata -c /etc/suricata/suricata.yaml -q 0

 

실행을 시켰으면 로그를 확인해봐야겠죠??

 

터미널을 하나 더 실행시켜서 

 

taeil –f /var/log/suricata/fast.log

로그를 확인해봅시다. 그리고 차단한 웹으로 접속이 되는지 확인해봅시다.

 

로그에 Drop이란 메시지가 뜨고 접속이 안되면 성공입니다. 

 

그리고 규칙을 바꾸고 싶으시면 ips모드를 종료한 후 rule 수정후 수리카타를 재시작해주고 다시 ips모드를 실행시키면됩니다. 

 

systemctl restart suricata 나 service suricata restart를 사용하시면 됩니다.

 

오늘은 여기까지 입니다 :)

반응형