시스템 오류

콘솔 또는 CLI 워크플로우에서 Python 탐지 구성하기

개요

Panther 콘솔이나 로컬에서 다음 CLI 워크플로를 따르며 자체 Python 탐지를 작성할 수 있습니다. Python 탐지를 작성할 때는 다음 모범 사례를 참고하고 일부 경고 필드는 동적으로 설정될 수 있다는 점을 기억하세요. Python으로 작성된 규칙은 탐지 유도.

또는 코드 없는 탐지 빌더 를 Console에서 사용하여 규칙을 생성하거나, 로컬에서 Simple Detections로 작성할 수 있습니다. 로컬에서 Simple Detections로 작성할지 또는 Python 탐지로 작성할지 확실하지 않은 경우, Python 대 Simple Detections YAML 사용 섹션을 참조하세요.

circle-info

새로운 Python 탐지를 작성하기 전에, Panther 관리 탐지 가 귀하의 요구를 충족하는지(또는 거의 충족하는지—Panther 관리 규칙은 인라인 필터로 조정할 수 있습니다)를 확인하세요). Panther 관리 탐지를 활용하면 직접 작성하는 수고를 덜 수 있을 뿐만 아니라 Panther가 새 버전을 출시할 때 핵심 탐지 로직에 대한 지속적인 업데이트 혜택도 제공합니다.

circle-exclamation

Python에서 탐지 생성 방법

Python에서 규칙 생성 방법

Panther 콘솔과 CLI 워크플로 모두에서 Python 규칙을 작성할 수 있습니다.

chevron-right콘솔에서 Python으로 규칙 생성하기hashtag
  1. Panther 콘솔의 왼쪽 탐색 표시줄에서 탐지(Detections).

  2. 를 클릭하세요 새로 만들기(Create New).

  3. 에서 Python 규칙(Python Rule) 타일에서 시작(Start).

  4. 만들기 페이지에서 규칙을 구성하세요:

    • 이름(Name): 규칙에 대한 설명적인 이름을 입력하세요.

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

    • 오른쪽 상단 모서리에서 사용(Enabled) 토글은 기본적으로 ON 으로 설정됩니다. 규칙을 비활성화하려면 토글을 OFF.

    • 로 전환하세요. 다음 소스에 대하여(For the Following Source) 섹션:

      • 로그 유형(Log Types): 이 규칙을 적용할 로그 유형을 선택하세요.

    • 로 전환하세요. 탐지(Detect) 섹션:

    • 로 전환하세요. 알림 생성(Create Alert) 섹션에서 알림 생성(Create Alert) ON/OFF 토글을 설정하세요. 이는 일치 항목이 있을 때 알림(alert) 이 생성되어야 하는지, 아니면 단지 신호(Signal)만 생성되어야 하는지를 나타냅니다. 이 토글을 ON:

      • 로 설정하면심각도(Severity) : 이 탐지로 트리거된 알림에 대한 심각도 수준을 선택하세요.

      • 로 전환하세요. 선택적 필드(Optional Fields) 섹션에서 다음 필드에 대해 선택적으로 값을 제공하세요:

        • 설명(Description): 규칙에 대한 추가 컨텍스트를 입력하세요.

        • 런북(Runbook): 이 규칙과 관련된 절차 및 운영 방법을 입력하세요.

        • 참고(Reference): 이 규칙과 관련된 추가 정보를 위한 외부 링크를 입력하세요.

        • 대상 재정의(Destination Overrides): 심각도와 상관없이 이 탐지에 대한 알림을 받을 대상을 선택하세요. 대상은 규칙 함수 내에서 동적으로 설정될 수도 있다는 점에 유의하세요. 라우팅 우선순위에 대해 자세히 알아보려면 라우팅 순서 우선순위(Routing Order Precedence) 를 참조하세요.

        • 중복 제거 기간(Deduplication Period)이벤트 임계값(Events Threshold): 규칙 일치에 대한 중복 제거 기간과 임계값을 입력하세요. 중복 제거 작동 방식에 대해 알아보려면 중복 제거(Deduplication).

        • 요약 속성(Summary Attributes): 이 탐지로 트리거된 알림에 표시할 속성을 입력하세요.

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

        • 로 전환하세요. 프레임워크 매핑(Framework Mapping) 섹션:

          1. 를 클릭하세요 새로 추가(Add New) 를 클릭하여 보고서를 입력하세요.

          2. 다음 필드에 값을 제공하세요:

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

            • 보고서 값(Report Values): 해당 보고서에 대한 값을 입력하세요.

    • 로 전환하세요. 테스트(Test) 섹션:

  5. 오른쪽 상단 모서리에서 저장(Save).

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

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

