CentOS 8 Stream에 Suricata 설치하기

소개

Suricata는 커뮤니티에서 만든 세트와 사용자 정의된 신호(룰이라고도 함)를 사용하여 네트워크 트래픽을 검사하고 처리하는 네트워크 보안 모니터링(NSM) 도구입니다. Suricata는 의심스러운 패킷이나 서버에서 실행 중인 다양한 서비스로의 요청을 감지할 때 로그 이벤트를 생성하고 경고를 트리거하며 트래픽을 삭제할 수 있습니다.

기본적으로 Suricata는 서버나 네트워크에서 의심스러운 트래픽을 스캔하기 위한 수동 침입 탐지 시스템(IDS)으로 작동합니다. 추가 조사를 위해 경고를 생성하고 로그에 기록합니다. 또한 특정 규칙과 일치하는 네트워크 트래픽을 기록, 경고 및 완전히 차단하는 활성 침입 방지 시스템(IPS)으로 구성할 수도 있습니다.

네트워크의 게이트웨이 호스트에 Suricata를 배포하여 다른 시스템에서 오고 가는 모든 네트워크 트래픽을 스캔하거나, 각 모드에서 개별적인 기기에서 로컬로 실행할 수 있습니다.

이 자습서에서는 Centos 8 Stream에서 Suricata를 설치하고 기본 설정을 사용자의 요구에 맞게 사용자 정의하는 방법을 배우게 됩니다. 또한 Suricata가 의심스러운 요청과 데이터를 감지할 때 올바르게 작동하는지 테스트하는 방법을 배우게 됩니다.

전제 조건

Suricata를 사용하는 방식 및 네트워크 구성에 따라 서버에 필요한 CPU 및 RAM이 다를 수 있습니다. 일반적으로 검사할 트래픽이 많을수록 Suricata에 할당해야 할 자원이 많아집니다. 제품 환경에서는 적어도 2개의 CPU와 4GB 또는 8GB의 RAM을 할당하는 것이 좋습니다. 그 이후에는 Suricata의 성능과 처리해야 할 트래픽 양에 따라 자원을 확장할 수 있습니다.

Suricata를 실행 중인 서버를 보호하기 위해 Suricata를 사용할 계획이라면 다음이 필요합니다:

  • 두 개 이상의 CPU, sudo 비루트 사용자 및 활성화된 방화벽이 있는 하나의 Centos 8 Stream 서버. 이를 설정하려면 CentOS Linux 8에서 초기 서버 설정 튜토리얼을 따를 수 있습니다.

그렇지 않으면, 여러 서버를 모니터링하고 보호하기 위해 게이트웨이 호스트에서 Suricata를 사용할 계획이라면 호스트의 네트워킹이 올바르게 구성되어 있는지 확인해야 합니다.

DigitalOcean을 사용하는 경우 돌프릿을 VPC 게이트웨이로 구성하는 방법 가이드를 따를 수 있습니다. 이 지침은 대부분의 CentOS, Fedora 및 기타 RedHat 파생 서버에도 작동해야 합니다.

단계 1 — Suricata 설치

Suricata를 설치하려면 CentOS 시스템에 Open Information Security Foundation(OISF)의 소프트웨어 저장소 정보를 추가해야합니다. 이를 위해 dnf copr enable 명령을 사용할 수 있습니다. 또한 Extra Packages for Enterprise Linux (EPEL) 저장소를 추가해야합니다.

dnf 패키지 도구의 Community Projects (copr) 하위 명령을 활성화하려면 다음을 실행하십시오:

  1. sudo dnf install 'dnf-command(copr)'

추가 종속성을 설치하고 CentOS Linux 배포의 GPG 키를 수락해야합니다. y를 누르고 각각 ENTER를 눌러 copr 패키지의 설치를 완료하십시오.

