글로벌 헬퍼 함수
개요
프로그래밍에서 흔한 패턴은 반복되는 코드를 헬퍼 함수로 추출하는 것입니다—Panther는 이 패턴을 전역 분석 유형으로 지원합니다. Panther는 여러 내장 글로벌 헬퍼를 제공하며, 또한 사용자 정의 글로벌을 추가할 수 있습니다. 특정 공통 헬퍼 에 대해 아래에서 자세히 알아보세요.
글로벌 헬퍼는 자주 변경되는 항목에는 적합하지 않습니다. 만약 정말로 자주 변경해야 한다면 대신 커스텀 룩업 테이블을(를) 고려하세요. 이들은 S3와의 자동 동기화를 지원하며 업데이트를 위해 Panther 내 코드 변경이 필요하지 않습니다.
Panther 관리 글로벌
기본적으로 Panther는 다음과 같은 내장 글로벌 헬퍼 컬렉션을 제공합니다:
panther_base_helpers: 다양한 일반 및 로그 소스별 헬퍼를 포함합니다. 아래panther_base_helpers에서 정의된 특정 함수에 대해 자세히 알아보세요, 공통 헬퍼.panther_detection_helpers: 캐싱 함수를 제공합니다. 자세한 내용은panther_detection_helpers패키지 Python 룰 캐싱에서 확인하세요.
Panther 관리 글로벌 사용자화
일부 글로벌은 허용 목록 값 제공 등 구성 입력이 필요합니다. 로직 수정이나 커스텀 메서드 추가와 같은 더 큰 변경이 필요하다면 일반적으로 새 글로벌을 생성 하는 것이 권장됩니다. 이렇게 하면 디텍션 소스를 업데이트할 때 복잡한 병합 충돌에 대응해야 할 가능성이 줄어듭니다.
그래도 글로벌 헬퍼를 수정하려면 Panther 지식 기반 문서를 참조하세요: Panther 관리 글로벌 헬퍼 함수를 사용자화하는 가장 좋은 방법은 무엇인가요?
글로벌 사용하기
글로벌 보기
콘솔에서 Panther 제공 및 커스텀 헬퍼 파일을 보려면 Panther 콘솔의 왼쪽 내비게이션 바에서 Detections, 를 클릭한 다음 Helpers 탭을 클릭하세요.

확인하세요.
커스텀 글로벌 추가 프로그램 방식으로 업로드할 수 있습니다 새 글로벌은
일반적으로 Panther의 디텍션 내에서 외부 API 요청을 하는 것은 강력히 권장되지 않습니다. 디텍션은 매우 큰 규모로 처리되며, API 요청은 수신 시스템에 과부하를 일으키고 귀하의 룰이 15초 실행 시간 제한.
또는 Panther 콘솔에서 생성할 수 있습니다.
Panther 콘솔의 왼쪽 탐색 창에서 디텍션.
을 클릭하세요 Helpers 탭을 클릭하세요.
오른쪽 상단에서 클릭하세요 새로 만들기.

Panther 콘솔에서 새 글로벌을 생성하려면: Python 함수를 입력한 다음Create

