행동 분석 및 이상 탐지 템플릿 매크로

행동 분석 및 이상 탐지를 위한 Panther 관리형 매크로로 이상값 감지하기

개요

Panther는 템플릿 매크로 로그 데이터 전반에서 이상값 및 새로운 값을 식별하기 위한 템플릿 매크로를 제공합니다. 템플릿 매크로를 사용하면 최근 로그 이벤트를 과거 데이터와 비교하여 확립된 기준에서 크게 벗어나는 활동을 식별할 수 있습니다. 이러한 행동 분석 및 이상 감지 매크로는 사용자 및 엔터티 행동 분석(UEBA) 전략의 일부로 유용할 수 있습니다.

이 매크로들은 최근 시간 간격의 데이터를 더 긴 조회(lookback) 창의 데이터와 비교하고 두 데이터 간의 편차 수준을 판단함으로써 작동합니다.

Panther가 제공하는 매크로는 다음과 같습니다:

new_unique_values_peer. 매크로의 소스 코드를 보는 방법을.

아래

매크로 활성화 매크로를 호출하기 전에 Panther 인스턴스에서 사용할 수 있도록 만들어야 합니다. 매크로는 Panther에서 관리하는저장된 검색(Saved Search)

로 업로드합니다 콘솔 워크플로우에서: 콘솔 워크플로우

  1. Panther 콘솔에서 매크로를 활성화하려면, 해당 팩을 활성화하세요:Panther 콘솔의 왼쪽 네비게이션 바에서 Detections.

  2. 을 클릭한 다음 Packs 을 클릭합니다

  3. "Pack by text 필터" 필드에 "Anomaly."를 입력하세요. Panther Anomaly Detection Pack 타일의 오른쪽에서 Enabled(활성화) 토글을.

Screenshot which shows to to enable a pack. "Detections" is selected from the left-side navbar, and the tab is set to "Packs". A user has searched for the string "anomaly" in the search bar, returning a single pack named "Panther Anomaly Detection Pack". The user has flipped the toggle widget for the pack at the right-side of the panel to "On".

PAT

를 사용하여 Panther에 업로드할 수 있습니다. Panther에서 행동 분석 및 이상 감지 매크로 사용 방법 Panther가 관리하는 행동 분석 및 이상 감지 매크로를 Data Explorer 에서 아래 지침을 따라 호출할 수 있습니다. 이 과정은

  1. Panther 콘솔에서 매크로를 활성화하려면, 해당 지침과 유사하지만 행동 분석 및 이상 감지 템플릿 매크로 사용에 특화되어 있습니다. > Panther에서 행동 분석 및 이상 감지 매크로 사용 방법.

  2. 인스턴스에서 매크로 활성화 조사하기(Investigate) SQL 편집기 상단에

circle-info

-- pragma: template 구문을 추가하세요.선택적으로 --pragma: show macro expanded 를 추가할 수도 있습니다. 이렇게 하면 매크로가 소스 코드로 확장되어 쿼리 문제 해결에 유용합니다. 자세한 내용은

  1. 을 참조하세요.

  1. statistical_anomaly_peer, OR new_unique_values_peer> %} -- 네 개 모두가 아니라 하나의 매크로만 지정하세요arrow-up-right공통 테이블 식(CTE)을 사용하여 서브쿼리를 정의하세요,

    • 서브쿼리는 다음을 포함해야 합니다: SELECT

      • 적어도 다음을:

      • p_event_time 엔터티 컬럼. 엔터티는 종종 이메일 주소, 사용자 ID, 애플리케이션 ID 또는 호스트명과 같은 ID이지만 IP 주소와 같은 어떤 데이터 타입도 될 수 있습니다. 컬럼은 최상위 필드여야 합니다. 필드가 객체나 배열 내부에 중첩되어 있다면 AS

      • 키워드를 사용하여 컬럼에 별칭을 만드세요. statistical_anomaly 집계 컬럼. 예시: 사용자가 동일 팀 구성원에게는 일반적이지 않은 리소스에 접근을 시도하는 경우를 식별합니다. 쿼리의 경우, 이 컬럼의 내용은 집계되어 비정상 값을 검색하는 데 사용됩니다.

      • 쿼리의 경우, 이 컬럼의 내용은 새로운 값을 검색하는 데 사용됩니다. 엔터티 컬럼과 마찬가지로 이 컬럼도 최상위 필드여야 합니다. statistical_anomaly_peer (만약 당신이 예시: 지난 30일 동안 접근하지 않았던 리소스에 지난 하루 동안 접근한 API 토큰을 찾습니다.또는 피어 그룹 ) 사용하고 있다면

    • 필드. WHERE 절을 사용하여 조회 창(즉, 짧은 창과 비교되는 기준이 되는 더 긴 기간)을 정의하세요. 조회 창은 현재 시점에서 끝나야 합니다; 이 때문에 p_occurs_since(). 를 사용하는 것이 권장됩니다. p_occurs_since() 에 대해 자세히 알아보세요arrow-up-right.

  1. from mytable where p_occurs_since(30d)

  1. 를 참조하세요. 클릭.