다음으로 다음 명령을 실행하여 시스템에 OISF 저장소를 추가하고 사용 가능한 패키지 목록을 업데이트하십시오:

  1. sudo dnf copr enable @oisf/suricata-6.0

저장소를 추가하려는지 확인하는 메시지가 표시되면 yENTER를 누르십시오.

이제 Suricata를 위해 일부 추가 종속성 패키지를 사용할 수 있게 하는 epel-release 패키지를 추가하십시오:

  1. sudo dnf install epel-release

GPG 키를 가져오라는 메시지가 표시되면 yENTER를 눌러 수락하십시오.

이제 필요한 소프트웨어 저장소가 활성화되었으므로 dnf 명령을 사용하여 suricata 패키지를 설치할 수 있습니다:

  1. sudo dnf install suricata

OISF 리포지토리의 GPG 키를 추가하라는 프롬프트가 표시되면 y를 누르고 ENTER를 누르십시오. 패키지 및 해당 종속 항목이 이제 다운로드되고 설치됩니다.

다음으로 suricata.service를 활성화하여 시스템이 재부팅될 때 실행되도록하십시오. 다음 명령을 사용하여 systemctl을 사용하십시오:

  1. sudo systemctl enable suricata.service

서비스가 활성화되었음을 나타내는 다음과 같은 출력을받아야합니다:

Output
Created symlink /etc/systemd/system/multi-user.target.wants/suricata.service → /usr/lib/systemd/system/suricata.service.

이 튜토리얼의 다음 섹션으로 이동하기 전에 Suricata를 구성하는 방법을 설명하는 부분에서 systemctl을 사용하여 서비스를 중지하십시오:

  1. sudo systemctl stop suricata.service

Suricata를 중지하면 구성 파일을 편집하고 테스트 할 때 Suricata가 다시 시작될 때 변경 사항이 유효화되고 로드됩니다.

단계 2 — 처음으로 Suricata 구성

OISF 리포지토리의 Suricata 패키지는 다양한 사용 사례를 다루는 구성 파일이 함께 제공됩니다. Suricata의 기본 모드는 IDS 모드이므로 트래픽이 삭제되지 않고 기록됩니다. Suricata를 배우는 동안 기본값으로 설정하는 것이 좋습니다. Suricata를 구성하고 환경에 통합하고 알림을 받을 트래픽 유형을 잘 알고 나면 IPS 모드를 활성화할 수 있습니다.

그러나 기본 구성에는 여전히 환경 및 요구 사항에 따라 변경해야 할 몇 가지 설정이 있을 수 있습니다.

(선택 사항) 커뮤니티 플로우 ID 활성화

Suricata는 다른 도구에서 생성된 데이터셋의 레코드와 개별 이벤트 레코드를 쉽게 일치시키기 위해 JSON 출력에 커뮤니티 ID 필드를 포함할 수 있습니다.

Suricata를 Zeek 또는 Elasticsearch와 같은 다른 도구와 함께 사용할 계획이라면, 지금 커뮤니티 ID를 추가하는 것이 좋습니다.

옵션을 활성화하려면, vi 또는 기호에 따라 /etc/suricata/suricata.yaml을 엽니다:

  1. sudo vi /etc/suricata/suricata.yaml

120번째 줄을 찾아보세요. 해당 줄은 # 커뮤니티 플로우 ID로 되어 있습니다. vi를 사용하는 경우 120gg를 입력하여 해당 줄로 바로 이동합니다. 해당 줄 아래에는 community-id 키가 있습니다. 설정을 활성화하려면 true로 설정하세요:

/etc/suricata/suricata.yaml
. . .
      # 커뮤니티 플로우 ID
      # EVE 레코드에 'community_id' 필드를 추가합니다. 이러한 것들은
      # 레코드에 예측 가능한 플로우 ID를 제공하여
      # 다른 도구의 출력과 일치시킬 수 있습니다(예: Zeek (Bro)).
      #
      # 센서 및 도구 간에 동일해야 하는 '시드'를 가져옵니다
      # ID를 덜 예측 가능하게 만들기 위해.

      # 커뮤니티 ID 기능을 활성화/비활성화합니다.
      community-id: true
