Python 디텍션 작성

콘솔 또는 CLI 워크플로우에서 Python 디텍션을 구성하세요

개요

Panther Console 또는 로컬에서 자체 Python 디텍션을 작성할 수 있으며, 다음을 따르십시오 를 클릭하세요. Python 디텍션을 작성할 때는 다음을 유의하십시오 이러한 모범 사례, 그리고 기억하세요 일부 알러트 필드는 동적으로 설정될 수 있습니다. Python으로 작성된 룰은 다음에서 사용할 수 있습니다 디텍션 파생.

대신에 다음을 사용할 수 있습니다 노코드 디텍션 빌더 Console에서 룰을 생성하거나 로컬에서 Simple Detections로 작성하십시오. Simple Detections로 로컬에 디텍션을 작성할지 Python 디텍션으로 작성할지 확신이 서지 않는 경우, 다음을 참조하세요 Python vs. Simple Detections YAML 사용 섹션의 명령을 실행하세요.

circle-info

새 Python 디텍션을 작성하기 전에, 다음이 있는지 확인하세요 Panther가 관리하는 디텍션 귀하의 요구를 충족하는 거의 귀하의 요구를 충족합니다—Panther 관리형 룰은 인라인 필터으로 조정할 수 있습니다). Panther 관리형 디텍션을 활용하면 직접 작성하는 수고를 덜 수 있을 뿐만 아니라 Panther가 새 버전을 릴리스할 때 핵심 디텍션 로직에 대한 지속적인 업데이트 혜택을 제공합니다.

circle-exclamation

Python에서 디텍션을 생성하는 방법

Python에서 룰을 생성하는 방법

Python 룰은 Panther Console과 CLI 워크플로우 모두에서 작성할 수 있습니다.

chevron-rightConsole에서 Python으로 룰 생성하기hashtag
  1. Panther 콘솔의 왼쪽 탐색 창에서 디텍션.

  2. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 새로 만들기.

  3. 페이지에서 Python 룰 타일에서 에 대해 자세히 알아보세요.

  4. 생성 페이지에서 룰을 구성합니다:

    • 이름: 룰에 대한 설명적인 이름을 입력합니다.

    • ID (선택 사항): 펜 아이콘을 클릭하고 룰에 대한 고유 ID를 입력합니다.

    • 우측 상단에서 사용 토글은 기본적으로 켜기 로 설정됩니다. 룰을 비활성화하려면 토글을 OFF.

    • 일반 구성 다음 소스에 대해 이벤트 이름

      • 로그 유형: 이 룰이 적용될 로그 유형을 선택합니다.

    • 일반 구성 디텍트 이벤트 이름

    • 일반 구성 알러트 생성 섹션에서, 알러트 생성 ON/OFF 토글을 설정합니다. 이는 일치 항목이 있을 때 알러트 가 생성될지, 아니면 단지 Signal만 생성될지를 나타냅니다. 이 토글을 켜기:

      • 심각도: 선택하세요 심각도 수준 이 디텍션으로 트리거된 알러트의.

      • 일반 구성 선택적 필드 섹션에서 선택적으로 다음 필드에 대한 값을 제공하세요:

        • 설명: 룰에 대한 추가 컨텍스트를 입력하세요.

        • 런북: 이 룰과 관련된 절차와 운영을 입력하세요.

        • 참조: 이 룰과 관련된 더 많은 정보에 대한 외부 링크를 입력하세요.

        • 목적지 재정의: 심각도와 관계없이 이 디텍션에 대한 알러트를 수신할 목적지를 선택하세요. 목적지는 룰 함수에서 동적으로도 설정할 수 있다는 점에 유의하세요. 자세한 내용은 라우팅 순서 우선순위 를 참조하세요.

        • 중복 제거 기간이벤트 임계값: 룰 일치에 대한 중복 제거 기간 및 임계값을 입력하세요. 중복 제거 작동 방식은 중복 제거.

        • 요약 속성: 이 디텍션으로 트리거된 알러트에 표시할 속성을 입력하세요.

        • 사용자 정의 태그: 룰을 한눈에 이해하는 데 도움이 되는 사용자 정의 태그를 입력하세요(예: HIPAA.)

        • 일반 구성 프레임워크 매핑 이벤트 이름

          1. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 새로 추가 보고서를 입력하려면.

          2. 다음 필드에 대해 값을 제공하십시오:

            • 보고서 키: 보고서와 관련된 키를 입력하세요.

            • 보고서 값: 해당 보고서의 값을 입력하세요.

    • 일반 구성 테스트 이벤트 이름

      • 일반 구성 유닛 테스트 섹션에서, 클릭하여 새로 추가 에서 테스트 생성 이전 단계에서 정의한 룰에 대한

  5. 오른쪽 상단에서 "Resource": "<secret ARN>".

룰을 생성한 후에는 다음을 사용하여 수정할 수 있습니다 인라인 필터.

chevron-rightCLI 워크플로우에서 Python으로 룰 생성하기hashtag

로컬에서 디텍션을 작성하는 경우(Panther Console 대신), 로컬 디텍션 파일을 GitHub 또는 GitLab과 같은 버전 관리 시스템으로 관리하는 것을 권장합니다.