임시 검색을 넘어서 Panther의 행동 분석 및 이상 감지 쿼리는 위협 사냥에 유용하지만 모니터링 시스템으로 사용했을 때 더 강력합니다. 쿼리는저장될

수 있고, 일정에 맞춰 실행되도록 설정되며, 예약 룰(Scheduled Rules)에 연결될 수 있습니다. 이렇게 하면 이상 활동이 관찰될 때마다 알러트를 받을 수 있습니다.

전체 예제

아래에서 모든 매크로를 호출하는 전체 예제를 참조하세요.

\\\\\\\\\\\\\\\\#### `statistical\\_anomaly`를 사용한 전체 예제

repo,

{{ new_unique_values_peer('subquery', 'actor', 'team', 'repo', '1d') }} 매크로 소스 코드 보기매크로를

Panther 콘솔이나 panther-analysis 리포지토리에서 행동 분석 및 이상 감지 매크로의 소스 코드를 볼 수 있습니다.

  1. Panther 콘솔에서 매크로를 활성화하려면, 해당 지침과 유사하지만 행동 분석 및 이상 감지 템플릿 매크로 사용에 특화되어 있습니다. > Panther 콘솔.

  2. Panther 콘솔에서 매크로 소스 코드를 보려면: 저장된 검색(Saved Searches)이름이 "anomalies"인 Saved Search를 검색하고 해당 이름을 클릭하세요. The saved query containing the macro source code is called "anomalies"

피어 그룹 분석

엔터티의 행동을 동료(peer)들의 행동과 비교하는 것이 종종 유용합니다. 예를 들어, 엔지니어가 최근에 다른 엔지니어들이 로그인하지 않은 계정에 로그인했나요?

Panther는 이러한 분석을 수행하기 위해 statistical_anomaly예시: 사용자가 동일 팀 구성원에게는 일반적이지 않은 리소스에 접근을 시도하는 경우를 식별합니다. 의 피어 버전을 제공합니다. 피어 버전에서는 기준 통계가 피어 그룹에 따라 계산되고 엔터티 행동은 그 기준과 비교됩니다.

이 쿼리들은 비피어(non-peer) 버전과 유사하게 작동하지만 추가 매개변수인 group_field가 있어 피어 그룹을 정의합니다. 이는 엔터티를 함께 그룹화하는 데 사용되는 값이 들어있는 컬럼이어야 합니다. 일반적인 group_field 예로는: 사용자 역할, 직무 부서, VPC ID, 계정 ID 등이 있습니다.

각 매크로의 전체 입력 인수 목록은 아래의

아래에서는 Panther가 제공하는 매크로 사용 방법에 대한 참조 정보를 찾을 수 있습니다. 별도 명시가 없는 한 모든 입력 인수는 여기에 표시된 순서대로 제공되어야 합니다.

statistical_anomaly

statistical_anomaly 매크로는 최근 기간 내의 데이터셋에서 비정상적인 데이터 포인트를 탐색합니다. 이는 CTE를 기본 데이터 세트로 받아 해당 기간 동안 엔터티의 기준 활동을 동일 엔터티의 최신 활동과 비교하고 이 행동이 얼마나 비정상적인지 계산합니다.

기본 데이터 세트를 제공하고, 엔터티 이름을 포함하는 컬럼과 데이터 비교에 사용할 컬럼을 지정해야 합니다. 또한 이상을 찾을 최근 기간의 크기도 정의해야 합니다.

