SIEM을 Suricata와 Elastic Stack으로 Rocky Linux 8에 구축하는 방법

소개

이 시리즈의 이전 자습서에서는 Suricata를 침입 탐지 (IDS) 및 침입 방지 (IPS) 시스템으로 설치, 구성 및 실행하는 방법을 안내했습니다. 또한 Suricata 규칙에 대해 학습하고 자체 규칙을 작성하는 방법도 배웠습니다.

이 자습서에서는 Suricata를 Elasticsearch, Kibana 및 Filebeat와 통합하여 Elastic 스택과 Rocky Linux 8을 사용하여 보안 정보 및 이벤트 관리 (SIEM) 도구를 만드는 방법을 탐색하게 됩니다. SIEM 도구는 네트워크 및 서버에서 보안 위협과 의심스러운 활동을 검색하기 위해 이벤트 데이터를 수집, 집계, 저장 및 분석하는 데 사용됩니다.

자체 SIEM을 구축하는 데 사용할 구성 요소는 다음과 같습니다:

  • Elasticsearch: Suricata 서버에서 발생하는 보안 이벤트를 저장, 인덱싱, 연관시키고 검색하기 위한 도구입니다.
  • Kibana: Elasticsearch에 저장된 보안 이벤트 로그를 표시하고 탐색하는 도구입니다.
  • Filebeat: Suricata의 eve.json 로그 파일을 구문 분석하고 각 이벤트를 처리하기 위해 Elasticsearch로 보내는 도구입니다.
  • Suricata: 네트워크 트래픽을 검사하여 의심스러운 이벤트를 찾고 잘못된 패킷을 기록하거나 삭제하는 도구입니다.

먼저 Elasticsearch와 Kibana를 설치하고 구성하고 일부 특정 인증 설정을 추가합니다. 그런 다음 Suricata 시스템에 Filebeat를 추가하여 eve.json 로그를 Elasticsearch로 보냅니다.

마지막으로 SSH와 웹 브라우저를 사용하여 Kibana에 연결하는 방법을 배우고, Suricata의 이벤트 및 경보를 보여주는 Kibana 대시 보드를로드하고 상호 작용하는 방법을 배웁니다.

전제 조건

이 튜토리얼 시리즈를 따르고 있다면 이미 Rocky Linux 서버에서 Suricata가 실행 중인 것으로 간주됩니다. 이 서버는 귀하의 Suricata 서버로 참조됩니다.

또한 Elasticsearch와 Kibana를 호스팅하는 두 번째 서버가 필요합니다. 이 서버는 귀하의 Elasticsearch 서버로 참조됩니다. 다음이 구성되어야합니다:

이 튜토리얼의 목적은 두 서버가 개인 IP 주소를 사용하여 통신할 수 있어야합니다. WireGuard와 같은 VPN을 사용하여 서버를 연결하거나, 호스트 간에 개인 네트워킹을 제공하는 클라우드 공급 업체를 사용할 수 있습니다. 실험을 위해 Elasticsearch, Kibana, Filebeat 및 Suricata를 동일한 서버에서 실행할 수도 있습니다.

단계 1 — Elasticsearch 및 Kibana 설치

이 튜토리얼의 첫 번째 단계는 Elasticsearch와 Kibana를 Elasticsearch 서버에 설치하는 것입니다. 시작하려면 다음 명령을 사용하여 Elastic GPG 키를 서버에 추가하십시오:

  1. sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

다음으로, 다음 내용을 사용하여 /etc/yum/yum.repos.d 디렉토리에 elasticsearch.repo 파일을 생성하십시오. 이렇게하면 새 패키지를 yum을 통해 설치할 때 상위 Elasticsearch 저장소가 사용됩니다:

  1. sudo vi /etc/yum.repos.d/elasticsearch.repo
/etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

vi 또는 기본 편집기를 사용하여 변경을 완료하면 ESC를 누르고 :x를 눌러 파일에 변경 사항을 작성하고 종료하십시오.

