# Panther Analysis Tool로 보강 제공자 관리하기

## 개요

[엔리치먼트](https://docs.panther.com/ko/enrichment) 소스(조회 테이블이라고도 함)는 들어오는 로그에 더 많은 컨텍스트를 추가할 수 있게 해줍니다. 다음을 위해 스키마와 매핑을 관리할 수 있습니다. [사용자 정의 엔리치먼트](https://docs.panther.com/ko/enrichment/custom) 및 특정 Panther 관리형 엔리치먼트는 [Panther 분석 도구(PAT)를 통해](https://docs.panther.com/ko/panther/detections-repo/pat).

이 가이드는 다음 절차를 안내합니다:

* pantherlog을 사용하여 사용자 정의 엔리치먼트 소스에 대한 사용자 정의 스키마를 생성하고 업로드하는 방법, [`pantherlog` 도구](https://docs.panther.com/ko/panther/pantherlog).
* 다음을 수정하기: `Selector` 및 `LogType` 엔리치먼트 소스의 YAML 구성 파일에서.
  * 로그 유형과 Selector는 [수동으로 설정할 수 있습니다](https://docs.panther.com/ko/enrichment/custom#option-1-manually-choose-log-types-and-selectors) 또는 [지표 필드에 의해 자동으로 매핑될 수 있습니다](https://docs.panther.com/ko/enrichment/custom#option-2-let-log-types-and-selectors-be-automatically-mapped-by-indicator-fields).
* PAT를 통해 엔리치먼트 소스의 YAML 구성 파일을 업로드합니다.
* Panther 콘솔에서 엔리치먼트를 테스트합니다.

{% hint style="info" %}

* 팀에서 CLI 워크플로를 사용하는 경우 콘솔의 Detection Pack을 통해 관리하는 대신 PAT와 CI/CD를 사용하여 엔리치먼트를 관리하는 것이 권장됩니다.
* Panther 콘솔에서 사용을 활성화한 후 PAT를 통해 엔리치먼트 테이블을 관리하기로 선택한 경우 먼저 Panther 콘솔에서 Detection Pack을 비활성화해야 합니다. Panther 콘솔과 PAT를 동시에 사용하여 엔리치먼트 소스를 관리하는 것은 지원되지 않습니다.
  {% endhint %}

{% hint style="warning" %}
이 가이드는 [사용자 정의 엔리치먼트](https://docs.panther.com/ko/enrichment#custom-enrichments) 및 [다음의 Panther 관리형 엔리치먼트 소스에 적용됩니다](https://docs.panther.com/ko/enrichment#additional-enrichment-sources).

["자체 API 키 사용" 로그 풀러](https://docs.panther.com/ko/enrichment#bring-your-own-api-key-log-pullers) 및 [Panther 로그 소스 풀러는](https://docs.panther.com/ko/enrichment#panther-log-source-pullers) PAT를 사용한 CLI 워크플로에서 활성화할 수 없습니다.
{% endhint %}

### 사용자 정의 엔리치먼트 vs Panther 관리형 엔리치먼트

* [사용자 정의 엔리치먼트](https://docs.panther.com/ko/enrichment/custom) 는 귀하가 관리합니다. 스키마를 생성하고 업로드한 다음 엔리치먼트 테이블의 YAML 구성 파일을 업로드해야 합니다.
* Panther 관리형 엔리치먼트 제공자는 Panther가 관리합니다. 그들의 스키마는 Panther가 정의하며, 필요에 따라 수정할 수 있는 YAML 구성 파일은 [panther-analysis 저장소](https://github.com/panther-labs/panther-analysis/blob/master/lookup_tables/) GitHub에서 찾을 수 있습니다.

## PAT로 사용자 정의 및 Panther 관리형 엔리치먼트를 관리하는 방법

{% tabs %}
{% tab title="사용자 정의 엔리치먼트" %}
**사전 요구사항**

* YAML 구성 파일. YAML 구성 파일은 직접 생성해야 합니다.
* 데이터 샘플(새 스키마를 생성해야 하는 경우) 또는 Panther에서 생성된 기존 YAML 스키마.

**1단계: 스키마 생성 및 업로드**

사용자 정의 엔리치먼트는 귀하가 생성하고 Panther에 업로드한 스키마와 연결되어야 합니다. 이미 Panther에 생성한 스키마가 있어 이를 사용자 정의 엔리치먼트에 연결하려면 이 단계는 건너뛸 수 있습니다.

1. 샘플 로그 데이터를 사용하여 스키마를 생성합니다.
   * 다음을 사용할 수 있습니다 `pantherlog` 샘플 데이터 세트에서 스키마를 추론하기 위해. 샘플 JSON 로그 파일에서 스키마를 생성하려면 `infer` 명령을 사용하세요:

     ```bash
     $ ./pantherlog infer sample_logs.jsonl > schema.yml
     ```
   * 추론된 스키마를 검토하고 Panther에 업로드하기 전에 필요한 조정을 반드시 수행하세요. 이 프로세스에 대한 자세한 내용은 [pantherlog 문서](https://docs.panther.com/ko/panther/pantherlog).
2. 스키마 업로드.
   * 스키마를 생성한 후 다음 지침에 따라 Panther에 업로드할 수 있습니다. [Panther 분석 도구로 로그 스키마 업로드하기](https://docs.panther.com/ko/data-onboarding/custom-log-types#uploading-log-schemas-with-the-panther-analysis-tool) 지침.

**2단계: YAML 구성 파일 생성**

* 사용자 정의 엔리치먼트의 경우 YAML 구성 파일을 처음부터 생성해야 합니다. 이 파일에 포함되어야 하는 키를 확인하려면 [조회 테이블 명세서(lookup table specification reference)](https://docs.panther.com/ko/enrichment/custom/lookup-table-specification-reference) 를 참조하세요.

**3단계: PAT를 통해 사용자 정의 엔리치먼트 업로드**

사용자 정의 엔리치먼트 구성 파일을 생성한 후 PAT를 사용하여 Panther에 업로드할 수 있습니다. [`업로드` 명령](https://docs.panther.com/ko/panther/detections-repo/pat-commands#upload-uploading-packages-to-panther-directly):

```bash
panther_analysis_tool upload
```

업로드가 이루어지려면 --api-token과 `--api-token` 및 `--api-host`를 각각 제공해야 합니다. 기타 옵션으로는 필터링, 최소 테스트 등 이 포함됩니다.

{% hint style="warning" %}
YAML 구성 파일을 업로드하기 전에 해당 스키마를 업로드했는지 확인하세요.
{% endhint %}

**4단계: 사용자 정의 엔리치먼트 테스트**

사용자 정의 엔리치먼트가 올바르게 설정되었는지 테스트하는 여러 방법이 있습니다.

**방법 1: Panther 콘솔 또는 CLI에서 테스트 데이터에 엔리치 적용**

{% tabs %}
{% tab title="콘솔" %}
Panther 콘솔의 디텍션 편집기에서 **테스트 데이터 엔리치(Enrich Test Data)** 를 클릭하여 사용자 정의 엔리치먼트가 올바르게 작동하는지 확인하세요. 이를 통해 단위 테스트 내에서 테스트 데이터를 입력하고 엔리치 결과를 확인할 수 있습니다.

{% hint style="warning" %}
가 작동하려면 단위 테스트에 **테스트 데이터 엔리치(Enrich Test Data)** p\_log\_type `이 올바른 로그 유형을 식별해야 합니다. 이는 Panther의 엔리치 논리의 기반이 됩니다.` 콘솔의 기본 동작입니다.
{% endhint %}
{% endtab %}

{% tab title="CLI" %}

* PAT의 `enrich-test-data` 명령을 사용하여 사용자 정의 엔리치먼트가 제대로 작동하는지 확인하세요. [자세한 내용은 `enrich-test-data` 여기](https://docs.panther.com/ko/panther/detections-repo/pat-commands#enrich-test-data-enriching-test-data-with-enrichment-content).
  {% endtab %}
  {% endtabs %}

**방법 2: `panther_signals` 데이터베이스 확인**

변경 사항이 적용되었는지 확인하려면 `panther_signals.public.correlation_signals` 데이터베이스/테이블에서 `p_enrichment` 필드를 확인하세요. 해당 필드에 예상되는 사용자 정의 엔리치먼트 세부 정보가 포함되어 있는지 확인하세요.

**방법 3: SQL 쿼리 사용**

또한 이벤트 로그와 엔리치먼트 테이블 간에 `LEFT JOIN` 을 수행할 수 있습니다. 쿼리에서 Selector가 정의되어 있는지 확인하세요. 이를 통해 로그의 데이터가 사용자 정의 엔리치먼트의 데이터와 올바르게 매칭되는지 확인할 수 있습니다.

예를 들어, 이 쿼리는 사용자 정의 Selector(구성 파일에 정의한 Selector와 동일해야 함)를 사용하여 이벤트 데이터를 사용자 정의 엔리치먼트와 매칭하려고 시도합니다:

```sql
SELECT *
FROM panther_logs.public.<log_type> AS e
LEFT JOIN panther_lookups.public.<lookup_table_name> AS lt
ON e.<field_path> = lt.<field_path>
WHERE e.p_occurs_since('1 day')
```

{% endtab %}

{% tab title="Panther 관리형 엔리치먼트" %}
**사전 요구사항**

* YAML 구성 파일. panther-analysis에 있는 Panther 제공 구성 파일을 사용할 수 있습니다. [Panther가 제공한 구성 파일을 panther-analysis에서 사용](https://github.com/panther-labs/panther-analysis/tree/master/lookup_tables).

**1단계: 필요한 대로 YAML 구성 파일 수정**

Panther 관리형 엔리치먼트를 활성화하는 경우 Panther가 제공하는 구성 파일을 수정하여 필요에 맞게 조정할 수 있습니다. [Panther가 제공함](https://github.com/panther-labs/panther-analysis/tree/master/lookup_tables) 귀하의 필요에 맞게.

* Panther 제공 YAML 구성 파일을 수정할 때는 엔리치먼트를 맞춤화하기 위해 항상 `AssociatedLogTypes` 키의 내용만 수정해야 합니다. `Selector`Refresh와 같은 다른 매개변수의 변경은 문제를 일으키는 것으로 알려져 있습니다. `Refresh` 간격

**예시**

{% hint style="warning" %}
참고: 이 로그 유형(`Cloudflare.Firewall`)과 Selector(`ClientIP`)가 이런 식으로 수동으로 설정되지 않았더라도, `Cloudflare.Firewall` 및 `p_any_ip_addresses` 는 자동 매핑에 의해 각각 로그 유형과 Selector로 추가되었을 것입니다, [지표 필드에 의한 자동 매핑](https://docs.panther.com/ko/enrichment/custom#option-2-let-log-types-and-selectors-be-automatically-mapped-by-indicator-fields).

그 이유는 `ClientIP` 은 지정된 `ip` 지표 필드로 `Cloudflare.Firewall` 스키마에 지정되어 있고 Tor 조회 테이블의 기본 키인 `ip`는 자체 데이터 스키마에서 `ip` 지표로 지정되어 있기 때문입니다, `Tor.ExitNode`.
{% endhint %}

이 예제에서 `tor_exit_nodes` 엔리치먼트는 새로운 `LogType` 및 `Selector`.

* 를 포함하도록 업데이트되고 있습니다.`PrimaryKey` 의 값은 `ip`.
* 입니다 `AssociatedLogTypes` 아래 예시는 기본적으로 포함된 한 예를 보여줍니다.

```yaml
LogTypeMap:
  PrimaryKey: ip
  AssociatedLogTypes:
    - LogType: AlphaSOC.Alert
      Selectors:
        - '$.event.srcIP'
```

여기에 `AssociatedLogTypes` 항목을 추가하여 `스키마의` 필드를 지원하도록 추가해 봅시다: `Cloudflare.Firewall` 스키마:

* 참고: `Selector` 값은 상위 필드이거나 중첩된 필드의 JSON 경로일 수 있습니다.

```yaml
LogTypeMap:
  PrimaryKey: ip
  AssociatedLogTypes:
    - LogType: AlphaSOC.Alert
      Selectors:
        - '$.event.srcIP'
    - LogType: Cloudflare.Firewall
      Selectors:
        - "ClientIP"
```

**2단계: PAT를 통해 엔리치먼트 업로드**

엔리치먼트 구성 파일을 수정한 후 PAT를 사용하여 Panther에 업로드할 수 있습니다. [`업로드` 명령](https://docs.panther.com/ko/panther/detections-repo/pat-commands#upload-uploading-packages-to-panther-directly):

```bash
panther_analysis_tool upload
```

업로드가 이루어지려면 --api-token과 `--api-token` 및 `--api-host`를 각각 제공해야 합니다. 기타 옵션으로는 필터링, 최소 테스트 등 이 포함됩니다.

**3단계: 엔리치먼트 테스트**

엔리치먼트가 올바르게 설정되었는지 테스트하는 몇 가지 방법이 있습니다.

**방법 1: Panther 콘솔 또는 CLI에서 테스트 데이터에 엔리치 적용**

{% tabs %}
{% tab title="콘솔" %}
Panther 콘솔의 디텍션 편집기에서 **테스트 데이터 엔리치(Enrich Test Data)** 단위 테스트 내에서 테스트 데이터를 입력하고 엔리치 결과를 확인할 수 있도록 엔리치가 올바르게 작동하는지 확인합니다.

{% hint style="warning" %}
가 작동하려면 단위 테스트에 **테스트 데이터 엔리치(Enrich Test Data)** p\_log\_type `이 올바른 로그 유형을 식별해야 합니다. 이는 Panther의 엔리치 논리의 기반이 됩니다.` 콘솔의 기본 동작입니다.
{% endhint %}
{% endtab %}

{% tab title="CLI" %}

* PAT의 `enrich-test-data` 명령을 사용하여 사용자 정의 엔리치먼트가 제대로 작동하는지 확인하세요. [자세한 내용은 `enrich-test-data` 여기](https://docs.panther.com/ko/panther/detections-repo/pat-commands#enrich-test-data-enriching-test-data-with-enrichment-content).
  {% endtab %}
  {% endtabs %}

**방법 2: `panther_signals` 데이터베이스 확인**

변경 사항이 적용되었는지 확인하려면 `panther_signals.public.correlation_signals` 데이터베이스/테이블에서 `p_enrichment` 를 사용하여 엔리치먼트가 제대로 작동하는지 확인하세요. 해당

**방법 3: SQL 쿼리 사용**

또한 이벤트 로그와 엔리치먼트 테이블 간에 `LEFT JOIN` 필드. 해당 필드에 예상되는 엔리치먼트 세부 정보가 포함되어 있는지 확인하세요.

이벤트 로그와 엔리치먼트 테이블 간에

```sql
SELECT *
FROM panther_logs.public.<log_type> AS e
LEFT JOIN panther_lookups.public.<lookup_table_name> AS lt
ON e.<field_path> = lt.<field_path>
WHERE e.p_occurs_since('1 day')
```

{% endtab %}

{% tab title="을 사용한 예: 쿼리에서 Selector가 정의되어 있는지 확인하세요. 이를 통해 로그의 데이터가 엔리치먼트 테이블의 데이터와 올바르게 매칭되는지 확인할 수 있습니다." %}
{% hint style="info" %}
예를 들어, 이 쿼리는 구성에 정의한 Selector와 동일해야 하는 사용자 정의 Selector를 사용하여 이벤트 데이터를 엔리치먼트 데이터와 매칭하려고 시도합니다:
{% endhint %}

**SQL 사용자 정의 엔리치먼트(베타)**

SQL 사용자 정의 엔리치먼트는 Panther 버전 1.120부터 오픈 베타로 제공되며 모든 고객이 사용할 수 있습니다. 버그 보고나 기능 요청은 Panther 지원팀에 공유해 주세요. `1단계: YAML 구성 파일 생성` 다음 필드가 있는 YAML 파일을 만듭니다: [Query](https://docs.panther.com/ko/enrichment/custom/lookup-table-specification-reference) 필드. 스키마는 쿼리 결과에서 자동 생성되므로 수동 스키마 정의가 필요 없습니다. 사용 가능한 모든 필드는

**사용자 정의 엔리치먼트 명세서(Custom Enrichment Specification Reference)**

```yaml
를 참조하세요.
예시:
AnalysisType: lookup_table
LookupName: panther_audit_enrichment
Enabled: true
  Description: Panther 감사 활동 컨텍스트로 알러트를 보강합니다.
    Indicators:
- Field: actor
  Indicators: [username]
    Query: |
    SELECT
    id,
    actionname,
    actiondescription,
    actionresult,
    actor,
    sourceip,
  useragent,
timestamp
  FROM panther_logs.public.panther_audit
LogTypeMap:
  Refresh:
```

**PeriodMinutes: 60**

`panther_analysis_tool upload`

PrimaryKey: id `--api-token` 및 `--api-host` 2단계: PAT로 업로드 `다른 명령과 마찬가지로 인증을 위해` 를 제공해야 합니다(또는 .panther\_settings.yml 파일에 채워 넣으세요).

`엔리치먼트만 업로드하려면:`

{% hint style="info" %}
panther\_analysis\_tool upload --filter AnalysisType=lookup\_table
{% endhint %}

**스키마는 SQL 쿼리 결과에서 자동 생성됩니다. 별도의 스키마 업로드는 필요하지 않습니다.**

* 3단계: 확인
* 콘솔: 엔리치먼트 페이지에서 생성/업데이트되었는지 확인하세요.

`SQL: 엔리치먼트 테이블을 직접 쿼리하여 데이터를 확인하세요: SELECT * FROM panther_lookups.public.name_of_your_enrichment LIMIT 1`
{% endtab %}
{% endtabs %}
