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

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

개요

기존 을(를) Panther-관리 룰에 인라인 필터를 추가하여 쉽게 조정할 수 있습니다. 인라인 필터는 디텍션 로직이 실행되기 위해 통과해야 하는 조건입니다. 인라인 필터는 룰에서만 사용할 수 있으며, 예약된 룰이나 정책에서는 사용할 수 없습니다.

에서 Panther 콘솔, 코드 없는 빌더를 사용하여 인라인 필터를 생성할 수 있습니다. CLI 워크플로우에서는 InlineFilters YAML 키를 추가하여 인라인 필터를 생성할 수 있습니다.

필터의 일반적인 사용 사례는 허용 목록(allowlist) 또는 차단 목록(denylist)을 추가하는 것입니다.

인라인 필터 작동 방식

필터 문은 디텍션의 로직보다 먼저 평가됩니다. 필터는 true (즉, 이벤트와 일치)을 반환해야 디텍션 로직이 실행됩니다. 다시 말해, 인라인 필터는 포함 필터입니다.

콘솔과 CLI 워크플로우 모두에서 필터는 AND 또는 OR 논리를 사용해 그룹화할 수 있습니다. 인라인 필터는 드모르간의 법칙(De Morgan's Laws)arrow-up-right을 따릅니다. 논리 예시는 이 지식 기반 문서를 참조하세요: Panther 디텍션 인라인 필터 문제해결 가이드arrow-up-right.

이벤트에 필터가 평가하는 필드가 포함되어 있지 않으면 필터는 통과합니다. 필터가 평가하는 필드의 값이 없음이면, 필터는 false 를 양수 비교자(positive comparators) 또는 적용되지 않는 비교자에서 반환하고, true 반대 비교자(inverse comparators)에서는

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

circle-info

감지 콘텐츠를 CLI 워크플로우와 콘솔을 동시에 사용하여 관리하는 것은 일반적으로 권장되지 않지만, 가능합니다 콘솔에서 CLI 워크플로우와 함께 인라인 필터를 사용하는 것이 가능합니다. 콘솔에서 생성된 필터는 CLI 워크플로우에서 디텍션 콘텐츠가 업데이트되더라도 덮어쓰거나 삭제되지 않습니다.

Panther 콘솔에서 필터 생성하기

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

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

  1. Panther 콘솔의 왼쪽 네비게이션 바에서 클릭하세요 디텍션(Detections).

  2. 디텍션 목록에서 룰의 이름을 클릭하여 해당 룰의 상세 페이지를 봅니다.

  3. 내에서 디텍트(Detect) 섹션의 이벤트만 포함하도록 필터:Where의 오른쪽에서 클릭하세요 +.

    • 표시되는 메뉴에서 다음 중 하나를 선택합니다 필터 추가(Add Filter) 또는 필터 그룹 추가(Add Filter Group). 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. 클릭 키(Key)를 선택한 다음 조건을 적용할 이벤트 키를 선택합니다.

    2. 클릭 조건(Condition)을 선택한 다음 조건을 선택합니다.

    3. 선택한 조건(Condition) 이(가) 입력 값(예: 가능합니다 또는 contains)을 필요로 하면 값 또는 값 목록을 제공하세요.

  5. 을 참조하세요. 각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우 또는 또는and

  6. )가 선택되었는지 확인하세요.

  7. 추가한 필터로 단위 테스트를 실행하여 통과하는지 확인하세요. 페이지 오른쪽 상단에서 클릭하세요 배포(Deploy)

워크플로우를 따르세요.

