라즈베리파이 클러스터를 이용한 snort IDS/IPS 구현 어떻게 생각 하시나요?

injun000의 이미지

안녕하세요!

정보보안을 전공하는 학부 4학년생 입니다.

이번 전공연구 프로젝트로 라즈베리파이 클러스터를 이용한 snort IDS/IPS 구현을 구상하고 있습니다. 사진은 예시를 든것으로 아직 LVS라던지 세부 구성은 미정입니다.

이 프로젝트가 실용성이 있을만큼 성공한다면 약 40-~50만원 정도로(6노드) 저렴하게 보안장비를 구축할수 있지 않겠나 하는 망상을 해보고 있습니다.

제가 질문드리고자 하는것은 종합적으로 말하면 '과연 이것이 가능한가?' 입니다.

기본적인 파이 클러스터링 관련 자료는 구글에 정말 많이 나오는편입니다만 그 클러스터에 snort, bro, Suricata 등의 오픈소스 IDS를 올린 사례를 찾기가 너무 힘이 듭니다.

저는 기본적인 리눅스 제어와 시스템 프로그래밍, MPI의 개념이나 클러스터링의 개념, IPS.IDS의 개념 정도를 알고 있는 상태이며 오픈소스 IDS의 구성을 계속해서 보고 있으나

제가 하고자 하는 프로젝트를 하다못해 비슷하게나마 진행한 사람이 없어 시작 전 자료 수집단계부터 많이 힘이 듭니다.

예로들어 각 노드에 snort를 다 올릴것인지 아니면 구성을 쪼개어서 올릴것인지 외부 네트워크에서 날아오는 패킷은 어떤식으로 분산한것인지. 어떻게 다시 합해 사용자에게 보낼것인지.

쪼개지 않아야 잡히는 악성코드는?, 꼭 마스터/슬레이브 방식으로 해야하는가? 등등.. 생각해봐야 할 부분은 너무도 많은데 주변에 도움 받을만한 사람이 없어 해매고 있습니다.

혼자 머리 싸매고 몇주를 찾아 해매다 너무 답답해서 이렇게 글을 적어봅니다. 두서없이 막 적어서 정말 죄송합니다.

가능은 한것인지 가능하다면 어떤식으로 방향을 잡아야 할것인지. 제가 하고자 하는 프로젝트에 크게 참고할만한 자료는 어떤 검색어가 좋을지 등등...

모쪼록 조언을 부탁드리겠습니다.

calmperson의 이미지

프로젝트가 실용성이 있으려면 1Gbps 정도의 트래픽은 처리할 수 있어야 할텐데 라즈베리파이로 가능할지 의문입니다.
찾아보니 기가비트는 아예 지원이 안되네요. 이더넷 포트도 1개만 달려있어서 망 구성도 어찌할지 제 머리로는 생각이 잘 안됩니다.

패킷을 분산해서 처리하고 내보내는 것에 대해서는 Tilera 라는 곳에서 만든 제품이 다수의 코어를 이용해 패킷을 나누어 처리하는 컨셉을 가지고 있는데 이건 네트워크 카드 형태로 되어 있어서 도움이 될지는 모르겠네요.. 컨셉 정도는 살펴볼 수 있을지도 모르겠습니다

"그때의 두려움을 어찌 잊을 수 있으리오!"
왕이 말했다.
"하지만"
여왕은 말을 이었다.
"메모해 두지 않으면 잊고 말 겁니다."

jw8704의 이미지

냉장고 혹은 티코를 시멘트 대신에 창고 벽을 만드는데 이용하면 어떨까요? 와 비슷한 맥락이라고 보여집니다.
(냉장고 혹은 티코의 단단한 표면특성과 사각형 형태는 벽을쌓기에 적합한 소재가 될수있기 때문이죠, 하지만 시멘트로 벽돌만들어서 하는것이 효과적입니다.)

최근에 라즈베리파이,아두이노등.. 확장성과 어느정도 추상성을 갖춘 대중적인 플랫폼들이 나왔지만..

