인라인 필터로 디택션 수정하기
코드를 작성하지 않고 기존 룰 수정하기
개요
기존 룰을 쉽게 조정할 수 있습니다, 다음을 포함하여 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는 드모르간의 법칙을 따릅니다. 이 기술 자료 문서에서 로직 예제를 확인하세요: Panther 디택션 Inline Filters 문제 해결 가이드.
이벤트에 필터가 평가하는 필드가 없으면 필터는 통과됩니다. 필터가 평가하는 필드의 값이 none인 경우, 필터는 false 긍정 비교 연산자 또는 적용되지 않는 비교 연산자에서는 를 반환하고, true 역비교 연산자에서는 를 반환합니다.
Console에서는 새 룰 생성 중에는 필터를 사용할 수 없습니다. CLI 워크플로에서는 InlineFilters 를 새 룰에 포함할 수 있습니다.
CLI 워크플로와 Console을 모두 사용하여 디택션 콘텐츠를 관리하는 것은 전반적으로 권장되지 않지만, 이는 은 Console에서 CLI 워크플로와 함께 Inline Filters를 사용하는 것이 가능합니다. Console에서 생성된 필터는 CLI 워크플로에서 디택션 콘텐츠를 업데이트할 때 덮어쓰이거나 삭제되지 않습니다.
Panther Console에서 필터 만들기
룰의 편집 페이지에서 또는 해당 룰에 의해 트리거된 알러트 내에서 룰에 필터를 추가할 수 있습니다.
룰의 편집 페이지에서 필터 추가
Panther Console의 왼쪽 탐색 모음에서 다음을 클릭하세요. Detections.
디택션 목록에서 룰의 이름을 클릭하여 세부 정보 페이지를 봅니다.
다음 내부의 Detect 섹션에서, 다음만 포함하도록 필터링: 의 아래 및 Where의 오른쪽에서, 다음을 클릭합니다 +.
표시되는 메뉴에서 다음 중 하나를 선택합니다 필터 추가 또는 필터 그룹 추가.

각 필터(단독 또는 그룹 내)를 대해 로직을 정의합니다:
다음을 클릭하세요. 키, 그런 다음 조건이 적용될 이벤트 키를 선택합니다.
중첩된 필드를 나타내려면 JSON 경로 표기법을 사용합니다.
일부 옵션에는
[*]가 포함될 수 있으며, 이는 해당 키가 객체 배열임을 나타냅니다. 아래에서 객체 배열 인덱싱에 대해 자세히 알아보기.
다음을 클릭하세요. 조건, 그런 다음 조건을 선택합니다.
선택한 조건 에 입력 값이 필요하면(예:
은또는포함), 값 또는 값 목록을 제공합니다.값(s) 필드가 배열을 받는 경우, 아래를 참조하세요. 아래의 배열 값 입력 지침.
각 필터와 필터 그룹 사이에서 올바른 결합자(즉, 및 또는 또는)가 선택되었는지 확인하세요.
추가된 필터(s)와 함께 통과하는지 확인하기 위해 단위 테스트를 실행하세요.
페이지 오른쪽 상단 모서리에서 배포 를 클릭하여 변경 사항을 저장하세요.
알러트 이벤트에서 필터 추가
관련된 알러트에서 나온 이벤트에서 룰에 인라인 필터를 직접 추가할 수 있습니다. 이는 잘못된 양성 알러트를 받았고, 향후 유사한 이벤트와 일치하지 않도록 트리거된 디택션을 조정하고 싶을 때 특히 유용합니다.
Panther Console의 왼쪽 탐색 모음에서 다음을 클릭하세요. 알러트.
조정하려는 관련 룰의 알러트를 찾은 다음, 해당 이름을 클릭하세요.
알러트의 세부 정보 페이지에서 아래로 스크롤하여 이벤트 섹션.
이벤트 JSON에서 새 필터의 대상이 될 표시 위에 마우스를 올리고 대상 아이콘을 클릭하세요.