이제 dnf 명령을 사용하여 Elasticsearch와 Kibana를 설치하십시오. GPG 키 지문에 대한 프롬프트가 나오면 Y를 누르십시오:

  1. sudo dnf install --enablerepo=elasticsearch elasticsearch kibana

--enablerepo 옵션은 /etc/yum.repos.d/elasticsearch.repo 파일에서 기본으로 비활성화된 설정을 무시하는 데 사용됩니다. 이 접근 방식을 사용하면 다른 패키지 업데이트를 설치할 때 Elasticsearch 및 Kibana 패키지가 실수로 업그레이드되지 않도록 보장합니다.

패키지 설치를 완료한 후에는 다음 명령을 사용하여 서버의 사설 IP 주소를 찾고 기록합니다: ip address show:

  1. ip -brief address show

다음과 같은 출력을 받게 됩니다:

Output
lo UNKNOWN 127.0.0.1/8 ::1/128 eth0 UP 159.89.122.115/20 10.20.0.8/16 2604:a880:cad:d0::e56:8001/64 fe80::b832:69ff:fe46:7e5d/64 eth1 UP 10.137.0.5/16 fe80::b883:5bff:fe19:43f3/64

이 출력에서 사설 네트워크 인터페이스는 강조된 eth1 장치이며 IPv4 주소는 10.137.0.5입니다. 장치 이름과 IP 주소는 다를 수 있습니다. 장치 이름과 사설 IP 주소에 관계없이 주소는 다음 예약된 블록 중 하나에서 제공됩니다:

  • 10.0.0.0부터 10.255.255.255까지 (10/8 접두사)
  • 172.16.0.0부터 172.31.255.255까지 (172.16/12 접두사)
  • 192.168.0.0부터 192.168.255.255까지 (192.168/16 접두사)

이러한 블록이 어떻게 할당되는지 자세히 알아보려면 RFC 1918 사양을 방문하십시오.

이 tutorial에서는 Elasticsearch 서버의 private IP 주소를 기록합니다 (이 경우 10.137.0.5). 이 주소는 이후 tutorial에서 your_private_ip로 참조됩니다. 또한 네트워크 인터페이스의 이름을 참고하세요. 이 경우에는 eth1입니다. 이 튜토리얼의 다음 부분에서는 Elasticsearch와 Kibana가 Suricata 서버에서 오는 연결을 수신하도록 구성합니다.

단계 2 — Elasticsearch 구성

Elasticsearch는 기본적으로 로컬 연결만 수락하도록 구성되어 있습니다. 또한 인증이 활성화되어 있지 않으므로 Filebeat과 같은 도구에서 로그를 보낼 수 없습니다. 이 튜토리얼의 이 부분에서는 Elasticsearch의 네트워크 설정을 구성한 다음 Elasticsearch의 내장 xpack 보안 모듈을 활성화합니다.

Elasticsearch 네트워크 구성

Suricata 서버와 Elasticsearch 서버가 분리되어 있으므로 Elasticsearch가 해당 private 네트워크 인터페이스에서 연결을 수신하도록 구성해야 합니다.

/etc/elasticsearch/elasticsearch.yml 파일을 vi 또는 선호하는 편집기로 엽니다:

  1. sudo vi /etc/elasticsearch/elasticsearch.yml
# 기본적으로 Elasticsearch는 로컬호스트에서만 접근 가능합니다. 이 노드를 네트워크에 노출하려면 다른 주소를 여기에 설정하십시오:
# 아래 줄을 추가하여 Elasticsearch가 네트워크에서도 사용할 수 있도록 설정합니다:
#
# 아래 줄을 추가하여 Elasticsearch가 네트워크에서도 사용할 수 있도록 설정합니다:
network.bind_host: ["127.0.0.1", "your_private_ip"]
#
network.bind_host: 0.0.0.0
# 기본적으로 Elasticsearch는 9200번 포트에서 HTTP 트래픽을 수신합니다. 여기에 특정 HTTP 포트를 설정하십시오:

지정된 private IP 주소를 your_private_ip 주소 대신 사용하십시오. 이 줄은 Elasticsearch가 로컬 주소 및 서버의 개인 IP 주소에서 여전히 사용 가능하도록하며 Kibana가 이를 찾을 수 있습니다.

마지막으로, vi 단축키 SHIFT+G를 사용하여 파일 끝으로 이동하십시오.

다음 강조된 줄을 파일 끝에 추가하십시오:

. . .
discovery.type: single-node
xpack.security.enabled: true

discovery.type 설정은 Elasticsearch가 다른 Elasticsearch 서버 클러스터가 아닌 단일 노드로 실행되도록 허용합니다. xpack.security.enabled 설정은 Elasticsearch와 함께 제공되는 일부 보안 기능을 활성화합니다.

편집을 마쳤으면 파일을 저장하고 닫으십시오.

마지막으로, Elasticsearch 서버가 개인 네트워크 인터페이스에서 접근 가능하도록 방화벽 규칙을 추가하십시오. 필수 자습서를 따르고 firewalld를 사용하는 경우 다음 명령을 실행하십시오:

  1. sudo firewall-cmd --permanent --zone=internal --change-interface=eth1
  2. sudo firewall-cmd --permanent --zone=internal --add-service=elasticsearch
  3. sudo firewall-cmd --permanent --zone=internal --add-service=kibana
  4. sudo systemctl reload firewalld.service

첫 번째 명령어에서 eth1 대신에 귀하의 사설 네트워크 인터페이스 이름을 대체하십시오. 해당 명령은 인터페이스 규칙을 public 존보다 더 관대한 internal Firewalld 존을 사용하도록 변경합니다.

다음 명령은 포트 9200 및 9300에서의 Elasticsearch 트래픽 및 포트 5601에서의 Kibana 트래픽을 허용하는 규칙을 추가합니다.

마지막 명령은 새로운 영구 규칙이 적용된 Firewalld 서비스를 다시로드합니다.

이제 Elasticsearch 데몬을 시작한 다음 xpack 보안 모듈과 함께 사용할 암호를 구성합니다.

Elasticsearch 시작

네트워킹과 xpack 보안 설정을 Elasticsearch에 구성했으므로 변경 사항이 적용되도록 시작해야 합니다.

다음 systemctl 명령을 실행하여 Elasticsearch를 시작합니다:

  1. sudo systemctl start elasticsearch.service

Elasticsearch가 시작을 완료하면 Elasticsearch에 기본적으로 내장된 사용자의 암호를 생성하는 이 튜토리얼의 다음 섹션으로 계속 진행할 수 있습니다.

Elasticsearch 암호 구성

이제 xpack.security.enabled 설정을 활성화했으므로 기본 Elasticsearch 사용자의 비밀번호를 생성해야 합니다. Elasticsearch에는 이러한 사용자를 위해 무작위 비밀번호를 자동으로 생성할 수 있는 유틸리티가 /usr/share/elasticsearch/bin 디렉토리에 포함되어 있습니다.

다음 명령을 실행하여 디렉토리로 이동한 후 모든 기본 사용자에 대한 무작위 비밀번호를 생성합니다:

  1. cd /usr/share/elasticsearch/bin
  2. sudo ./elasticsearch-setup-passwords auto

다음과 같은 출력을 받게 됩니다. 계속하라는 프롬프트가 나타나면 y를 누르고 RETURN 또는 ENTER 키를 누르십시오:

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y


Changed password for user apm_system
PASSWORD apm_system = eWqzd0asAmxZ0gcJpOvn

Changed password for user kibana_system
PASSWORD kibana_system = 1HLVxfqZMd7aFQS6Uabl

Changed password for user kibana
PASSWORD kibana = 1HLVxfqZMd7aFQS6Uabl

Changed password for user logstash_system
PASSWORD logstash_system = wUjY59H91WGvGaN8uFLc

Changed password for user beats_system
PASSWORD beats_system = 2p81hIdAzWKknhzA992m

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = 85HF85Fl6cPslJlA8wPG