맞춤 디텍션 콘텐츠를 시작할 때는 다음 중 하나를 생성하는 것으로 시작하는 것을 권장합니다 퍼블릭 포크arrow-up-right 또는 프라이빗 클론된 리포지토리arrow-up-right Panther의 오픈소스 panther-analysis 리포지토리arrow-up-right.

폴더 설정

룰을 폴더로 그룹화하는 경우, 각 폴더 이름에는 을 포함해야 합니다.

로그/리소스 유형을 기준으로 룰을 폴더로 그룹화하는 것을 권장합니다. 예: suricata_rules 이전에 생성한 Snowflake 사용자 이름, 예를 들면 aws_s3_policies. 다음을 사용할 수 있습니다 panther-analysisarrow-up-right 레포를 참조로 사용할 수 있습니다.

파일 설정

각 룰 및 스케줄된 룰은 다음으로 구성됩니다:

  • Python 파일(확장자가 .py 인 파일)로 디텍션 로직을 포함합니다.

  • 디텍션 로직과 디텍션의 메타데이터 속성을 포함하는 YAML 명세 파일(확장자가 업로더 명령은 기본 경로를 인수로 받아 확장자가 있는 모든 파일을 재귀적으로 검색합니다 확장자가 포함된 파일)로 디텍션의 메타데이터 속성을 포함합니다.

    • 관례상 이 파일에는 Python 파일과 동일한 이름을 부여합니다.

룰은 의심스러운 동작을 탐지하는 Python 함수입니다. 값을 반환하면 비율이 를 반환하면 의심스러운 활동을 나타내며, 이는 알러트를 트리거합니다.

  1. 룰을 작성하고(선호하는 폴더에) 다음 이름으로 저장하세요 my_new_rule.py:

    def rule(event):  
      return 'prod' in event.get('hostName')
  2. 아래 템플릿을 사용하여 메타데이터 파일을 생성하세요:

    AnalysisType: rule
    DedupPeriodMinutes: 60 # 1 hour
    DisplayName: 예시 규칙 - 스펙 형식 검사
    Enabled: true
    파일명: my_new_rule.py
    RuleID: Type.Behavior.MoreContext
    Severity: High
    LogTypes:
      - LogType.GoesHere
    Reports:
      ReportName(예: CIS, MITRE ATT&CK):
        - 이 룰과 관련된 특정 보고서 섹션
    Tags:
      - 태그
      - 여기에
      - 넣기
    Description: >
      이 룰은 Panther CLI의 CLI 워크플로우를 검증하기 위해 존재합니다.
    Runbook: >
      먼저 누가 이 스펙 형식을 작성했는지 확인한 후, 피드백을 전달하세요.
    참고: https://www.a-clickable-link-to-more-info.com

이 룰이 업로드되면, 일반적으로 Panther Console에서 입력하는 각 필드가 자동으로 채워집니다. 참조: 룰 명세 참조 필수 및 선택 필드의 전체 목록을 확인하세요.

Python에서 스케줄된 룰을 생성하는 방법

Python 스케줄된 룰은 Panther Console과 CLI 워크플로우 모두에서 작성할 수 있습니다.

chevron-rightConsole에서 Python으로 스케줄된 룰 생성하기hashtag
  1. Panther 콘솔의 왼쪽 탐색 창에서 디텍션.

  2. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 새로 만들기.

  3. 페이지에서 예약된 룰 타일에서 에 대해 자세히 알아보세요.

  4. 생성 페이지에서 스케줄된 룰을 구성합니다:

    • 이름: 스케줄된 룰에 대한 설명적인 이름을 입력하세요.

    • ID (선택 사항): 펜 아이콘을 클릭하고 스케줄된 룰에 대한 고유 ID를 입력하세요.

    • 우측 상단에서 사용 토글은 기본적으로 켜기 기본값으로 설정됩니다. 스케줄된 룰을 비활성화하려면 토글을 OFF.

    • 일반 구성 다음 스케줄된 쿼리에 대해 이벤트 이름

      • 예약된 쿼리: API 키에 대해 하나 이상의 스케줄된 검색 이 스케줄된 룰이 적용되어야 합니다.

    • 일반 구성 디텍트 이벤트 이름

      • 일반 구성 룰 함수 텍스트 편집기에서 Python 함수를 작성하여 디텍션을 정의합니다.

    • 일반 구성 알러트 생성 섹션에서, 알러트 생성 ON/OFF 토글을 설정합니다. 이는 일치 항목이 있을 때 알러트 가 생성될지, 아니면 단지 Signal만 생성될지를 나타냅니다. 이 토글을 켜기:

      • 심각도: 선택하세요 심각도 수준 이 디텍션으로 트리거된 알러트의.

      • 일반 구성 선택적 필드 섹션에서 선택적으로 다음 필드에 대한 값을 제공하세요:

        • 설명: 룰에 대한 추가 컨텍스트를 입력하세요.

        • 런북: 이 룰과 관련된 절차와 운영을 입력하세요.

        • 참조: 이 룰과 관련된 더 많은 정보에 대한 외부 링크를 입력하세요.

        • 목적지 재정의: 심각도와 관계없이 이 디텍션에 대한 알러트를 수신할 목적지를 선택하세요. 목적지는 룰 함수에서 동적으로도 설정할 수 있다는 점에 유의하세요. 자세한 내용은 라우팅 순서 우선순위 를 참조하세요.

        • 중복 제거 기간이벤트 임계값: 룰 일치에 대한 중복 제거 기간 및 임계값을 입력하세요. 중복 제거 작동 방식은 중복 제거.

        • 요약 속성: 이 디텍션으로 트리거된 알러트에 표시할 속성을 입력하세요.

        • 사용자 정의 태그: 룰을 한눈에 이해하는 데 도움이 되는 사용자 정의 태그를 입력하세요(예: HIPAA.)

        • 일반 구성 프레임워크 매핑 이벤트 이름

          1. 를 선택하고 Panther가 설치된 계정 ID를 입력하십시오. 새로 추가 보고서를 입력하려면.

          2. 다음 필드에 대해 값을 제공하십시오:

            • 보고서 키: 보고서와 관련된 키를 입력하세요.

            • 보고서 값: 해당 보고서의 값을 입력하세요.

    • 일반 구성 테스트 이벤트 이름

      • 일반 구성 유닛 테스트 섹션에서, 클릭하여 새로 추가 에서 테스트 생성 이전 단계에서 정의한 룰에 대한

  5. 오른쪽 상단에서 "Resource": "<secret ARN>".

    • 한번 클릭하면 "Resource": "<secret ARN>"스케줄된 룰이 활성화됩니다. 관련된 스케줄된 쿼리 에서 반환된 SQL(쿼리에 정의된 인터벌에 따라)은(만약 행이 반환된다면) 스케줄된 룰을 통해 실행됩니다.

