오픈소스 네트워크 위협 탐지 엔진인 수리카타(Suricata)는 침입 탐지 시스템(IDS), 침입 방지 시스템(IPS), 네트워크 보안 모니터링(NSM)을 하나의 도구로 수행할 수 있어 전 세계 3,100만 명 이상의 사용자에게 신뢰받고 있습니다. 이 글에서는 수리카타의 작동 원리부터 설치 방법, 실전 활용법까지 자세히 살펴봅니다.
수리카타의 작동 원리
수리카타는 시스템에서 패킷을 한 번에 하나씩 가져온 뒤, 사전 처리 과정을 거쳐 탐지 엔진으로 전달합니다. pcap을 활용한 IDS 모드로 실행할 수도 있고, 리눅스의 nfnetlink_queue 기능을 이용해 네트워크 위협을 실시간으로 탐지할 수도 있습니다. 악성 패킷으로 판별되면 해당 패킷은 즉시 차단(dropping)됩니다.
수리카타가 탐지할 수 있는 것들
수리카타는 파일 식별, MD5 체크섬, 파일 추출 기능을 통해 다양한 파일 유형을 손쉽게 식별합니다. MD5 체크섬 모니터링 기능으로 시스템 파일의 변경 사항을 지속적으로 감시하거나, 알려진 MD5 체크섬을 가진 악성코드 파일을 검색해 그 위치를 항상 파악할 수 있습니다.
시그니처 기반 탐지
수리카타는 최고 수준의 시그니처 기반 침입 탐지 플랫폼으로, Bricata의 3대 탐지 엔진 중 하나로 꼽힙니다. 시그니처는 Emerging Threats라는 무료 오픈소스 룰 데이터베이스에서 제공되며, 누구나 다운로드해 수리카타 인스턴스에 적용할 수 있습니다.
룰(Rule)의 구조
수리카타의 룰은 HTTP, FTP, TLS(SSL 포함), SMB, DNS 등 다양한 프로토콜을 지원합니다. 이러한 프로토콜들은 흔히 '레이어 7 프로토콜'이라 불리는 애플리케이션 계층에 속합니다. 예를 들어 HTTP 프로토콜로 서명된 트래픽에는 HTTP 관련 시그니처만 매칭되도록 보장하여 정확도를 높입니다.
호스트 기반 vs 네트워크 기반
수리카타는 크게 세 가지 용도로 활용됩니다. 가장 간단한 구성인 호스트 기반 IDS는 개별 컴퓨터의 네트워크 트래픽을 모니터링하고, 네트워크 기반(NIDS)으로 운영하면 네트워크 전체 트래픽을 감시하다가 악성 행위가 탐지될 때마다 관리자에게 즉시 알립니다.
NIDS의 탐지 방식
시그니처 기반 보호 시스템은 네트워크 트래픽에서 바이트 수, 1과 0의 개수 같은 특정 패턴을 관찰하여 공격을 식별합니다. 또한 이전에 알려진 악성 명령어 시퀀스를 분석해 멀웨어를 탐지합니다.
이상 탐지(Anomaly Detection)와의 결합
NIDS 구성 요소 중 수리카타는 시그니처 기반 탐지 장치로서 알려진 공격을 찾아내고, 아이솔레이션 포레스트 알고리즘(Isolation Forest Algorithm, IFA)은 네트워크 이상 징후를 탐지하는 데 활용됩니다. 수리카타는 오랫동안 사용되어 온 Snort IDS의 멀티스레드 대안으로 개발되었습니다.
Snort와 수리카타 비교
수리카타는 OpenAppID를 통해 애플리케이션 탐지를 수행하지만 속도가 다소 느린 편입니다. 반면 멀티스레드 아키텍처 덕분에 대량 트래픽 처리에 유리합니다. Snort 역시 시그니처 기반 탐지를 채택하고 있으며, 네트워크 트래픽의 패턴을 공격 패턴과 매칭하는 방식으로 동작합니다. 두 도구 모두 비정상적인 시스템 콜 탐지보다는 네트워크 트래픽 분석에 초점을 맞춥니다.
방화벽으로서의 수리카타
2020년 11월부터는 AWS Network Firewall 서비스에서도 오픈소스 룰셋을 가져오거나 수리카타 룰 문법으로 직접 작성한 IPS 룰을 사용할 수 있게 되었습니다. 이를 통해 클라우드 환경에서도 수리카타의 강력한 탐지 규칙을 손쉽게 적용할 수 있습니다.
리눅스에서 수리카타 설치하기
수리카타는 무료로 다운로드할 수 있으며, 일반적인 설치 과정은 다음과 같습니다.
1. 소프트웨어가 저장된 디렉터리에 접근합니다.
2. 필요한 구성 요소를 추가한 뒤 컴파일, 빌드, 구성, 설치를 진행합니다.
3. 적절한 권한을 설정합니다.
4. IDS를 데몬(daemon) 형태로 등록합니다.
5. 로그를 확인해 정상 동작 여부를 점검합니다.
우분투(Ubuntu) 환경에서의 설치
Ubuntu 18에서는 소스 코드로부터 수리카타를 설치합니다. 기본적으로 방화벽 모듈이 IDS 기능을 담당하며, IPS 기능까지 구현하려면 추가 라이브러리 설치가 필요합니다. tarball 다운로드가 완료되면 압축을 해제하고, 추출된 디렉터리로 이동해 수리카타 엔진이 컴파일되도록 구성합니다.
클라우드 서버에서 실행
Atlantic.Net 클라우드 서버를 새로 생성하고 로그인한 뒤 의존성 패키지를 설치하고, 수리카타를 설치·구성한 후 DDoS 공격 시나리오로 성능을 테스트해 볼 수 있습니다.
가상 머신을 통한 접근
IDS를 구동하려면 먼저 가상 머신을 생성하고 어댑터 2를 통해 네트워크에 연결합니다. 어댑터 연결이 완료되면 운영체제(본 튜토리얼에서는 32비트 우분투)를 설치합니다.
IPS 모드로 실행하기
IPS 모드로 운영하려면 Netfilter 패키지를 설치한 후 수리카타 구성 파일에서 NFQueue 옵션을 활성화합니다. 이어서 설치와 빌드를 마치고 iptables 규칙을 만들어 방화벽을 구성한 뒤, NFQ 모드로 수리카타를 설정하고 실행하면 NFQUEUE를 통한 패킷 필터링이 시작됩니다.
수리카타 활용 사례와 평가
매출 10억 달러 이상, 직원 1만 명 이상 규모의 Code42, 카네기 멜론 대학(CMU) 등 다양한 기업과 교육기관이 수리카타를 도입해 사용하고 있습니다. 실제 사용자 리뷰에서는 "수리카타는 가성비가 뛰어난 오픈소스 네트워크 기반 IDS"라며, 다른 오픈소스 룰셋과 결합하면 네트워크 위협을 상당히 효과적으로 탐지할 수 있다는 긍정적인 평가를 받고 있습니다.