배열 값 입력 선택한 룰 필터 연산자가 값 필드에 배열을 요구하는 경우(예: is in

연산자), 값 필드에 클릭하면 팝업되는 모달에서 배열 값을 입력하게 됩니다.

  1. 배열에 값을 추가하려면: 키(Key) 각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우 조건(Condition) 필터에 대해

    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. 그러면 배열 입력 모달이 열립니다.

    • 모달에서 입력 필드에 배열 값(들)을 입력하세요. 입력이 쉼표로 구분된 경우, 위에 입력된 값은 쉼표로 구분됨(Values entered above are comma-delimited)

      • 체크박스를 선택하세요.

        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.

    • 이 필드를 선택하면 값 필드에 입력된 텍스트가 쉼표 구분자로 분리되어 여러 값으로 처리됩니다. 예를 들어 "User 1,User 2,User 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 unchecked. One value has been entered: 1,000

  3. 클릭 이 필드가 선택 해제되면 쉼표를 포함하는 값을 하나씩 추가할 수 있습니다. 예를 들어 "1,000"을 입력하면 하나의 값으로 추가됩니다..

  4. 추가(Add)

  5. 클릭 필요에 따라 2-3단계를 반복하여 배열에 모든 값을 추가하세요..

적용(Apply)

객체 배열의 인덱싱 [*]필터 표현식을 만드는 동안 이벤트 키의 값이 객체 배열인 경우 해당 키는 드롭다운 선택기에 배열 인덱싱 심볼 [*] 와 함께 표시되며 객체의 필드들도 함께 표시됩니다. * 를 사용하여 배열의 모든 객체에서 선택된 필드를 대상으로 지정하거나,

를 정수로 바꿔 배열을 인덱싱하여 단일 필드를 대상으로 지정할 수 있습니다.

예시 예를 들어, 다음의 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는 와일드카드 배열 인덱스( [*] )를 적용하여 배열의 모든 객체에서 선택된 필드의 값을 검색합니다. 가 사용되면 이러한 값들의 배열이 생성되어 검색됩니다. 이 때문에 배열 조건만 사용할 수 있습니다:, 비어 있음(is empty), contains, 비어 있지 않음(is not empty).

포함하지 않음(does not contain)

필터 표현식에서 키로 "resources[*].type"이 선택되어 있고 조건 선택기가 열려 있습니다. 네 가지 조건이 표시되어 있습니다: 비어 있음, 비어 있지 않음, 포함, 포함하지 않음.예를 들어, 아래 필터 표현식( contains resources[*].typeAWS::IAM::Role )은 배열의 임의의(any) 값이 type 예를 들어, 다음의 인 경우 이벤트가 일치함을 의미합니다. resources[*].type.

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

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

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

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

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

Panther 콘솔에서 코드 없는 룰 필터를 만드는 것 외에도, Simple Detections 또는 Python 디텍션.

으로 작성된 룰에 대해 YAML 필터를 생성할 수 있습니다. true콘솔에서 생성된 필터와 마찬가지로 YAML 필터는 룰의 디텍션 로직보다 먼저 평가됩니다. 필터가 false를 반환하면 디텍션 로직이 실행됩니다. 필터가 false 를 반환하면 디텍션 평가가 중지되고 디텍션은

완전히(altogether) 반환됩니다. YAML

InlineFilter InlineFilters 구문(syntax) InlineFiltersYAML 필터는 키로 표시됩니다. 각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우 내에 하나 이상의 일치 표현식을 나열하세요. All Any InlineFilters, 키로 표시됩니다. 결합자(combinators)

를 사용하여 각각 AND 또는 OR 논리를 지정하고 결합자를 중첩하여 필터 그룹을 만들 수 있습니다. 결합자가 직속으로 지정되지 않으면 가 기본으로 가정됩니다.

다음을 참조하세요

YAML 인라인 필터의 제한사항

