Suricata 이벤트를 사용하여 규칙, 타임라인 및 사례 만들기 Kibana의 SIEM 앱에서

소개

이 시리즈의 이전 튜토리얼에서는 Suricata를 설치하고 구성하는 방법을 안내했습니다. 또한 Suricata 서버에서 경고를 Elastic Stack 서버로 보내기 위해 Filebeat를 사용하는 방법을 설명했습니다. 이를 사용하여 내장된 보안 정보 및 이벤트 관리(SIEM) 기능과 함께 사용할 수 있습니다.

이 시리즈의 최종 튜토리얼에서는 Kibana의 사용자 정의 규칙을 만들고 Kibana의 SIEM 대시 보드에서 경고를 생성합니다. 규칙을 설정하고 Kibana를 사용하여 Suricata의 로그를 필터링하는 위치와 방법을 이해한 후에는 Kibana의 타임라인 분석 도구를 사용하여 사례를 생성하고 관리하는 방법을 살펴볼 것입니다.

이 튜토리얼을 마치면 네트워크의 모든 서버에서 보안 이벤트를 추적하고 조사할 수 있는 SIEM 시스템을 보유하게 될 것입니다.

전제 조건

이 튜토리얼 시리즈를 따라오고 있다면, 이미 적어도 4GB RAM과 2개의 CPU가 장착된 서버와 루트 권한이 아닌 사용자가 설정되어 있어야 합니다. 이 가이드를 위해서, 운영 체제에 따라 초기 서버 설정 가이드를 따라 설정할 수 있습니다.

또한 서버에 Suricata가 설치되어 실행 중이어야 합니다. 서버에 Suricata를 설치해야 하는 경우, 운영 체제에 따라 다음 튜토리얼 중 하나를 사용할 수 있습니다:

또한 Suricata 서버에서 로그를 Elasticsearch로 보낼 수 있도록 설정된 Elastic Stack 서버가 있어야 합니다. Elastic Stack 서버를 생성해야 하는 경우, 운영 체제에 따라 다음 목록에서 일치하는 튜토리얼 중 하나를 사용하십시오:

일단 모든 전제 조건을 갖추었다면, Kibana 서버에 로그인할 수 있으며, 다양한 Suricata 경고 및 이벤트 대시보드에 이벤트가 있는지 확인하십시오.

모든 전제 조건을 갖추었다면, 이전 튜토리얼에서 생성한 자격 증명을 사용하여 브라우저에서 Kibana에 로그인하기 위해 Kibana 서버로 SSH 터널을 엽니다.

단계 1 — Elasticsearch에서 API 키 활성화하기

규칙, 경보 및 타임라인을 Kibana에서 생성하기 전에 xpack 보안 모듈 설정을 활성화해야 합니다.

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

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

파일 끝에 다음 강조된 줄을 추가합니다:

/etc/elasticsearch/elasticsearch.yml
. . .
discovery.type: single-node
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true

편집을 완료했으면 파일을 저장하고 닫습니다. nano를 사용하는 경우 CTRL+X를 누르고 Y를 입력한 후 ENTER를 눌러 확인할 수 있습니다.

이제 Elasticsearch를 다시 시작하여 새 설정이 적용되도록 합니다.

  1. sudo systemctl restart elasticsearch.service

이제 Kibana에서 규칙을 구성하고 경보를 검사하며 타임라인과 케이스를 생성할 준비가 되었습니다.

단계 2 — Kibana에 규칙 추가하기

Kibana의 SIEM 기능을 Suricata 이벤트 데이터와 함께 사용하려면 수신 이벤트에 대한 경고를 생성할 규칙을 작성해야 합니다. 규칙을 생성하거나 가져오려면 Kibana의 보안 앱 페이지에서 규칙 대시보드를 방문하세요.

본 자습서에서는 서로 일치하지 않는 포트로 서버로의 트래픽을 감지하기 위해 다음 서명을 사용할 것입니다 (SSH, HTTP 및 TLS 트래픽 순):

