인라인 필터로 디텍션 수정하기
코드를 작성하지 않고 기존 룰을 수정하세요
개요
기존 룰을(를) Panther-관리 룰에 인라인 필터를 추가하여 쉽게 조정할 수 있습니다. 인라인 필터는 디텍션 로직이 실행되기 위해 통과해야 하는 조건입니다. 인라인 필터는 룰에서만 사용할 수 있으며, 예약된 룰이나 정책에서는 사용할 수 없습니다.
에서 Panther 콘솔, 코드 없는 빌더를 사용하여 인라인 필터를 생성할 수 있습니다. CLI 워크플로우에서는 InlineFilters YAML 키를 추가하여 인라인 필터를 생성할 수 있습니다.
필터의 일반적인 사용 사례는 허용 목록(allowlist) 또는 차단 목록(denylist)을 추가하는 것입니다.
인라인 필터 작동 방식
필터 문은 디텍션의 로직보다 먼저 평가됩니다. 필터는 true (즉, 이벤트와 일치)을 반환해야 디텍션 로직이 실행됩니다. 다시 말해, 인라인 필터는 포함 필터입니다.
콘솔과 CLI 워크플로우 모두에서 필터는 AND 또는 OR 논리를 사용해 그룹화할 수 있습니다. 인라인 필터는 드모르간의 법칙(De Morgan's Laws)을 따릅니다. 논리 예시는 이 지식 기반 문서를 참조하세요: Panther 디텍션 인라인 필터 문제해결 가이드.
이벤트에 필터가 평가하는 필드가 포함되어 있지 않으면 필터는 통과합니다. 필터가 평가하는 필드의 값이 없음이면, 필터는 false 를 양수 비교자(positive comparators) 또는 적용되지 않는 비교자에서 반환하고, true 반대 비교자(inverse comparators)에서는
콘솔에서는 새 룰 생성 중에 필터를 사용할 수 없습니다. CLI 워크플로우에서는 새 룰에 InlineFilters 를 포함할 수 있습니다.
감지 콘텐츠를 CLI 워크플로우와 콘솔을 동시에 사용하여 관리하는 것은 일반적으로 권장되지 않지만, 가능합니다 콘솔에서 CLI 워크플로우와 함께 인라인 필터를 사용하는 것이 가능합니다. 콘솔에서 생성된 필터는 CLI 워크플로우에서 디텍션 콘텐츠가 업데이트되더라도 덮어쓰거나 삭제되지 않습니다.
Panther 콘솔에서 필터 생성하기
룰의 편집 페이지 또는 해당 룰에 의해 트리거된 알러트 내에서 룰에 필터를 추가할 수 있습니다.
룰의 편집 페이지에서 필터 추가
Panther 콘솔의 왼쪽 네비게이션 바에서 클릭하세요 디텍션(Detections).
디텍션 목록에서 룰의 이름을 클릭하여 해당 룰의 상세 페이지를 봅니다.
내에서 디텍트(Detect) 섹션의 이벤트만 포함하도록 필터: 및 Where의 오른쪽에서 클릭하세요 +.
표시되는 메뉴에서 다음 중 하나를 선택합니다 필터 추가(Add Filter) 또는 필터 그룹 추가(Add Filter Group).

각 필터(단독 또는 그룹 내)의 경우, 논리를 정의하세요:
클릭 키(Key)를 선택한 다음 조건을 적용할 이벤트 키를 선택합니다.
중첩된 필드를 표시하려면 JSON 경로 표기법을 사용하세요.
일부 옵션에는
[*]가 포함될 수 있으며, 이는 해당 키가 객체의 배열임을 나타냅니다. 아래의 배열 객체 인덱싱에 대해 자세히 알아보세요.
클릭 조건(Condition)을 선택한 다음 조건을 선택합니다.
선택한 조건(Condition) 이(가) 입력 값(예:
가능합니다또는contains)을 필요로 하면 값 또는 값 목록을 제공하세요.값(s) 필드가 배열을 받는 경우, 아래의 배열 값 입력 방법.
을 참조하세요. 각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우 또는 또는and
)가 선택되었는지 확인하세요.
추가한 필터로 단위 테스트를 실행하여 통과하는지 확인하세요. 페이지 오른쪽 상단에서 클릭하세요 배포(Deploy)
알러트 이벤트에서
알러트 이벤트에서 필터 추가
Panther 콘솔의 왼쪽 네비게이션 바에서 클릭하세요 연관된 알러트의 이벤트에서 직접 룰에 인라인 필터를 추가할 수 있습니다. 이는 특히 오탐 알러트를 받은 경우에 유용하며, 향후 유사한 이벤트에서는 트리거되지 않도록 해당 디텍션을 조정하고자 할 때 도움이 됩니다..
알러트(Alerts)
조정하려는 연관 룰이 있는 알러트를 찾아 해당 이름을 클릭하세요. 알러트의 상세 페이지에서 아래로 스크롤하여 이벤트(Event)
섹션을 찾으세요.