Changed password for user elastic
PASSWORD elastic = 6kNbsxQGYZ2EQJiqJpgl

이 유틸리티를 다시 실행할 수 없으므로 이러한 비밀번호를 안전한 곳에 기록해야 합니다. 다음 섹션에서 kibana_system 사용자의 비밀번호를 사용해야 하며, 이 튜토리얼의 Filebeat 구성 단계에서 elastic 사용자의 비밀번호를 사용해야 합니다.

이 튜토리얼에서는 Elasticsearch를 구성하는 작업을 완료했습니다. 다음 섹션에서는 Kibana의 네트워크 설정 및 해당 xpack 보안 모듈을 구성하는 방법에 대해 설명합니다.

단계 3 — Kibana 구성

이 튜토리얼의 이전 섹션에서 Elasticsearch를 구성하여 Elasticsearch 서버의 사설 IP 주소에서 연결을 수신하도록 설정했습니다. Suricata 서버의 Filebeat가 Kibana에 액세스할 수 있도록 Kibana도 동일한 작업을 수행해야 합니다.

먼저 Elasticsearch에 데이터를 저장하는 데 사용할 Kibana의 xpack 보안 기능을 활성화합니다. 그런 다음 Kibana의 네트워크 설정 및 인증 세부 정보를 Elasticsearch에 연결하도록 구성합니다.

Kibana에서 xpack.security 활성화

Kibana에서 xpack 보안 설정을 시작하려면 암호화 키를 생성해야 합니다. Kibana는 이러한 키를 사용하여 세션 데이터(쿠키와 같은) 및 Elasticsearch의 데이터 저장 대시보드와 뷰를 저장합니다.

  1. cd /usr/share/kibana/bin/
  2. sudo ./kibana-encryption-keys generate -q --force

/usr/share/kibana/bin 디렉터리에 포함된 kibana-encryption-keys 유틸리티를 사용하여 필요한 암호화 키를 생성할 수 있습니다. 다음을 실행하여 디렉터리로 이동한 후 키를 생성하십시오:

Output
xpack.encryptedSavedObjects.encryptionKey: 66fbd85ceb3cba51c0e939fb2526f585 xpack.reporting.encryptionKey: 9358f4bc7189ae0ade1b8deeec7f38ef xpack.security.encryptionKey: 8f847a594e4a813c4187fa93c884e92b

툴의 지시사항을 억제하는 -q 플래그와 새로운 키를 생성하도록 하는 --force 플래그를 사용합니다. 다음과 같은 출력을 받아야 합니다:

이 세 개의 키를 안전한 장소에 복사합니다. 이제 이를 Kibana의 /etc/kibana/kibana.yml 구성 파일에 추가합니다.

  1. sudo vi /etc/kibana/kibana.yml

선호하는 편집기인 vi를 사용하여 파일을 엽니다: SHIFT+G 단축키를 사용하여 파일 끝으로 이동합니다. 파일의 끝에 복사한 세 개의 xpack 라인을 붙여넣습니다.

/etc/kibana/kibana.yml
. . .

# 모든 로컬화 가능한 문자열, 날짜 및 숫자 형식에 사용할 로캘을 지정합니다.
# 지원되는 언어는 다음과 같습니다: 영어 - en, 기본값으로, 중국어 - zh-CN입니다.
#i18n.locale: "en"

xpack.encryptedSavedObjects.encryptionKey: 66fbd85ceb3cba51c0e939fb2526f585
xpack.reporting.encryptionKey: 9358f4bc7189ae0ade1b8deeec7f38ef
xpack.security.encryptionKey: 8f847a594e4a813c4187fa93c884e92b

파일을 열어둔 채로 계속 진행하여 Kibana의 네트워크 설정을 구성합니다.

Kibana 네트워킹 구성