다음 필터 추가 슬라이드아웃 패널이 창 오른쪽에 열립니다.
다음에서 필터 추가 슬라이드아웃 패널에서 새 필터는 다음과 같이 미리 채워집니다:
키: 이벤트 JSON에서 대상 아이콘을 클릭한 필드를 기본값으로 사용합니다.
조건: 기본값은 이 아닙니다, 향후 이와 같은 이벤트에 대한 알러트를 받고 싶다고 가정합니다. 표시되지 않지만 와 비슷한 이벤트에 대한 알러트를 향후 받기를 원하기 때문입니다.
문자열: 이벤트 JSON에서 선택한 필드의 값이 기본값으로 사용됩니다.

필터에 원하는 변경 사항을 적용하세요. 미리 채워진 모든 필드(즉, 키, 조건 및 문자열)는 편집할 수 있습니다.
다음을 찾으세요. 단위 테스트 패널 하단 근처의 섹션입니다. 룰이 Panther 관리형 이 아니고 현재 이벤트를 사용해 룰에 대한 새 단위 테스트를 만들고 싶다면, 다음으로 표시된 체크박스를 클릭하세요. 현재 알러트 이벤트를 단위 테스트로 추가.
라고 표시된 토글은 디택션은 예시 이벤트를 기반으로 트리거되어야 합니다 편집할 수 있습니다. 기본값은 아니요입니다. 향후 이와 같은 알러트를 방지하려는 경우가 많기 때문입니다.

룰이 Panther 관리형인 경우, 이 옵션은 회색으로 비활성화됩니다.

다음을 클릭하세요. 저장 및 테스트 실행.
이렇게 하면 대상 룰의 모든 단위 테스트가 실행됩니다. 7단계에서 새 단위 테스트를 만들었다면 그것도 함께 실행됩니다.
새 필터(s)를 저장하려면 룰의 모든 단위 테스트가 통과해야 합니다. 단위 테스트 중 하나라도 실패하면:
룰이 Panther 관리형의 오른쪽에서, 다음을 클릭합니다 디택션 보기 를 선택하여 룰의 세부 정보 페이지로 이동해 단위 테스트를 편집하세요. সেখানে에서 Update 를 클릭하여 룰에 대한 변경 사항을 저장할 수 있습니다.

룰이 Panther 관리형인 경우, 단위 테스트는 읽기 전용이므로 실패한 테스트를 수정하여 통과하게 만들 수 없습니다. 필터를 성공적으로 추가하려면 대신 다음을 따르세요. 필터를 사용한 실패한 단위 테스트 처리 워크플로
배열 값 입력
선택한 룰 필터 연산자가 값 필드에 배열이 필요로 하는 경우(예: 다음 중 하나 연산자), 값 필드를 클릭하면 나타나는 모달에서 배열 값을 입력하게 됩니다.
배열에 값을 추가하려면:
필터에 사용할 키 및 조건 을 선택한 후 값 필드를 클릭하세요.

그러면 배열 입력 모달이 열립니다.
모달에서 입력 필드에 배열 값(s)을 입력하세요.
입력이 쉼표로 구분되어 있으면, 위에 입력된 값들은 쉼표로 구분됩니다 체크박스를 선택하세요.
이 필드를 선택하면 values 필드에 입력된 텍스트가 (쉼표 구분자를 사용하여) 여러 값으로 분리됩니다. 예를 들어 "User 1,User 2,User 3"을 입력하면 3개의 값이 추가됩니다.

입력이 쉼표로 구분되어 있지 않으면 위에 입력된 값들은 쉼표로 구분됩니다 선택하지 않은 상태로 두세요.
이 필드를 선택하지 않은 상태에서는 쉼표를 포함하는 값을 한 번에 하나씩 추가할 수 있습니다. 예를 들어 "1,000"을 입력하면 하나의 값만 추가됩니다.