. . .

이제 이벤트를 조사할 때, 1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ=와 같은 ID가 있습니다. 이를 사용하여 서로 다른 NMS 도구 간에 레코드를 연관시킬 수 있습니다.

/etc/suricata/suricata.yaml 파일을 저장하고 닫으세요. vi를 사용하는 경우 다음과 같이 할 수 있습니다. ESC를 누른 후 :x를 입력하고, 그런 다음 파일을 저장하고 종료하려면 ENTER를 누릅니다.

사용할 네트워크 인터페이스 결정하기

Suricata가 트래픽을 검사할 기본 네트워크 인터페이스 또는 인터페이스를 재정의해야 할 수 있습니다. OISF Suricata 패키지와 함께 제공되는 구성 파일은 기본적으로 eth0이라는 장치에서 트래픽을 검사하도록 설정되어 있습니다. 시스템이 다른 기본 네트워크 인터페이스를 사용하거나 하나 이상의 인터페이스에서 트래픽을 검사하려는 경우 이 값을 변경해야 합니다.

기본 네트워크 인터페이스의 장치 이름을 결정하려면 다음과 같이 ip 명령을 사용할 수 있습니다.

  1. ip -p -j route show default

-p 플래그는 출력을 보다 가독성 있게 포맷하고, -j 플래그는 출력을 JSON 형식으로 인쇄합니다.

다음과 같은 출력을 받아야 합니다:

Output
[ { "dst": "default", "gateway": "203.0.113.254", "dev": "eth0", "protocol": "static", "metric": 100, "flags": [ ] } ]

dev 라인은 기본 장치를 나타냅니다. 이 예제 출력에서 장치는 강조된 eth0 인터페이스입니다. 귀하의 출력에는 ens... 또는 eno...과 같은 장치 이름이 표시될 수 있습니다. 이름이 무엇이든지, 그것을 주목하세요.

이제 Suricata의 구성을 편집하고 인터페이스 이름을 확인하거나 변경할 수 있습니다. 선호하는 편집기 vi 또는 사용하여 /etc/suricata/suricata.yaml 구성 파일을 엽니다.

  1. sudo vi /etc/suricata/suricata.yaml

파일을 스크롤하여 af-packet:이라는 줄이 약 580번째 줄 주변에 나타날 때까지 이동합니다. vi를 사용하는 경우 580gg를 입력하여 직접 해당 줄로 이동할 수도 있습니다. 해당 줄 아래에는 Suricata가 트래픽을 검사하는 데 사용할 기본 인터페이스가 있습니다. 다음과 같이 강조된 예제와 일치하도록 해당 줄을 편집합니다:

/etc/suriata/suricata.yaml
# Linux 고속 캡처 지원
af-packet:
  - interface: eth0
    # 수신 스레드 수. "auto"는 코어 수를 사용합니다.
    #threads: auto
    # 기본 클러스터 ID. AF_PACKET은 흐름을 기반으로 패킷을 로드 밸런싱합니다.
    cluster-id: 99
. . .

추가 인터페이스의 트래픽을 검사하려면, 더 많은 - interface: eth... YAML 개체를 추가할 수 있습니다. 예를 들어, enp0s1이라는 장치를 추가하려면, 약 650번째 줄 주변의 af-packet 섹션 맨 아래로 스크롤하십시오. 새 인터페이스를 추가하려면 다음과 같이 - interface: default 섹션 앞에 삽입하십시오.

/ec/suricata/suricata.yaml
    # eBPF 및 XDP 설정, 포함 우회, 필터링 및 로드 밸런싱을 위해 
    # doc/userguide/capture-hardware/ebpf-xdp.rst에서 추가 정보를 확인하세요.

  - interface: enp0s1