사실 제생각에는 매우 객체화 되어있다고 생각합니다.. 그것들은 다른 응용을 위해 기반이될수있는 특징적인것들을 갖추고있기야하지만.. 그것을 이용해서 다른 응용을 하는것은.. 위에 말씀드린 예와 비슷한 맥락같습니다.

방화벽을 만드는 하드웨어,소프트웨어 적인 기술은 이미 따로 널리 사용되는 방법들이있습니다.

라즈베리 파이로 할수있는 의미있는일은.. 라즈베리파이간에 분산환경을 위한 프레임웍 만들기 또는 라즈베리파이에 희안한 OS 올려서 추후 그런작업을 하려는 사람에게 도움이되기.. 외에는 없을것같습니다.

아두이노도 마찬가지라고 생각합니다.

다른분들의 의견도 듣고싶네요..

chocokeki의 이미지

수많은 패턴 매칭을 해야하는데 그 cpu 스펙으로 처리 안됩니다
100Mbps 처리만 해도 정말 정말 장하다고 생각되네요

시장에 아톰레벨 장비로 나온게 몇몇 있긴 한데 솔직히 성능 별롭니다 :(

kycfeel의 이미지

100Mbps 트래픽 처리만 해도 장하다고 토닥토닥 전기 많이 먹여줘야 합니다.
Gbps 급 처리가 가능한 "실용적인" IDS/IPS 장비를 원하신다면 x86기반 PC장치로 구현하시는 편이 가장 좋다고 생각합니다.

모지리의 이미지

KLDP에 진짜 오랫만에 들어와봤네요. ^^

제가 한 8년전에 시도하다 포기한 프로젝입니다. 일단 어떤 방식으로 구성하던지 CPU 파워를 기반으로 하면 실패할 확률이 높을겁니다.
즉, 외부의 전용 가속기를 사용해야 하는데 가격이 너무 비싸고 패턴 또한 자유롭게 올릴수가 없었습니다. 단지 snort만 기반으로 한다면
아무런 문제가 없지만 [이러한 방식으로]으로 생각을 하게 될경우부터는 많은 난관에 부딪히게 될겁니다. 저의 경우는 인텔 지온 기반으로
400Mbps까지 올려봤습니다. 가속보드를 썼을 경우는 1G로 올렸지만 망할노무 가속보드 업체가 가시를 치는 바람에.... ㅠ.ㅠ

그중 대표적인것이 정규표현식으로 문자열(시스템 로드 왕창!)을 다뤄야 된다는것과 L4이상의 패킷에 대해 다양한 경험이 있어야 됩니다.
저는 무식하게 그냥 리눅스 커널에 올려서 이걸 작업했었는데 패킷 재조합때문에 생 노가다를 했던 기억이 있습니다. 사용자 영역에서 하게
되면 이부분은 조금 쉽게 접근 가능할겁니다.

그리고 또 한가지 생각해봐야될 부분이요. 21세기 환경에서는 라즈베리가 인텔 계열 환경에 비해 무척 저렴한 환경이지 RISC계열에서는
꼭 그렇지만은 않다는겁니다. 다영한 고사양 CPU들이 등장하고 네트웍 전용 프로세서를 탑재한것도 있습니다. 그리고 IPS로서 제대로 작동이
될려면 10G는 또 기본입니다. 그냥 제 생각으로는 단지 분산 처리라는것만으로는 큰 메리트는 없어 보입니다.

* 패킷을 분산한다면 경로및 재조합에 대해 유의 해야 할겁니다. 사용자 입장에서 왜 버벅되지? 끊기지 하는 상황이 나옵니다.
* iptables 커널 모듈을 하나 만들어 큐에 넣어 이걸 핸들링 한다면 커널쪽에서 바로 차단도 가능합니다.
* 역시 커널쪽에서 패킷 검증도 가능합니다. 물론 재조합 문제를 해결해야 합니다.
* CPU 파워를 너무 믿으면 곤란해집니다. 적절하게 가속기를 사용할 방법을 찾아야 될겁니다.
* 가능하면 10G 환경을 구축해야 될겁니다.
* 너무 분산쪽 말고라도 다른 RISC 계열도 한번 알아보세요.(의미가 없을래나요? 흐)

건투를 빕니다.