룰을 생성한 후에는 다음을 사용하여 수정할 수 있습니다 인라인 필터.

chevron-rightCLI 워크플로우에서 Python으로 스케줄된 룰 생성하기hashtag

로컬에서 디텍션을 작성하는 경우(Panther Console 대신), 로컬 디텍션 파일을 GitHub 또는 GitLab과 같은 버전 관리 시스템으로 관리하는 것을 권장합니다.

맞춤 디텍션 콘텐츠를 시작할 때는 다음 중 하나를 생성하는 것으로 시작하는 것을 권장합니다 퍼블릭 포크arrow-up-right 또는 프라이빗 클론된 리포지토리arrow-up-right Panther의 오픈소스 panther-analysis 리포지토리arrow-up-right.

폴더 설정

룰을 폴더로 그룹화하는 경우, 각 폴더 이름에는 문자열을 포함해야 합니다 을 포함해야 합니다.

로그/리소스 유형을 기준으로 룰을 폴더로 그룹화하는 것을 권장합니다. 예: suricata_rules 이전에 생성한 Snowflake 사용자 이름, 예를 들면 aws_s3_policies. 다음을 사용할 수 있습니다 panther-analysisarrow-up-right 레포를 참조로 사용할 수 있습니다.

파일 설정

각 스케줄된 룰은 다음으로 구성됩니다:

  • Python 파일(확장자가 .py 인 파일)로 디텍션 로직을 포함합니다.

  • 디텍션 로직과 디텍션의 메타데이터 속성을 포함하는 YAML 명세 파일(확장자가 업로더 명령은 기본 경로를 인수로 받아 확장자가 있는 모든 파일을 재귀적으로 검색합니다 확장자가 포함된 파일)로 디텍션의 메타데이터 속성을 포함합니다.

    • 관례상 이 파일에는 Python 파일과 동일한 이름을 부여합니다.

스케줄된 룰을 사용하면 스케줄된 검색 의 출력을 Python으로 분석할 수 있습니다. 값을 반환하면 비율이 를 반환하면 의심스러운 활동을 나타내며, 이는 알러트를 트리거합니다.

  1. 쿼리를 작성하고 다음 이름으로 저장하세요 my_new_scheduled_query.yml:

  2. 룰을 작성하고 다음 이름으로 저장하세요 my_new_rule.py:

  3. 메타데이터 파일을 생성하고 다음 이름으로 저장하세요 my_new_schedule_rule.yml:

이 스케줄된 룰이 업로드되면 각 파일은 스케줄된 쿼리를 룰과 연결하고 일반적으로 Panther Console에서 입력하는 필드를 자동으로 채웁니다. 참조: 아래의 룰 명세 참조 필수 및 선택 필드의 전체 목록을 확인하세요.

Python에서 정책을 생성하는 방법

Python 디텍션 구문

로컬 Python 디텍션은 Python 파일과 YAML 파일 두 파일로 구성됩니다. Panther Console에서 Python 디텍션을 생성하면 YAML 편집기는 없고 Python 텍스트 편집기만 있습니다. 아래 YAML 열에 나열된 키들은 사용자 인터페이스의 필드에 설정됩니다.

Python 파일은 다음을 포함할 수 있습니다:
YAML 파일은 다음을 포함할 수 있습니다:
  • 디텍션 로직

  • 알러트 함수(동적)

  • 필터 키

  • 메타데이터 키

  • 알러트 키(정적)

기본 Python 룰 구조

오직 최소한 각 룰과 예약된 룰은 룰 논리를 정의해야 합니다. 함수와 아래에 표시된 YAML 키들이 Python 룰에 필요합니다. 그러나 추가 Python 알러트 함수는 알러트를 더 동적으로 만들 수 있습니다. 추가 YAML 키들도 사용 가능합니다—참조: Python 룰 명세 참조.

rule.py
rule.yml

더 많은 템플릿은 다음을 참조하세요 GitHub의 panther-analysis 리포지토리arrow-up-right.

InlineFilters