를 클릭하세요. 이 글로벌은 이제 룰이나 정책에서 임포트하여 사용할 수 있습니다. CLI 워크플로우에서 Panther 제공 헬퍼 파일을 보려면, 글로벌 함수는 공통 로직을 룰 또는 정책 전반에 걸쳐 공유할 수 있게 합니다. 코드로 선언하려면, 룰 및 정책과 유사한 패턴으로
폴더에 추가하세요. CLI 워크플로우에서 Panther 제공 헬퍼 파일을 보려면, 폴더 외부에 정의된 글로벌은 로드되지 않습니다.
Python 파일 생성하기 (
global_helpers/acmecorp.py):
2. 스펙 파일 생성:
3. 이 헬퍼를 정책(또는 룰)에서 사용:
디텍션에서 글로벌 임포트하기
분석 파일 상단에 import 문을 사용하여 글로벌 헬퍼를 임포트한 다음, 다른 Python 라이브러리를 호출하듯 헬퍼를 호출하세요.
예를 들면:
디텍션에서 헬퍼 함수에 대한 참조 제거하기
디텍션에서 의존성을 제거하기로 결정했다면, 우리는 변경을 단계적으로 진행할 것.
공통 헬퍼
deep_get()
deep_get()deep_get() 을 권장합니다. 또한 이벤트 객체 자체에 대한함수가 제공됩니다
. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_base_helpers.
deep_get() 다음 위치에 있습니다 는 Python 딕셔너리 안에 중첩된 키를 반환하는 데 사용될 수 있습니다. 이 함수는 중첩된 키를 안전하게 반환하고 키가 없을 때 발생하는 AttributeError
를 피하는 데 유용합니다. 액세스하려는 키가 리스트 내부에 중첩되어 있다면, 를 사용하는 것을 고려하세요.
예시
deep_walk()
{ "outcome": { "reason": "VERIFICATION_ERROR", "result": "FAILURE" }} 지리적으로 불가능한 Okta 로그인 deep_get(event, "outcome", "result") == "FAILURE"
이는
deep_get() 디텍션에서 찾을 수 있습니다. 이는 default 는 선택적매개변수를 받습니다. 예상 위치에 키가 없거나 해당 위치의 값이
액세스하려는 키가 리스트 내부에 중첩되어 있다면,
액세스하려는 키가 리스트 내부에 중첩되어 있다면,액세스하려는 키가 리스트 내부에 중첩되어 있다면, 을 권장합니다. 또한 이벤트 객체 자체에 대한함수가 제공됩니다
. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_base_helpers.
액세스하려는 키가 리스트 내부에 중첩되어 있다면, 인 경우, 기본값이 반환됩니다. 액세스하려는 키가 리스트 내부에 중첩되어 있다면, 와 deep_get().
deep_get(event, "outcome", "nonexistent_key", default="Key Not Found") == "Key Not Found" deep_get()는 임의의 수의 딕셔너리나 리스트를 포함할 수 있는 Python 딕셔너리에서 깊게 중첩된 키와 연관된 값을 반환하는 데 사용할 수 있습니다. 이 기능은
예시
와(과)의 주요 차별점입니다. 액세스하려는 키가 리스트 내부에 중첩되어 있다면, 와 마찬가지로, 이 탐색은 안전하며 예외나 오류를 피합니다. 구조 내에 키가 없는 경우 기본값이 반환됩니다. 다음 객체에서,:
{ "outcome": { "reason": "VERIFICATION_ERROR", "result": "FAILURE" }} 의 값을 반환합니다. 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"
return_val="last". 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_base_helpers.
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): deep_get(event, "outcome", "result") == "FAILURE"
예시는
예시는. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_base_helpers.
에서 찾을 수 있습니다 OneLogin 활성 로그인 활동 pattern_match()
예:
는 기본 패턴 글랍을 위해
다음 JSON에서 pattern_match() 함수는 true를 반환합니다.
{ "operation": "REST.PUT.OBJECT" }
{ "operation": "REST.PUT.OBJECT" }. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_base_helpers.
pattern_match(event.get("operation", ""), "REST.*.OBJECT") 예시는, { "operation": "REST.PUT.OBJECT" } 예시는 AWS S3 접근 오류 디텍션에서 찾을 수 있습니다.
예:
pattern_match_list()
SHARED_IP_SPACE = [ # 'console.ec2.amazonaws.com', deep_get(event, "outcome", "result") == "FAILURE"
# 'cloudformation.amazonaws.com',
# 'cloudformation.amazonaws.com',. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. pattern_match_list(event.get("userAgent"), ALLOWED_USER_AGENTS).
# '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/demo deep_get(event, "outcome", "result") == "FAILURE"
{ "arn": "arn:aws:sts::123456789012:assumed-role/demo/sessionName" }
{ "arn": "arn:aws:sts::123456789012:assumed-role/demo/sessionName" }. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_base_helpers.
{ "arn": "arn:aws:sts::123456789012:assumed-role/demo/sessionName" } aws_strip_role_session_id(user_identity.get("arn", ""))
AWS 권한 없는 API 호출 is_base64() 는 문자열이 base64로 인코딩되었는지 확인하고, 그렇다면 디코딩된 문자열을 반환합니다. 그렇지 않으면 빈 문자열을 반환합니다..
예시는
예시는. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_detection_helpersCrowdstrike.Base64EncodedArgs panther_detection_helpers 패키지 Python 룰 캐싱에서 확인하세요.
디텍션에서 확인하세요 get_string_set()
get_string_set
get_string_set. 편의를 위해 이 글로벌 헬퍼 함수 대신 해당 이벤트 함수를 사용하는 것이 권장됩니다. panther_detection_helpersCrowdstrike.Base64EncodedArgs panther_detection_helpers 패키지 Python 룰 캐싱에서 확인하세요.
는 키를 기반으로 Panther가 관리하는 캐시에서 값을 가져오는 데 사용됩니다. 이는 디텍션 호출 간에 상태를 검색하는 데 유용합니다. panther-analysis에서 사용된 예시는 여기에 있습니다
마지막 업데이트
도움이 되었나요?

