글로벌 헬퍼 함수

개요

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

circle-exclamation

Panther 관리 글로벌

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

Panther 관리 글로벌 사용자화

일부 글로벌은 허용 목록 값 제공 등 구성 입력이 필요합니다. 로직 수정이나 커스텀 메서드 추가와 같은 더 큰 변경이 필요하다면 일반적으로 새 글로벌을 생성 하는 것이 권장됩니다. 이렇게 하면 디텍션 소스를 업데이트할 때 복잡한 병합 충돌에 대응해야 할 가능성이 줄어듭니다.

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

글로벌 사용하기

글로벌 보기

  • 콘솔에서 Panther 제공 및 커스텀 헬퍼 파일을 보려면 Panther 콘솔의 왼쪽 내비게이션 바에서 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".

확인하세요.

커스텀 글로벌 추가 프로그램 방식으로 업로드할 수 있습니다 새 글로벌은

circle-exclamation

또는 Panther 콘솔에서 생성할 수 있습니다.

  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. Panther 콘솔에서 새 글로벌을 생성하려면: 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()

{ "outcome": { "reason": "VERIFICATION_ERROR", "result": "FAILURE" }} 지리적으로 불가능한 Okta 로그인arrow-up-right deep_get(event, "outcome", "result") == "FAILURE"

이는

deep_get() 디텍션에서 찾을 수 있습니다. 이는 default 는 선택적매개변수를 받습니다. 예상 위치에 키가 없거나 해당 위치의 값이

액세스하려는 키가 리스트 내부에 중첩되어 있다면,

circle-exclamation

. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_base_helpersarrow-up-right.

액세스하려는 키가 리스트 내부에 중첩되어 있다면, 인 경우, 기본값이 반환됩니다. 액세스하려는 키가 리스트 내부에 중첩되어 있다면,deep_get().

deep_get(event, "outcome", "nonexistent_key", default="Key Not Found") == "Key Not Found" deep_get()는 임의의 수의 딕셔너리나 리스트를 포함할 수 있는 Python 딕셔너리에서 깊게 중첩된 키와 연관된 값을 반환하는 데 사용할 수 있습니다. 이 기능은

예시

와(과)의 주요 차별점입니다. 액세스하려는 키가 리스트 내부에 중첩되어 있다면, 와 마찬가지로, 이 탐색은 안전하며 예외나 오류를 피합니다. 구조 내에 키가 없는 경우 기본값이 반환됩니다. 다음 객체에서,:

{ "outcome": { "reason": "VERIFICATION_ERROR", "result": "FAILURE" }} 의 값을 반환합니다.arrow-up-right deep_get(event, "outcome", "result") == "FAILURE"

이는

{"key": {"multiple_nested_lists_with_dict": [[[{"very_nested_key": "very_nested_value"}]]]}} deep_get(), 액세스하려는 키가 리스트 내부에 중첩되어 있다면, deep_walk(event, "key", "multiple_nested_lists_with_dict", "very_nested_key", default="") == "very_nested_value" 이는 GCP 서비스 계정 접근 거부 는 선택적와(과) 유사하게,

는 선택적

이거나 키가 빈 리스트인 경우 기본값이 대신 반환됩니다.

위 예제를 사용하면: deep_get(), 액세스하려는 키가 리스트 내부에 중첩되어 있다면, deep_walk(event, "key", "multiple_nested_lists_with_dict", "very_nested_nonexistent_key", default="") == ""

  • return_val

  • 와 달리,

  • 는 세 가지 구분된 값 분류를 반환할 수 있습니다:

return_val

all 액세스하려는 키가 리스트 내부에 중첩되어 있다면, 를 호출하면 return_val first return_val last

예를 들면:

가 반환하는 값의 수가 하나라면, 해당 단일 값만 반환됩니다. return_val {"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 리스트와 동일하게 접근할 수 있습니다..

예를 들면:

는 세 가지 구분된 값 분류를 반환할 수 있습니다:

return_val="first" 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" deep_walk(event, "key", "inner_key", "nested_key", default="", return_val="last") == "nested_value2"

예:

SHARED_IP_SPACE = [ if is_ip_in_network(event.get("ipaddr"), SHARED_IP_SPACE):arrow-up-right deep_get(event, "outcome", "result") == "FAILURE"

예시는

. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_base_helpersarrow-up-right.

에서 찾을 수 있습니다 OneLogin 활성 로그인 활동arrow-up-right pattern_match()

예:

는 기본 패턴 글랍을 위해

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

{ "operation": "REST.PUT.OBJECT" }

. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_base_helpersarrow-up-right.

pattern_match(event.get("operation", ""), "REST.*.OBJECT") 예시는, { "operation": "REST.PUT.OBJECT" } 예시는 AWS S3 접근 오류 디텍션에서 찾을 수 있습니다.

예:

pattern_match_list()

SHARED_IP_SPACE = [ # 'console.ec2.amazonaws.com',arrow-up-right deep_get(event, "outcome", "result") == "FAILURE"

# 'cloudformation.amazonaws.com',

. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. pattern_match_list(event.get("userAgent"), ALLOWED_USER_AGENTS)arrow-up-right.

# 'cloudformation.amazonaws.com', AWS EC2 수동 보안 그룹 변경

예:

aws_strip_role_session_id() # 'cloudformation.amazonaws.com', panther_aws_helpers 는 arn에서 세션 ID를 제거합니다.

SHARED_IP_SPACE = [ arn:aws:sts::123456789012:assumed-role/demoarrow-up-right deep_get(event, "outcome", "result") == "FAILURE"

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

. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_base_helpersarrow-up-right.

{ "arn": "arn:aws:sts::123456789012:assumed-role/demo/sessionName" } aws_strip_role_session_id(user_identity.get("arn", ""))

AWS 권한 없는 API 호출 is_base64() 는 문자열이 base64로 인코딩되었는지 확인하고, 그렇다면 디코딩된 문자열을 반환합니다. 그렇지 않으면 빈 문자열을 반환합니다.arrow-up-right.

예시는

. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_detection_helpersarrow-up-rightCrowdstrike.Base64EncodedArgs panther_detection_helpers 패키지 Python 룰 캐싱에서 확인하세요.

디텍션에서 확인하세요 get_string_set()

. 자세한 내용은arrow-up-right.

get_string_set

. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_detection_helpersarrow-up-rightCrowdstrike.Base64EncodedArgs panther_detection_helpers 패키지 Python 룰 캐싱에서 확인하세요.

는 키를 기반으로 Panther가 관리하는 캐시에서 값을 가져오는 데 사용됩니다. 이는 디텍션 호출 간에 상태를 검색하는 데 유용합니다. panther-analysis에서 사용된 예시는 여기에 있습니다

. 자세한 내용은arrow-up-right.

마지막 업데이트

도움이 되었나요?