Simple Detections에서 InlineFilters Python 룰에서 인라인 필터로 디텍션 수정하기.

파이썬 디텍션의 알러트 함수

Panther의 디텍션 보조 함수들은 분석 로직, 생성된 알러트 제목, 이벤트 그룹화, 알러트 라우팅 및 메타데이터 재정의를 제어하는 Python 함수들입니다. 룰은 사용자 정의 가능하며 표준 Python 라이브러리 또는 전역 헬퍼.

룰과 정책 모두에 적용되며, 아래 각 함수는 단일 인수인 event (룰) 또는 resource (정책)에 대해 사용됩니다. 고급 사용자는 아래에 정의된 함수 외부에 함수, 변수 또는 클래스를 정의할 수 있습니다.

다음을 사용하는 경우, 알러트 중복 제거되면, 먼저 디텍션과 일치하는 이벤트는 이러한 알러트 함수들의 매개변수로 사용됩니다.

아래의 각 알러트 함수는 선택사항이지만, 알러트에 동적 컨텍스트를 추가할 수 있습니다.

알러트 함수
설명
기본값
반환값

알러트의 긴급성 수준

YAML에서: 심각도 키(key)


Console에서: 심각도 필드

정보, LOW, MEDIUM, HIGH,치명적(CRITICAL), 또는 DEFAULT

생성된 알러트 제목

YAML에서: 가 정의되지 않은 경우, 디텍션의 표시 이름 값이 사용됩니다. 이는 다음에 정의됩니다: > YAML 파일의 이전에 생성한 Snowflake 사용자 이름, 예를 들면 PolicyID


Console에서: 이름 필드 > ID 필드

문자열

연관된 이벤트를 그룹화할 문자열(최대 1000자)

Python/YAML에서: 알러트 제목 설정 시 우선순위는 다음과 같습니다: > 가 정의되지 않은 경우, 디텍션의 표시 이름 값이 사용됩니다. 이는 다음에 정의됩니다: > YAML 파일의 이전에 생성한 Snowflake 사용자 이름, 예를 들면 PolicyID


Console에서: 알러트 제목 설정 시 우선순위는 다음과 같습니다: > 이름 필드 > ID 필드

문자열

알러트 목적지로 전달할 추가 컨텍스트

Dict[String: Any]

알러트가 생성된 후 따라야 할 지침 목록입니다. 실행 플레이북(runbook)을 설명적으로 제공하는 것이 권장됩니다. 왜냐하면 Panther AI 알러트 분류 가 이를 고려하기 때문입니다.

YAML에서: 런북 키(key)


Console에서: 런북 필드

문자열

룰이 존재하는 이유에 대한 설명

YAML에서: 설명 키(key)


Console에서: 설명 필드

문자열

룰에 대한 내부 문서 또는 온라인 리소스의 참조 URL

YAML에서: 참조 키(key)


Console에서: 참조 필드

문자열

알러트를 보낼 대상의 ID(들).

YAML에서: OutputIds 키(key)


Console에서: 대상 오버라이드 필드

List[대상 이름/ID]

severity

일부 시나리오에서는 알러트의 심각도 수준을 상향 또는 하향 조정해야 할 수도 있습니다. 알러트의 심각도 수준은 다음에 매핑될 수 있습니다 정보, LOW, MEDIUM, HIGH, 치명적(CRITICAL), 또는 DEFAULT. 반환 DEFAULT 하여 정적으로 정의된 룰 심각도로 되돌아가게 합니다.

심각도 문자열은 대소문자를 구분하지 않으므로 예를 들어 시스템 시간 및 OS 버전과 같은 민감하지 않은 정보 유출 이전에 생성한 Snowflake 사용자 이름, 예를 들면 이는와 같이 스타일 취향에 따라 반환할 수 있습니다.

아래 예제에서, API 토큰이 생성된 경우에는 HIGH 심각도 알러트가 생성되고—그렇지 않으면 정보 수준 알러트가 생성됩니다:

참고: 템플릿 룰arrow-up-right

예시 사용 DEFAULT:

title

사용자를 사용할 것이며, 알러트 제목 설정 시 우선순위는 다음과 같습니다: 함수는 선택 사항이지만 알러트에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

아래 예제에서는 로그 타입, 사용자 이름 및 정적 문자열이 알러트 대상지로 전송됩니다. 함수는 이벤트가 AWS.CloudTrail 로그 타입과 관련이 있는지 확인하고, 그렇다면 AWS 계정 이름을 반환합니다.

알러트 제목이 설정되는 방법에 대해 더 알아보려면 룰 및 스케줄된 룰.

예:

참고: 템플릿 룰arrow-up-right

중복 제거

데듀플리케이션은 중복 알러트를 받지 않도록 관련 이벤트를 단일 알러트로 그룹화하는 프로세스입니다. 동일한 디택션을 트리거하고 데듀플리케이션 기간 내에 같은 데듀플리케이션 문자열을 공유하는 이벤트는 단일 알러트로 함께 그룹화됩니다. 중복 제거 함수는 데듀플리케이션 문자열을 정의하는 한 가지 방법입니다. 이 문자열은 1000자로 제한됩니다.

데듀플리케이션에 대해 더 알아보려면 룰 및 스케줄된 룰.

예:

참고: AWS S3 버킷 삭제 룰arrow-up-right

대상지