일부 매치 표현식 기능은 직속으로 지정되지 않으면 에서는 불가능합니다 InlineFilters. 이러한 제한사항에는 다음이 포함됩니다:

  • InlineFilters 스케줄된 룰이나 정책에서는 사용할 수 없고, 룰에서만 사용할 수 있습니다.

  • 이벤트의 JSON에서 새 필터가 대상으로 삼을 표시기를 호버하고 대상 아이콘을 클릭하세요. 키(Key) 각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우 DeepKey 키 지정자 내에서는 사용할 수 없습니다 InlineFilters—오직 KeyPath 만 사용할 수 있습니다.

  • 이벤트의 JSON에서 새 필터가 대상으로 삼을 표시기를 호버하고 대상 아이콘을 클릭하세요. OnlyOne 각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우 None All 내에서는 사용할 수 없습니다 InlineFilters—오직 키로 표시됩니다. 각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우 내에 하나 이상의 일치 표현식을 나열하세요. 만 사용할 수 있습니다.

  • Certain 조건(Condition) 특정 InlineFilters내에서는 사용할 수 없습니다. 다음 조건들은 지원되지 않습니다:

    • Exists

    • DoestNotExist

    • IsNull

    • IsNotNull

    • IsIPAddress

    • IsIPv4Address

    • IsIPv6Address

    • AnyElement

    • AllElements

    • OnlyOneElement

    • NoElement

CLI 워크플로우에서 인라인 필터 생성 방법

Python 또는 Simple Detection으로 생성된 룰에서 CLI 워크플로우로 인라인 필터를 생성하려면, 디텍션의 YAML 파일에 InlineFilters 구문(syntax) InlineFilters를 포함하고 하나 이상 매치 표현식을 포함하세요.

경우, 해당 룰의 단위 테스트는 읽기 전용이므로 실패한 테스트를 수정하여 통과시킬 수 없습니다. 필터를 성공적으로 추가하려면 대신

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

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

  1. Panther가 관리하는 룰을 클론합니다.

  2. 클론한 룰에 필터를 추가합니다.

  3. 클론한 룰의 단위 테스트를 편집하여 통과되게 합니다.

인라인 필터 참조

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

콘솔에서 지원되는 연산자

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

is / is not

필드가 필터의 값과 일치/불일치할 때 이벤트가 매치됩니다

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

비어 있음(is empty)

필드의 값이 지정된 경우 이벤트가 매치됩니다. 이 연산자는 데이터의 존재만을 검사합니다

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

errors_list is not empty

contains

지정된 필드의 값이 제공된 값을 포함할 때 이벤트가 매치됩니다

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

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" p_any_email contains (대소문자 무시) "bad"

비어 있지 않음(is not empty)

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

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

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

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

string

role starts with “admin_”

starts with (대소문자 무시)

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

string

role starts with (대소문자 무시) “aDmin_”

does not start with

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

string

role does not start with "admin_"

does not start with (대소문자 무시)

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

string

role does not start with (대소문자 무시) "aDmin_"

ends with

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

string

domain ends with “.cc”

ends with (대소문자 무시)

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

string

domain ends with (대소문자 무시) “.Cc”

does not end with

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

string

domain does not end with ".com"

does not end with (대소문자 무시)

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

string

domain does not end with ".coM"

is greater than

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

int, float

port > 1023

is less than

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

int, float

port < 1024

is greater than or equal

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

int

count ≥ 1

is less than or equal

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

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(클래스리스 도메인 간 라우팅) 블록 내에 있거나/없을 때 이벤트가 매치됩니다

IP

src_ip in_cidr 192.168.0.0/16

does not contain IP in CIDR

지정된 IP 배열에 제공된 CIDR 블록 내의 어떠한 IP 주소도 포함되지 않을 때 이벤트가 매치됩니다

ip 배열

p_any_ip_address !contains_ip 8.8.0.0/16

p_any_ip_address !contains_ip 1.1.1.1/32

contains IP in CIDR

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

ip 배열

p_any_ip_address contains_ip 8.8.0.0/16

p_any_ip_address contains_ip 1.1.1.1/32

지원되는 값 유형

값 유형
설명

string

문자열 값

int

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

실수

64비트 부동 소수점 숫자

부울

불린 값 true / false

배열

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

ip

단일 유효한 IPv4 또는 IPv6 주소

CIDR

클래스리스 도메인 간 라우팅 블록

마지막 업데이트

도움이 되었나요?