입력 인수

다음 각 인수는 아래에 표시된 순서대로 매크로에 제공되어야 합니다.

이름
데이터 유형
설명

subquery

문자열(String)

이전에 정의된 CTE의 이름으로, 매크로가 분석할 데이터를 제공합니다.

entity_field

문자열(String)

그룹화를 위해 사용할 컬럼의 이름; 보통 이름, IP 주소 또는 ID입니다.

agg_field

문자열(String)

이상치를 검색할 컬럼의 이름입니다.

agg_func

문자열(String)

기간 내에서 agg_field 의 데이터를 집계하는 데 사용할 SQL 함수입니다. 일반적인 값은 count, summax.

tmag

문자열(String)

조회 창(lookback window) 단위 수입니다. 예: " 1 day"에서의1 값.

tunit

문자열(String)

조회 창의 시간 단위입니다. 예: "1 "에서의 day "에서의입니다. 복수형("s" 추가)은 사용하지 마세요(단수형이어야 함).

zscore

숫자(Number)

이상치 임계값; 계산된 zscore 값이 이 값보다 높지 않으면 결과가 반환되지 않습니다.

반환값

매크로 실행 후 반환되는 테이블은 다음 컬럼들을 가집니다:

이름
데이터 유형
설명

N

숫자(Number)

해당 엔터티에 대해 조회 기간 동안 agg_field에 의해 집계된 agg_func데이터의 값입니다.

t1

타임스탬프

조회 기간의 시작입니다.

t2

타임스탬프

조회 기간의 끝입니다.

<entity_field>

임의(Any)

선택된 entity_field.

p_zscore

숫자(Number)

계산된 zscore 조회 기간 동안 엔터티 활동의. 더 높은 zscore 값은 더 비정상적임을 의미합니다.

p_mean

숫자(Number)

해당 엔터티에 대해 agg_field 컬럼의 평균 값(조회 기간을 제외한 데이터에서). subqueryp_stddev

해당

숫자(Number)

의 표준 편차로, 조회 기간을 제외한 데이터에서 계산됩니다. 더 큰 agg_field 컬럼의 평균 값(조회 기간을 제외한 데이터에서). subquery은 엔터티의 활동이 전반적으로 덜 일관되었음을 의미합니다. 해당 매크로는 데이터 세트를 스캔하여 주어진 엔터티에 대해 최근 조회 기간에 나타난 선택된 컬럼의 새로운 값 집합을 반환합니다.

예시: 사용자가 동일 팀 구성원에게는 일반적이지 않은 리소스에 접근을 시도하는 경우를 식별합니다.

예시: 사용자가 동일 팀 구성원에게는 일반적이지 않은 리소스에 접근을 시도하는 경우를 식별합니다. 다음 인수들은 아래에 표시된 순서대로 매크로에 제공되어야 합니다.

입력 인수

이전에 정의된 CTE의 이름으로, 이상을 찾기 위해 사용할 기본 데이터를 포함합니다.

이름
데이터 유형
설명

subquery

문자열(String)

그룹화를 위해 사용할 컬럼의 이름; 보통 사용자 이름, IP 주소 또는 ID입니다.

entity_field

문자열(String)

새로운 값을 검색할 컬럼의 이름입니다.

agg_field

문자열(String)

interval

새로운 값을 찾을 기간의 크기입니다.

문자열(String)

은 p_occurs_since와 동일한 구문을 사용합니다. 정의된.

반환값

매크로 실행 후 반환되는 테이블은 다음 컬럼들을 가집니다:

이름
데이터 유형
설명

<entity_field>

임의(Any)

컬럼의 값입니다. entity_field <agg_field>

조회 기간 동안

임의(Any)

컬럼에서 발견된 모든 새로운 값들입니다. agg_field 이 매크로를 사용하여 엔터티의 숫자형 행동이 동일한

statistical_anomaly_peer

과 비교하여 얼마나 비정상적인지 판단하세요. 예를 들어 동일 태그를 가진 다른 인스턴스와 비교한 EC2 인스턴스의 트래픽량 확인, 또는 동일 버킷의 다른 객체들과 비교한 S3 객체에 대한 접근 요청 확인 등이 있습니다. 피어 그룹엔터티를 식별하는 데 사용할 컬럼의 이름; 보통 이름, IP 주소 또는 ID입니다.

