전역 헬퍼 함수

개요

프로그래밍에서 반복되는 코드를 헬퍼 함수로 추출하는 것은 일반적인 패턴입니다—Panther는 이 패턴을 전역(global) 분석 유형으로 지원합니다. Panther는 여러 내장 글로벌 헬퍼를 제공하며, 또한 사용자 정의 글로벌을 추가할 수 있습니다. 특정 일반적인 헬퍼 에 대해 자세히 알아보세요.

circle-exclamation

Panther에서 관리하는 글로벌

기본적으로 Panther는 다음과 같은 내장 글로벌 헬퍼 모음을 제공합니다:

Panther에서 관리하는 글로벌 커스터마이징

일부 글로벌은 허용 목록 값을 제공하는 등 구성 입력이 필요합니다. 로직을 수정하거나 사용자 정의 메서드를 추가하는 등 더 큰 변경이 필요하다면, 일반적으로 새 글로벌을 생성하는 것 을 권장합니다. 이렇게 하면 탐지 소스를 업데이트할 때 복잡한 병합 충돌을 처리해야 할 가능성을 줄일 수 있습니다.

그래도 글로벌 헬퍼를 수정하려면 Panther 지식 기반 문서를 참조하세요: Panther에서 관리하는 글로벌 헬퍼 함수를 커스터마이즈하는 가장 좋은 방법은 무엇인가요?arrow-up-right

글로벌 사용하기

글로벌 보기

  • Panther Console에서 제공된 및 사용자 정의 헬퍼 파일을 보려면, Panther Console의 왼쪽 탐색 바에서 Detections, 를 클릭한 다음 Helpers 탭을 클릭하십시오.

An arrow is drawn from "Detections" to "Helpers," and a page titled "Helpers is shown, with a table with various entries, including "crowdstrike_event_streams_helpers" and "gcp_environment".

사용자 정의 글로벌 추가하기

새 글로벌은 Panther 분석 도구 또는 Panther Console에서 생성할 수 있습니다.

circle-exclamation

Panther Console에서 새 글로벌을 생성하려면:

  1. Panther 콘솔의 왼쪽 탐색 바에서 클릭하십시오 탐지.

  2. 다음 항목을 클릭하십시오 Helpers 탭을 클릭하십시오.

  3. 오른쪽 상단에서 클릭 새로 만들기. On the Helpers page in the Panther Console, there is a blue "Create New" button in the upper right.

  4. Python 함수를 입력한 다음 Create를 클릭하세요. 이 글로벌은 이제 규칙이나 정책에서 가져다 쓸 수 있습니다.

The Helper Settings page shows fields for Helper Name and Description. Under Helper Definition, there is a code block with sample Python code written in it.

탐지에서 글로벌 가져오기

분석 파일 상단에 import 문을 사용하여 글로벌 헬퍼를 가져온 다음, 일반적인 Python 라이브러리처럼 헬퍼를 호출하세요.

를 참조하세요.

탐지에서 헬퍼 함수에 대한 참조 제거하기

일반 헬퍼

deep_get()

circle-exclamation

다음 위치에 있음: panther_base_helpersarrow-up-right.

deep_get() 는 Python 딕셔너리 내에 중첩된 키를 반환하는 데 사용할 수 있습니다. 이 함수는 중첩된 키를 안전하게 반환하고 키가 없을 때 발생하는 AttributeError 를 방지하는 데 유용합니다.

접근하려는 키가 리스트 내부에 중첩되어 있다면, deep_walk() 을(를) 사용하는 것을 고려하세요.

예제

를 사용하는 것을 고려하세요.

deep_get(event, "outcome", "result") == "FAILURE" 지리적으로 불가능한 Okta 로그인arrow-up-right 이는

탐지에서 찾을 수 있습니다.

deep_get() default 탐지에서 찾을 수 있습니다. 는 선택적 매개변수 를 받습니다. 기대한 위치에 키가 없거나 해당 위치의 값이None

deep_walk()

circle-exclamation

다음 위치에 있음: panther_base_helpersarrow-up-right.

deep_walk() deep_get(event, "outcome", "nonexistent_key", default="Key Not Found") == "Key Not Found" deep_walk()deep_get().

는 Python 딕셔너리(여러 딕셔너리나 리스트를 포함할 수 있음) 내에 깊게 중첩된 키와 연결된 값을 반환하는 데 사용할 수 있습니다. 이 기능은 deep_get()와의 주요 차별점입니다.

예제

와 마찬가지로, 이 순회는 안전하며 예외나 오류를 피합니다. 구조에 키가 없는 경우 기본값이 반환됩니다. deep_walk() 다음 객체에서, :

deep_get(event, "outcome", "result") == "FAILURE" {"key": {"multiple_nested_lists_with_dict": [[[{"very_nested_key": "very_nested_value"}]]]}}arrow-up-right 이는

탐지에서 찾을 수 있습니다.

deep_walk(event, "key", "multiple_nested_lists_with_dict", "very_nested_key", default="") == "very_nested_value" deep_get(), deep_walk() GCP 서비스 계정 접근 거부 탐지에서 찾을 수 있습니다. 와 마찬가지로 매개변수 를 받습니다. 기대한 위치에 키가 없거나 해당 위치의 값이는 선택적

