인라인 필터로 디택션 수정하기

코드를 작성하지 않고 기존 룰 수정하기

개요

기존 룰을 쉽게 조정할 수 있습니다, 다음을 포함하여 Panther에서 관리하는 룰, Inline Filters를 추가하여 가능합니다. Inline Filter는 디택션 로직이 실행되기 전에 통과해야 하는 조건입니다. Inline Filters는 예약된 룰이나 정책이 아닌 룰에서만 사용할 수 있습니다.

다음에서 Panther Console에서, 노코드 빌더를 사용하여 Inline Filters를 생성할 수 있습니다. 다음에서는 CLI 워크플로, 다음을 추가하여 Inline Filters를 생성할 수 있습니다 InlineFilters YAML 키입니다.

필터의 일반적인 사용 사례는 허용 목록 또는 거부 목록을 추가하는 것입니다.

Inline Filters의 작동 방식

필터 문은 디택션의 로직보다 먼저 평가됩니다. 필터는 true 를 반환해야 하며(즉, 이벤트와 일치해야 함), 그래야 디택션 로직 자체가 실행됩니다. 즉, Inline Filters는 포함 필터입니다.

Console과 CLI 워크플로 모두에서 필터는 AND 또는 OR 로직을 사용해 그룹화할 수 있습니다. Inline Filters는 드모르간의 법칙arrow-up-right을 따릅니다. 이 기술 자료 문서에서 로직 예제를 확인하세요: Panther 디택션 Inline Filters 문제 해결 가이드arrow-up-right.

이벤트에 필터가 평가하는 필드가 없으면 필터는 통과됩니다. 필터가 평가하는 필드의 값이 none인 경우, 필터는 false 긍정 비교 연산자 또는 적용되지 않는 비교 연산자에서는 를 반환하고, true 역비교 연산자에서는 를 반환합니다.

Console에서는 새 룰 생성 중에는 필터를 사용할 수 없습니다. CLI 워크플로에서는 InlineFilters 를 새 룰에 포함할 수 있습니다.

circle-info

CLI 워크플로와 Console을 모두 사용하여 디택션 콘텐츠를 관리하는 것은 전반적으로 권장되지 않지만, 이는 Console에서 CLI 워크플로와 함께 Inline Filters를 사용하는 것이 가능합니다. Console에서 생성된 필터는 CLI 워크플로에서 디택션 콘텐츠를 업데이트할 때 덮어쓰이거나 삭제되지 않습니다.

Panther Console에서 필터 만들기

룰의 편집 페이지에서 또는 해당 룰에 의해 트리거된 알러트 내에서 룰에 필터를 추가할 수 있습니다.

룰의 편집 페이지에서 필터 추가

  1. Panther Console의 왼쪽 탐색 모음에서 다음을 클릭하세요. Detections.

  2. 디택션 목록에서 룰의 이름을 클릭하여 세부 정보 페이지를 봅니다.

  3. 다음 내부의 Detect 섹션에서, 다음만 포함하도록 필터링: 의 아래 및 Where의 오른쪽에서, 다음을 클릭합니다 +.

    • 표시되는 메뉴에서 다음 중 하나를 선택합니다 필터 추가 또는 필터 그룹 추가. There is a plus button (+) next to the word "Where." A menu is open below the plus, with options "Add Filter" and "Add Filter Group."

  4. 각 필터(단독 또는 그룹 내)를 대해 로직을 정의합니다:

    1. 다음을 클릭하세요. , 그런 다음 조건이 적용될 이벤트 키를 선택합니다.

    2. 다음을 클릭하세요. 조건, 그런 다음 조건을 선택합니다.

    3. 선택한 조건 에 입력 값이 필요하면(예: 또는 포함), 값 또는 값 목록을 제공합니다.

  5. 각 필터와 필터 그룹 사이에서 올바른 결합자(즉, 또는 또는)가 선택되었는지 확인하세요.

  6. 추가된 필터(s)와 함께 통과하는지 확인하기 위해 단위 테스트를 실행하세요.

  7. 페이지 오른쪽 상단 모서리에서 배포 를 클릭하여 변경 사항을 저장하세요.

배열 값 입력

선택한 룰 필터 연산자가 값 필드에 배열이 필요로 하는 경우(예: 다음 중 하나 연산자), 값 필드를 클릭하면 나타나는 모달에서 배열 값을 입력하게 됩니다.