사용자를 사용할 것이며, destinations() 함수는 룰의 알러트가 어느 알러트 대상지(들)로 전송되어야 하는지를 나타내는 방법입니다. 이는 다른 모든 알러트 대상지 구성보다 우선합니다(즉, 충족되지 에서 알러트 라우팅 시나리오).

사용자를 사용할 것이며, destinations() 함수는 하나 이상의 알러트 대상지 이름 또는 UUID의 목록을 반환해야 합니다. 함수가 반환한 목록이 destinations() 함수가 반환한 목록이 비어 있으면 ([]), 해당 알러트는 어떤 대상으로도 라우팅되지 않습니다.

예를 들어, 아래 룰은 여러 로그 타입과 연관되어 있습니다. 로그 타입이 AWS.CloudTrail, destinations() 경우 알러트를 slack-security-alerts 대상지로 라우팅합니다. 로그 타입이 AWS.CloudTrail가 아닌 경우— return [].

다른 예시는 panther-analysis example_rulearrow-up-right.

alert_context

이 함수는 디텍션이 사용자 이름, IP 주소 또는 성공/실패와 같은 이벤트 세부 정보를 추가 컨텍스트로 알러트 대상지에 전달할 수 있게 합니다.

알러트 컨텍스트 딕셔너리에 포함된 값은 JSON 규격에 준수해야 합니다. 비준수 값의 예로는 Python의 nan, inf-inf.

예:

아래 코드는 알러트 컨텍스트에 모든 이벤트 데이터를 반환합니다.

runbook

사용자를 사용할 것이며, runbook 함수 출력은 이 디텍션으로 생성된 알러트를 삼류(triage)하기 위한 실행 가능한 조사 단계들을 제공해야 합니다.

다음 필드를 포함해야 합니다 Panther AI는 알러트를 분류합니다, 그것은 실행 플레이북을 읽고 자율적으로 실행할 것입니다. 효과적인 실행 플레이북 작성 방법에 대해 더 알아보려면 알러트 런북.

예:

reference설명

사용자를 사용할 것이며, reference설명 함수는 알러트가 왜 트리거되었는지 그리고 관련 문제를 어떻게 해결할지에 대한 추가 컨텍스트를 제공할 수 있습니다.

아래 예제는 알러트의 reference 필드 내에 동적으로 링크를 제공합니다:

이벤트 객체 함수

Python 디텍션에서, 최소한 각 룰과 예약된 룰은 룰 논리를 정의해야 합니다. 함수와 모든 동적 알러트 함수들은 단일 인수인 event 객체를 받습니다. 이 이벤트 객체에는 이벤트 값을 간단히 추출할 수 있는 내장 함수들이 있습니다.

get()

port get() 최상위 이벤트 필드에 접근하기 위해 사용됩니다. 키를 찾을 수 없을 때 반환될 기본값을 제공할 수 있습니다.

최상위 필드에 접근하는 다른 방법으로 deep_get()deep_walk(). 자세한 내용은 아래의 최상위 필드를 안전하게 접근하기.

예:

deep_get()

port deep_get() Python 딕셔너리 안에 중첩된 키들을 반환하기 위해 사용됩니다.

필요한 값이 리스트 내에 있는 경우에는 deep_walk() 를 따르십시오.

circle-info

이 함수는 전역 헬퍼로도 제공됩니다하지만 편의상 이 이벤트 객체 함수를 사용하는 것이 권장됩니다.

예:

다음과 같은 구조의 이벤트가 주어졌다고 가정하면

deep_walk()

port deep_walk() 여러 개의 딕셔너리나 리스트를 포함할 수 있는 Python 딕셔너리 안에 깊게 중첩된 키와 연관된 값을 반환하기 위해 사용됩니다. 여러 이벤트 필드와 일치하면 일치한 항목들의 배열이 반환되고, 하나의 일치만 발생하면 그 일치의 값이 반환됩니다.

circle-info

이 함수는 전역 헬퍼로도 제공됩니다하지만 편의상 이 이벤트 객체 함수를 사용하는 것이 권장됩니다.

예:

lookup()

사용자를 사용할 것이며, lookup() 함수는 디텍션에서 커스텀 룩업 테이블arrow-up-rightPanther 관리형 인리치먼트 제공자 로부터 동적으로 데이터를 접근할 수 있게 해줍니다. 이 lookup() 함수는 수신 로그가 Lookup Table의 기본 키 열에 있는 값과 정확히 일치하지 않는 경우에 유용할 수 있습니다. Python을 사용하여 이벤트 값을 수정한 후 lookup() 에 전달하여 인리치먼트 데이터를 가져올 수 있습니다.

lookup() 두 개의 인수를 받습니다:

  • Lookup Table의 이름

    • 에 전달된 Lookup Table 이름은 lookup() Panther 콘솔의 엔리치먼트 프로바이더 이전에 생성한 Snowflake 사용자 이름, 예를 들면 룩업 테이블 페이지에 표시되는 것과 동일해야 합니다. 이 이름은 검색 쿼리에 표시되는 방식과 문법적으로 다를 수 있습니다. 예를 들어, My-Custom-LUT 대신 my_custom_lut.

  • Lookup Table의 기본 키

제공된 키에 대해 Lookup Table에서 일치 항목을 찾으면 전체 Lookup Table 행이 Python 딕셔너리로 반환됩니다. 일치 항목이 없으면 는 선택적 가 반환됩니다.