Example Suricata Signature
alert ssh any any -> 203.0.113.5 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000000;)
alert ssh any any -> 2001:DB8::1/32 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000001;)

alert http any any -> 203.0.113.5 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000002;)
alert http any any -> 2001:DB8::1/32 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000003;)

alert tls any any -> 203.0.113.5 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000004;)
alert tls any any -> 2001:DB8::1/32 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000005;)

귀하만의 서명이나 규칙 세트에서 사용 중인 경우 경고를 생성하고 Kibana의 기본 Suricata 대시보드에서 해당 이벤트에 액세스할 수 있는지 확인하세요.

지금 Kibana의 보안 앱에서 Rules 페이지를 방문하십시오. http://localhost:5601/app/security/rules/. 페이지의 오른쪽 상단에있는 새 규칙 만들기 버튼을 클릭하십시오.

사용자 정의 쿼리 규칙 유형 카드가 선택되었는지 확인하십시오. 사용자 정의 쿼리 입력 필드로 스크롤하고 다음을 붙여 넣으십시오:

Kibana Query Language Input
rule.id: "1000000" or rule.id :"1000001"

규칙을 추가 할 때 Suricata의 sid 값을 공격에 대한 알림을 받고 싶은지 확인하십시오.rule.id 값과 일치하도록 변경하십시오.

쿼리 빠른 미리보기 드롭 다운을 지난 달로 변경한 다음 결과 미리보기를 클릭하십시오. Suricata 로그에 일치하는 이벤트가있는 경우 페이지가 업데이트되어 지난 달의 경보를 보여주는 그래프가 표시됩니다. 페이지는 다음 스크린 샷과 비슷해야합니다:

계속하려면 계속을 클릭하여 규칙 이름 필드에 이름을 추가하십시오. 추가하는 모든 규칙에는 규칙 이름이 필요합니다. 규칙 이름 필드에 이름을 추가하십시오. 여기 예시에서는 Suricata 규칙 SSH TRAFFIC on non-SSH port의 메시지 설명을 사용하겠습니다. 규칙에 대한 설명도 추가하십시오. 여기 예시에서는 비표준 포트에서 SSH 연결 시도 확인을 사용합니다.

또한 고급 설정 섹션을 확장하여 규칙에 대한 세부 정보를 추가 할 수 있습니다. 예를 들어, 규칙에서 생성 된 경고를 처리하는 방법에 대한 설명을 추가하거나 특정 공격 유형에 대한 보안 연구원의 기사에 링크를 추가 할 수 있습니다.

규칙 이름, 설명 및 선택적 추가 필드를 추가한 후 계속을 클릭하여 규칙 생성 단계 3으로 진행하십시오.

다음 일정 규칙 섹션 설정은 기본값으로 유지하고 계속을 클릭하십시오.

마지막으로 규칙 작업 단계에서 규칙 생성 및 활성화를 클릭하십시오.

규칙에 대한 세부 정보가 표시되는 새 페이지로 리디렉션됩니다:

참고: 처음에 경보 데이터가 생성되기까지 몇 분이 소요될 수 있습니다. 이 지연은 규칙의 기본 일정이 5분마다 실행되도록 설정되어 있기 때문입니다.

다른 Suricata 규칙에 대한 경고를 받고 싶다면 위 단계를 반복하고 서명의 sid를 Kibana의 사용자 정의 쿼리 rule.id 필드에 대체하십시오.

규칙 또는 규칙을 설정한 후에는 경고를 검토하고 관리할 사례를 만들 준비가 되었습니다.

이제 Kibana의 SIEM 앱에서 알림을 생성하기 위한 규칙 또는 규칙이 구성되었습니다. 알림을 추가로 그룹화하고 관리할 방법이 필요합니다. 시작하려면 Kibana의 알림 대시보드를 방문하십시오: http://127.0.0.1:5601/app/security/alerts.