배열에 값을 추가하려면:

  1. 필터에 사용할 조건 을 선택한 후 값 필드를 클릭하세요.

    In the Filters to only include: section, Field, Operator and List inputs are shown. Field has an "EventId" value, Operator has an "is in" value, and (empty list) doesn't yet have a value, but the field is circled.
    • 그러면 배열 입력 모달이 열립니다.

  2. 모달에서 입력 필드에 배열 값(s)을 입력하세요.

    • 입력이 쉼표로 구분되어 있으면, 위에 입력된 값들은 쉼표로 구분됩니다 체크박스를 선택하세요.

      • 이 필드를 선택하면 values 필드에 입력된 텍스트가 (쉼표 구분자를 사용하여) 여러 값으로 분리됩니다. 예를 들어 "User 1,User 2,User 3"을 입력하면 3개의 값이 추가됩니다.

        The array input modal says "Enter a list of strings..." at the top. It has an input textfield, and a checkbox that says "Values entered above are comma-delimited," which is checked. Three values have been entered: User 3, User 2, and User 1.

    • 입력이 쉼표로 구분되어 있지 않으면 위에 입력된 값들은 쉼표로 구분됩니다 선택하지 않은 상태로 두세요.

      • 이 필드를 선택하지 않은 상태에서는 쉼표를 포함하는 값을 한 번에 하나씩 추가할 수 있습니다. 예를 들어 "1,000"을 입력하면 하나의 값만 추가됩니다. The array input modal says "Enter a list of strings..." at the top. It has an input textfield, and a checkbox that says "Values entered above are comma-delimited," which is unchecked. One value has been entered: 1,000

  3. 다음을 클릭하세요. 추가.

  4. 배열에 모든 값이 추가될 때까지 필요한 만큼 2-3단계를 반복하세요.

  5. 다음을 클릭하세요. 적용.

객체 배열 인덱싱

필터 표현식을 만드는 동안, 값이 객체 배열인 이벤트 키가 있으면 해당 키는 배열 인덱싱 기호와 함께 드롭다운 선택기에 표시됩니다 [*], 그리고 객체의 필드도 함께 표시됩니다. 다음을 사용할 수 있습니다 [*] 를 사용해 배열 내 모든 객체에서 선택한 필드를 대상으로 하거나, * 를 정수로 바꿔 배열의 인덱스를 지정하여 단일 필드를 대상으로 할 수 있습니다.

예시

예를 들어 다음 resources 필드를 AWS.CloudTrail 스키마에서 살펴보겠습니다: A "resources" field is shown, with three nested fields: arn, accountId, and type. "resources" and the nested fields are circled.

이 필드는 이벤트 필드 선택기에서 다음과 같이 표시됩니다:

"Where,"가 앞에 붙은 필드에는 비어 있는 필터 표현식이 표시됩니다. 필드 선택기가 열려 있으며, 다음 필드들이 원으로 표시되어 있습니다: resources[*].accountId, resources[*].arn, resources[*].type.

기본적으로 Panther는 와일드카드 배열 인덱스([*])를 적용하여 배열 내 모든 객체에서 선택한 필드의 값을 검색합니다. [*] 를 사용하면 이 값들의 배열이 생성되어 검색됩니다. 이 때문에 배열 조건만 사용할 수 있습니다: 비어 있음, 비어 있지 않음, 포함, 포함하지 않음.

필터 표현식에서 키로 "resources[*].type"가 선택되어 있고 조건 선택기가 열려 있습니다. 비어 있음, 비어 있지 않음, 포함, 포함하지 않음의 네 가지 조건이 표시되어 원으로 표시됩니다.

예를 들어 아래 필터 표현식(resources[*].type 포함 AWS::IAM::Role)은 이벤트가 다음 경우 일치함을 의미합니다 어떤 의 값이 type 에서 resources 배열이 AWS::IAM::Role.

필터 칩에 "resources[*].type contains AWS::IAM::Role"라고 표시됩니다

그러나 * 를 정수로 바꿔 배열의 인덱스를 지정할 수 있으며, 이는 배열 내 단일 객체를 지정합니다. 이 경우 Panther는 해당 인덱스의 중첩 필드 값만 평가합니다.

표시되는 조건은 선택한 중첩 필드의 데이터 유형에 적용 가능한 조건으로 업데이트됩니다:

필터 표현식에서 키 선택기는 "resources[0].type"라고 표시되고 조건 드롭다운이 열려 있습니다. 예를 들어 is not, is in, is public 등의 다양한 조건이 표시됩니다.

CLI 워크플로에서 필터 생성하기

Panther Console에서 노코드 룰 필터를 만드는 것 외에도, 다음과 같이 작성된 룰에 YAML 필터를 만들 수도 있습니다 간단한 디택션 또는 Python 디택션.

Console에서 만든 필터와 마찬가지로, YAML 필터는 룰의 디택션 로직보다 먼저 평가됩니다. 필터가 true를 반환하면 디택션 로직이 실행됩니다. 필터가 false를 반환하면 디택션 평가가 중지되고, 디택션은 false 를 완전히 반환합니다.