cluster-id: 98

  - interface: default
    #threads: auto
    #use-mmap: no
    #tpacket-v3: yes

cluster-id 값을 고유하게 선택하십시오. - 인터페이스 객체.

편집기를 열어 두고 다음 섹션으로 진행하여 라이브 규칙 다시 로드를 구성합니다. 해당 설정을 사용하고 싶지 않다면 /etc/suricata/suricata.yaml 파일을 저장하고 닫을 수 있습니다. vi를 사용 중이라면 ESC를 누른 후 :xENTER를 눌러 저장하고 종료할 수 있습니다.

라이브 규칙 다시 로드 구성

Suricata는 라이브 규칙 다시 로드를 지원하므로 실행 중인 Suricata 프로세스를 다시 시작하지 않고도 규칙을 추가, 제거 및 편집할 수 있습니다. 라이브 다시 로드 옵션을 사용하려면 구성 파일 맨 아래로 스크롤하여 다음 줄을 추가하십시오.

/etc/suricata/suricata.yaml
. . .

detect-engine:
  - rule-reload: true

이 설정이 있으면 SIGUSR2 시스템 신호를 실행 중인 프로세스에 보낼 수 있으며 Suricata는 메모리에 변경된 규칙을 다시 로드합니다.

A command like the following will notify the Suricata process to reload its rulesets, without restarting the process:

  1. sudo kill -usr2 $(pidof suricata)

$(pidof suricata) 명령어의 일부는 서브셸을 호출하고 실행 중인 Suricata 데몬의 프로세스 ID를 찾습니다. 명령어의 시작 부분 sudo kill -usr2kill 유틸리티를 사용하여 서브셸이 보고한 프로세스 ID로 SIGUSR2 시그널을 보냅니다.

suricata-update를 실행할 때나 자체 사용자 정의 규칙을 추가하거나 편집할 때마다 이 명령어를 사용할 수 있습니다.

/etc/suricata/suricata.yaml 파일을 저장하고 닫습니다. 만약 vi를 사용 중이라면, ESC를 누르고 :x를 입력한 후 ENTER를 눌러 확인할 수 있습니다.

단계 3 — Suricata 룰셋 업데이트

튜토리얼의 이 시점에서 Suricata를 시작하면 로그에 다음과 같은 경고 메시지가 표시됩니다: 로드된 규칙이 없습니다.

Output
<Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /var/lib/suricata/rules/suricata.rules

기본적으로 Suricata 패키지에는 제한된 수의 탐지 규칙(/etc/suricata/rules 디렉토리에 위치함)이 포함되어 있으므로 이 시점에서 Suricata를 활성화하면 일부 악성 트래픽만 감지됩니다.

Suricata에는 외부 제공 업체에서 규칙셋을 가져오는 suricata-update라는 도구가 포함되어 있습니다. Suricata 서버에 대한 최신 규칙셋을 다운로드하려면 다음과 같이 실행하십시오:

  1. sudo suricata-update

다음과 같은 출력을 받아야 합니다:

Output
19/10/2021 -- 19:31:03 - <Info> -- Using data-directory /var/lib/suricata. 19/10/2021 -- 19:31:03 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml 19/10/2021 -- 19:31:03 - <Info> -- Using /usr/share/suricata/rules for Suricata provided rules. . . . 19/10/2021 -- 19:31:03 - <Info> -- No sources configured, will use Emerging Threats Open 19/10/2021 -- 19:31:03 - <Info> -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.3/emerging.rules.tar.gz. 100% - 3062850/3062850 . . . 19/10/2021 -- 19:31:06 - <Info> -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 31011; enabled: 23649; added: 31011; removed 0; modified: 0 19/10/2021 -- 19:31:07 - <Info> -- Writing /var/lib/suricata/rules/classification.config 19/10/2021 -- 19:31:07 - <Info> -- Testing with suricata -T. 19/10/2021 -- 19:31:32 - <Info> -- Done.