이벤트의 JSON에서 새 필터가 대상으로 삼을 표시기를 호버하고 대상 아이콘을 클릭하세요. 필터 추가(Add Filter) 슬라이드-아웃 패널이 창의 오른쪽에 열립니다.
에서 필터 추가(Add Filter) 슬라이드-아웃 패널에서 새 필터는 다음과 같이 미리 채워집니다:
키(Key): 이벤트 JSON에서 대상 아이콘을 클릭한 필드로 기본 설정됩니다.
조건(Condition): 기본값은 is not로 설정되며, 이는 향후 이와 유사한 이벤트에 대한 알러트를 원하지 않는다고 가정합니다.
문자열(String): 이벤트 JSON에서 선택한 필드의 값으로 기본 설정됩니다.

필요한 변경을 필터에 적용하세요. 모든 미리 채워진 필드(예: 키(Key), 조건(Condition) 각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우 문자열(String))는 편집할 수 있습니다.
찾기 단위 테스트(Unit Test) 패널 하단 근처의 섹션을 찾으세요. 룰이 Panther-관리 가 아니고 현재 이벤트를 사용하여 룰에 대해 새 단위 테스트를 생성하려면, 현재 알러트 이벤트를 단위 테스트로 추가(Add the current alert event as a unit test).
라고 표시된 체크박스를 클릭하세요. 라벨이 붙은 토글 이 예제 이벤트를 기반으로 디텍션이 트리거되어야 함(The detection should trigger based on the example event) 는 편집 가능합니다. 기본값은아니오(No)

로 설정되어 있으며, 향후 이와 유사한 알러트를 방지하려는 경우가 많습니다. Panther-관리룰이

클릭 인 경우 이 옵션은 비활성(회색) 처리됩니다..
저장 및 테스트 실행(Save & Run Test)
이 작업은 대상 룰의 모든 단위 테스트를 실행합니다. 7단계에서 새 단위 테스트를 생성한 경우 해당 테스트도 실행됩니다.
새 필터를 저장하려면 해당 룰의 모든 단위 테스트가 통과해야 합니다. 단위 테스트 중 하나라도 실패하면: Panther-관리의 오른쪽에서 클릭하세요 룰이 보기(View Detection) 을 클릭하여 룰의 상세 페이지로 이동해 단위 테스트를 편집하세요. 거기에서 업데이트(Update)

로 설정되어 있으며, 향후 이와 유사한 알러트를 방지하려는 경우가 많습니다. Panther-관리를 클릭하여 룰에 대한 변경 사항을 저장할 수 있습니다. 경우, 해당 룰의 단위 테스트는 읽기 전용이므로 실패한 테스트를 수정하여 통과시킬 수 없습니다. 필터를 성공적으로 추가하려면 대신 필터로 실패한 단위 테스트 작업하기(Working with failed unit tests with filters)
워크플로우를 따르세요.
배열 값 입력 선택한 룰 필터 연산자가 값 필드에 배열을 요구하는 경우(예: is in
연산자), 값 필드에 클릭하면 팝업되는 모달에서 배열 값을 입력하게 됩니다.
배열에 값을 추가하려면: 키(Key) 각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우 조건(Condition) 필터에 대해

를 선택한 후 값 필드에 클릭하세요.
그러면 배열 입력 모달이 열립니다.
모달에서 입력 필드에 배열 값(들)을 입력하세요. 입력이 쉼표로 구분된 경우, 위에 입력된 값은 쉼표로 구분됨(Values entered above are comma-delimited)
체크박스를 선택하세요.

이 필드를 선택하면 값 필드에 입력된 텍스트가 쉼표 구분자로 분리되어 여러 값으로 처리됩니다. 예를 들어 "User 1,User 2,User 3"을 입력하면 세 값이 추가됩니다. 입력이 쉼표로 구분된 경우, 입력이 쉼표로 구분되지 않는 경우에는
선택을 해제하세요.

클릭 이 필드가 선택 해제되면 쉼표를 포함하는 값을 하나씩 추가할 수 있습니다. 예를 들어 "1,000"을 입력하면 하나의 값으로 추가됩니다..
추가(Add)
클릭 필요에 따라 2-3단계를 반복하여 배열에 모든 값을 추가하세요..
적용(Apply)
객체 배열의 인덱싱 [*]필터 표현식을 만드는 동안 이벤트 키의 값이 객체 배열인 경우 해당 키는 드롭다운 선택기에 배열 인덱싱 심볼 [*] 와 함께 표시되며 객체의 필드들도 함께 표시됩니다. * 를 사용하여 배열의 모든 객체에서 선택된 필드를 대상으로 지정하거나,
를 정수로 바꿔 배열을 인덱싱하여 단일 필드를 대상으로 지정할 수 있습니다.
예시 예를 들어, 다음의 resources 필드를 AWS.CloudTrail:

스키마에서

Where로 시작하는 필드에서 빈 필터 표현식이 표시됩니다. 필드 선택기가 열려 있고 다음 필드들이 표시되어 있습니다: resources[*].accountId, resources[*].arn, 및 resources[*].type.[*]기본적으로 Panther는 와일드카드 배열 인덱스( [*] )를 적용하여 배열의 모든 객체에서 선택된 필드의 값을 검색합니다. 가 사용되면 이러한 값들의 배열이 생성되어 검색됩니다. 이 때문에 배열 조건만 사용할 수 있습니다:, 비어 있음(is empty), contains, 비어 있지 않음(is not empty).

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

그러나 배열을 인덱싱하기 위해 * 를 정수로 바꿀 수 있으며, 이는 배열의 단일 객체를 지정합니다. 이 경우 Panther는 해당 인덱스의 중첩 필드 값만 평가합니다.
표시되는 조건은 선택한 중첩 필드의 데이터 유형에 적용 가능한 조건들로 업데이트됩니다:

CLI 워크플로우에서 필터 생성하기
Panther 콘솔에서 코드 없는 룰 필터를 만드는 것 외에도, Simple Detections 또는 Python 디텍션.
으로 작성된 룰에 대해 YAML 필터를 생성할 수 있습니다. true콘솔에서 생성된 필터와 마찬가지로 YAML 필터는 룰의 디텍션 로직보다 먼저 평가됩니다. 필터가 false를 반환하면 디텍션 로직이 실행됩니다. 필터가 false 를 반환하면 디텍션 평가가 중지되고 디텍션은
완전히(altogether) 반환됩니다. YAML
반환됩니다. YAMLInlineFilter InlineFilters 구문(syntax) InlineFiltersYAML 필터는 키로 표시됩니다. 각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우 내에 하나 이상의 일치 표현식을 나열하세요. All Any InlineFilters, 키로 표시됩니다. 결합자(combinators)
를 사용하여 각각 AND 또는 OR 논리를 지정하고 결합자를 중첩하여 필터 그룹을 만들 수 있습니다. 결합자가 직속으로 지정되지 않으면 가 기본으로 가정됩니다.
다음을 참조하세요
YAML 인라인 필터의 제한사항
일부 매치 표현식 기능은 직속으로 지정되지 않으면 에서는 불가능합니다 InlineFilters. 이러한 제한사항에는 다음이 포함됩니다:
InlineFilters스케줄된 룰이나 정책에서는 사용할 수 없고, 룰에서만 사용할 수 있습니다.다음 매치 표현식 유형 내에서는 사용할 수 없습니다
InlineFilters:이벤트의 JSON에서 새 필터가 대상으로 삼을 표시기를 호버하고 대상 아이콘을 클릭하세요.
키(Key)각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우DeepKey키 지정자 내에서는 사용할 수 없습니다InlineFilters—오직KeyPath만 사용할 수 있습니다.이벤트의 JSON에서 새 필터가 대상으로 삼을 표시기를 호버하고 대상 아이콘을 클릭하세요.
OnlyOne각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우NoneAll 내에서는 사용할 수 없습니다InlineFilters—오직키로 표시됩니다.각 필터와 필터 그룹 사이에 올바른 결합자(및의 경우내에 하나 이상의 일치 표현식을 나열하세요.만 사용할 수 있습니다.Certain
조건(Condition)특정InlineFilters내에서는 사용할 수 없습니다. 다음 조건들은 지원되지 않습니다:ExistsDoestNotExistIsNullIsNotNullIsIPAddressIsIPv4AddressIsIPv6AddressAnyElementAllElementsOnlyOneElementNoElement
CLI 워크플로우에서 인라인 필터 생성 방법
Python 또는 Simple Detection으로 생성된 룰에서 CLI 워크플로우로 인라인 필터를 생성하려면, 디텍션의 YAML 파일에 InlineFilters 구문(syntax) InlineFilters를 포함하고 하나 이상 매치 표현식을 포함하세요.
경우, 해당 룰의 단위 테스트는 읽기 전용이므로 실패한 테스트를 수정하여 통과시킬 수 없습니다. 필터를 성공적으로 추가하려면 대신
에 대해 Panther-관리 필터가 있는 룰의 경우 현재 단위 테스트를 추가하거나 편집할 수 없습니다. 단위 테스트가 통과하지 않으면 룰을 저장할 수 없습니다.
단위 테스트가 실패하면 다음 단계를 수행하세요:
Panther가 관리하는 룰을 클론합니다.
클론한 룰에 필터를 추가합니다.
클론한 룰의 단위 테스트를 편집하여 통과되게 합니다.
인라인 필터 참조
콘솔에서 필터를 구성할 때 아래 연산자와 값 유형을 참조하세요.
콘솔에서 지원되는 연산자
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
클래스리스 도메인 간 라우팅 블록
마지막 업데이트
도움이 되었나요?