YAML InlineFilter 구문

YAML 필터는 다음으로 표시됩니다 InlineFilters 키. 내부에서 InlineFilters, 하나 이상의 일치 표현식을 나열합니다. 다음을 사용할 수 있습니다 위에 나열된 검색용 로그 유형별 RBAC의 모든Any 결합자 를 사용하여 각각 AND 또는 OR 논리를 지정하고, 결합자를 중첩하여 필터 그룹을 만들 수 있습니다. 결합자가 바로 아래에 지정되지 않은 경우 InlineFilters, 위에 나열된 검색용 로그 유형별 RBAC의 모든 가 가정됩니다.

다음을 참조하세요 심플 디택션 일치 표현식 참조 에서 다양한 유형의 일치 표현식을 구성하는 방법을 알아보세요.

예시:

YAML 인라인 필터의 제한 사항

에 설명된 일부 일치 표현식 기능은 심플 디택션 일치 표현식 참조 에서는 사용할 수 없습니다 InlineFilters. 이러한 제한 사항은 다음과 같습니다:

  • InlineFilters 는 예약된 룰 또는 정책에는 사용할 수 없고, 룰에만 사용할 수 있습니다.

  • 다음 DeepKey 키 지정자 내에서는 사용할 수 없습니다 InlineFilters—오직 KeyPath 만 사용할 수 있습니다.

  • 다음 OnlyOneNone 결합자 내에서는 사용할 수 없습니다 InlineFilters—오직 위에 나열된 검색용 로그 유형별 RBAC의 모든Any 만 사용할 수 있습니다.

  • 특정 조건 값은 내에서 사용할 수 없습니다 InlineFilters. 다음 조건은 지원되지 않습니다:

    • Exists

    • DoestNotExist

    • IsNull

    • IsNotNull

    • IsIPAddress

    • IsIPv4Address

    • IsIPv6Address

    • AnyElement

    • AllElements

    • OnlyOneElement

    • NoElement

CLI 워크플로에서 인라인 필터를 만드는 방법

Python 또는 심플 디택션으로 생성된 룰의 CLI 워크플로에서 인라인 필터를 만들려면, 디택션의 YAML 파일에 다음을 포함합니다 InlineFilters 키. 내부에서 InlineFilters, 하나 이상의 일치 표현식.

필터를 사용한 실패한 단위 테스트 처리

~에 대해 Panther 관리형 필터가 있는 룰의 경우, 현재 단위 테스트를 추가하거나 수정할 수 없습니다. 단위 테스트가 통과하지 않으면 룰을 저장할 수 없습니다.

단위 테스트가 실패하면 다음 단계를 따르세요:

  1. Panther가 관리하는 룰을 복제합니다.

  2. 복제한 룰에 필터를 추가합니다.

  3. 복제한 룰의 단위 테스트를 통과하도록 수정합니다.

인라인 필터 참조

Console에서 필터를 작성할 때 아래 연산자와 값 유형을 참조하세요.

지원되는 Console 연산자

연산
사용 지침
지원되는 필드 유형
예시

같음 / 같지 않음

필드가 필터의 값과 일치하거나 일치하지 않을 때 이벤트가 매칭됩니다

string, ip, bool, int

username is “root”

is / is not (대소문자 구분 안 함)

필드가 필터의 값과 대소문자를 구분하지 않고 일치하거나 일치하지 않을 때 이벤트가 매칭됩니다

string, ip, bool, int

username is (대소문자 구분 안 함) “rOot”

is in / is not in

필드가 필터의 값 목록 중 항목과 일치하거나 일치하지 않을 때 이벤트가 매칭됩니다

string, int

username is in [ “root”, “admin” ]

port is in [25, 553]

비어 있음

필드의 값이 지정되지 않았을 때 이벤트가 매칭됩니다. 이 연산자는 데이터의 부재만 검사합니다

string, int array, ip array, float array, bool array, string array

errors_list is empty

비어 있지 않음

필드의 값이 지정되었을 때 이벤트가 매칭됩니다. 이 연산자는 데이터의 존재만 검사합니다

string, int array, ip array, float array, bool array, string array

errors_list is not empty

포함

지정된 필드의 값에 제공된 값이 포함되어 있을 때 이벤트가 매칭됩니다

이벤트 값이 문자열 또는 문자열 배열인 경우 부분 일치가 지원됩니다

string, int array, ip array, bool array, string array

domain contains “.google.com”

p_any_port contains 22

contains (대소문자 구분 안 함)

지정된 필드의 값에 제공된 값이 대소문자를 구분하지 않고 포함되어 있을 때 이벤트가 매칭됩니다