로컬에서 탐지를 작성하는 경우(Panther 콘솔 대신), 로컬 탐지 파일을 GitHub 또는 GitLab과 같은 버전 관리 시스템에서 관리하는 것을 권장합니다.

맞춤 탐지 콘텐츠를 시작할 때는 공개 포크(public fork)arrow-up-right 또는 비공개 복제 리포지토리(private cloned repo)arrow-up-right 를 Panther의 오픈소스 panther-analysis 리포지토리arrow-up-right.

에서 생성하는 것을 권장합니다.

폴더 설정(Folder setup) 규칙을 폴더로 그룹화하는 경우 각 폴더 이름에는 rules

를 포함해야 업로드 시(콘솔의 PAT 또는 대량 업로더 사용) 검색됩니다. 규칙을 로그/리소스 유형에 따라 폴더로 그룹화하는 것을 권장합니다. 예: suricata_rules 또는aws_s3_policies . 참조로arrow-up-right panther-analysis

리포를 사용할 수 있습니다.

파일 설정(File setup)

  • 각 규칙 및 예약 규칙은 다음으로 구성됩니다: Python 파일(확장자가 .py

  • 인 파일)로 탐지 로직을 포함합니다. YAML 명세 파일(확장자가 .yml

    • 인 파일)로 탐지의 메타데이터 속성을 포함합니다.

관례상 이 파일은 Python 파일과 동일한 이름을 부여합니다. 규칙은 의심스러운 동작을 탐지하는 Python 함수입니다. True

  1. 를 반환하면 의심스러운 활동으로 간주되어 알림이 트리거됩니다. 규칙을 작성하고 원하는 폴더에:

    my_new_rule.py  
      로 저장하세요.
  2. def rule(event):

        return 'prod' in event.get('hostName')
    아래 템플릿을 사용하여 메타데이터 파일을 생성하세요:
    AnalysisType: rule
    DedupPeriodMinutes: 60 # 1시간
    DisplayName: 예제 규칙 - 명세 형식 확인
    Enabled: true
    Filename: 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: >

먼저 누가 이 명세 형식을 작성했는지 찾은 다음, 피드백을 전달하여 알리세요. Reference: https://www.a-clickable-link-to-more-info.com 이 규칙이 업로드되면 Panther 콘솔에서 일반적으로 입력하는 각 필드가 자동으로 채워집니다. 전체 필수 및 선택 필드 목록은

규칙 명세 참조(Rule specification reference)

를 참조하세요.

chevron-rightPython에서 예약 규칙 생성 방법hashtag
  1. Panther 콘솔의 왼쪽 탐색 표시줄에서 탐지(Detections).

  2. 를 클릭하세요 새로 만들기(Create New).

  3. 에서 Panther 콘솔과 CLI 워크플로 모두에서 Python 예약 규칙을 작성할 수 있습니다. 타일에서 시작(Start).

  4. 콘솔에서 Python으로 예약 규칙 생성하기

    • 이름(Name)예약 규칙(Scheduled Rule)

    • ID (선택 사항): 만들기 페이지에서 예약 규칙을 구성하세요:

    • 오른쪽 상단 모서리에서 사용(Enabled) 토글은 기본적으로 ON : 예약 규칙에 대한 설명적인 이름을 입력하세요. OFF.

    • 로 전환하세요. 펜 아이콘을 클릭하고 예약 규칙에 대한 고유한 ID를 입력하세요. 섹션:

    • 로 전환하세요. 탐지(Detect) 섹션:

    • 로 전환하세요. 알림 생성(Create Alert) 섹션에서 알림 생성(Create Alert) ON/OFF 토글을 설정하세요. 이는 일치 항목이 있을 때 알림(alert) 이 생성되어야 하는지, 아니면 단지 신호(Signal)만 생성되어야 하는지를 나타냅니다. 이 토글을 ON:

      • 로 설정하면심각도(Severity) : 이 탐지로 트리거된 알림에 대한 심각도 수준을 선택하세요.

      • 로 전환하세요. 선택적 필드(Optional Fields) 섹션에서 다음 필드에 대해 선택적으로 값을 제공하세요:

        • 설명(Description): 규칙에 대한 추가 컨텍스트를 입력하세요.

        • 런북(Runbook): 이 규칙과 관련된 절차 및 운영 방법을 입력하세요.

        • 참고(Reference): 이 규칙과 관련된 추가 정보를 위한 외부 링크를 입력하세요.

        • 대상 재정의(Destination Overrides): 심각도와 상관없이 이 탐지에 대한 알림을 받을 대상을 선택하세요. 대상은 규칙 함수 내에서 동적으로 설정될 수도 있다는 점에 유의하세요. 라우팅 우선순위에 대해 자세히 알아보려면 라우팅 순서 우선순위(Routing Order Precedence) 를 참조하세요.

        • 중복 제거 기간(Deduplication Period)이벤트 임계값(Events Threshold): 규칙 일치에 대한 중복 제거 기간과 임계값을 입력하세요. 중복 제거 작동 방식에 대해 알아보려면 중복 제거(Deduplication).

        • 요약 속성(Summary Attributes): 이 탐지로 트리거된 알림에 표시할 속성을 입력하세요.

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

        • 로 전환하세요. 프레임워크 매핑(Framework Mapping) 섹션:

          1. 를 클릭하세요 새로 추가(Add New) 를 클릭하여 보고서를 입력하세요.

          2. 다음 필드에 값을 제공하세요:

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

            • 보고서 값(Report Values): 해당 보고서에 대한 값을 입력하세요.

    • 로 전환하세요. 테스트(Test) 섹션:

  5. 오른쪽 상단 모서리에서 저장(Save).

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

