Suricata - 침입 탐지 및 방지 보안 도구


Suricata는 침입 감지(IDS), 침입 방지(IPS) 및 네트워크 보안 모니터링을 위한 기능을 제공하는 강력하고 다재다능한 오픈 소스 위협 감지 엔진입니다. 위협 탐지에서 매우 강력한 패턴 일치 혼합과 함께 심층 패킷 검사를 수행합니다.

이 가이드를 작성하는 시점에서 Suricata의 최신 버전은 6.0.5입니다.

  1. IDS/IPS – Suricata는 Emerging Threats Suricata 규칙 세트와 같은 외부 개발 규칙 세트를 활용하여 악의적인 활동, 정책 위반 및 위협에 대한 네트워크 트래픽을 모니터링하는 규칙 기반 침입 탐지 및 방지 엔진입니다.
  2. 자동 프로토콜 감지 – Suricata 엔진은 HTTP 및 HTTPS와 같은 프로토콜을 자동으로 감지합니다. 모든 포트에서 FTP 및 SMB를 사용하고 적절한 감지 및 로깅 논리를 적용합니다. 이는 맬웨어 및 CnC 채널을 감지하는 데 유용합니다.
  3. Lua 스크립팅 – Suricata는 고급 맬웨어 감지 기능을 제공하는 Lua 스크립트를 호출하여 다른 방법으로는 감지하기 어려운 맬웨어 트래픽을 감지하고 디코딩할 수 있습니다.
  4. 다중 스레딩 – Suricata는 네트워크 트래픽 결정에서 속도와 중요성을 제공합니다. 이 엔진은 최신 멀티 코어 하드웨어 칩셋이 제공하는 향상된 처리 능력을 적용하기 위해 개발되었습니다.
  5. Linux에 Suricata 침입 탐지 도구 설치

    이 섹션에서는 RHEL 기반 배포판에 Suricata를 설치하는 방법을 보여줍니다.

    Suricata는 Debian/Ubuntu 리포지토리에서 제공되며 apt 패키지 관리자를 사용하여 쉽게 설치할 수 있습니다. 그러나 이것이 최신 버전의 Suricata를 설치하지 않는다는 점은 주목할 가치가 있습니다. 최신 버전을 설치하려면 이 가이드의 뒷부분에서 다룰 소스에서 설치해야 합니다.

    apt 패키지 관리자를 사용하여 Suricata를 설치하려면 다음 명령을 실행합니다.

    $ sudo apt install suricata -y
    

    Suricata는 일단 설치되면 자동으로 시작됩니다. 이를 다음과 같이 확인할 수 있습니다.

    $ sudo systemctl status suricata
    

    CentOS Stream, Rocky Linux, AlmaLinux, Fedora 및 RHEL과 같은 RHEL 배포판에 Suricata를 설치하려면 먼저 EPEL 저장소를 활성화해야 합니다.

    $ dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm  [RHEL 9]
    $ dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm  [RHEL 8]
    $ yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm  [RHEL 7]
    

    EPEL이 활성화되면 다음 필수 패키지를 설치하고 시스템에 OISF 저장소를 추가하십시오.

    ----------- On Fedora Systems ----------- 
    $ sudo dnf install dnf-plugins-core
    $ sudo  dnf copr enable @oisf/suricata-6.0
    
    ----------- On RHEL Systems ----------- 
    $ sudo dnf install yum-plugin-copr
    $ sudo dnf copr enable @oisf/suricata-6.0
    

    그런 다음 그림과 같이 yum 패키지 관리자를 사용하여 Suricata를 설치합니다.

    $ sudo dnf install suricata -y
    Or
    $ sudo yum install suricata -y
    

    Suricata가 설치되면 시작하고 상태를 확인하십시오.

    $ sudo systemctl start suricata
    $ sudo systemctl status suricata
    

    Linux의 소스에서 Suricata 설치

    기본 OS 리포지토리는 최신 버전의 Suricata를 제공하지 않습니다. 목표가 최신 버전의 Suricata를 설치하는 것이라면 소스에서 설치해야 합니다.

    이 가이드를 작성하는 시점에서 Suricata의 최신 버전은 6.0.5입니다. Ubuntu/Debian 및 RHEL 배포의 소스에서 Suricata를 설치하려면 다음 라이브러리, 컴파일 도구 및 종속성을 설치하십시오.

    ----------- On Debian Systems ----------- 
    $ sudo apt install rustc build-essential cargo libpcre3 libpcre3-dbg libpcre3-dev make autoconf automake libtool libcap-ng0 make libmagic-dev libjansson-dev libjansson4 libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libcap-ng-dev pkg-config libnetfilter-queue1 libnfnetlink0 libnetfilter-queue-dev libnfnetlink-dev -y
    
    ----------- On RHEL Systems ----------- 
    $ sudo yum install gcc libpcap-devel pcre-devel libyaml-devel file-devel zlib-devel jansson-devel nss-devel libcap-ng-devel libnet-devel tar make libnetfilter_queue-devel lua-devel PyYAML libmaxminddb-devel rustc cargo lz4-devel -y
    

    그런 다음 suricata-update 도구를 설치하여 Suricata 규칙을 업데이트합니다.

    $ sudo apt install python3-pip           [On Debian]
    $ sudo yum install python3-pip           [On RHEL]
    $ pip3 install --upgrade suricata-update
    

    그런 다음 /usr/bin/suricata-update에 대한 심볼릭 링크를 만듭니다.

    $ sudo ln -s /usr/local/bin/suricata-update /usr/bin/suricata-update
    

    이제 wget 명령으로 이동하십시오.

    $ wget https://www.openinfosecfoundation.org/download/suricata-6.0.6.tar.gz
    

    다운로드가 완료되면 tarball 파일을 추출하여 설치합니다.

    $ sudo tar -xvf suricata-6.0.6.tar.gz
    $ cd suricata-6.0.6
    $ ./configure --enable-nfqueue --prefix=/usr --sysconfdir=/etc --localstatedir=/var
    $ make
    $ make install-full
    

    Linux에서 Suricata 구성

    Suricata 구성을 시작하려면 내부 IP와 외부 네트워크를 지정해야 합니다. 이렇게 하려면 구성 파일에 액세스합니다.

    $ sudo vim /etc/suricata/suricata.yaml
    

    HOME_NET 지시문의 경우 Linux 시스템의 IP 주소를 지정하십시오.

    HOME_NET: "[173.82.235.7]"
    

    다음으로 EXTERNAL_NET 지시문을 !$HOME_NET으로 설정합니다.

    EXTERNAL_NET: "!$HOME_NET"
    

    그런 다음 Suricata가 네트워크 트래픽을 검사할 네트워크 인터페이스를 지정합니다. 우리의 경우 이것은 eth0 인터페이스입니다.

    ip 명령을 사용하여 활성 네트워크 인터페이스를 확인할 수 있습니다.

    $ ip a
    

    구성 파일에서 인터페이스 지시문을 네트워크 인터페이스의 이름으로 업데이트합니다.

    - interface: eth0
    

    그런 다음 default-rule-path 속성이 /etc/suricata/rules로 설정되어 있는지 확인합니다.

    그런 다음 변경 사항을 저장하고 구성 파일을 닫습니다. 그런 다음 변경 사항을 적용하려면 Suricata를 다시 시작하십시오.

    $ sudo systemctl status suricata
    

    Linux에서 Suricata 규칙 세트 업데이트

    기본적으로 Suricata는 /etc/suricata/rules 디렉토리에 제한된 감지 규칙 세트와 함께 제공됩니다. 그러나 이들은 침입 탐지에 약하고 비효율적인 것으로 간주됩니다. Suricata에 대한 가장 포괄적인 규칙 집합으로 간주되는 ET(Emerging Threat) 규칙을 로드해야 합니다.

    Suricata는 외부 공급자로부터 규칙 집합을 가져오는 suricata-update라는 도구를 제공합니다. 서버에 대한 최신 규칙 세트를 얻으려면 다음 명령을 실행하십시오.

    $ sudo suricata-update -o /etc/suricata/rules
    

    출력에서 무료 Emerging Threats ET Open Rules를 가져와 Suricata의 /etc/suricata/rules/suricata 규칙 파일에 저장하는 suricata-update를 볼 수 있습니다. 또한 처리된 규칙의 수를 나타냅니다. 이 예에서는 총 35941개가 추가되었습니다. 그 중 28221개가 활성화되었고 18개가 제거되었으며 1249개가 수정되었습니다.

    Linux에서 Suricata 규칙 집합 추가

    suricata-update 도구를 사용하면 규칙 세트 제공자로부터 규칙을 가져올 수 있습니다. ET Open 세트와 같은 일부는 무료이고 다른 일부는 유료 구독이 필요합니다.

    기본 규칙 공급자 집합을 나열하려면 표시된 대로 suricata-update 명령을 실행합니다.

    $ sudo suricata-update list-sources
    

    tgreen/hunting 규칙 세트와 같은 규칙 세트를 추가하려면 다음 명령을 실행하십시오.

    $ sudo suricata-update enable-source tgreen/hunting
    

    규칙 세트를 추가했으면 -o /etc/suricata/rules 플래그와 함께 suricata-update 명령을 한 번 더 실행하십시오.

    $ sudo suricata-update -o /etc/suricata/rules
    

    Linux에서 Suricata 규칙 테스트

    Suricata 테스트를 시작하기 전에 구성이 괜찮은지 테스트하는 것이 좋습니다. 이렇게 하려면 다음 명령을 실행합니다.

    $ sudo suricata -T -c /etc/suricata/suricata.yaml -v
    

    보고된 오류가 없는지 확인하십시오. RHEL을 실행 중인 경우 CentOS Stream, Fedora 및 Rocky Linux가 Suricata를 시작하고 활성화합니다.

    $ sudo systemctl start suricata 
    $ sudo systemctl enable suricata 
    

    지금까지 Suricata를 성공적으로 설치 및 구성했으며 규칙 집합을 업데이트했습니다. ET Open Rule Set에는 악성 트래픽 탐지를 위한 30,000개 이상의 규칙이 포함되어 있습니다. 이 섹션에서는 Suricata를 테스트하고 의심스러운 네트워크 트래픽을 감지할 수 있는지 확인합니다.

    Suricata의 빠른 시작 가이드에서 권장하는 침입을 시뮬레이션하여 ET Open 규칙 세트를 테스트합니다.

    IDS 기능은 NIDS(Network Intrusion and Detection System) 프레임워크인 testmynids.org 웹사이트에 HTTP 요청을 전송하여 서명 ID 2100498로 테스트됩니다.

    $ curl http://testmynids.org/uid/index.html
    

    다음 출력을 얻어야 합니다.

    uid=0(root) gid=0(root) groups=0(root)
    

    전송된 HTTP 요청은 셸을 통해 손상된 원격 시스템에서 실행될 수 있는 id 명령의 출력을 모방하여 경고를 트리거하도록 설계되었습니다.

    이제 해당 경고에 대해 Suricata의 로그를 살펴보겠습니다. Suricata는 기본적으로 활성화된 두 개의 로그 파일과 함께 제공됩니다.

    /var/log/suricata/fast.log
    /var/log/suricata/eve.log
    

    grep 명령에 해당하는 /var/log/suricata/fast.log 로그 파일의 로그 항목을 확인합니다. 빠른 시작 설명서에서 2100498 규칙 식별자를 사용하여 로그 항목을 검색합니다.

    $ grep 2100948 /var/log/suricata/fast.log
    

    침입을 나타내는 다음과 같은 출력이 표시됩니다. 여기서 173.82.235.7은 서버의 공개 IP 주소입니다.

    09/09/2022-22:17:06.796434  [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 13.226.210.123:80 -> 173.82.235.7:33822
    

    또는 /var/log/suricata/eve.log 로그 파일에서 다음과 같이 서명 ID 2100498을 확인할 수 있습니다.

    $ jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json
    

    이것은 Linux에서 Suricata를 설치하고 구성하는 방법에 대한 포괄적인 가이드였습니다. 다양한 설치 방법, Suricata 구성 및 Suricata 규칙 업데이트 방법, Suricata 시스템 서비스 관리 및 네트워크 침입 테스트 수행 방법을 살펴보았습니다.

    이제 Suricata를 편안하게 설치하고 사용하여 네트워크 침입이나 악의적인 트래픽으로부터 시스템을 보호할 수 있기를 바랍니다.