circle-info

lookup() 함수는 이벤트 필드가 Selector로 지정되어 Lookup Table의 기본 키 열의 값과 정확히 일치할 때 발생하는 "자동" 이벤트 인리치먼트와는 다릅니다. 그 경우 Lookup Table 데이터는 이벤트의 p_enrichment 필드에 추가됩니다. 자세한 내용은 Custom Lookup Tables의 로그와 Lookup Tables 간의 데이터 매칭은 어떻게 이루어지나요?를 참조하세요.

이와 같은 방식으로 "자동" 인리치먼트를 사용하는 경우, 중첩된 인리치먼트 데이터에는 deep_walk() 를 따르십시오.

예시 사용 lookup():

를 사용하는 디텍션의 단위 테스트 lookup()

다음 필드를 포함해야 합니다 단위 테스트 가 실행될 때, lookup() 는 라이브 데이터를 가져오지 않습니다. lookup 기능을 에뮬레이션하려면 각 단위 테스트의 이벤트 페이로드에 _mocked_lookup_data_ 필드를 추가하여 Lookup Table 데이터를 모킹(mock)하세요. 당신은 테스트 데이터 인리치 버튼이나 CLI 명령을 사용할 수 없습니다 에서 생성된 검색은 lookup().

_mocked_lookup_data_ 예시는 다음과 같이 구성되어야 합니다:

단위 테스트에서 _mocked_lookup_data_ 필드를 지정하지 않으면, lookup() 를 호출하려는 시도는 None/null.

udm()

사용자를 사용할 것이며, udm() 함수는 주로 데이터 모델에 접근할 수 있게 설계되었지만, 이벤트 필드에 접근하는 데에도 사용할 수 있습니다.

다음은 udm() 함수가 작동하는 방식입니다:

  1. 함수는 먼저 전달된 값에 대해 데이터 모델 키 매핑이 정의되어 있는지 확인합니다. udm()그렇다면 데이터 모델의 값이 반환됩니다.

    • 만약 데이터 모델 키가 전달된 값에 대해 정의되어 있다면, 함수는 그 값을 반환하고 아래의 2단계로 진행하지 않습니다. 이는 평가되는 이벤트가 데이터 모델 매핑에 정의된 키 경로를 포함하지 않더라도 해당됩니다. 이 경우, udm()전달된 값에 대해 정의된 null 가 반환됩니다.

  2. 디택션의 Python 본문에 데이터 모델 다음으로 함수는 해당 이름을 가진 이벤트 필드가 있는지 확인합니다. 있다면 그 값을 반환합니다. udm()이 경우,

    • 는 중첩된 필드를 포함한 모든 이벤트 필드를 확인합니다. 그 동작은 udm() 와 유사합니다. deep_get().

circle-info

위에 설명된 동작으로 인해 동일한 키로 매핑이 정의되어 있는 경우에는 udm() 를 사용하여 이벤트 필드 값을 접근하는 것이 불가능합니다. 데이터 모델 샘플 udm 사용법

예시 사용 udm() 데이터 모델 예시 데이터 모델 - name: singleFormatTimestamp

Python 향상 제안서

Python Enhancement Proposals 리소스를 게시합니다arrow-up-right Python 코드를 깔끔하고 효과적으로 작성하고 스타일링하는 방법에 대해. 예를 들어, 당신은 autopep8arrow-up-right 를 사용하여 작성한 모든 디텍션이 일관된 스타일을 따르도록 자동으로 보장할 수 있습니다.

사용 가능한 Python 라이브러리

다음의 Python 라이브러리는 Panther에서 boto3외에 사용 가능하며, AWS Lambdaarrow-up-right:

패키지

버전

설명

라이선스

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") 이전에 생성한 Snowflake 사용자 이름, 예를 들면 event.get("event_type") 은 동일한 결과를 반환합니다.

최상위 필드와 중첩된 필드 이해하기

최상위 필드는 중첩된 데이터 구조에서 부모 필드를 나타냅니다. 예를 들어, 레코드에는 SELECT CURRENT_ACCOUNT() 라는 필드가 포함될 수 있으며 그 하위에 스키마:와 같은 다른 필드들이 있을 수 있습니다. 이 경우, SELECT CURRENT_ACCOUNT() 는 최상위 필드이고, 스키마: 는 그 아래의 중첩된 필드입니다.

중첩은 여러 레이어로 발생할 수 있으므로 스키마 구조를 이해하고 디텍션을 위해 특정 필드에 접근하는 방법을 아는 것이 중요합니다.

최상위 필드에 안전하게 접근하기

기본 룰은 이벤트의 필드 값을 매치하며, 오류를 피하기 위한 모범 사례로 Python의 내장 기능인 get() 함수에 대해 정의되어야 합니다.

아래의 예는 get() 함수에 대해 정의되어야 합니다. get() 는 필드를 찾고, 필드가 존재하지 않으면 오류 대신 는 선택적 를 반환하므로 디텍션이 오류를 반환하는 대신 )..

아래 예에서 필드가 존재하면 필드의 값이 반환됩니다. 그렇지 않으면 ). 가 반환됩니다:

circle-exclamation

글로벌 헬퍼 함수 사용하기

여러 디텍션을 작성하면 패턴과 반복 코드가 나타나기 시작합니다. 이는 글로벌 헬퍼 함수의 훌륭한 사용 사례로, 이 로직을 모든 디텍션에서 중앙화된 위치에 두도록 해줍니다.