사용 중인 Suricata 시그니처와 일치하는 잘못된 트래픽을 생성했는지 확인하십시오. 예를 들어 다음과 같은 명령을 로컬 머신에서 실행하여 sid:1000000 Suricata 규칙을 트리거할 수 있습니다:

  1. ssh -p 80 your_server_ip

이 명령은 서버에 기본 포트 22가 아닌 포트 80을 통해 SSH에 연결을 시도하고 경고를 트리거해야 합니다. Elasticsearch와 Kibana에서 처리되어야하므로 경고가 Kibana에 표시되기까지 몇 분이 걸릴 수 있습니다.

다음으로, 페이지 하단에 표시되는 알림 테이블에 comnunity_id 필드를 추가합니다. 첫 번째 튜토리얼에서 이 필드가 Suricata에 의해 생성되며 네트워크 흐름에 포함된 고유한 IP 주소 및 포트를 나타낸다는 것을 기억하십시오. 필드 버튼을 클릭하고 팝업 대화 상자에 network.community_id를 입력한 다음 필드 이름 옆의 확인란을 선택하십시오:

대화 상자를 닫으면 필드가 알림 테이블에 추가됩니다. 이제 동일한 community_id 값으로 표시되는 알림 위에 마우스를 올리고 타임라인 조사에 추가 아이콘을 클릭합니다. 이렇게하면 Suricata가 이벤트에 추가한 community_id를 공유하는 모든 알림이 추가 조사를 위한 타임라인에 추가됩니다:

다음으로 브라우저 하단 왼쪽에있는 제목 없는 타임라인 링크를 클릭하십시오. 이 링크를 클릭하면 조사하려는 Suricata community_id 필드를 포함하는 경고만 표시되는 페이지로 이동합니다.

타임라인 페이지에서는 경고 또는 네트워크 흐름과 관련된 개별 패킷에 대한 자세한 내용을 보여줍니다. 타임라인을 사용하여 의심스러운 네트워크 흐름이 언제 시작되었는지, 어디에서 시작되었는지, 그리고 얼마 동안 지속되었는지에 대한 더 나은 아이디어를 얻을 수 있습니다.

페이지 오른쪽에있는 모든 데이터 소스 버튼을 클릭하고 탐지 경고 버튼을 선택한 다음 저장을 클릭하십시오. 이 옵션을 사용하면 Kibana에서 생성하는 경고만 표시됩니다. 이 옵션이없으면 Suricata의 경고도 타임라인에 포함됩니다.

새로운 타임라인을 저장하려면 타임라인 페이지의 왼쪽 상단에있는 연필 아이콘을 클릭하십시오. 다음 스크린 샷은 연필 아이콘과 모든 데이터 소스 버튼이있는 위치를 강조 표시합니다:

타임라인에 추가 정보를 추가해야하는 경우 설명 필드에 텍스트를 추가할 수 있습니다. 타임라인 이름과 설명을 편집 한 후 모달 대화 상자의 오른쪽 하단에있는 저장 버튼을 클릭하십시오.

나중에 자세히 조사하려는 다른 경고에 대해 타임라인을 만들기 위해 위의 단계를 반복하십시오.

다음 단계에서는 이벤트의 타임라인 뷰를 사용하여 Kibana의 사례 앱에 경고를 첨부합니다. SIEM 도구 모음에 속합니다.

단계 4 — SIEM 사건 생성 및 관리

이전 단계에서는 Suricata의 community_id 필드를 기반으로 개별 경고 및 패킷을 그룹화하는 타임라인을 생성했습니다. 이 튜토리얼의 이 섹션에서는 타임라인에서 경고를 추적하고 관리하기 위해 사례를 만들 것입니다.

타임라인에서 새로운 사례를 만들려면 브라우저에서 타임라인 페이지에 있는지 확인하세요. 타임라인 페이지 오른쪽 상단의 사례에 첨부 버튼을 클릭한 다음 나타나는 목록에서 새로운 사례에 첨부 버튼을 클릭하세요.