chevron-right를 클릭하면 예약 규칙이 활성화됩니다. 연관된hashtag

로컬에서 탐지를 작성하는 경우(Panther 콘솔 대신), 로컬 탐지 파일을 GitHub 또는 GitLab과 같은 버전 관리 시스템에서 관리하는 것을 권장합니다.

맞춤 탐지 콘텐츠를 시작할 때는 공개 포크(public fork)arrow-up-right 또는 비공개 복제 리포지토리(private cloned repo)arrow-up-right 를 Panther의 오픈소스 panther-analysis 리포지토리arrow-up-right.

에서 생성하는 것을 권장합니다.

에서 반환된 SQL(쿼리에서 정의된 간격에 따라)이 예약 규칙을 통해 실행됩니다(즉, 행이 반환되는 경우). 규칙을 폴더로 그룹화하는 경우 각 폴더 이름에는 rules

를 포함해야 업로드 시(콘솔의 PAT 또는 대량 업로더 사용) 검색됩니다. 규칙을 로그/리소스 유형에 따라 폴더로 그룹화하는 것을 권장합니다. 예: suricata_rules 또는aws_s3_policies . 참조로arrow-up-right panther-analysis

리포를 사용할 수 있습니다.

CLI 워크플로에서 Python으로 예약 규칙 생성하기

  • 각 규칙 및 예약 규칙은 다음으로 구성됩니다: Python 파일(확장자가 .py

  • 인 파일)로 탐지 로직을 포함합니다. YAML 명세 파일(확장자가 .yml

    • 인 파일)로 탐지의 메타데이터 속성을 포함합니다.

규칙을 폴더로 그룹화하는 경우 각 폴더 이름에는 문자열 를 포함해야 합니다. 각 예약 규칙은 다음으로 구성됩니다: 규칙은 의심스러운 동작을 탐지하는 Python 함수입니다. True

  1. 예약 규칙은 예약 검색(scheduled search):

  2. RateMinutes: 1 규칙을 작성하고 원하는 폴더에:

  3. def rule(_): # 참고: 여기에 추가 로직을 추가할 수 있습니다:

Log: "JSON": "string" 이 규칙이 업로드되면 Panther 콘솔에서 일반적으로 입력하는 각 필드가 자동으로 채워집니다. 전체 필수 및 선택 필드 목록은

이 예약 규칙이 업로드되면 각 파일은 예약 쿼리를 규칙과 연결하고 Panther 콘솔에서 일반적으로 입력하는 필드를 자동으로 채웁니다. 자세한 내용은

Python으로 정책(policy) 생성 방법

정책을 작성하는 방법에 대해 알아보려면,

정책에 대한 정책 작성 방법(How to write a policy instructions on Policies)
을 참조하세요.
  • Python 탐지 구문(Python detection syntax)

  • Python 파일에는 다음이 포함될 수 있습니다:

  • def runbook(event):

  • def description(event):

  • RuleID: # 또는 PolicyId:

OutputIds:

Reference: Runbook: SummaryAttributes: 기본 Python 규칙 구조(Basic Python rule structure).

오직
rule()

return False Filename: rule.pyarrow-up-right.

RuleID: my.rule

- Some.Schema RuleID: my.rule Severity: INFO 추가 템플릿은.

GitHub의 panther-analysis 리포를 참조하세요

InlineFilters Python 규칙에서.

를 사용하는 방법에 대해 자세히 알아보세요. 인라인 필터로 탐지 수정(Modifying Detections with Inline Filters) Python 탐지의 알림 함수(Alert functions in Python detections) Panther의 탐지 보조 함수는 분석 로직, 생성된 알림 제목, 이벤트 그룹화, 알림 라우팅 및 메타데이터 재정의를 제어하는 Python 함수입니다. 규칙은 사용자 지정 가능하며 표준 Python 라이브러리 또는 글로벌 헬퍼(global helpers)

에서 가져올 수 있습니다. 아래의 각 함수는 규칙의 경우 단일 인수인event (규칙) 또는 resource