Kibana의 네트워킹을 구성하여 Elasticsearch 서버의 개인 IP 주소에서 사용할 수 있도록하려면, /etc/kibana/kibana.yml 파일에서 주석 처리된 #server.host: "localhost" 줄을 찾습니다. 이 줄은 파일의 맨 앞 근처에 있습니다. 다음에 새 줄을 추가하고 서버의 개인 IP 주소를 입력하십시오. 아래에 강조된 대로:

/etc/kibana/kibana.yml
# Kibana는 백엔드 서버에서 제공됩니다. 이 설정은 사용할 포트를 지정합니다.
#server.port: 5601

# Kibana 서버가 바인딩될 주소를 지정합니다. IP 주소 및 호스트 이름이 모두 유효한 값입니다.
# 기본값은 'localhost'로, 일반적으로 원격 기기에서 연결할 수 없습니다.
# 원격 사용자의 연결을 허용하려면이 매개 변수를 루프백 주소가 아닌 주소로 설정하십시오.
#server.host: "localhost"
server.host: "your_private_ip"

your_private_ip 주소 대신에 개인 IP를 입력합니다.

파일을 편집한 후에는 저장하고 닫으십시오. 그 다음에는 Kibana가 Elasticsearch에 연결하는 데 사용하는 사용자 이름과 암호를 구성해야 합니다.

Kibana 자격 증명 구성

Kibana가 Elasticsearch에 인증하는 데 사용하는 사용자 이름과 암호를 설정하는 두 가지 방법이 있습니다. 첫 번째는 /etc/kibana/kibana.yml 구성 파일을 편집하여 해당 값들을 추가하는 것입니다. 두 번째 방법은 값들을 Kibana의 keystore에 저장하는 것입니다. 이는 Kibana가 비밀을 저장하는 데 사용하는 난독화된 파일입니다.

이 자습서에서는 Kibana의 구성 파일을 직접 편집하는 것을 피하기 위해 keystore 방법을 사용하겠습니다.

대신 파일을 편집하려는 경우에는 elasticsearch.usernameelasticsearch.password로 구성해야 하는 설정을 참고하십시오.

구성 파일을 편집하려는 경우에는 이 섹션의 나머지 단계를 건너뜁니다.

kibana-keystore 유틸리티를 사용하여 keystore에 비밀을 추가하려면 먼저 /usr/share/kibana/bin 디렉터리로 cd하세요. 그런 다음 다음 명령을 실행하여 Kibana의 사용자 이름을 설정합니다:

  1. cd /usr/share/kibana/bin
  2. sudo ./kibana-keystore add elasticsearch.username

다음과 같은 프롬프트를 받게 됩니다:

Username Entry
Enter value for elasticsearch.username: *************

kibana_system을 입력하십시오. ENTER 또는 RETURN을 눌러 사용자 이름을 입력하십시오.

이제 암호를 저장하는 과정을 반복하십시오. 이전 섹션에서 생성한 kibana_system 사용자의 암호를 복사하십시오. 이 튜토리얼에서는 예제 암호가 1HLVxfqZMd7aFQS6Uabl임을 참고하십시오.

암호를 설정하려면 다음 명령을 실행하십시오:

  1. sudo ./kibana-keystore add elasticsearch.password

암호를 붙여넣어야 할 때는 프롬프트에 붙여넣으십시오. 전사 오류를 피하기 위해 다음 명령을 실행하십시오:

Password Entry
Enter value for elasticsearch.password: ********************

Kibana 시작

이제 Kibana의 네트워킹 및 xpack 보안 설정을 구성하고 키스토어에 자격 증명을 추가했습니다. 변경 사항이 적용되려면 Kibana를 시작해야 합니다.

다음 명령을 실행하여 Kibana를 다시 시작하십시오:

  1. sudo systemctl start kibana.service

Kibana가 시작되면 다음 섹션으로 계속 진행하여 Suricata 서버에서 로그를 Elasticsearch로 전송하는 방법을 구성하십시오.

단계 4 — Filebeat 설치

이제 Elasticsearch와 Kibana 프로세스가 올바른 네트워크 및 인증 설정으로 구성되어 있으므로 다음 단계는 Suricata 서버에 Filebeat를 설치하고 설정하는 것입니다.