강조된 줄은 suricata-update가 무료로 제공되는 Emerging Threats ET Open Rules를 가져와 Suricata의 /var/lib/suricata/rules/suricata.rules 파일에 저장했다는 것을 나타냅니다. 또한 이 예에서 처리된 규칙 수를 나타내며, 이 중 31011개가 추가되었고 이 중 23649개가 활성화되었습니다.

규칙 세트 제공자 추가

suricata-update 도구는 다양한 무료 및 상업용 규칙 세트 제공자로부터 규칙을 가져올 수 있습니다. 이미 추가한 ET Open 세트와 같은 일부 규칙 세트는 무료로 제공되지만, 다른 것들은 유료 구독이 필요합니다.

suricata-updatelist-sources 플래그를 사용하여 기본 규칙 제공자 목록을 다음과 같이 나열할 수 있습니다:

  1. sudo suricata-update list-sources

다음과 같은 소스 목록을 받게 됩니다:

Output
. . . 19/10/2021 -- 19:27:34 - <Info> -- Adding all sources 19/10/2021 -- 19:27:34 - <Info> -- Saved /var/lib/suricata/update/cache/index.yaml Name: et/open Vendor: Proofpoint Summary: Emerging Threats Open Ruleset License: MIT . . .

예를 들어, tgreen/hunting 규칙 세트를 추가하려면 다음 명령을 사용하여 활성화할 수 있습니다:

  1. sudo suricata-update enable-source tgreen/hunting

그런 다음 suricata-update를 다시 실행하면 새로운 규칙 세트가 추가되며, 기존의 ET Open 규칙과 다운로드한 다른 규칙도 추가됩니다.

단계 4 – Suricata 구성 유효성 검사

이제 Suricata의 구성 파일을 편집하여 선택적인 커뮤니티 ID를 포함하고 기본 네트워크 인터페이스를 지정하고 실시간 규칙 재로드를 활성화했습니다. 구성을 테스트하는 것이 좋습니다.

Suricata에는 구성 파일과 포함된 규칙을 유효성 검사하는 내장된 테스트 모드가 있습니다. 이전 섹션에서의 변경 사항을 확인하려면 Suricata를 테스트 모드에서 실행하도록 -T 플래그를 사용하여 변경 사항을 유효성 검사합니다. -v 플래그는 몇 가지 추가 정보를 출력하고 -c 플래그는 Suricata에게 구성 파일의 위치를 알려줍니다:

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

테스트는 할당된 CPU 양과 추가한 규칙의 수에 따라 시간이 걸릴 수 있으므로 완료되기까지 1~2분을 기다릴 준비가 되어야 합니다.

기본 ET Open 규칙 집합을 사용하면 다음과 같은 출력을 받아야 합니다:

Output
21/10/2021 -- 15:00:40 - <Info> - Running suricata under test mode 21/10/2021 -- 15:00:40 - <Notice> - This is Suricata version 6.0.3 RELEASE running in SYSTEM mode 21/10/2021 -- 15:00:40 - <Info> - CPUs/cores online: 2 21/10/2021 -- 15:00:40 - <Info> - fast output device (regular) initialized: fast.log 21/10/2021 -- 15:00:40 - <Info> - eve-log output device (regular) initialized: eve.json 21/10/2021 -- 15:00:40 - <Info> - stats output device (regular) initialized: stats.log 21/10/2021 -- 15:00:46 - <Info> - 1 rule files processed. 23879 rules successfully loaded, 0 rules failed 21/10/2021 -- 15:00:46 - <Info> - Threshold config parsed: 0 rule(s) found 21/10/2021 -- 15:00:47 - <Info> - 23882 signatures processed. 1183 are IP-only rules, 4043 are inspecting packet payload, 18453 inspect application layer, 107 are decoder event only 21/10/2021 -- 15:01:13 - <Notice> - Configuration provided was successfully loaded. Exiting. 21/10/2021 -- 15:01:13 - <Info> - cleaning up signature grouping structure... complete