(정책)을 사용합니다. 고급 사용자는 아래에 정의된 함수 외부에 함수, 변수 또는 클래스를 정의할 수 있습니다.

만약
설명(Description)
알림 중복 제거(alert deduplication)
를 사용 중이라면, 이 탐지와 일치하는 첫 번째

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

알림 함수(Alert function) 로 설정하면 기본 값(Default value)


반환 값(Return value) 로 설정하면 severity

알림의 긴급성 수준, YAML에서:, 키(key), 콘솔에서:,필드(field)INFO LOW

HIGH

알림 함수(Alert function) CRITICAL > , 또는 suricata_rules DEFAULT


반환 값(Return value) 이름(Name) title ID severity

생성된 알림 제목

RuleID

PolicyID 필드 > > CRITICAL > , 또는 suricata_rules DEFAULT


반환 값(Return value) 필드 > > 이름(Name) title ID severity

생성된 알림 제목

dedup

관련된 이벤트를 그룹화하기 위한 문자열로, 최대 1000자까지 허용됩니다.

title() Panther AI 알림 분류(Panther AI alert triage) 가 이를 고려하기 때문입니다.

알림 함수(Alert function) 런북(Runbook) 기본 값(Default value)


반환 값(Return value) 런북(Runbook) severity

생성된 알림 제목

알림 대상에 전달할 추가 컨텍스트

알림 함수(Alert function) 설명(Description) 기본 값(Default value)


반환 값(Return value) 설명(Description) severity

생성된 알림 제목

runbook

알림 함수(Alert function) 참고(Reference) 기본 값(Default value)


반환 값(Return value) 참고(Reference) severity

생성된 알림 제목

description

알림 함수(Alert function) 규칙이 존재하는 이유에 대한 설명 기본 값(Default value)


반환 값(Return value) reference severity

규칙에 대한 내부 문서나 온라인 자료에 대한 참조 URL

이 알림 함수들의 매개변수로 사용됩니다.

destinations 알림의 긴급성 수준, YAML에서:, 키(key), 콘솔에서:, 필드(field)INFO LOW알림을 전송할 대상의 ID들. LOW OutputIds

대상 재정의(Destination Overrides) List[대상 이름/ID] suricata_rules 일부 시나리오에서는 알림의 심각도 수준을 올리거나 내릴 필요가 있을 수 있습니다. 알림의 심각도 수준은에 매핑될 수 있습니다. 반환값으로

을 반환하면 정적으로 정의된 규칙 심각도로 되돌아갑니다. 콘솔에서: 심각도 문자열은 대소문자를 구분하지 않으므로 예를 들어 알림의 긴급성 수준 Critical

DedupPeriodMinutes: 심각도 경보가 생성되고—그렇지 않으면arrow-up-right

수준의 경보가 생성됩니다: LOW:

MEDIUM

return "HIGH" 필드 > return "INFO"

템플릿 규칙(Template Rule)

사용 예(Example using) return "DEFAULT".

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

DedupPeriodMinutes: 심각도 경보가 생성되고—그렇지 않으면arrow-up-right

DisplayName

title_str = ( DisplayName f"{log_type}: User [{event.udm('actor_user')}] has exceeded the failed logins threshold"

) return "DEFAULT".

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

DedupPeriodMinutes: 함수는 중복 제거 문자열을 정의하는 한 방법입니다. 이 문자열은 1000자로 제한됩니다.arrow-up-right

알림이 생성된 후 따라야 할 지침 목록입니다. 설명적인 런북을 제공하는 것이 권장됩니다, 왜냐하면

return "HIGH" 중복 제거에 대해 자세히 알아보려면 user_identity = event.get("userIdentity", {}) if user_identity.get("type") == "AssumedRole": return helper_strip_role_session_id(user_identity.get("arn", "")) return user_identity.get("arn") 시나리오 1 안에 경고 라우팅 시나리오).

return "HIGH" 중복 제거에 대해 자세히 알아보려면 함수는 하나 이상의 알림 대상 이름 또는 UUID 목록을 반환해야 합니다. 함수가 반환한 목록이 비어 있으면 중복 제거에 대해 자세히 알아보려면 함수가 비어있으면 ([]), 경고는 어떤 대상으로도 라우팅되지 않습니다.

예를 들어, 아래 규칙은 여러 로그 유형과 연결되어 있습니다. 로그 유형이 AWS.CloudTrail, 중복 제거에 대해 자세히 알아보려면 이면 경고를 slack-security-alerts 대상으로 라우팅합니다. 로그 유형이 AWS.CloudTrail이(가) 아니면 외부 대상으로 전송되는 경고가 없으며—다음으로 표시됩니다. return [].

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

문자열(String)

