PyPanther 탐지 등록, 테스트 및 업로드하기

개요

circle-exclamation
circle-info

PyPanther 탐지는 Panther 버전 1.108부터 클로즈드 베타입니다. 버그 리포트나 기능 요청이 있으면 Panther 지원팀에 공유하세요.

PyPanther 탐지는 registered 되기 전에 업로드됩니다 귀하의 Panther 인스턴스로. 또한 권장되는 것은 테스트 정의 를 PyPanther 탐지에 대해 작성하는 것입니다.

PyPanther 탐지 등록

PyPanther 규칙을 등록한다는 것은 이를 Panther 배포 패키지에 포함시키는 것을 의미합니다.

규칙을 등록하려면, register() 에 전달하세요 main.py 파일에서. pypanther 업로드 로그/리소스 유형별로 규칙을 폴더로 그룹화하는 것을 권장합니다(예: stdin 명령을 실행할 때, register() 에 전달된 규칙만 귀하의 Panther 인스턴스에 업로드되거나 테스트됩니다.

circle-exclamation

규칙을 두 번 이상 등록하는 것은 허용되지 않습니다. 이는 register() 에 전달되는 각 컬렉션이 고유한 규칙을 포함해야 함을 의미합니다.

circle-info

기본 규칙으로 사용되는 규칙을 상속 과 함께 등록할 필요는 없습니다. 단, 기본 규칙 자체를 귀하의 Panther 인스턴스에 업로드하고 싶지 않은 경우에 한합니다.

# 예시 main.py 파일

from pypanther import register, get_panther_rules

# 단일 규칙 등록 ("BoxNewLogin"이라는 클래스 형태로 정의된 규칙)
register(BoxNewLogin)

# 모든 Panther 관리 규칙 등록
register(get_panther_rules())

등록된 규칙 보기

  • 현재 구성된 리포지토리에 등록된 모든 규칙을 보려면 pypanther list rules CLI 명령을 실행하세요.

다음의 인스턴스 가져오기 Rule

를 사용할 수 있습니다. get_rules() 함수를 사용하여 등록하고자 하는 규칙들을 쉽게 가져올 수 있습니다. main.py. get_rules() 는 가져온 패키지(폴더)나 모듈(파일) 이름을 받아 해당 패키지나 모듈에서 pypanther Rule 클래스를 상속하는 모든 규칙을 반환합니다.

circle-info

함수로 가져온 규칙이 포함된 각 폴더는 get_rules() 를 포함해야 합니다. __init__.py 파일을 포함해야 합니다. 권장되는 리포지토리 구조에 대한 자세한 내용은 PyPanther Detections 스타일 가이드.

또는 get_rules():

규칙 등록 vs. 활성화

모든 규칙은 활성화됨 속성을 가지며, 이는 등록과는 다릅니다. 가능한 모든 결과는 아래 표를 참조하세요:

enabled = True
enabled = False

등록됨

Panther에 업로드되고 활성화됩니다. 테스트 중 단위 테스트가 실행됩니다.

Panther에 업로드되고 비활성화됩니다. 테스트 중 단위 테스트가 실행됩니다.

등록되지 않음

Panther에 업로드되지 않습니다. 이전에 업로드된 경우 삭제됩니다. 테스트 중 단위 테스트는 실행되지 않습니다.

Panther에 업로드되지 않습니다. 이전에 업로드된 경우 삭제됩니다. 테스트 중 단위 테스트는 실행되지 않습니다.

PyPanther 탐지 테스트

테스트 정의

클래스의 인스턴스를 생성하여 PyPanther 탐지에 대한 테스트를 정의하세요. pypanther 규칙_테스트 테스트는 규칙의 테스트 필드에 할당하여 규칙과 연관됩니다. 테스트는 규칙 내부에 직접 정의하거나 별도로 변수(로컬 또는 임포트된 것)에 설정할 수 있습니다.

규칙_테스트 인스턴스는 이름, 예상_결과, 및 로그를 설정해야 합니다. 각 테스트는 선택적으로 다음을 정의할 수도 있습니다:

  • 하나의 모의 필드, 이는 규칙_모의의 목록을 받습니다.

  • (When expected_result=True) 추가 필드로, expected_로 시작하는 필드들이 있으며, 이는 경보 함수arrow-up-right의 출력을 검증합니다. 예를 들면, 예상_심각도예상_제목.

    • 이러한 경보 함수 출력 검증 필드는 규칙_테스트인 테스트에서만 포함되어야 합니다, expected_result=True에서 expected_result=False 로 설정된 테스트에 포함하면 테스트가 실패합니다. 이는 탐지가 관례상 이 파일은 Python 파일과 동일한 이름을 부여합니다..

일 때만 경보 함수가 실행되기 때문입니다. 사용 가능한 필드의 전체 목록은 규칙_테스트 속성 참조.

예시: 테스트가 있는 규칙

이 규칙의 테스트 (규칙 클래스 위에 정의된)는 모의, 예상_제목, 예상_중복키, 및 예상_경고_컨텍스트.

chevron-right예시: 테스트가 있는 규칙hashtag

예시: 규칙 클래스 내부와 외부에 모두 정의된 엔터티를 모킹하기

다음을 사용할 수 있습니다 규칙_모의 규칙 클래스 내부나 외부에 정의된 변수와 메서드에 대한 모킹 값을 정의하려면

chevron-right예시: 규칙 클래스 내부의 변수와 함수를 모킹하기hashtag

아래 예시에서, INSIDE 변수와 내부의 메서드는 규칙 클래스 내부에 정의되어 있으며, MockTestRule에 정의되어 있고 규칙_모의의 목록을 받습니다.

chevron-right예시: 규칙 클래스 외부에 정의된 변수와 함수를 모킹하기hashtag

아래 예시에서, OUTSIDE 변수와 outside 메서드는 규칙 클래스 외부에 정의되어 있으며, OutsideMockTest에 정의되어 있고 규칙_모의의 목록을 받습니다.

테스트 실행

PyPanther 탐지에 대해 정의된 모든 테스트를 실행하려면 다음을 실행하세요:

테스트의 하위 집합만 실행하려면, stdin와 함께 필터 플래그를 사용하여 테스트를 실행할 탐지를 필터링하세요. 예: --id 로그/리소스 유형별로 규칙을 폴더로 그룹화하는 것을 권장합니다(예: --log-types 전체 필터 플래그 목록은 pypanther test --help.

circle-info

와 같이 반환할 수 있습니다(스타일 취향에 따라). stdin 명령을 실행하여 확인하세요:

  • 에 전달된 탐지에 대해서만 테스트합니다 register()

  • Panther 관리 규칙의 테스트는 건너뜁니다

규칙이 테스트에 실패하면 오류가 테스트된 규칙 이름 옆에 출력됩니다:

맞춤 헬퍼 함수 및 데이터 픽스처 테스트

와 같이 반환할 수 있습니다(스타일 취향에 따라). pypanther test 명령은 테스트 속성이 설정된 모든 PyPanther Detection 클래스를 테스트합니다. 이와 함께 OutputIds:경보 함수 출력을 이런 방식으로 테스트하는 것 외에도, 규칙에서 사용할 맞춤 헬퍼 함수를 만든 경우 이 헬퍼 함수들을 위한 대상화된 테스트를 작성하고 싶을 수 있습니다. 이를 위해서는 일반적인 Python 테스트 프레임워크 예: pytestarrow-up-right 로그/리소스 유형별로 규칙을 폴더로 그룹화하는 것을 권장합니다(예: unittestarrow-up-right.

circle-exclamation

예시: pytest를 사용하여 맞춤 함수를 테스트하기

AWS 계정 ID 목록을 파일에서 읽고 프로덕션 계정만 포함하도록 필터링하는 재사용 가능한 함수를 작성하고 싶다고 가정해 보세요. (이 함수는 이후 포함 또는 제외 필터에서 사용될 수 있습니다.) 이 함수는 다음과 같을 수 있습니다:

이 함수를 고려할 때, 데이터 픽스처 (AWS_ACCOUNTS) 자체와 함수 is_prod_aws_account()를 테스트하는 몇 가지 방법이 있습니다. 예를 들어:

  • 다음을 검증하려면: AWS_ACCOUNTS 데이터 픽스처:

    • 특정 행 수를 가짐

    • 특정 필수 필드를 가짐

  • 특정 계정 ID가 prod 목록에 포함되어 있는지(다른 것들은 포함되지 않음) 검증

이를 테스트하기 위해 pytest다음 함수들(모두 test_ 접두사를 가진)을 추가합니다:

이러한 테스트를 정의한 후, 커맨드 라인에서 pytest 을 실행하여 호출할 수 있습니다.

PyPanther 탐지를 Panther에 업로드하기

triangle-exclamation

$ pypanther upload registered명령은 스키마도 업로드합니다. 자세한 내용은

와 같이 반환할 수 있습니다(스타일 취향에 따라). 업로드 를 참조하세요. 사용할 때 인증해야 합니다.

circle-info

— 자세한 내용은 업로드CLI 명령 인증하기 를 참조하세요..

모든 업로드 옵션은 다음을 실행하여 확인할 수 있습니다 pypanther upload -h하지만 다음 옵션들이 특히 유용할 수 있습니다:

  • --verbose: 자세한 출력 생성 — 탐지별 테스트 목록(및 통과/실패 상태), 등록된 탐지 목록, 포함된 파일 목록 등을 포함합니다

  • --dry-run: 업로드하지 않고 다음 업로드에서 적용될 변경사항의 요약을 보여줍니다

  • --output {text, json}: 지정한 형식으로 출력을 출력합니다

    • text 는 기본값이지만, json 은 출력을 다른 워크플로로 옮기려는 경우 유용할 수 있습니다

chevron-right샘플 출력: pypanther upload --verbose --output jsonhashtag

이전에 업로드된 규칙이 이후에 register() 를 다시 호출할 때 업로드에 전달되지 않으면 귀하의 Panther 인스턴스에서 삭제됩니다.

동일한 id 를 가진 기존 v1 규칙의 RuleId 을(를) 가진 PyPanther 규칙을 업로드하면 덮어씁니다. 반대의 경우도 마찬가지입니다 — 즉, 동일한 RuleId 를 가진 기존 PyPanther 규칙의 id 을(를) 가진 PyPanther 규칙을 업로드하면 덮어씁니다.

업로드 샘플 로그에서 스키마를 유추하는 워크플로우

다음 제한 사항이 현재 PyPanther 탐지 중:

  • 최대 500개의 사용자 정의 규칙을 한 번에 업로드할 수 있습니다.

    • 이 제한은 Panther에서 관리하는 규칙(즉, get_panther_rules() 함수가 반환하는 규칙)을 포함하지 않습니다)

  • zip 파일의 전체 크기 pypanther 업로드를 위해 생성되는 파일은 10MB를 초과할 수 없습니다.

  • Python 파일만 업로드할 수 있습니다.

Last updated

Was this helpful?