이벤트 값이 문자열 또는 문자열 배열인 경우 부분 일치가 지원됩니다

string, string array

username contains (대소문자 구분 안 함) "bad"\n\np_any_email contains (대소문자 구분 안 함) "bad"

포함하지 않음

지정된 필드의 값에 제공된 값이 포함되지 않을 때 이벤트가 매칭됩니다

이벤트 값이 문자열 또는 문자열 배열인 경우 부분 일치가 지원됩니다

string, int array, ip array, bool array, string array

domain !contains “.google.com”

p_any_port !contains 22

does not contain (대소문자 구분 안 함)

지정된 필드의 값에 제공된 값이 대소문자를 구분하지 않고 포함되지 않을 때 이벤트가 매칭됩니다

이벤트 값이 문자열 또는 문자열 배열인 경우 부분 일치가 지원됩니다

string, string array

domain !contains (대소문자 구분 안 함) “.gOogle.com”

p_any_email !contains "good"

starts with

지정된 필드의 값이 제공된 값으로 시작할 때 이벤트가 매칭됩니다

문자열

role starts with “admin_”

starts with (대소문자 구분 안 함)

지정된 필드의 값이 제공된 값으로 대소문자를 구분하지 않고 시작할 때 이벤트가 매칭됩니다

문자열

role starts with (대소문자 구분 안 함) “aDmin_”

does not start with

지정된 필드의 값이 제공된 값으로 시작하지 않을 때 이벤트가 매칭됩니다

문자열

role does not start with "admin_"

does not start with (대소문자 구분 안 함)

지정된 필드의 값이 제공된 값으로 대소문자를 구분하지 않고 시작하지 않을 때 이벤트가 매칭됩니다

문자열

role does not start with (대소문자 구분 안 함) "aDmin_"

ends with

지정된 필드의 값이 제공된 값으로 끝날 때 이벤트가 매칭됩니다

문자열

domain ends with “.cc”

ends with (대소문자 구분 안 함)

지정된 필드의 값이 제공된 값으로 대소문자를 구분하지 않고 끝날 때 이벤트가 매칭됩니다

문자열

domain ends with (대소문자 구분 안 함) “.Cc”

does not end with

지정된 필드의 값이 제공된 값으로 끝나지 않을 때 이벤트가 매칭됩니다

문자열

domain does not end with ".com"

does not end with (대소문자 구분 안 함)

지정된 필드의 값이 제공된 값으로 대소문자를 구분하지 않고 끝나지 않을 때 이벤트가 매칭됩니다

문자열

domain does not end with ".coM"

보다 큼

필드의 값이 필터에 제공된 값보다 클 때 이벤트가 매칭됩니다

int, float

port > 1023

보다 작음

필드의 값이 필터에 제공된 값보다 작을 때 이벤트가 매칭됩니다

int, float

port < 1024

보다 크거나 같음

필드의 값이 필터에 제공된 값보다 크거나 같을 때 이벤트가 매칭됩니다

int

count ≥ 1

보다 작거나 같음

필드의 값이 필터에 제공된 값보다 작거나 같을 때 이벤트가 매칭됩니다

int

count ≤ 100

is private

지정된 IP 주소가 사설일 때 이벤트가 매칭됩니다

IP

dst_ip is_private

is public

지정된 IP 주소가 공용일 때 이벤트가 매칭됩니다

IP

src_ip is_public

is in CIDR / is not in CIDR

지정된 IP 주소가 제공된 CIDR(Classless Inter-Domain Routing) 블록 안에 있거나/없을 때 이벤트가 매칭됩니다

IP

src_ip in_cidr 192.168.0.0/16

CIDR 내 IP를 포함하지 않음

지정된 IP 배열에 제공된 CIDR 블록 안의 IP 주소가 하나도 포함되지 않을 때 이벤트가 매칭됩니다

ip array

p_any_ip_address !contains_ip 8.8.0.0/16

p_any_ip_address !contains_ip 1.1.1.1/32

CIDR 내 IP를 포함함

지정된 IP 배열에 제공된 CIDR 블록 안의 IP 주소가 포함될 때 이벤트가 매칭됩니다

ip array

p_any_ip_address contains_ip 8.8.0.0/16

p_any_ip_address contains_ip 1.1.1.1/32

지원되는 값 유형

값 유형
설명

문자열

문자열 값

int

범위의 32비트 정수 -2147483648, 2147483647

float

64비트 부동소수점 숫자

불리언

불리언 값 true / false

array

각 요소가 동일한 유형인 JSON 배열

ip

유효한 단일 IPv4 또는 IPv6 주소

CIDR

클래스 없는 인터도메인 라우팅 블록

마지막 업데이트

도움이 되었나요?