이 함수는 탐지에서 사용자 이름, IP 주소 또는 성공/실패와 같은 추가 컨텍스트로 이벤트 세부정보를 알림 대상에 전달하도록 허용합니다.

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

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

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

Python/YAML에서:

return "HIGH" Python/YAML에서: 함수 출력은 이 탐지로 생성된 경고를 분류하기 위한 실행 가능한 조사 단계들을 제공해야 합니다.

When Panther AI triages an alert, it will read and autonomously execute a runbook. Learn more about how to write an effective runbook on 알림 런북(Alert Runbooks).

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

Dict[String: Any]alert_context

return "HIGH" Dict[String: Any]alert_context 함수는 경고가 트리거된 이유와 관련 문제를 해결하는 방법에 대한 추가 컨텍스트를 제공할 수 있습니다.

아래 예시는 경고의 Dict[String: Any] 필드 내에 동적으로 링크를 제공하는 방법입니다:

이벤트 객체 함수

Python 탐지에서, Runbook: 함수와 모든 동적 경고 함수들은 하나의 인수: 인라인 필터로 탐지 수정(Modifying Detections with Inline Filters) 객체를 받습니다. 이 이벤트 객체에는 이벤트 값을 간단히 추출할 수 있는 내장 함수들이 있습니다.

get()

사용 get() 를 사용하여 최상위 이벤트 필드에 접근하십시오. 키를 찾을 수 없는 경우 반환될 기본값을 제공할 수 있습니다.

또한 최상위 필드에 접근하는 방법으로 deep_get()deep_walk()를 사용할 수도 있습니다. 자세한 내용은 아래의 최상위 필드 안전하게 접근하기 항목을 참조하십시오.

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

deep_get()

사용 deep_get() 는 Python 딕셔너리 안에 중첩된 키를 반환하기 위해 사용합니다.

검색하려는 값이 리스트 내에 있는 경우에는 deep_walk() 대신

circle-info

이 함수를 사용하세요. 이 함수는전역 헬퍼로도 제공되지만

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

편의를 위해 이 이벤트 객체 함수를 사용하는 것이 권장됩니다.

deep_walk()

사용 deep_walk() ) -> Union[Optional[Any], Optional[List[Any]]]:

circle-info

이 함수를 사용하세요. 이 함수는전역 헬퍼로도 제공되지만

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

return "first" in event.deep_walk("object", "nested", "list", "key", default=[])

return "HIGH" return "first" in event.deep_walk("object", "nested", "list", "key", default=[]) def lookup(self, lookup_table_name: str, lookup_key: str) -> Any: 함수는 감지에서arrow-up-right사용자 정의 조회 테이블(Custom Lookup Tables) Panther가 관리하는 보강 제공자(Enrichment providers) return "first" in event.deep_walk("object", "nested", "list", "key", default=[]) 로부터 동적으로 데이터를 액세스할 수 있게 해줍니다. 이 return "first" in event.deep_walk("object", "nested", "list", "key", default=[]) 함수는 들어오는 로그가 조회 테이블의 기본 키 열에 정확히 일치하는 값을 포함하지 않을 때 유용할 수 있습니다. Python을 사용해 조회 키를 전달하기 전에 이벤트 값을 수정하여

return "first" in event.deep_walk("object", "nested", "list", "key", default=[]) 보강 데이터를 가져올 수 있습니다.

  • 는 두 개의 인수를 받습니다:

    • 조회 테이블의 이름 return "first" in event.deep_walk("object", "nested", "list", "key", default=[]) lookup_table_name에 전달되는 조회 테이블 이름은 Panther 콘솔의 suricata_rules 보강 제공자(Enrichment Providers) 조회 테이블(Lookup Tables) 페이지에 표시되는 그대로여야 합니다. 이 이름은 검색 쿼리에 표시되는 방식과 구문적으로 다를 수 있습니다. 예를 들어, My-Custom-LUT 대신.

  • my_custom_lut

조회 테이블의 기본 키 제공된 키에 대해 조회 테이블에서 일치 항목이 발견되면 전체 조회 테이블 행이 Python 딕셔너리로 반환됩니다. 일치 항목이 없으면 None

circle-info

이 반환됩니다. return "first" in event.deep_walk("object", "nested", "list", "key", default=[])함수는 이벤트 필드의 값이 선택기(Selector)로 지정된 값과 조회 테이블의 기본 키 열 값과 정확히 일치할 때 발생하는 "자동" 이벤트 보강과는 다릅니다. 그 경우 조회 테이블 데이터는 이벤트의 p_enrichment 필드에 추가됩니다. 자세한 내용은.

로그와 조회 테이블 간의 데이터 매칭 방식은? (Custom Lookup Tables) 항목을 참조하세요 deep_walk() 대신