중첩된 필드에 안전하게 접근하기

이벤트 내 깊게 중첩된 필드에 접근하려면 이벤트 객체에서 사용할 수 있는 deep_get()deep_walk() 함수를 사용하세요. 이 함수들은 또한 글로벌 헬퍼 함수로 표현되지만, 편의를 위해 이벤트 객체 버전을 사용하는 것이 권장됩니다.

예:

AWS CloudTrail 로그는 콘솔에 접근한 유형 의 하위에 userIdentity가 중첩됩니다. 다음은 JSON CloudTrail 루트 활동 로그의 일부 스니펫입니다:

"값을 안전하게 확인하는 방법을 보세요 유형 두 형태의 deep_get():

이벤트 값을 확인하기 — 이벤트 객체 deep_get() function:

특정 값에 대해 필드 확인하기

특정 이벤트가 발생했는지 알고 싶을 수 있습니다. 발생했다면 디텍션은 알러트를 트리거해야 합니다. Panther는 모든 것을 정규화된 JSON으로 저장하므로, 지정한 기준과 필드 값을 비교할 수 있습니다.

예를 들어, Box 기술지원이 귀하의 Box 계정에 접근 권한을 부여하는 동작을 탐지하려면, 아래의 Python은 event_typeACCESS_GRANTED:

필드가 event_type 이고 값이 ACCESS_GRANTED 와 같다면 룰 함수는 부울 값 를 반환하고 알러트가 생성됩니다.

정수 값에 대해 필드 확인하기

필드 값을 정수와 비교해야 할 수도 있습니다. 이를 통해 Python의 내장 비교 연산을 이벤트에 대해 사용할 수 있습니다.

예를 들어, HTTP 응답 상태 코드에 기반해 알러트를 생성할 수 있습니다:

참고:

유니버설 데이터 모델 사용하기

데이터 모델 통합된 필드 세트를 모든 로그 유형에 대해 구성하는 방법을 제공합니다. 기본적으로 Panther에는 여러 로그 유형에 대해 내장된 데이터 모델이 제공됩니다. 사용자 정의 데이터 모델은 Panther 콘솔에서 또는 프로그램 방식으로 업로드할 수 있습니다arrow-up-right.

event.udm() 는 Panther 환경에 이미 존재하는 데이터 모델이 있는 로그 유형에서만 사용할 수 있습니다.

예:

참조:

여러 조건 사용하기

사용자를 사용할 것이며, 키워드는 논리 연산자이며 조건문을 결합하는 데 사용됩니다. 여러 필드를 매치해야 할 때 키워드를 사용하는 경우가 많습니다. 를 사용할 때 모든 문장은 참이어야 합니다: "string_a" == "this""string_b" == "that"

예:

AWS 콘솔에 대한 성공적인 루트 사용자 접근을 추적하려면 여러 필드를 확인해야 합니다:

사용자를 사용할 것이며, 이전에 생성한 Snowflake 사용자 이름, 예를 들면 키워드는 논리 연산자이며 조건문을 결합하는 데 사용됩니다. 이전에 생성한 Snowflake 사용자 이름, 예를 들면를 사용할 때, 문장들 중 어느 하나라도 참일 수 있습니다: "string_a" == "this"`` ``이전에 생성한 Snowflake 사용자 이름, 예를 들면`` ``"string_b" == "that"

예:

이 예시는 필드가 포트 80 이전에 생성한 Snowflake 사용자 이름, 예를 들면 포트 22:

리스트에서 값 검색하기

이벤트 값을 IP 주소나 사용자 등을 포함한 리스트와 비교하는 것은 Python에서 빠릅니다. 일반적인 패턴으로 이벤트 값이 리스트에 존재할 때 매치되지 않도록 룰 로직을 설정합니다. 이는 환경 내 알려진 동작에 대한 오탐을 줄이는 데 도움이 됩니다.

컬렉션에 이벤트 값이 포함되어 있는지 확인할 때는 Python의 set 사용을 권장합니다—셋은 리스트나 튜플보다 성능(즉, 메모리 효율)상 더 우수합니다. 리스트와 튜플은 셋과 달리 포함 여부를 확인하기 위해 컬렉션의 각 항목을 반복해야 합니다.

비교를 수행하는 대상 셋이 정적이라면, 최소한 각 룰과 예약된 룰은 룰 논리를 정의해야 합니다. 함수 내부보다 전역 수준에서 정의하는 것이 권장됩니다. 전역 변수는 Lambda 호출당 한 번만 초기화됩니다. 단일 Lambda 호출이 여러 이벤트를 처리할 수 있기 때문에, 전역 변수는 최소한 각 룰과 예약된 룰은 룰 논리를 정의해야 합니다. 가 호출될 때마다 초기화하는 것보다 보통 더 효율적입니다.

예:

아래 예에서는 Panther 헬퍼 pattern_match_list:

참고: Teleport 사용자 계정 생성arrow-up-right

정규식으로 이벤트 매칭하기

하위 도메인, 파일 경로 또는 일반 문자열의 접두/접미사 등을 매칭하려면 정규식을 사용할 수 있습니다. Python에서 정규식은 re 라이브러리를 임포트하여 매칭 값을 찾는 데 사용할 수 있습니다.