Filebeat를 설치하기 위해 다음 명령을 사용하여 Suricata 서버에 Elastic GPG 키를 추가하십시오:

  1. sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

다음으로, 다음 내용을 사용하여 /etc/yum/yum.repos.d 디렉토리에 elasticsearch.repo 파일을 작성하십시오. vi 또는 기호에 따라 선호하는 편집기를 사용하십시오:

  1. sudo vi /etc/yum.repos.d/elasticsearch.repo
/etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

변경 사항을 완료하면 파일을 저장하고 종료하십시오. 이제 dnf 명령을 사용하여 Filebeat 패키지를 설치하십시오:

  1. sudo dnf install --enablerepo=elasticsearch filebeat

다음으로, Filebeat를 Elasticsearch 및 Kibana에 연결하도록 구성해야 합니다. /etc/filebeat/filebeat.yml 구성 파일을 vi 또는 기호에 따라 선호하는 편집기를 사용하여 엽니다:

  1. sudo vi /etc/filebeat/filebeat.yml

파일의 약 100번째 줄 근처에서 Kibana 섹션을 찾으십시오. 주석 처리된 #host: "localhost:5601" 라인 다음에 Kibana 인스턴스의 사설 IP 주소와 포트를 가리키는 라인을 추가하십시오:

/etc/filebeat/filebeat.yml
. . .
# Beats 버전 6.0.0부터 대시보드는 Kibana API를 통해로드됩니다.
# 이것은 Kibana 엔드포인트 구성이 필요합니다.
setup.kibana:

  # Kibana 호스트
  # 체계와 포트는 생략할 수 있으며 기본값 (http 및 5601)으로 설정됩니다
  # 추가 경로를 지정하는 경우 체계가 필요합니다: http://localhost:5601/path
  # IPv6 주소는 항상 다음과 같이 정의되어야 합니다: https://[2001:db8::1]:5601
  #host: "localhost:5601"
  host: "your_private_ip:5601"

. . .

이 변경으로 인해 Filebeat가 Kibana에 연결하여 Suricata 로그를 처리하기 위해 Elasticsearch에 다양한 SIEM 인덱스, 대시보드 및 처리 파이프라인을 생성할 수 있게 됩니다.

다음으로, 파일의 약 130번째 줄 주변에서 Elasticsearch Output 섹션을 찾고 hosts, username, 및 password 설정을 Elasticsearch 서버의 값에 맞게 편집하세요:

output.elasticsearch:
  # 연결할 호스트의 배열입니다.
  hosts: ["your_private_ip:9200"]

  # 프로토콜 - `http` (기본값) 또는 `https`입니다.
  #protocol: "https"

  # 인증 자격 증명 - API 키 또는 사용자 이름/암호입니다.
  #api_key: "id:api_key"
  username: "elastic"
password: "6kNbsxQGYZ2EQJiqJpgl"

. . .

hosts 줄에 Elasticsearch 서버의 사설 IP 주소를 대체하세요. username 필드의 주석을 해제하고 elastic 사용자로 설정을 유지하세요. password 필드를 elastic 사용자의 비밀번호인 changeme에서 이 튜토리얼의 Elasticsearch 암호 구성 섹션에서 생성한 비밀번호로 변경하세요.

편집을 완료하면 파일을 저장하고 닫으세요. 다음으로, 다음 명령을 사용하여 Filebeats의 내장 Suricata 모듈을 활성화하세요:

  1. sudo filebeat modules enable suricata

이제 Filebeat가 Elasticsearch와 Kibana에 연결되고 Suricata 모듈이 활성화되었으므로 다음 단계는 SIEM 대시보드 및 파이프라인을 Elasticsearch로 로드하는 것입니다.

filebeat setup 명령을 실행하세요. 모든 것을 로드하는 데 몇 분 정도 걸릴 수 있습니다:

  1. sudo filebeat setup

명령이 완료되면 다음과 같은 출력을 받게됩니다:

Output
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling. Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead. See more: https://www.elastic.co/guide/en/machine-learning/current/index.html It is not possble to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat. Loaded machine learning job configurations Loaded Ingest pipelines

오류가 없으면 systemctl 명령을 사용하여 Filebeat를 시작합니다. 실행 중에는 Suricata의 eve.json 로그에서 Elasticsearch로 이벤트를 전송하기 시작합니다.

  1. sudo systemctl start filebeat.service

이제 Filebeat, Kibana 및 Elasticsearch가 Suricata 로그를 처리하도록 구성되었으므로이 자습서의 마지막 단계는 Kibana에 연결하여 SIEM 대시 보드를 탐색하는 것입니다.

단계 5 — Kibana의 SIEM 대시 보드 탐색

Kibana는 Elastic 스택의 그래픽 구성 요소입니다. 브라우저와 함께 Kibana를 사용하여 Suricata의 이벤트 및 경고 데이터를 탐색합니다. Elasticsearch 서버의 개인 IP 주소를 통해서만 Kibana를 사용할 수 있도록 구성했으므로 Kibana에 연결하려면 SSH 터널을 사용해야 합니다.

SSH를 사용하여 Kibana에 연결

SSH에는 로컬 포트의 네트워크 트래픽을 서버의 원격 IP 주소 및 포트로 전달하는 -L 옵션이 있습니다. 이 옵션을 사용하여 브라우저의 트래픽을 Kibana 인스턴스로 전달합니다.

Linux, macOS 및 Windows 10 이상의 최신 버전에서는 내장된 SSH 클라이언트를 사용하여 터널을 생성할 수 있습니다. Kibana에 연결하려면 매번 이 명령을 사용하게 됩니다. 언제든지이 연결을 닫을 수 있으며 다시 터널을 설정하려면 SSH 명령을 다시 실행하면 됩니다.

로컬 데스크톱 또는 랩톱 컴퓨터의 터미널에서 다음 명령을 실행하여 Kibana로의 SSH 터널을 생성합니다:

  1. ssh -L 5601:your_private_ip:5601 sammy@203.0.113.5 -N

SSH에 대한 다양한 인수는 다음과 같습니다:

  • -L 플래그는 로컬 시스템의 트래픽을 원격 서버의 포트 5601로 전달합니다.
  • your_private_ip:5601 명령의 일부분은 트래픽이 전달될 Elasticsearch 서버의 서비스를 지정합니다. 이 경우 해당 서비스는 Kibana입니다. your_private_ip을(를) Elasticsearch 서버의 사설 IP 주소로 대체하십시오.
  • 203.0.113.5 주소는 서버에 연결하고 관리하는 데 사용하는 공용 IP 주소입니다. 해당하는 Elasticsearch 서버의 공용 IP 주소로 대체하십시오.
  • -N 플래그는 SSH가 상호 작용하는 /bin/bash 셸과 같은 명령을 실행하지 않고 연결을 유지하도록 지시합니다. 일반적으로 이 예제와 같이 포트를 전달할 때 사용됩니다.

언제든지 터널을 닫으려면 CTRL+C를 누르십시오.

Windows에서 터미널은 다음 스크린샷과 유사해야 합니다:

참고: SSH 키를 사용하지 않는 경우 암호를 입력하라는 메시지가 표시될 수 있습니다. 이를 입력하고 ENTER 또는 RETURN 키를 누르세요.

macOS 및 Linux에서는 터미널이 다음 스크린샷과 유사할 것입니다:

SSH를 통해 Elasticsearch 서버에 연결하고 포트 포워드를 설정한 후 브라우저를 열고 http://127.0.0.1:5601로 이동하세요. 그러면 Kibana의 로그인 페이지로 리디렉션됩니다:

브라우저가 Kibana에 연결할 수 없는 경우 터미널에서 다음과 같은 메시지가 표시됩니다:

Output
channel 3: open failed: connect failed: No route to host