다음을 클릭하세요. 추가.
배열에 모든 값이 추가될 때까지 필요한 만큼 2-3단계를 반복하세요.
다음을 클릭하세요. 적용.
객체 배열 인덱싱
필터 표현식을 만드는 동안, 값이 객체 배열인 이벤트 키가 있으면 해당 키는 배열 인덱싱 기호와 함께 드롭다운 선택기에 표시됩니다 [*], 그리고 객체의 필드도 함께 표시됩니다. 다음을 사용할 수 있습니다 [*] 를 사용해 배열 내 모든 객체에서 선택한 필드를 대상으로 하거나, * 를 정수로 바꿔 배열의 인덱스를 지정하여 단일 필드를 대상으로 할 수 있습니다.
예시
예를 들어 다음 resources 필드를 AWS.CloudTrail 스키마에서 살펴보겠습니다:

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

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

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

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

CLI 워크플로에서 필터 생성하기
Panther Console에서 노코드 룰 필터를 만드는 것 외에도, 다음과 같이 작성된 룰에 YAML 필터를 만들 수도 있습니다 간단한 디택션 또는 Python 디택션.
Console에서 만든 필터와 마찬가지로, YAML 필터는 룰의 디택션 로직보다 먼저 평가됩니다. 필터가 true를 반환하면 디택션 로직이 실행됩니다. 필터가 false를 반환하면 디택션 평가가 중지되고, 디택션은 false 를 완전히 반환합니다.
YAML InlineFilter 구문
InlineFilter 구문YAML 필터는 다음으로 표시됩니다 InlineFilters 키. 내부에서 InlineFilters, 하나 이상의 일치 표현식을 나열합니다. 다음을 사용할 수 있습니다 위에 나열된 검색용 로그 유형별 RBAC의 모든 및 Any 결합자 를 사용하여 각각 AND 또는 OR 논리를 지정하고, 결합자를 중첩하여 필터 그룹을 만들 수 있습니다. 결합자가 바로 아래에 지정되지 않은 경우 InlineFilters, 위에 나열된 검색용 로그 유형별 RBAC의 모든 가 가정됩니다.
다음을 참조하세요 심플 디택션 일치 표현식 참조 에서 다양한 유형의 일치 표현식을 구성하는 방법을 알아보세요.
예시:
YAML 인라인 필터의 제한 사항
에 설명된 일부 일치 표현식 기능은 심플 디택션 일치 표현식 참조 에서는 사용할 수 없습니다 InlineFilters. 이러한 제한 사항은 다음과 같습니다:
InlineFilters는 예약된 룰 또는 정책에는 사용할 수 없고, 룰에만 사용할 수 있습니다.다음 일치 표현식 유형은 내에서는 사용할 수 없습니다
InlineFilters:다음
키및DeepKey키 지정자 내에서는 사용할 수 없습니다InlineFilters—오직KeyPath만 사용할 수 있습니다.다음
OnlyOne및None결합자 내에서는 사용할 수 없습니다InlineFilters—오직위에 나열된 검색용 로그 유형별 RBAC의 모든및Any만 사용할 수 있습니다.특정
조건값은 내에서 사용할 수 없습니다InlineFilters. 다음 조건은 지원되지 않습니다:ExistsDoestNotExistIsNullIsNotNullIsIPAddressIsIPv4AddressIsIPv6AddressAnyElementAllElementsOnlyOneElementNoElement
CLI 워크플로에서 인라인 필터를 만드는 방법
Python 또는 심플 디택션으로 생성된 룰의 CLI 워크플로에서 인라인 필터를 만들려면, 디택션의 YAML 파일에 다음을 포함합니다 InlineFilters 키. 내부에서 InlineFilters, 하나 이상의 일치 표현식.
필터를 사용한 실패한 단위 테스트 처리
~에 대해 Panther 관리형 필터가 있는 룰의 경우, 현재 단위 테스트를 추가하거나 수정할 수 없습니다. 단위 테스트가 통과하지 않으면 룰을 저장할 수 없습니다.
단위 테스트가 실패하면 다음 단계를 따르세요:
Panther가 관리하는 룰을 복제합니다.
복제한 룰에 필터를 추가합니다.
복제한 룰의 단위 테스트를 통과하도록 수정합니다.
인라인 필터 참조
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
클래스 없는 인터도메인 라우팅 블록
마지막 업데이트
도움이 되었나요?