구성 파일에 오류가 있는 경우 테스트 모드가 특정 오류 코드와 메시지를 생성하여 문제 해결에 도움이 되는 정보를 제공합니다. 예를 들어, 존재하지 않는 규칙 파일을 포함하는 경우 test.rules라는 오류가 다음과 같이 발생합니다:

Output
21/10/2021 -- 15:10:15 - <Info> - Running suricata under test mode 21/10/2021 -- 15:10:15 - <Notice> - This is Suricata version 6.0.3 RELEASE running in SYSTEM mode 21/10/2021 -- 15:10:15 - <Info> - CPUs/cores online: 2 21/10/2021 -- 15:10:15 - <Info> - eve-log output device (regular) initialized: eve.json 21/10/2021 -- 15:10:15 - <Info> - stats output device (regular) initialized: stats.log 21/10/2021 -- 15:10:21 - <Warning> - [ERRCODE: SC_ERR_NO_RULES(42)] - No rule files match the pattern /var/lib/suricata/rules/test.rules

그러한 오류가 있으면 구성 파일을 편집하여 올바른 경로를 포함하거나 잘못된 변수와 구성 옵션을 수정할 수 있습니다.

Suricata 테스트 모드 실행이 성공적으로 완료되면 다음 단계로 넘어갈 수 있습니다. 이는 Suricata를 데몬 모드로 시작하는 것입니다.

단계 5 — Suricata 실행

유효한 Suricata 구성 및 ruleset을 보유하고 있으므로 Suricata 서버를 시작할 수 있습니다. 다음 systemctl 명령을 실행하세요:

  1. sudo systemctl start suricata.service

서비스의 상태를 확인하려면 다음과 같은 systemctl status 명령을 사용할 수 있습니다:

  1. sudo systemctl status suricata.service

다음과 같은 출력을 받아야 합니다:

Output
● suricata.service - Suricata Intrusion Detection Service Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2021-10-21 18:22:56 UTC; 1min 57s ago Docs: man:suricata(1) Process: 24588 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS) Main PID: 24590 (Suricata-Main) Tasks: 1 (limit: 23473) Memory: 80.2M CGroup: /system.slice/suricata.service └─24590 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -i eth0 --user suricata Oct 21 18:22:56 suricata systemd[1]: Starting Suricata Intrusion Detection Service.. Oct 21 18:22:56 suricata systemd[1]: Started Suricata Intrusion Detection Service. . . .

테스트 모드 명령과 마찬가지로 Suricata가 모든 규칙을 로드하고 구문 분석하는 데 1~2분이 소요됩니다. Suricata의 로그에서 특정 메시지를 찾으려면 tail 명령을 사용할 수 있습니다. 이 메시지는 Suricata가 시작을 완료했음을 나타냅니다:

  1. sudo tail -f /var/log/suricata/suricata.log

여러 줄의 출력을 받고 터미널이 Suricata를 로드하는 동안 멈춰 있는 것처럼 보일 수 있습니다. Suricata가 실행되고 트래픽을 검사할 준비가 되었음을 나타내는 줄을 받을 때까지 출력을 기다리세요:

Output
19/10/2021 -- 19:22:39 - <Info> - All AFP capture threads are running.

이 줄은 Suricata가 실행되고 트래픽을 검사할 준비가 되었음을 나타냅니다. CTRL+C를 사용하여 tail 명령을 종료할 수 있습니다.

Suricata가 실행 중인지 확인했으므로 이 튜토리얼의 다음 단계는 Suricata가 경고를 생성하도록 설계된 테스트 URL에 대한 요청을 감지하는지 확인하는 것입니다.

단계 6 — Suricata 규칙 테스트