수준의 경보가 생성됩니다: return "first" in event.deep_walk("object", "nested", "list", "key", default=[]):

if (lookup_data and lookup_data.get("role") != "admin") or lookup_data is None: return "first" in event.deep_walk("object", "nested", "list", "key", default=[])

When lookup를 사용하는 탐지의 단위 테스트 단위 테스트(unit tests) return "first" in event.deep_walk("object", "nested", "list", "key", default=[]) 가 실행될 때, 는 실시간 데이터를 가져오지 않습니다. lookup 기능을 에뮬레이트하려면 각 단위 테스트의 이벤트 페이로드에 _mocked_lookup_data_ 필드를 추가하여 조회 테이블 데이터를 모킹하세요. 당신은 보강 테스트 데이터 버튼 또는 CLI 명령 return "first" in event.deep_walk("object", "nested", "list", "key", default=[]).

는 실시간 데이터를 가져오지 않습니다. lookup 기능을 에뮬레이트하려면 각 단위 테스트의 이벤트 페이로드에 을(를) 사용하여

"[email protected]": {"id": "[email protected]", "role": "guest"} 는 실시간 데이터를 가져오지 않습니다. lookup 기능을 에뮬레이트하려면 각 단위 테스트의 이벤트 페이로드에 단위 테스트에서 return "first" in event.deep_walk("object", "nested", "list", "key", default=[]) 필드를 지정하지 않으면, 호출 시.

None/null

return "HIGH" None/null udm() def udm(self, *key: str, default: Any = None) -> Any:함수는 주로

데이터 모델(Data Model) None/null 에 접근하기 위해 설계되었지만 이벤트 필드에 접근하는 데에도 사용할 수 있습니다.

  1. 다음은 def udm(self, *key: str, default: Any = None) -> Any: 함수가 작동하는 방식입니다: None/null함수는 먼저 전달된 값에 대해

    • 키 매핑이 정의되어 있는지 확인합니다. def udm(self, *key: str, default: Any = None) -> Any: 만약 그렇다면, 데이터 모델의 값이 반환됩니다. None/null만약 키가 전달된 값에 대해 정의되어 있으면, 함수는 해당 값을 반환하고 아래의 2단계로 진행하지 않습니다. 이는 평가되는 이벤트에 데이터 모델 매핑에 정의된 키 경로가 포함되어 있지 않더라도 적용됩니다—이 경우, None

  2. null def udm(self, *key: str, default: Any = None) -> Any: 이 반환됩니다. None/null전달된 값에 대해

    • 가 정의되어 있지 않으면, 함수는 해당 이름을 가진 이벤트 필드가 있는지 확인합니다. 있다면 그 값을 반환합니다. None/null 이 경우, deep_get().

circle-info

는 중첩된 필드를 포함한 모든 이벤트 필드를 검사합니다. 그 동작은 None/null 와 유사합니다. def udm(self, *key: str, default: Any = None) -> Any: 위에 설명된 동작으로 인해, 동일한 키로 매핑이 정의되어 있는 경우에는

수준의 경보가 생성됩니다: None/null 값에: def udm(self, *key: str, default: Any = None) -> Any: 데이터 모델 예시

Python 향상 제안서(PEP)

는 깔끔하고 효과적으로 Python 코드를 작성하고 스타일링하는 방법에 대한 자료를 제공합니다. 예를 들어, autopep8arrow-up-right 을 사용하여 작성한 탐지들이 일관된 스타일을 따르도록 자동으로 보장할 수 있습니다. 사용 가능한 Python 라이브러리arrow-up-right 다음 Python 라이브러리들은 Panther에서 사용 가능하며,

boto3

외에도 제공됩니다. 이는 AWS Lambda에서 제공됩니다. 패키지arrow-up-right:

버전

라이선스

설명(Description)

jsonpath-ng

JSONPath 구현

1.5.2

Apache v2

policyuniverse

AWS ARN 및 정책 파싱

1.3.3.20210223

requests

policyuniverse

간편한 HTTP 요청

2.23.0

Python 탐지 작성 모범 사례

policyuniverse

탐지 테스트 작성하기

새 탐지를 활성화하기 전에,

테스트를 작성하는 것이 권장됩니다 —어떤 시나리오에서 경고가 생성되거나 생성되지 않아야 하는지를 정의하는 테스트입니다. 모범 사례로는 신뢰성을 높이기 위해 적어도 하나의 긍정 테스트와 하나의 부정 테스트를 포함하는 것입니다. 이벤트 필드 대소문자

이벤트 필드에 대한 조회는 대소문자를 구분하지 않습니다.

event.get("Event_Type") event.get("event_type") suricata_rules 는 동일한 결과를 반환합니다. 최상위 필드와 중첩된 필드 이해하기

최상위 필드는 중첩된 데이터 구조에서 부모 필드를 나타냅니다. 예를 들어, 레코드에