조사 중인 사건에 대한 정보를 입력할 수 있는 페이지로 리디렉션됩니다. 다음 예시 스크린샷에서 사례는 비SSH 포트 경고인 SSH 트래픽 사례입니다:

기술적인 이름과 선택적인 태그를 포함하여 필드를 작성하세요. 이 예에서 사례의 이름은 특정 유형의 트래픽 및 조사 대상 호스트인 203.0.113.5에서 발생한 SSH 트래픽입니다. SIEM 시스템에서 조사해야 할 많은 사건이 있으므로, 이와 같은 네이밍 스키마를 사용하면 사례, 타임라인 및 경고를 추적하는 데 도움이 될 것입니다. 이름은 Kibana 경고와 Suricata 서명의 메시지 필드와 일치할 것입니다.

페이지 맨 아래로 스크롤하여 사례 생성 버튼을 클릭하십시오. 브라우저는 저장된 케이스를 보여주는 페이지에 있게 될 것입니다. 여기서 추가 정보와 함께 Markdown 형식의 주석을 추가하거나 이 페이지에서 케이스를 편집할 수 있습니다.

다음으로, 이 튜토리얼의 이전 단계에서 추가한 케이스 타임라인으로 이동하는 설명에서 링크를 클릭하십시오.

케이스에 포함하려는 각 경보에 대해 경보 위에있는 추가 작업 아이콘을 클릭하십시오. 기존 케이스에 추가를 클릭하십시오.

팝업 모달에서 케이스 이름을 클릭하여 경보를 케이스에 추가하십시오. 조사하고있는 타임라인 및 경보에 해당하는 케이스를 선택하십시오. 목록의 각 경보를 기존 케이스에 반복하여 추가하십시오.

이제 페이지 왼쪽의 탐색 메뉴를 사용하여 Kibana의 케이스 앱을 다시 방문하십시오. 경우를 클릭하고 추가한 경보가 케이스 세부 정보에 나열되는 방법을 확인하십시오:

여기서 케이스의 하단으로 스크롤하여 조사한 경보 또는 경보에 대한 조치, Suricata의 구성 변경 (예 : 새로운 또는 편집된 규칙), 다른 팀 멤버로의 승격 또는 해당 케이스와 관련된 기타 사항을 추가할 수 있습니다.

원하는 다양한 유형의 경보에 대한 케이스를 생성하는 데 편안해지면, 이제 Kibana의 SIEM 도구를 사용하여 모든 경보를 하나의 중앙 위치에서 조직화하고 조사할 수 있습니다.

결론

이 튜토리얼에서는 Suricata와 Elastic Stack SIEM 시스템에 기존 규칙을 추가하여 특정 트래픽에 대한 경보를 생성하는 Kibana에 대해 설명했습니다. 또한, 이러한 경보를 community_id를 기반으로 그룹화하는 타임라인 또는 타임라인을 작성했습니다. 마지막으로, 케이스를 생성하고 해당 케이스에 타임라인 및 관심 있는 개별 경보를 연결했습니다.

이 SIEM 시스템을 구축하면 시스템 전반에서 보안 이벤트를 거의 모든 규모로 추적할 수 있습니다. Suricata를 보다 익숙하게 사용하고 Kibana SIEM에서 생성된 경보를 추적함으로써 Suricata 경보 및 기본 작업을 사용자의 네트워크에 맞게 사용자 정의할 수 있을 것입니다.

Kibana의 SIEM 도구에 대한 자세한 정보는 공식 Elastic Security Documentation을 방문하십시오. 그곳의 안내서에서는 규칙, 경보, 타임라인 및 케이스의 사용 방법을 더 자세히 설명합니다.

더 가벼운 SIEM 인터페이스를 찾으신다면 EveBox도 관심이 있을 수 있습니다. EveBox는 Suricata 이벤트 데이터 및 SIEM 기능을 단일 페이지에 제공합니다.

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-rules-timelines-and-cases-from-suricata-events-using-kibana-s-siem-apps