아래 예에서 정규식 패턴은 privilegeGranted 필드의 중첩 값에 대해 Administrator 또는 administrator와 매치됩니다.

아래 예에서는 Panther 헬퍼 pattern_match:

참조:

Python 룰 명세 참조

필수 필드는 다음에 있습니다: 굵게.

필드 이름

설명

예상 값

AnalysisType

이 분석이 rule, scheduled_rule, policy 또는 global인지 여부를 나타냅니다.

룰: 예약된 룰: scheduled_rule

사용

이 룰이 활성화되어 있는지 여부

부울

파일명

파이썬 룰 본문에 대한 경로(파일 확장자 포함)

문자열

YAML 파일의

룰의 고유 식별자

문자열 다음을 포함할 수 없음 %

LogTypes

이 룰을 적용할 로그 목록

문자열 목록

심각도

이 룰의 심각도(심각성)

다음 문자열 중 하나: 정보, 낮음, 정보(Info), 운영 인식 획득, 또는 시스템 시간 및 OS 버전과 같은 민감하지 않은 정보 유출

예약된 쿼리(ScheduledQueries) (예약된 룰에만 해당되는 필드)

이 룰을 적용할 예약된 쿼리 이름 목록

문자열 목록

CreateAlert

룰이 룰 매치/알러트를 생성해야 하는지 일치 시(기본값 true)

부울

설명

룰에 대한 간단한 설명

문자열

이고 최대값은

유사한 알러트 이벤트들이 그룹화되는 시간 기간(분)

15,30,60,180 (3시간),720 (12시간), 또는 1440 (24시간)

가 정의되지 않은 경우, 디텍션의 표시 이름 값이 사용됩니다. 이는 다음에 정의됩니다:

UI와 알러트에 표시할 친숙한 이름. YAML 파일의 가 표시됩니다.

문자열

OutputIds

정적 대상 오버라이드. 이는 심각도 기반의 기본 라우팅보다 우선하여 이 룰의 알러트가 어떻게 라우팅될지를 결정하는 데 사용됩니다.

문자열 목록

참조

이 룰이 존재하는 이유, 종종 문서에 대한 링크

문자열

Reports

이 룰이 해당 프레임워크에 대해 다루는 값을 프레임워크 또는 리포트 이름에 매핑한 것

문자열을 리스트 문자열로 매핑한 것

런북

분석가나 Panther AI가 관련 알러트를 분류하기 위해 수행할 수 있는 조치.

문자열

SummaryAttributes

알러트가 요약해야 할 필드 목록.

문자열 목록

Threshold

알러트를 전송하기 전에 이 룰을 트리거하기 위해 필요한 이벤트 수.

정수

태그

이 룰을 분류하는 데 사용되는 태그

문자열 목록

Tests

이 룰에 대한 단위 테스트.

맵의 목록

CreatedBy

이 디텍션의 작성자. Panther 사용자 UUID, 이메일 주소 또는 임의의 텍스트 값으로 설정할 수 있습니다. 자세한 내용은 사용자를 사용할 것이며, CreatedBy 디텍션 필드.

문자열

Python 정책 명세 참조

필수 필드는 다음에 있습니다: 굵게.

정책 명세 필드의 전체 목록:

필드 이름

설명

예상 값

AnalysisType

이 명세가 정책인지 룰을 정의하는지 여부를 나타냅니다

정책

사용

이 정책이 활성화되어 있는지 여부

부울

파일명

파이썬 정책 본문에 대한 경로(파일 확장자 포함)

문자열

PolicyID

정책의 고유 식별자

문자열 다음을 포함할 수 없음 %

리소스 유형(ResourceTypes)

이 정책이 적용될 리소스 유형

문자열 목록

심각도

이 정책의 심각도(심각성)

다음 문자열 중 하나: 정보, 낮음, 정보(Info), 운영 인식 획득, 또는 시스템 시간 및 OS 버전과 같은 민감하지 않은 정보 유출

설명

정책에 대한 간단한 설명

문자열

가 정의되지 않은 경우, 디텍션의 표시 이름 값이 사용됩니다. 이는 다음에 정의됩니다:

UI와 알러트에 표시할 이름 PolicyID 가 표시됩니다.

문자열

참조

이 정책이 존재하는 이유, 종종 문서에 대한 링크

문자열

Reports

이 정책이 해당 프레임워크에 대해 포함하는 값을 프레임워크 또는 보고서 이름에 매핑한 것

문자열을 리스트 문자열로 매핑한 것

런북

분석가나 Panther AI가 관련 알러트를 분류하기 위해 수행할 수 있는 조치.

문자열

제외(Suppressions)

무시할 패턴 예: aws::s3::*

문자열 목록

태그

이 정책을 분류하는 데 사용되는 태그

문자열 목록

Tests

이 정책에 대한 단위 테스트.

맵의 목록

CreatedBy

이 디텍션의 작성자. Panther 사용자 UUID, 이메일 주소 또는 임의의 텍스트 값으로 설정할 수 있습니다. 자세한 내용은 사용자를 사용할 것이며, CreatedBy 디텍션 필드.

문자열

디텍션 문제 해결하기

Panther 지식 기반을 방문하여 디텍션에 대한 문서를 보기arrow-up-right 자주 묻는 질문에 답하고 일반적인 오류와 문제를 해결하는 데 도움이 됩니다.

마지막 업데이트

도움이 되었나요?