user 라는 필드가 있고 그 아래에 ip_address 와 같은 다른 필드들이 있을 수 있습니다. 이 경우,는 최상위 필드이고, 라는 필드가 있고 그 아래에 는 그 아래의 중첩된 필드입니다. 와 같은 다른 필드들이 있을 수 있습니다. 이 경우, 중첩은 여러 레이어 깊이로 발생할 수 있으므로 스키마 구조를 이해하고 탐지를 위해 특정 필드에 접근하는 방법을 아는 것이 중요합니다.

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

기본 규칙(Basic Rules)은 이벤트의 필드 값을 비교하며, 오류를 방지하는 모범 사례로는 Python의 내장

함수를 활용하는 것입니다. get() 아래 예시는

를 활용하기 때문에 모범 사례입니다. 이것은 필드를 찾고, 필드가 없으면 오류 대신 get() 아래 예시는 get() 를 반환합니다. 이는 탐지가 제공된 키에 대해 조회 테이블에서 일치 항목이 발견되면 전체 조회 테이블 행이 Python 딕셔너리로 반환됩니다. 일치 항목이 없으면 False 를 반환하게 합니다..

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

circle-exclamation

전역 헬퍼 함수 사용하기

많은 탐지를 작성하면 패턴과 반복되는 코드가 나타납니다. 이는 전역 헬퍼 함수(Global Helper functions)을(를) 사용하는 좋은 사례입니다. 전역 헬퍼는 모든 탐지에서 이 로직을 중앙화된 위치에 둘 수 있게 합니다.

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

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

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

AWS CloudTrail 로그는 콘솔에 접근하는 사용자의 유형(type) 을 userIdentity 아래에 중첩합니다. userIdentity. 다음은 JSON CloudTrail 루트 활동 로그의 스니펫입니다:

값을 확인하는 방법을 아래 두 형태로 안전하게 확인하세요 유형(type) deep_get() 이벤트 객체 함수 deep_get():

예를 들어, Box 기술 지원에 대한 액세스를 부여하는 동작을 탐지하려면, 아래 Python 코드는

event_type

이(가) ACCESS_GRANTED 와 일치하는 이벤트를 매칭하는 데 사용됩니다. return event.get("event_type") == "ACCESS_GRANTED":

이고 값이 다음과 같으면 ACCESS_GRANTED 규칙 함수는 return event.get("event_type") == "ACCESS_GRANTED" 를 반환하고 경고가 생성됩니다. 예약 쿼리 정수 값에 대한 필드 확인

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

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

# 'status_code'가 404이면 True 반환

DedupPeriodMinutes:

데이터 모델(Data Models)

은 모든 로그 유형에 걸쳐 통합된 필드 집합을 구성하는 방법을 제공합니다. 기본적으로 Panther는 여러 로그 유형에 대해 내장된 데이터 모델을 제공합니다. 사용자 정의 데이터 모델은 Panther 콘솔 또는 Panther Analysis Tool 을 통해 추가할 수 있습니다.arrow-up-right.

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

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

참고:

여러 조건 사용하기

return "HIGH" keyword는 논리 연산자이며 조건문을 결합하는 데 사용됩니다. 이벤트의 여러 필드를 일치시키려면 키워드를 사용해야 하는 경우가 많습니다. 를 사용할 때는 모든 문장이 참이어야 합니다: "string_a" == "this""string_b" == "that"

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

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

return "HIGH" suricata_rules keyword는 논리 연산자이며 조건문을 결합하는 데 사용됩니다. suricata_rules를 사용할 때는 어떤 문장이라도 참일 수 있습니다: "string_a" == "this"`` ``suricata_rules`` ``"string_b" == "that"

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

이 예시는 필드가 포트 80 suricata_rules 또는 포트 22를 포함하는지 탐지합니다:

리스트에서 값 검색하기

IP 주소나 사용자 같은 값을 포함한 리스트와 이벤트 값을 비교하는 것은 Python에서 빠릅니다. 환경에 이미 알려진 동작에 대해 오탐을 줄이기 위해 이벤트 값이 리스트에 존재할 때 매칭되지 않도록 규칙 로직을 설정하는 것이 일반적입니다.

컬렉션에 이벤트 값이 포함되어 있는지 확인할 때는 Python의 set 사용을 권장합니다—셋은 리스트나 튜플보다 성능(예: 메모리 효율) 측면에서 우수합니다. 리스트와 튜플은 포함 여부를 확인하려면 컬렉션의 각 항목을 순회해야 합니다.

비교 대상이 정적(고정)이라면, Runbook: 함수 내부가 아니라 전역 수준에 정의하는 것이 좋습니다. 전역 변수는 Lambda 호출당 한 번만 초기화됩니다. 단일 Lambda 호출이 여러 이벤트를 처리할 수 있기 때문에 전역 변수가 매번 Runbook: 호출될 때마다 초기화하는 것보다 더 효율적입니다.