다운로드한 ET Open 규칙 세트에는 30000개가 넘는 규칙이 포함되어 있습니다. Suricata 규칙이 작동하는 방법과 그것들을 구성하는 방법에 대한 전체 설명은 이 입문용 자습서의 범위를 벗어납니다. 이 시리즈의 후속 자습서에서는 규칙이 작동하는 방법과 자신의 규칙을 작성하는 방법을 설명할 것입니다.

이 자습서의 목적을 위해 생성한 구성으로 Suricata가 의심스러운 트래픽을 감지하는지를 테스트하는 것이 충분합니다. Suricata 퀵스타트에서는 curl 명령을 사용하여 ET Open 규칙 번호 2100498을 테스트하는 것을 권장합니다.

다음을 실행하여 Suricata의 경보 규칙과 일치하는 응답을 반환하는 HTTP 요청을 생성합니다.

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

curl 명령은 다음과 같은 응답을 출력합니다:

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

이 예제 응답 데이터는 웹 셸을 통해 손상된 원격 시스템에서 실행될 수 있는 id와 같은 명령의 결과를 반환하는 척 하는 것으로 경보를 트리거할 수 있습니다.

이제 Suricata의 로그에서 해당 경보를 확인할 수 있습니다. 기본 Suricata 구성으로 활성화된 두 개의 로그가 있습니다. 첫 번째는 /var/log/suricata/fast.log에 있고 두 번째는 기계 판독 가능한 로그인 /var/log/suricata/eve.log에 있습니다.

/var/log/suricata/fast.log를 검사합니다.

귀하의 curl 요청에 해당하는 /var/log/suricata/fast.log에 로그 항목이 있는지 확인하려면 grep 명령을 사용하십시오. 퀵스타트 문서에서 2100498 규칙 식별자를 사용하여 해당하는 항목을 찾으려면 다음 명령을 사용하십시오:

  1. grep 2100498 /var/log/suricata/fast.log

귀하의 요청이 IPv6를 사용한 경우 시스템의 공개 IPv6 주소인 2001:DB8::1과 같은 출력을 받아야 합니다:

Output
10/21/2021-18:35:54.950106 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 2600:9000:2000:4400:0018:30b3:e400:93a1:80 -> 2001:DB8::1:34628

귀하의 요청이 IPv4를 사용한 경우 시스템의 공개 IPv4 주소인 203.0.113.1과 같은 메시지가 로그에 있어야 합니다:

Output
10/21/2021-18:35:57.247239 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 204.246.178.81:80 -> 203.0.113.1:36364

출력에서 강조된 2100498 값에 유의하십시오. 이 값은 Suricata가 규칙을 식별하는 데 사용하는 시그니처 ID (sid)입니다.

/var/log/suricata/eve.log를 검사합니다.

Suricata는 또한 /var/log/suricata/eve.log (별명이 EVE 로그)에 이벤트를 JSON 형식으로 로깅합니다.

Suricata 설명서에서는이 파일의 항목을 읽고 필터링하는 데 jq 유틸리티를 사용하는 것을 권장합니다. 다음 dnf 명령을 사용하여 시스템에 jq가 없는 경우 jq를 설치하십시오:

  1. sudo dnf install jq

jq를 설치한 후에는 다음 명령을 사용하여 EVE 로그의 이벤트를 필터링 할 수 있습니다:

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

이 명령은 각 JSON 항목을 검사하고 alert 객체가있는 경우 2100498 값과 일치하는 signature_id 키를 가진 항목을 인쇄합니다. 출력은 다음과 같이됩니다:

Output
{ "timestamp": "2021-10-21T19:42:47.368856+0000", "flow_id": 775889108832281, "in_iface": "eth0", "event_type": "alert", "src_ip": "203.0.113.1", "src_port": 80, "dest_ip": "147.182.148.159", "dest_port": 38920, "proto": "TCP", "community_id": "1:vuSfAFyy7oUq0LQC5+KNTBSuPxg=", "alert": { "action": "allowed", "gid": 1, "signature_id": 2100498, "rev": 7, "signature": "GPL ATTACK_RESPONSE id check returned root", "category": "Potentially Bad Traffic", . . . }

jq가 검색하는 키입니다. 또한 JSON 출력에서 강조 표시된 "community_id": "1:vuSfAFyy7oUq0LQC5+KNTBSuPxg=", 라인에 유의하십시오. 이 키는 Suricata의 구성 파일에서 활성화 한 생성 된 커뮤니티 플로우 식별자입니다.

각 경고는 고유 한 커뮤니티 플로우 식별자를 생성합니다. 다른 NMS 도구도 동일한 식별자를 생성하여 Suricata 경고를 다른 도구의 출력과 교차 참조 할 수 있습니다.

A matching log entry in either log file means that Suricata successfully inspected the network traffic, matched it against a detection rule, and generated an alert for subsequent analysis or logging. A future tutorial in this series will explore how to send Suricata alerts to a Security Information Event Management (SIEM) system for further processing.

단계 7 — Suricata 경고 처리

알림을 설정하고 테스트한 후에는 어떻게 처리할지 선택할 수 있습니다. 일부 사용 사례에서는 감사 목적으로 경고를 기록하는 것만으로 충분할 수 있으며, 반복된 경고를 생성하는 시스템에서의 트래픽을 차단하는 더 활동적인 접근 방식을 선호할 수도 있습니다.

Suricata가 생성하는 경고를 기반으로 트래픽을 차단하려면, EVE 로그의 항목을 사용하여 방화벽 규칙을 추가한 다음 시스템 또는 시스템에 대한 액세스를 제한할 수 있습니다. 경고에서 특정 필드를 추출하고, 그런 다음 UFW 또는 IPtables 규칙을 추가하여 요청을 차단할 수 있습니다.

다시 말하지만, 이 예는 일부러 만든 요청 및 응답 데이터를 사용한 가상 시나리오입니다. 귀하의 환경이 액세스할 수 있는 시스템 및 프로토콜에 대한 지식이 중요하며, 어떤 트래픽이 합법적인지 여부와 차단할 수 있는지를 결정하는 데 필수적입니다.

결론

이 튜토리얼에서는 OISF 소프트웨어 저장소에서 Suricata를 설치했습니다. Suricata를 이 방법으로 설치하면 Suricata의 새 버전이 출시될 때마다 업데이트를 받을 수 있습니다. Suricata를 설치한 후에는 다른 보안 도구와 함께 사용할 Community Flow ID를 추가하기 위해 기본 구성을 편집했습니다. 또한 실시간 규칙 다시로드를 활성화하고 초기 규칙 세트를 다운로드했습니다.

Suricata의 구성을 확인한 후 프로세스를 시작하고 몇 가지 테스트 HTTP 트래픽을 생성했습니다. 테스트하는 규칙에 해당하는 경고가 있는지 확인하여 기본 로그를 모두 확인하여 Suricata가 의심스러운 트래픽을 감지할 수 있는지 확인했습니다.

Suricata에 대한 자세한 정보는 공식 Suricata 사이트를 방문하십시오. 이 튜토리얼에서 구성한 구성 옵션에 대한 자세한 내용은 Suricata 사용자 가이드를 참조하십시오.

Suricata가 설치되고 구성되었으므로 이 시리즈의 다음 튜토리얼인 Suricata 서명 이해로 계속 진행할 수 있습니다. 여기서는 자체적인 Suricata 규칙을 작성하는 방법을 살펴보게 될 것입니다. 잘못된 TCP/IP 패킷, DNS 쿼리 내용, HTTP 요청 및 응답, 심지어 TLS 핸드셰이크와 같은 기준에 따라 경고를 생성하거나 트래픽을 완전히 삭제하는 다양한 방법에 대해 배우게 될 것입니다.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-suricata-on-centos-8-stream