매개변수를 받습니다. 제공된 이벤트에 키가 없거나 키가

위의 예를 사용하면:

deep_walk(event, "key", "multiple_nested_lists_with_dict", "very_nested_nonexistent_key", default="") == "" deep_get(), deep_walk() return_val

  • 와는 달리

  • 는 세 가지 뚜렷한 값 분류를 반환할 수 있습니다:

  • all

와는 달리

first deep_walk() last 와는 달리 기본적으로, 와는 달리 는 주어진 키에 대해

를 참조하세요.

{"key": {"inner_key": [{"nested_key": "nested_value"}, {"nested_key": "nested_value2"}]}} 와는 달리 deep_walk(event, "key", "inner_key", "nested_key", default="") == ['nested_value', 'nested_value2']

는 세 가지 뚜렷한 값 분류를 반환할 수 있습니다:

를 사용하고 여러 값을 반환할 때, 리스트의 요소들은 다른 Python 리스트처럼 접근할 수 있습니다. 키에 대해 처음 발견된 값만 반환하려면,.

를 참조하세요.

all

을 지정하세요. deep_walk(event, "key", "inner_key", "nested_key", default="", return_val="first") == "nested_value".

를 참조하세요.

return_val="last"

다음 위치에 있음: panther_base_helpersarrow-up-right.

return_val="last" 을 지정하세요.

예시:

은 IP 주소가 IP 범위 목록 내에 있는지 확인하는 함수입니다. 이 함수는 탐지에 컨텍스트를 추가하기 위해 알려진 내부 네트워크 목록과 함께 사용할 수 있습니다. SHARED_IP_SPACE = [arrow-up-right 이는

if is_ip_in_network(event.get("ipaddr"), SHARED_IP_SPACE):

다음 위치에 있음: panther_base_helpersarrow-up-right.

예제는 에서 찾을 수 있습니다.arrow-up-right OneLogin 활성 로그인 활동

예시:

pattern_match()

의 래퍼입니다. 이는 정규식을 사용하지 않고도 간단한 패턴 매칭이 필요할 때 사용할 수 있습니다.

다음 JSON에서 pattern_match() 함수는 true를 반환합니다.

다음 위치에 있음: panther_base_helpersarrow-up-right.

{ "operation": "REST.PUT.OBJECT" } if is_ip_in_network(event.get("ipaddr"), SHARED_IP_SPACE):, 다음 JSON에서 pattern_match() 함수는 true를 반환합니다. pattern_match(event.get("operation", ""), "REST.*.OBJECT")

예시:

예제는 AWS S3 액세스 오류 탐지에서 확인할 수 있습니다.

은 IP 주소가 IP 범위 목록 내에 있는지 확인하는 함수입니다. 이 함수는 탐지에 컨텍스트를 추가하기 위해 알려진 내부 네트워크 목록과 함께 사용할 수 있습니다. "* HashiCorp/?.0 Terraform/*",arrow-up-right 이는

# 'console.ec2.amazonaws.com',

다음 위치에 있음: # 'cloudformation.amazonaws.com',arrow-up-right.

# 'console.ec2.amazonaws.com', pattern_match_list(event.get("userAgent"), ALLOWED_USER_AGENTS)

예시:

AWS EC2 수동 보안 그룹 변경 # 'console.ec2.amazonaws.com', aws_strip_role_session_id() panther_aws_helpers

은 IP 주소가 IP 범위 목록 내에 있는지 확인하는 함수입니다. 이 함수는 탐지에 컨텍스트를 추가하기 위해 알려진 내부 네트워크 목록과 함께 사용할 수 있습니다. 는 다음을 반환합니다.arrow-up-right 이는

arn:aws:sts::123456789012:assumed-role/demo

다음 위치에 있음: panther_base_helpersarrow-up-right.

arn:aws:sts::123456789012:assumed-role/demo { "arn": "arn:aws:sts::123456789012:assumed-role/demo/sessionName" }

aws_strip_role_session_id(user_identity.get("arn", "")) AWS 권한 없는 API 호출 is_base64()arrow-up-right.

는 문자열이 base64로 인코딩되었는지 검사하고, 그렇다면 디코딩된 문자열을 반환합니다. 그렇지 않으면 빈 문자열을 반환합니다.

다음 위치에 있음: panther_detection_helpersarrow-up-right예제는 panther_detection_helpers 패키지 의 Python 규칙 캐싱 문서를 참조하세요.

Crowdstrike.Base64EncodedArgs 탐지에서 확인할 수 있습니다.

get_string_set()arrow-up-right.

. 자세한 내용은

다음 위치에 있음: panther_detection_helpersarrow-up-right예제는 panther_detection_helpers 패키지 의 Python 규칙 캐싱 문서를 참조하세요.

get_string_set 는 키를 기반으로 Panther가 관리하는 캐시에서 값을 가져오는 데 사용됩니다. 이는 탐지 호출 간에 상태를 검색하는 데 유용합니다.

get_string_set()arrow-up-right.

Last updated

Was this helpful?