함수는 선택 사항이지만, 알림에 추가 컨텍스트를 제공하기 위해 포함하는 것이 권장됩니다.

아래 예에서는 Panther 헬퍼 pattern_match_list:

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

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

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

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

아래 예에서는 Panther 헬퍼 pattern_match:

참고:

기본 Python 규칙 구조(Basic Python rule structure)

필수 필드는 굵게(bold).

필드 이름

설명(Description)

예상 값

AnalysisType

이 분석이 rule, scheduled_rule, policy 또는 global 중 무엇인지를 나타냅니다

Rules: 규칙 Scheduled Rules: scheduled_rule

사용(Enabled)

이 규칙이 활성화되어 있는지 여부

Boolean

FileName

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

생성된 알림 제목

, 또는

규칙의 고유 식별자

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

LogTypes

이 규칙을 적용할 로그 목록

문자열 목록

로 설정하면

이 규칙의 심각도

다음 문자열 중 하나: Info, Low, Medium, HighINFO List[대상 이름/ID]

ScheduledQueries (Scheduled Rules에만 있는 필드)

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

문자열 목록

경고생성

규칙이 생성해야 하는지 여부 규칙 일치/경고 일치 시 (기본값 true)

Boolean

설명(Description)

규칙에 대한 간략한 설명

생성된 알림 제목

중복방지기간분

경고의 유사한 이벤트들이 함께 그룹화되는 기간(분 단위)

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

CRITICAL

UI와 경고에 표시할 친숙한 이름. 만약 , 또는 이 필드가 설정되지 않으면 표시됩니다.

생성된 알림 제목

규칙이 존재하는 이유에 대한 설명

정적 대상 재정의. 이는 심각도 기반 기본 라우팅보다 우선하여 이 규칙의 경고가 어떻게 라우팅될지 결정하는 데 사용됩니다.

문자열 목록

참고(Reference)

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

생성된 알림 제목

보고서

이 규칙이 해당 프레임워크에 대해 다루는 값들로의 프레임워크 또는 보고서 이름 매핑

문자열에서 문자열 목록으로의 매핑

런북(Runbook)

분석가나 Panther AI가 관련 경고를 분류하기 위해 취할 수 있는 조치들.

생성된 알림 제목

요약속성

경고가 요약해야 하는 필드 목록.

문자열 목록

임계값

경고가 전송되기 전에 이 규칙을 트리거하는 데 필요한 이벤트 수.

정수

태그

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

문자열 목록

테스트

이 규칙에 대한 단위 테스트.

맵 목록

작성자

이 탐지의 작성자. Panther 사용자 UUID, 이메일 주소 또는 임의의 텍스트 값으로 설정할 수 있습니다. 자세한 내용은 return "HIGH" 작성자 탐지 필드.

생성된 알림 제목

파이썬 정책 명세 참조

필수 필드는 굵게(bold).

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

필드 이름

설명(Description)

예상 값

AnalysisType

이 명세가 정책을 정의하는지 또는 규칙을 정의하는지 여부를 나타냅니다

정책

사용(Enabled)

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

Boolean

FileName

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

생성된 알림 제목

DEFAULT

정책의 고유 식별자

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

리소스유형

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

문자열 목록

로 설정하면

이 정책의 심각도

다음 문자열 중 하나: Info, Low, Medium, HighINFO List[대상 이름/ID]

설명(Description)

정책에 대한 간략한 설명

생성된 알림 제목

CRITICAL

UI와 경고에 표시할 이름. 만약 DEFAULT 이 필드가 설정되지 않으면 표시됩니다.

생성된 알림 제목

참고(Reference)

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

생성된 알림 제목

보고서

이 정책이 해당 프레임워크에 대해 다루는 값들로의 프레임워크 또는 보고서 이름 매핑

문자열에서 문자열 목록으로의 매핑

런북(Runbook)

분석가나 Panther AI가 관련 경고를 분류하기 위해 취할 수 있는 조치들.

생성된 알림 제목

억제

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

문자열 목록

태그

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

문자열 목록

테스트

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

맵 목록

작성자

이 탐지의 작성자. Panther 사용자 UUID, 이메일 주소 또는 임의의 텍스트 값으로 설정할 수 있습니다. 자세한 내용은 return "HIGH" 작성자 탐지 필드.

생성된 알림 제목

탐지 문제 해결

Panther 지식 기반을 방문하여 탐지에 관한 문서를 확인arrow-up-right 자주 묻는 질문에 답하고 일반적인 오류 및 문제를 해결하는 데 도움을 줍니다.

Last updated

Was this helpful?