입력 인수

이전에 정의된 CTE의 이름으로, 이상을 찾기 위해 사용할 기본 데이터를 포함합니다.

이름
데이터 유형
설명

subquery

문자열(String)

이전에 정의된 CTE의 이름으로, 매크로가 분석할 데이터를 제공합니다.

entity_field

문자열(String)

엔터티를 그룹화하는 데 사용할 컬럼의 이름; 예: 역할 이름 또는 계정 ID.

group_field

문자열(String)

<group_field>

agg_field

문자열(String)

이상치를 검색할 컬럼의 이름입니다.

agg_func

문자열(String)

기간 내에서 agg_field 의 데이터를 집계하는 데 사용할 SQL 함수입니다. 일반적인 값은 count, summax.

tmag

문자열(String)

조회 창(lookback window) 단위 수입니다. 예: " 1 day"에서의1 값.

tunit

문자열(String)

조회 창의 시간 단위입니다. 예: "1 "에서의 day "에서의입니다. 복수형("s" 추가)은 사용하지 마세요(단수형이어야 함).

zscore

숫자(Number)

이상치 임계값; 계산된 zscore 값이 이 값보다 높지 않으면 결과가 반환되지 않습니다.

반환값

매크로 실행 후 반환되는 테이블은 다음 컬럼들을 가집니다:

이름
데이터 유형
설명

N

숫자(Number)

해당 엔터티에 대해 조회 기간 동안 agg_field에 의해 집계된 agg_func데이터의 값입니다.

t1

타임스탬프

조회 기간의 시작입니다.

t2

타임스탬프

조회 기간의 끝입니다.

<entity_field>

임의(Any)

선택된 entity_field.

이 매크로는 엔터티가 그

임의(Any)

선택된 group_field.

p_zscore

숫자(Number)

계산된 zscore 조회 기간 동안 엔터티 활동의. 더 높은 zscore 값은 더 비정상적임을 의미합니다.

p_mean

숫자(Number)

해당 엔터티에 대해 agg_field 컬럼의 평균 값(조회 기간을 제외한 데이터에서). subqueryp_stddev

해당

숫자(Number)

의 표준 편차로, 조회 기간을 제외한 데이터에서 계산됩니다. 더 큰 agg_field 컬럼의 평균 값(조회 기간을 제외한 데이터에서). subquery은 엔터티의 활동이 전반적으로 덜 일관되었음을 의미합니다. 해당 매크로는 데이터 세트를 스캔하여 주어진 엔터티에 대해 최근 조회 기간에 나타난 선택된 컬럼의 새로운 값 집합을 반환합니다.

예시: 지난 30일 동안 접근하지 않았던 리소스에 지난 하루 동안 접근한 API 토큰을 찾습니다.

의 구성원에 의해 이전에 관찰되지 않았던 행동을 했을 때 이를 식별하는 데 사용하세요. 피어 그룹.

입력 인수

이전에 정의된 CTE의 이름으로, 이상을 찾기 위해 사용할 기본 데이터를 포함합니다.

이름
데이터 유형
설명

subquery

문자열(String)

그룹화를 위해 사용할 컬럼의 이름; 보통 사용자 이름, IP 주소 또는 ID입니다.

entity_field

문자열(String)

엔터티를 그룹화하는 데 사용할 컬럼의 이름; 예: 역할 이름 또는 계정 ID.

group_field

문자열(String)

<group_field>

agg_field

문자열(String)

interval

새로운 값을 찾을 기간의 크기입니다.

문자열(String)

새로운 값을 찾을 조회 기간의 크기입니다. p_occurs_since와 동일한 구문을 사용합니다. 정의된.

반환값

매크로 실행 후 반환되는 테이블은 다음 컬럼들을 가집니다:

이름
데이터 유형
설명

<entity_field>

임의(Any)

컬럼의 값입니다. entity_field <agg_field>

이 매크로는 엔터티가 그

임의(Any)

컬럼의 값입니다. group_field <agg_field>

조회 기간 동안

임의(Any)

컬럼에서 발견된 모든 새로운 값들입니다. agg_field 이 매크로를 사용하여 엔터티의 숫자형 행동이 동일한

마지막 업데이트

도움이 되었나요?