Python 디택션 작성
콘솔 또는 CLI 워크플로에서 Python 디택션을 구성하기
개요
Panther Console 또는 로컬에서 다음을 따라 자체 Python 디택션을 작성할 수 있습니다 CLI 워크플로. Python 디택션을 작성할 때는 이 모범 사례를, 그리고 일부 알러트 필드는 동적으로 설정할 수 있다는 점을 기억하세요. Python으로 작성된 룰은 디택션 파생.
대신 다음을 사용할 수도 있습니다 코드 없는 디택션 빌더 를 Console에서 사용하여 룰을 만들거나, 로컬에서 Simple Detections로 작성할 수 있습니다. 디택션을 로컬에서 Simple Detections로 작성할지 Python 디택션으로 작성할지 확실하지 않다면, 다음을 참조하세요 Python과 간단한 디택션 YAML 사용 섹션.
새 Python 디택션을 작성하기 전에, 다음이 있는지 확인하세요 Panther에서 관리하는 디택션 이(가) 요구 사항을 충족하는지(또는 거의 요구 사항을 충족하는지—Panther에서 관리하는 룰은 다음을 통해 조정할 수 있습니다 인라인 필터). Panther에서 관리하는 디택션을 활용하면 직접 작성하는 수고를 덜 수 있을 뿐 아니라, Panther가 새 버전을 출시할 때 핵심 디택션 로직에 대한 지속적인 업데이트 혜택도 받을 수 있습니다.
Panther의 디택션 내에서 외부 API 요청을 만드는 것은 매우 권장되지 않습니다. 일반적으로 디택션은 매우 큰 규모로 처리되며, API 요청을 생성하면 수신 시스템에 과부하가 걸리고 룰이 다음 한도를 초과할 수 있습니다 15초 실행 시간 제한.
Python에서 디택션을 만드는 방법
Python에서 룰을 만드는 방법
Panther Console과 CLI 워크플로 모두에서 Python 룰을 작성할 수 있습니다.
Console에서 Python으로 룰 만들기
Panther Console의 왼쪽 탐색 표시줄에서 디택션.
을 클릭합니다 새로 만들기.
에서 Python 룰 타일을 클릭하세요 시작.
생성 페이지에서 룰을 구성하세요:
Name: 룰에 대한 설명이 포함된 이름을 입력하세요.
ID (선택 사항): 펜 아이콘을 클릭하고 룰에 대한 고유 ID를 입력하세요.
오른쪽 상단 모서리에서 활성화됨 토글은 기본적으로
ON로 설정됩니다. 룰을 비활성화하려면 토글을OFF.에서 다음 소스에 대해 섹션:
로그 유형: 이 룰이 적용되어야 하는 로그 유형을 선택하세요.
에서 디텍션 섹션:
에서 룰 함수 텍스트 편집기에서 Python
룰함수를 작성하여 디택션을 정의하세요.디택션 템플릿과 예시는 다음을 참조하세요 panther_analysis GitHub 저장소.
에서 알러트 생성 섹션에서 다음을 설정하세요 알러트 생성
ON/OFF토글. 이는 일치 항목이 있을 때 알러트 가 생성되어야 하는지, 아니면 Signal만 생성되어야 하는지를 나타냅니다. 이 토글을ON:심각도: 다음을 선택하세요 심각도 수준 이 디택션으로 트리거되는 알러트에 대한
에서 선택적 필드 섹션에서 다음 필드의 값을 선택적으로 입력하세요:
설명: 룰에 대한 추가 컨텍스트를 입력하세요.
런북: 이 룰과 관련된 절차 및 작업을 입력하세요.
다음에서 자세히 알아보기 알러트 실행 가이드.
설명적인 실행 가이드를 제공하는 것이 권장됩니다, 왜냐하면 Panther AI 알러트 분류 이를 고려할 것이기 때문입니다.
Reference: 이 룰과 관련된 추가 정보를 위한 외부 링크를 입력하세요.
대상 재정의: 심각도와 관계없이 이 디택션에 대한 알러트를 수신할 대상지를 선택하세요. 대상지는 룰 함수에서 동적으로 설정할 수도 있습니다. 자세한 내용은 라우팅 순서 우선순위 를 참조하세요.
중복 제거 기간 Run Panther AI 이벤트 임계값: 룰 일치에 대한 중복 제거 기간과 임계값을 입력하세요. 중복 제거가 작동하는 방식을 알아보려면 중복 제거.
요약 속성: 이 디택션에 의해 트리거되는 알러트에서 표시할 속성을 입력하세요.
중첩된 필드를 요약 속성으로 사용하려면, Summary Attribute 필드에서 Snowflake 점 표기법을 사용하여 JSON 객체의 경로를 탐색하세요:
<column>:<level1_element>.<level2_element>.<level3_element>그러면 알러트 요약이 알러트 내에서 참조된 객체에 대해 생성됩니다. Snowflake에서 반구조화된 데이터를 탐색하는 방법에 대해 자세히 알아보려면 여기를 참조하세요.
알러트 요약에 대한 자세한 내용은 알러트 할당 및 관리.
사용자 지정 태그: 이 룰을 한눈에 이해하는 데 도움이 되도록 사용자 지정 태그를 입력하세요(예:
HIPAA.)에서 프레임워크 매핑 섹션:
을 클릭합니다 새로 추가 을 입력하세요.
다음 필드의 값을 입력하세요:
보고서 키: 보고서와 관련된 키를 입력하세요.
보고서 값: 해당 보고서의 값을 입력하세요.
에서 테스트 섹션:
에서 단위 테스트 섹션에서 새로 추가 을 테스트 생성 을 클릭하여 이전 단계에서 정의한 룰에 대한 테스트를 생성하세요.
오른쪽 상단에서 다음을 클릭합니다 저장.
룰을 생성한 후에는 다음을 사용하여 수정할 수 있습니다 인라인 필터.
CLI 워크플로에서 Python으로 룰 생성하기
로컬에서 디택션을 작성하는 경우(Panther Console이 아닌 경우), GitHub 또는 GitLab 같은 버전 관리 시스템에서 로컬 디택션 파일을 관리하는 것을 권장합니다.
사용자 지정 디택션 콘텐츠는 다음 중 하나를 생성하여 시작하는 것이 좋습니다 공개 포크 또는 비공개 복제 저장소 Panther의 오픈 소스 panther-analysis 저장소.
폴더 설정
룰을 폴더로 그룹화하는 경우, 각 폴더 이름에는 반드시 다음이 포함되어야 합니다. 룰 업로드 중(PAT 또는 Console의 대량 업로더 사용) 이를 찾을 수 있도록 하기 위해서입니다.
로그/리소스 유형을 기준으로 룰을 폴더로 그룹화하는 것을 권장합니다. 예: suricata_rules 또는 aws_s3_policies. 다음을 panther-analysis 저장소를 참고 자료로 사용할 수 있습니다.
파일 설정
각 룰 및 예약된 룰은 다음으로 구성됩니다:
디택션 로직이 포함된 Python 파일(Python 파일, 즉
.py확장자를 가진 파일).YAML 사양 파일(다음 확장자를 가진 파일
.yml디택션의 메타데이터 속성을 포함하는 extension)입니다.관례적으로, 이 파일에는 Python 파일과 동일한 이름을 부여합니다.
Rules는 수상한 동작을 디텍트하기 위한 Python 함수입니다. 값을 반환하는 것은 참 의심스러운 활동을 나타내며, 이는 알러트를 트리거합니다.
룰을 작성하고 (원하는 폴더에) my_new_룰.py로 저장하세요.
my_new_룰.py:def 룰(event): return 'prod' in event.get('hostName')아래 템플릿을 사용하여 메타데이터 파일을 생성하세요:
AnalysisType: 룰 DedupPeriodMinutes: 60 # 1시간 표시 이름: 형식 확인용 예제 룰 활성화됨: true 파일 이름: my_new_룰.py 룰ID: Type.Behavior.MoreContext 심각도: 높음 로그 유형: - LogType.GoesHere 보고서: 보고서 이름(예: CIS, MITRE ATT&CK): - 이 룰과 관련된 특정 보고서 섹션 태그: - 태그 - Go - 여기 설명: > 이 룰은 Panther CLI의 CLI 워크플로를 검증하기 위해 존재합니다 런북: > 먼저, 이 스펙 형식을 작성한 사람이 누구인지 알아낸 다음, 피드백과 함께 그들에게 알려주세요. 참조: https://www.a-clickable-link-to-more-info.com
이 룰이 업로드되면, 일반적으로 Panther Console에서 입력하는 각 필드가 자동으로 채워집니다. 다음을 참조하세요 룰 사양 참조 필수 및 선택 필드의 전체 목록은
Python에서 스케줄된 룰을 만드는 방법
Panther Console과 CLI 워크플로 둘 다에서 Python 스케줄된 룰을 작성할 수 있습니다.
Console에서 Python으로 스케줄된 룰 만들기
Panther Console의 왼쪽 탐색 표시줄에서 디택션.
을 클릭합니다 새로 만들기.
에서 스케줄된 룰 타일을 클릭하세요 시작.
생성 페이지에서 스케줄된 룰을 구성하세요:
Name: 스케줄된 룰의 설명적인 이름을 입력합니다.
ID (선택 사항): 펜 아이콘을 클릭하고 스케줄된 룰에 대한 고유 ID를 입력합니다.
오른쪽 상단 모서리에서 활성화됨 토글은 기본적으로
ON기본적으로. 스케줄된 룰을 비활성화하려면 토글을OFF.에서 다음 예약 쿼리에 대해 섹션:
예약 쿼리: API 키에 대해 하나 이상의 예약 검색 이 예약 룰이 적용되어야 합니다.
에서 디텍션 섹션:
에서 룰 함수 텍스트 편집기에서 Python
룰함수를 작성하여 디택션을 정의하세요.모든 필터링 로직이 이미 관련 예약 쿼리의 SQL에서 처리되어 있다면,
룰함수를 단순히 반환하도록 구성할 수 있습니다true각 행에 대해:디택션 템플릿과 예시는 다음을 참조하세요 panther_analysis GitHub 저장소
에서 알러트 생성 섹션에서 다음을 설정하세요 알러트 생성
ON/OFF토글. 이는 일치 항목이 있을 때 알러트 가 생성되어야 하는지, 아니면 Signal만 생성되어야 하는지를 나타냅니다. 이 토글을ON:심각도: 다음을 선택하세요 심각도 수준 이 디택션으로 트리거되는 알러트에 대한
에서 선택적 필드 섹션에서 다음 필드의 값을 선택적으로 입력하세요:
설명: 룰에 대한 추가 컨텍스트를 입력하세요.
런북: 이 룰과 관련된 절차 및 작업을 입력하세요.
다음에서 자세히 알아보기 알러트 실행 가이드.
설명적인 실행 가이드를 제공하는 것이 권장됩니다, 왜냐하면 Panther AI 알러트 분류 이를 고려할 것이기 때문입니다.
Reference: 이 룰과 관련된 추가 정보를 위한 외부 링크를 입력하세요.
대상 재정의: 심각도와 관계없이 이 디택션에 대한 알러트를 수신할 대상지를 선택하세요. 대상지는 룰 함수에서 동적으로 설정할 수도 있습니다. 자세한 내용은 라우팅 순서 우선순위 를 참조하세요.
중복 제거 기간 Run Panther AI 이벤트 임계값: 룰 일치에 대한 중복 제거 기간과 임계값을 입력하세요. 중복 제거가 작동하는 방식을 알아보려면 중복 제거.
요약 속성: 이 디택션에 의해 트리거되는 알러트에서 표시할 속성을 입력하세요.
중첩된 필드를 요약 속성으로 사용하려면, Summary Attribute 필드에서 Snowflake 점 표기법을 사용하여 JSON 객체의 경로를 탐색하세요:
<column>:<level1_element>.<level2_element>.<level3_element>그러면 알러트 요약이 알러트 내에서 참조된 객체에 대해 생성됩니다. Snowflake에서 반구조화된 데이터를 탐색하는 방법에 대해 자세히 알아보려면 여기를 참조하세요.
알러트 요약에 대한 자세한 내용은 알러트 할당 및 관리.
사용자 지정 태그: 이 룰을 한눈에 이해하는 데 도움이 되도록 사용자 지정 태그를 입력하세요(예:
HIPAA.)에서 프레임워크 매핑 섹션:
을 클릭합니다 새로 추가 을 입력하세요.
다음 필드의 값을 입력하세요:
보고서 키: 보고서와 관련된 키를 입력하세요.
보고서 값: 해당 보고서의 값을 입력하세요.
에서 테스트 섹션:
에서 단위 테스트 섹션에서 새로 추가 을 테스트 생성 을 클릭하여 이전 단계에서 정의한 룰에 대한 테스트를 생성하세요.
오른쪽 상단에서 다음을 클릭합니다 저장.
클릭하면 저장가 활성화됩니다. 연결된 항목에서 반환된 SQL은 예약 쿼리 (쿼리에서 정의된 간격으로) 스케줄된 룰을 통해 실행됩니다(단, 행이 반환되는 경우에 한함).
룰을 생성한 후에는 다음을 사용하여 수정할 수 있습니다 인라인 필터.
CLI 워크플로에서 Python으로 스케줄된 룰 만들기
로컬에서 디택션을 작성하는 경우(Panther Console이 아닌 경우), GitHub 또는 GitLab 같은 버전 관리 시스템에서 로컬 디택션 파일을 관리하는 것을 권장합니다.
사용자 지정 디택션 콘텐츠는 다음 중 하나를 생성하여 시작하는 것이 좋습니다 공개 포크 또는 비공개 복제 저장소 Panther의 오픈 소스 panther-analysis 저장소.
폴더 설정
룰을 폴더로 그룹화하는 경우, 각 폴더 이름에는 문자열 룰 업로드 중(PAT 또는 Console의 대량 업로더 사용) 이를 찾을 수 있도록 하기 위해서입니다.
로그/리소스 유형을 기준으로 룰을 폴더로 그룹화하는 것을 권장합니다. 예: suricata_rules 또는 aws_s3_policies. 다음을 panther-analysis 저장소를 참고 자료로 사용할 수 있습니다.
파일 설정
각 스케줄된 룰은 다음으로 구성됩니다:
디택션 로직이 포함된 Python 파일(Python 파일, 즉
.py확장자를 가진 파일).YAML 사양 파일(다음 확장자를 가진 파일
.yml디택션의 메타데이터 속성을 포함하는 extension)입니다.관례적으로, 이 파일에는 Python 파일과 동일한 이름을 부여합니다.
스케줄된 룰을 사용하면 다음의 출력 결과를 분석할 수 있습니다: 스케줄된 검색 Python으로. 값이 반환되면 참 의심스러운 활동을 나타내며, 이는 알러트를 트리거합니다.
쿼리를 작성하고 다음으로 저장하세요
my_new_scheduled_query.yml:룰을 작성하고 다음 이름으로 저장하세요
my_new_룰.py:메타데이터 파일을 만들고 다음 이름으로 저장합니다
my_new_schedule_룰.yml:
이 스케줄된 룰이 업로드되면, 각 파일은 스케줄된 쿼리와 룰을 연결하고, 일반적으로 Panther Console에서 입력하는 필드가 자동으로 채워집니다. 참조 아래의 룰 사양 참조 필수 및 선택 필드의 전체 목록은
Python에서 정책을 만드는 방법
정책을 만드는 방법을 알아보려면 다음을 참조하세요. 정책에서 정책 작성 방법 안내.
Python 디택션 구문
로컬 Python 디택션은 두 개의 파일로 구성됩니다: Python 파일과 YAML 파일입니다. Panther Console에서 Python 디택션을 만들 때는 Python 텍스트 편집기만 있고(YAML 편집기는 없음), 아래 YAML 열에 나열된 키들은 사용자 인터페이스의 필드에 설정됩니다.
디택션 로직
알러트 함수(동적)
필터 키
메타데이터 키
알러트 키 (정적)
기본 Python 룰 구조
오직 하나의 룰() 함수와 아래에 표시된 YAML 키만 Python 룰에 필요합니다. 그러나 추가 Python 알러트 함수는 알러트를 더 동적으로 만들 수 있습니다. 추가 YAML 키도 사용할 수 있습니다. 자세한 내용은 Python 룰 사양 참조.
더 많은 템플릿은 다음을 참조하세요: GitHub의 panther-analysis 저장소.
인라인 필터
인라인 필터사용 방법에 대해 자세히 알아보기 인라인 필터 Python 규칙에서 인라인 필터로 디택션 수정하기.
Python 디택션의 알러트 함수
Panther의 디택션 보조 함수는 분석 로직, 생성된 알러트 제목, 이벤트 그룹화, 알러트 라우팅 및 메타데이터 재정의를 제어하는 Python 함수입니다. 규칙은 사용자 지정이 가능하며 표준 Python 라이브러리 또는 전역 헬퍼.
규칙과 정책 모두에 적용되며, 아래 각 함수는 다음의 단일 인수를 받습니다. 이벤트 (rules) 또는 resource (정책). 고급 사용자는 아래에 정의된 함수 외부에 함수, 변수 또는 클래스를 정의할 수 있습니다.
사용 중이라면 알러트 중복 제거로 설정되면 첫 번째 디택션과 일치하는 이벤트는 이러한 알러트 함수의 매개변수로 사용됩니다.
아래의 각 알러트 함수는 선택 사항이지만, 알러트에 동적 컨텍스트를 추가할 수 있습니다.
관련 이벤트를 그룹화하는 문자열이며, 최대 1000자까지
Python/YAML에서: title() > DisplayName > RuleID 또는 PolicyID
콘솔에서는: title() > Name 필드 > ID 필드
문자열
알러트가 생성된 후 따라야 할 지침 목록입니다. 설명적인 런북을 제공하는 것이 권장됩니다, as Panther AI 알러트 분류 이를 고려할 것이기 때문입니다.
YAML에서는: 런북 키
콘솔에서는: 런북 필드
문자열
심각도
심각도일부 시나리오에서는 알러트의 심각도 수준을 상향 또는 하향 조정해야 할 수 있습니다. 알러트의 심각도 수준은 다음에 매핑될 수 있습니다 정보, 낮음, 보통, 높음, 치명적, 또는 기본값. 반환 기본값 하여 정적으로 정의된 룰 심각도로 되돌아가게 합니다.
심각도 문자열은 대소문자를 구분하지 않으므로, 예를 들어 다음과 같이 반환할 수 있습니다 치명적 또는 기본, 스타일 선호도에 따라 다릅니다.
아래 예시에서 API 토큰이 생성된 경우, 높음 심각도의 알러트가 생성되고, 그렇지 않으면 정보 수준의 알러트가 생성됩니다:
참조: 템플릿 룰
다음을 사용하는 예시 기본값:
제목
제목the title() 함수는 선택 사항이지만, 알러트에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.
아래 예시에서는 로그 유형, 사용자 이름, 그리고 정적 문자열이 알러트 대상에 전송됩니다. 이 함수는 이벤트가 AWS.CloudTrail 로그 유형과 관련이 있는지 확인하고, 그렇다면 AWS 계정 이름을 반환합니다.
알러트 제목이 어떻게 설정되는지 자세히 알아보려면 다음을 참조하세요 규칙 및 예약 규칙.
예시:
참조: 템플릿 룰
중복 제거
중복 제거중복 제거는 중복 알러트를 받는 것을 방지하기 위해 관련 이벤트를 하나의 알러트로 그룹화하는 프로세스입니다. 중복 제거 기간 내에 동일한 디택션을 트리거하고 동일한 중복 제거 문자열도 공유하는 이벤트는 하나의 알러트로 함께 그룹화됩니다. The 중복 제거 함수는 중복 제거 문자열을 정의하는 한 가지 방법입니다. 길이는 1000자로 제한됩니다.
중복 제거에 대해 자세히 알아보려면 다음을 참조하세요 규칙 및 예약 규칙.
예시:
참조: AWS S3 버킷 삭제 룰
고유
고유the unique() 함수는 고유 값 임계값 디택션을 가능하게 하며, 총 이벤트 수가 아니라 고유 값의 개수를 기준으로 룰이 알러트하도록 합니다. 이는 분산 공격, 데이터 유출, 관리자 남용 시나리오를 탐지하는 데 유용합니다.
여러 사용자에 걸친 로그인 브루트포스를 디텍션하는 예시:
임계값이 5이면, 이 룰은 중복 제거 기간 내에 실패한 로그인 시도가 5개 이상의 고유 사용자 이름을 대상으로 할 때 알러트합니다.
the unique() 함수는 항상 문자열을 반환해야 합니다. 여러 필드의 고유성을 위해서는 필드를 연결하세요:
고유 값 임계값 디택션에 대해 추가 예제를 포함하여 자세히 알아보려면 다음을 참조하세요. 고유 값 임계값 디택션.
대상
대상the destinations() function은 룰에서 발생한 알러트를 어떤 알러트 대상(들)로 보낼지 지정하는 방법입니다. 이 설정은 다른 모든 알러트 대상 구성보다 우선합니다(즉, 이것은 시나리오 1 의 예를 확인하세요 알러트 라우팅 시나리오).
the destinations() function은 하나 이상의 알러트 대상 이름 또는 UUID 목록을 반환해야 합니다. 만약 function이 반환한 목록이 비어 있으면( destinations() function이 비어 있으면 ([]), 알러트는 어떤 대상에도 라우팅되지 않습니다.
예를 들어, 아래 룰은 여러 로그 유형과 연결되어 있습니다. 로그 유형이 AWS.CloudTrail, destinations() 알러트를 다음으로 라우팅합니다: slack-security-alerts 대상입니다. 로그 유형이 AWS.CloudTrail이 아니면, 외부 대상에는 알러트가 전송되지 않습니다—다음으로 표시됩니다: return [].
다음의 다른 예시를 참조하세요. panther-analysis example_룰.
알러트_컨텍스트
알러트_컨텍스트이 함수는 디택션이 사용자 이름, IP 주소, 성공/실패와 같은 모든 이벤트 세부 정보를 추가 컨텍스트로 알러트 대상에 전달할 수 있게 합니다.
알러트 컨텍스트 사전에 포함되는 값은 JSON 규격을 준수해야 합니다. 규격을 준수하지 않는 값의 예로는 Python의 nan, inf및 -inf.
예시:
아래 코드는 알러트 컨텍스트에 모든 이벤트 데이터를 반환합니다.
런북
런북the 런북 함수 출력은 이 디택션으로 생성된 알러트를 분류하기 위한 실행 가능한 조사 단계를 제공해야 합니다.
다음 경우 Panther AI가 알러트를 분류합니다를 읽고 자동으로 런북을 실행합니다. 효과적인 런북을 작성하는 방법에 대해 더 알아보세요. 알러트 런북.
예시:
참조 Run Panther AI description
참조 Run Panther AI descriptionthe 참조 Run Panther AI description 함수는 알러트가 트리거된 이유와 관련 문제를 해결하는 방법에 대한 추가 맥락을 제공할 수 있습니다.
아래 예시는 다음 안에 링크를 동적으로 제공합니다 참조 알러트의 필드:
이벤트 객체 함수
Python 디택션에서, 룰() 함수와 모든 동적 알러트 함수 단일 인수인 다음을 받습니다: 이벤트 객체. 이 이벤트 객체에는 이벤트 값의 간단한 추출을 가능하게 하는 내장 함수가 있습니다.
get()
get()다음을 사용하여 get() 최상위 이벤트 필드에 접근하기 위해 사용합니다. 키를 찾지 못하면 반환될 기본값을 제공할 수 있습니다.
또한 다음을 사용하여 최상위 필드에 접근할 수도 있습니다. deep_get() Run Panther AI deep_walk(). 다음에서 최상위 필드에 안전하게 접근하는 방법에 대해 자세히 알아보세요.
예시:
deep_get()
deep_get()다음을 사용하여 deep_get() Python 딕셔너리 안에 중첩된 키를 반환하는 데 사용합니다.
가져와야 하는 값이 리스트 안에 있다면, 대신 다음을 사용하세요 deep_walk() .
이 함수는 전역 헬퍼로도 제공되지만, 편의상 이 이벤트 객체 함수를 사용하는 것이 권장됩니다.
예시:
다음 구조를 가진 이벤트가 주어졌을 때
deep_walk()
deep_walk()다음을 사용하여 deep_walk() Python 딕셔너리 안에서 깊게 중첩된 키와 연관된 값을 반환하는 데 사용하며, 딕셔너리나 리스트를 여러 개 포함할 수 있습니다. 여러 이벤트 필드와 일치하면 일치 항목의 배열이 반환되고, 하나만 일치하면 해당 값이 반환됩니다.
이 함수는 전역 헬퍼로도 제공되지만, 편의상 이 이벤트 객체 함수를 사용하는 것이 권장됩니다.
예시:
lookup()
lookup()the lookup() 함수를 사용하면 다음에서 데이터를 동적으로 접근할 수 있습니다. 사용자 지정 룩업 테이블 Run Panther AI Panther가 관리하는 보강 제공자 를 탐지 규칙에서 사용할 수 있습니다. 다음 lookup() 함수는 들어오는 로그에 Lookup Table의 기본 키 열 값과 정확히 일치하는 값이 없을 때 유용할 수 있습니다. Python을 사용해 이벤트 값을 수정한 뒤 lookup() 에 전달하여 보강 데이터를 가져올 수 있습니다.
lookup() 두 개의 인수를 받습니다:
Lookup Table의 이름
다음에 전달되는 Lookup Table 이름
lookup()은 에 표시된 이름과 같아야 합니다. Enrichment Providers 또는 조회 테이블 Panther Console의 페이지입니다. 이 이름은 검색 쿼리에서 표시되는 방식과 문법적으로 다를 수 있습니다. 예를 들어,My-Custom-LUT대신my_custom_lut.
조회 테이블 기본 키
제공된 키에 대해 조회 테이블에서 일치 항목이 발견되면, 전체 조회 테이블 행이 Python 딕셔너리로 반환됩니다. 일치 항목이 없으면, None 이 반환됩니다.
이 lookup() 함수는, Selector로 지정된 이벤트 필드의 값이 조회 테이블의 기본 키 열 값과 정확히 일치할 때 발생하는 "자동" 이벤트 보강과는 다릅니다. 이 경우 조회 테이블 데이터는 이벤트의 p_enrichment 필드에 추가됩니다. 자세한 내용은 Custom Lookup Tables의 로그와 조회 테이블 간 데이터는 어떻게 매칭되나요?를 참조하세요..
이러한 방식으로 "자동" 보강을 사용하는 경우, 중첩된 보강 데이터에는 다음을 사용해 접근하세요. deep_walk() .
다음을 사용하는 예시 lookup():
다음을 사용하는 디택션의 단위 테스트 lookup()
lookup()다음 경우 단위 테스트 가 실행될 때, lookup() 는 라이브 데이터를 가져오지 않습니다. 조회 기능을 에뮬레이션하려면, 각 단위 테스트의 이벤트 페이로드에 _mocked_lookup_data_ 필드를 추가하여 조회 테이블 데이터를 모의 처리하세요. 다음은 사용할 수 없습니다. 테스트 데이터 보강 버튼 또는 CLI 명령 다음과 함께 lookup().
_mocked_lookup_data_ 은 다음 예시처럼 구성되어야 합니다:
만약 _mocked_lookup_data_ 필드를 단위 테스트에 지정하지 않으면, 다음 호출 시도는 lookup() 를 반환합니다 None/null.
udm()
udm()the udm() 함수는 주로 데이터 모델에 접근할 수 있도록 하기 위한 것이지만, 이벤트 필드에 접근하는 데에도 사용할 수 있습니다.
다음은 udm() 함수가 작동하는 방식입니다:
만약 데이터 모델 에 전달된 값에 대해 정의된 항목이 없으면,
udm()함수는 그다음 해당 이름의 이벤트 필드가 있는지 확인합니다. 있으면 그 값이 반환됩니다.이 경우,
udm()는 중첩된 필드를 포함한 모든 이벤트 필드를 확인합니다. 그 동작은 다음과 유사합니다deep_get().
위에서 설명한 동작은 다음을 사용하는 것이 가능하다는 의미입니다. udm() 에 동일한 키로 정의된 데이터 모델 매핑도 없는 경우에만 이벤트 필드 값에 접근할 수 있습니다.
다음을 사용하는 예시 udm() 다음에 접근하기 위해 데이터 모델 값:
udm() 다음에 접근하기 위해 데이터 모델 값:고유 값 임계값 디택션
Panther는 고유값 임계치 디택션을 지원하며, 이를 통해 룰은 단순한 전체 이벤트 수가 아니라 관찰된 고유값 수를 기준으로 알러트할 수 있습니다(예: "고유한 IP 주소 10개 이상이 보이면 알러트"). 이는 다음과 같은 시나리오를 디택션하는 데 유용합니다:
서로 다른 IP 주소에서 발생하는 여러 로그인 시도
여러 사용자 이름을 대상으로 하는 무차별 대입 공격
다양한 외부 도메인으로의 데이터 유출
여러 리소스에 영향을 미치는 관리 작업
the unique() 함수
unique() 함수고유값 임계치 디택션을 활성화하려면, Python 룰에 unique() 고유한 것으로 계산해야 할 대상을 나타내는 문자열 값을 반환하는 함수를 정의하세요.
the unique() 함수는 추적할 고유값을 식별하는 문자열을 반환해야 합니다. 일반적인 예로는 IP 주소, 사용자 이름, 도메인 이름 또는 리소스 ID가 있습니다.
예시: 다중 IP 로그인 디택션
예시: 다중 대상 무차별 대입 디택션
예시: 데이터 유출 디택션
고유값 임계치 처리 방식
다음을 정의하면 unique() 함수:
값 추출: 일치하는 각 이벤트에 대해 Panther는
unique()함수를 호출하여 추적할 고유값을 추출합니다확률적 카운팅: Panther는 메모리 효율적인 확률적 알고리즘을 사용하여 관찰된 고유값 수를 추정합니다
임계치 확인: 추정된 고유 개수가 구성된 임계치에 도달하면 알러트가 생성됩니다
중복 제거: 고유 개수는 룰의 중복 제거 기간에 따라 초기화됩니다
구성 요구 사항
고유값 임계치 처리를 사용하려면:
다음을 정의하세요
unique()문자열을 반환하는 함수룰의 Threshold 를 알러트를 트리거하는 데 필요한 최소 고유값 수로 설정하세요(기본값: 1)
적절한 중복 제거 기간 를 사용 사례에 맞게 구성하세요(기본값: 1시간)
성능 고려 사항
정확도: 고유 카운팅 알고리즘은 최대 1,000개의 고유값 카디널리티에 대해 약 90%의 정확도를 제공합니다
메모리 효율성: 고유값 수와 관계없이 알러트당 약 16KB의 스토리지를 사용합니다
권장 한도: 임계치가 1,000개의 고유값 미만일 때 최상의 성능을 보입니다
연결: 다중 필드 고유성의 경우,
unique()함수:return f"{ip}:{username}"
하위 호환성
가 없는 룰은 unique() 함수가 없는 경우 계속해서 표준 이벤트 수 임계치 처리를 사용합니다. 기존 룰에 unique() 함수를 추가하거나 제거하면 알러트 동작이 변경됩니다.
Python 모범 사례
Python Enhancement Proposals 는 리소스를 제공합니다 Python 코드를 깔끔하고 효과적으로 작성하고 스타일링하는 방법에 대해 설명합니다. 예를 들어, autopep8 를 사용하여 작성한 디택션이 모두 일관된 스타일을 따르도록 자동으로 보장할 수 있습니다.
사용 가능한 Python 라이브러리
다음 Python 라이브러리는 Panther에서 boto3외에도 사용할 수 있으며, 이는 AWS Lambda:
패키지
버전
설명
라이선스
jsonpath-ng
1.5.2
JSONPath 구현
Apache v2
policyuniverse
1.3.3.20210223
AWS ARN 및 정책 파싱
Apache v2
requests
2.23.0
간편한 HTTP 요청
Apache v2
Python 디택션 작성 모범 사례
디택션 테스트 작성
새 디택션을 활성화하기 전에, 테스트를 작성하는 것이 권장됩니다 알러트가 생성되어야 하는 경우와 생성되지 않아야 하는 경우를 정의하는 테스트입니다. 가장 높은 신뢰성을 보장하기 위해 최소 하나의 긍정 사례와 하나의 부정 사례를 두는 것이 모범 사례입니다.
이벤트 필드의 대소문자
이벤트 필드 조회는 대소문자를 구분하지 않습니다. event.get("Event_Type") 또는 event.get("event_type") 는 같은 결과를 반환합니다.
최상위 필드와 중첩 필드 이해하기
최상위 필드는 중첩 데이터 구조에서 부모 필드를 나타냅니다. 예를 들어, 레코드에는 user 라는 필드가 있을 수 있으며, 그 아래에 ip_address와 같은 다른 필드가 있습니다. 이 경우, user 는 최상위 필드이고, ip_address 는 그 아래의 중첩 필드입니다.
중첩은 여러 계층 깊이에서 발생할 수 있으므로, 스키마 구조를 이해하고 디택션을 위해 특정 필드에 접근하는 방법을 아는 것이 중요합니다.
최상위 필드에 안전하게 접근하기
기본 룰은 이벤트에서 필드의 값과 일치하며, 오류를 피하기 위한 모범 사례는 Python의 내장 get() 함수를 활용하는 것입니다.
아래 예시는 get() 함수를 활용하는 것입니다. get() 가 필드를 찾고, 해당 필드가 존재하지 않으면 오류 대신 None 를 반환하므로 디택션이 반환되는 결과를 초래한다는 점에서 모범 사례입니다. False.
아래 예시에서는 필드가 존재하면 해당 필드의 값이 반환됩니다. 그렇지 않으면, False 가 반환됩니다:
잘못된 관행 예시
아래의 룰 정의는 코드가 필드 이름을 명시적으로 적고 있기 때문에 잘못된 관행입니다. 필드가 존재하지 않으면 Python은 KeyError:
Global Helper 함수 사용하기
많은 디택션이 작성되면, 패턴과 반복되는 코드가 나타나기 시작합니다. 이는 다음의 훌륭한 사용 사례입니다. Global Helper 함수이며, 이 로직이 모든 디택션 전반에서 존재할 수 있도록 중앙화된 위치를 제공합니다.
중첩된 필드를 안전하게 접근하기
이벤트 안에 깊게 중첩된 필드에 접근하고 싶다면, deep_get() Run Panther AI deep_walk() 이벤트 객체에서 사용할 수 있는 함수들을 사용하세요. 이 함수들은 또한 Global Helper 함수로도 표현되지만, 편의상 대신 이벤트 객체 버전을 사용하는 것이 권장됩니다.
예시:
AWS CloudTrail 로그는 type 콘솔에 접근하는 사용자의 userIdentity아래에 중첩합니다. 다음은 JSON CloudTrail 루트 활동 로그의 일부입니다:
의 값을 확인하는 방법을 보세요 type 두 가지 형태의 deep_get():
특정 값에 대한 필드 확인하기
특정 이벤트가 발생했는지 알고 싶을 수 있습니다. 해당 이벤트가 발생했다면, 디택션은 알러트를 트리거해야 합니다. Panther는 모든 것을 정규화된 JSON으로 저장하므로, 지정한 기준에 대해 필드의 값을 확인할 수 있습니다.
예를 들어, Box 계정에 Box 기술 지원 액세스를 부여하는 동작을 탐지하려면, 아래 Python은 다음 값과 일치하는 이벤트를 매칭하는 데 사용됩니다. event_type 와 같고 ACCESS_GRANTED:
필드가 event_type 이고 값이 ACCESS_GRANTED 와 같다면, 룰 함수는 true 그리고 알러트가 생성됩니다.
정수 값에 대해 필드 확인하기
필드의 값을 정수와 비교해야 할 수 있습니다. 이렇게 하면 이벤트에 대해 Python의 내장 비교 연산을 사용할 수 있습니다.
예를 들어, HTTP 응답 상태 코드에 기반한 알러트를 만들 수 있습니다:
참조:
Universal Data Model 사용하기
데이터 모델 모든 로그 유형에 걸쳐 통합된 필드 집합을 구성하는 방법을 제공합니다. 기본적으로 Panther에는 여러 로그 유형에 대한 기본 제공 데이터 모델이 포함되어 있습니다. 사용자 정의 데이터 모델은 Panther Console 또는 다음을 통해 추가할 수 있습니다. Panther Analysis Tool.
event.udm() 은(는) Panther 환경에 기존 데이터 모델이 있는 로그 유형에만 사용할 수 있습니다.
예시:
참조:
여러 조건 사용하기
the Run Panther AI keyword는 논리 연산자이며 조건문을 결합하는 데 사용됩니다. 다음을 사용하여 이벤트의 여러 필드를 일치시켜야 하는 경우가 많습니다. Run Panther AI keyword를. 사용할 때 Run Panther AI, 모든 문은 참이어야 합니다:
"string_a" == "this"Run Panther AI"string_b" == "that"
예시:
AWS 콘솔에 대한 루트 사용자 성공 액세스를 추적하려면 여러 필드를 살펴봐야 합니다:
the 또는 keyword는 논리 연산자이며 조건문을 결합하는 데 사용됩니다. 사용할 때 또는, 두 문 중 어느 하나라도 참일 수 있습니다:
"string_a" == "this"`` ``또는`` ``"string_b" == "that"
예시:
이 예시는 필드에 포트 80이 포함되어 있는지 또는 포트 22가 포함되어 있는지 감지합니다:
리스트에서 값 검색하기
이벤트 값을 리스트(예: IP 주소나 사용자 포함)와 비교하는 것은 Python에서 빠릅니다. 흔한 패턴은 이벤트 값이 리스트에도 존재할 때 룰 로직이 일치하지 않도록 설정하는 것입니다. 이는 환경에서 알려진 동작에 대한 오탐을 줄이는 데 도움이 될 수 있습니다.
이벤트 값이 어떤 컬렉션에 포함되어 있는지 확인할 때는 Python set을 사용하는 것이 권장됩니다. set은 Python에서 리스트와 튜플보다 더 성능이 좋고(즉, 메모리 효율적이며), 리스트와 튜플은 set과 달리 포함 여부를 확인하려면 컬렉션의 각 항목을 하나씩 순회해야 합니다.
비교하는 대상 set이 정적이라면, 함수 내부가 아니라 전역 수준에서 정의하는 것이 권장됩니다. 룰() 함수. 전역 변수는 Lambda 호출당 한 번만 초기화됩니다. 단일 Lambda 호출이 여러 이벤트를 처리할 수 있으므로, 전역 변수는 보통 매번 초기화하는 것보다 더 효율적입니다. 룰() 이 호출될 때.
예시:
아래 예시에서는 Panther helper를 사용합니다 pattern_match_list:
regex로 이벤트 매칭
정규 표현식을 사용하여 이벤트와 매칭하려는 경우 - 하위 도메인, 파일 경로 또는 일반 문자열의 접두사/접미사를 매칭하기 위해 - regex를 사용할 수 있습니다. Python에서는 re 라이브러리를 가져와 일치하는 값을 찾음으로써 regex를 사용할 수 있습니다.
아래 예시에서 regex 패턴은 privilegeGranted 필드의 중첩된 값에 대해 Administrator 또는 administrator와 매칭됩니다.
아래 예시에서는 Panther helper를 사용합니다 pattern_match:
참조:
Python 룰 사양 참조
필수 필드는 다음에 있습니다 굵게.
필드 이름
설명
예상 값
AnalysisType
이 분석이 룰, scheduled_룰, policy 또는 global인지 나타냅니다
룰: 룰
예약된 룰: scheduled_룰
활성화됨
이 룰이 활성화되어 있는지 여부
불리언
FileName
python 룰 본문에 대한 경로(파일 확장자 포함)
문자열
RuleID
룰의 고유 식별자
문자열
포함할 수 없음 %
LogTypes
이 룰을 적용할 로그 목록
문자열 목록
심각도
이 룰의 심각도
다음 문자열 중 하나: 정보, 낮음, 보통, 높음, 또는 치명적
ScheduledQueries (예약된 룰에만 해당하는 필드)
이 룰을 적용할 Scheduled Query 이름 목록
문자열 목록
설명
룰에 대한 간단한 설명
문자열
DedupPeriodMinutes
알러트의 유사한 이벤트가 함께 그룹화되는 기간(분)
15,30,60,180 (3시간),720 (12시간), 또는 1440 (24시간)
DisplayName
UI와 알림에 표시할 친숙한 이름. The RuleID 가 설정되지 않으면 표시됩니다.
문자열
OutputIds
정적 대상 재정의입니다. 이는 이 룰의 알러트가 어떻게 라우팅될지 결정하는 데 사용되며, 심각도에 따른 기본 라우팅보다 우선합니다.
문자열 목록
Reference
이 룰이 존재하는 이유로, 보통 문서에 대한 링크입니다
문자열
Reports
이 룰이 해당 프레임워크에서 어떤 값을 다루는지에 대한 프레임워크 또는 보고서 이름과 값의 매핑
문자열에서 문자열 목록으로의 맵
런북
분석가 또는 Panther AI가 관련 경고를 분류하기 위해 수행할 수 있는 작업입니다.
문자열
SummaryAttributes
알러트가 요약해야 하는 필드 목록입니다.
문자열 목록
Threshold
알러트가 전송되기 전에 이 룰을 트리거해야 하는 이벤트 수입니다.
정수
Tags
이 룰을 분류하는 데 사용되는 태그
문자열 목록
Tests
이 룰에 대한 단위 테스트입니다.
맵 목록
CreatedBy
이 디택션의 작성자입니다. Panther 사용자 UUID, 이메일 주소 또는 임의의 텍스트 값으로 설정할 수 있습니다. 자세한 내용은 다음을 참조하세요 the CreatedBy 디택션 필드.
문자열
Python 정책 사양 참조
필수 필드는 다음에 있습니다 굵게.
정책 사양 필드의 전체 목록:
필드 이름
설명
예상 값
AnalysisType
이 사양이 정책 또는 룰을 정의하는지 여부를 나타냅니다
정책
활성화됨
이 정책이 활성화되어 있는지 여부
불리언
FileName
파이썬 정책 본문의 경로(파일 확장자 포함)
문자열
PolicyID
정책의 고유 식별자
문자열
포함할 수 없음 %
리소스 유형
이 정책이 적용될 리소스 유형
문자열 목록
심각도
이 정책의 심각도
다음 문자열 중 하나: 정보, 낮음, 보통, 높음, 또는 치명적
설명
정책에 대한 간단한 설명
문자열
DisplayName
UI와 경고에 표시할 이름. The PolicyID 가 설정되지 않으면 표시됩니다.
문자열
Reference
이 정책이 존재하는 이유로, 보통 문서 링크입니다
문자열
Reports
이 정책이 해당 프레임워크에 대해 다루는 값과 프레임워크 또는 보고서 이름의 매핑
문자열에서 문자열 목록으로의 맵
런북
분석가 또는 Panther AI가 관련 경고를 분류하기 위해 수행할 수 있는 작업입니다.
문자열
억제
무시할 패턴, 예: aws::s3::*
문자열 목록
Tags
이 정책을 분류하는 데 사용되는 태그
문자열 목록
Tests
이 정책에 대한 단위 테스트.
맵 목록
CreatedBy
이 디택션의 작성자입니다. Panther 사용자 UUID, 이메일 주소 또는 임의의 텍스트 값으로 설정할 수 있습니다. 자세한 내용은 다음을 참조하세요 the CreatedBy 디택션 필드.
문자열
탐지 문제 해결
Panther 지식 기반을 방문하여 탐지에 관한 문서를 보십시오 자주 묻는 질문에 답하고 일반적인 오류와 문제를 해결하는 데 도움이 되는
마지막 업데이트
도움이 되었나요?