이 오류는 SSH 터널이 서버의 Kibana 서비스에 연결할 수 없음을 나타냅니다. Elasticsearch 서버의 올바른 사설 IP 주소를 지정했는지 확인하고 브라우저에서 페이지를 다시로드하세요.

사용자 이름으로 elastic을 입력하고 이 튜토리얼에서 이전에 복사한 사용자의 암호를 사용하여 Kibana 서버에 로그인하세요.

Kibana SIEM 대시보드 탐색

Kibana에 로그인한 후 Filebeat가 구성한 Suricata 대시보드를 살펴볼 수 있습니다.

Kibana 환영 페이지 상단의 검색 필드에 type:dashboard suricata라는 검색어를 입력하십시오. 이 검색은 다음 스크린샷에 나와 있는대로 Suricata 이벤트 및 Suricata 경보 대시보드 두 개의 결과를 반환할 것입니다:

[Filebeat Suricata] 이벤트 개요 결과를 클릭하여 모든 기록된 Suricata 이벤트에 대한 개요를 보여주는 Kibana 대시보드를 방문하십시오:

Suricata 경보 대시보드를 방문하려면 검색을 반복하거나 이벤트 대시보드에 포함된 Alerts 링크를 클릭하십시오. 페이지는 다음 스크린샷과 비슷해야 합니다:

각 대시보드가 표시하는 이벤트 및 경보를 검사하려면 페이지 하단으로 스크롤하여 Suricata에서의 각 로그 항목을 표시하는 테이블을 찾을 수 있습니다. 각 항목을 확장하여 경보의 원본 로그 항목을 보고, 경보에 대한 소스 및 대상 IP와 같은 다양한 필드를 자세히 조사할 수 있습니다. 공격 유형, Suricata 시그니처 ID 등.

Kibana에는 브라우저 창의 왼쪽 메뉴를 사용하여 액세스할 수 있는 내장된 보안 대시보드 세트도 있습니다. 지도에 표시된 이벤트에 대한 개요 및 네트워크에서의 이벤트에 대한 집계 데이터를 얻으려면 네트워크 대시보드로 이동하십시오. 대시보드는 다음 스크린샷과 비슷해야 합니다:

지정된 검색 시간대와 일치하는 모든 이벤트를 나열하는 테이블을 보기 위해 네트워크 대시보드의 하단으로 스크롤할 수 있습니다. 또한 각 이벤트를 자세히 살펴보거나 이벤트를 선택하여 Kibana 타임라인을 생성하여 특정 트래픽 흐름, 경보 또는 커뮤니티 ID를 조사할 수 있습니다.

결론

이 튜토리얼에서는 독립형 서버에 Elasticsearch와 Kibana를 설치하고 구성했습니다. 두 도구 모두 개인 IP 주소에서 사용할 수 있도록 구성했습니다. 또한 각 도구에 포함된 xpack 보안 모듈을 사용하여 Elasticsearch와 Kibana의 인증 설정을 구성했습니다.

Elasticsearch 및 Kibana 구성 단계를 완료한 후에는 Suricata 서버에 Filebeat를 설치하고 구성했습니다. Filebeat를 사용하여 Kibana 대시보드를 채우고 Suricata 로그를 Elasticsearch로 전송했습니다.

마지막으로 Elasticsearch 서버로 SSH 터널을 생성하고 Kibana에 로그인했습니다. 새로운 Suricata 이벤트 및 경보 대시보드와 네트워크 대시보드를 찾았습니다.

이 시리즈의 마지막 튜토리얼에서는 Kibana의 SIEM 기능을 사용하여 Suricata 경고를 처리하는 방법에 대해 안내합니다. 특정 경고를 추적하기 위한 사례를 생성하고 네트워크 흐름을 상관시키는 타임라인, 그리고 추적하거나 자세히 분석하려는 특정 Suricata 이벤트와 일치하는 규칙에 대해 탐색하게 됩니다.

Source:
https://www.digitalocean.com/community/tutorials/how-to-build-a-siem-with-suricata-and-elastic-stack-on-rocky-linux-8