# PDF 헤더 분석

{% hint style="info" %}
**PDF 파일 보안 분석 시 주요 검사 요소**

정보 보안 포렌식 관점에서 PDF 파일을 분석할 때 주의해야 할 주요 요소는 다음과 같습니다.\
이러한 요소들은 악성 PDF 파일을 식별하고 분석하는 데 중요한 단서를 제공합니다.
{% endhint %}

### 주요 요소 <a href="#id-1" id="id-1"></a>

1. **JavaScript 관련 키워드**:
   * `/JS`, `/JavaScript`, `/AA`, `/OpenAction`
   * PDF 파일 내의 JavaScript는 자동 실행될 수 있는 악성 스크립트를 포함할 가능성이 있습니다.&#x20;
   * 악성 PDF는 주로 JavaScript를 사용하여 취약점을 공격합니다.
2. **임베디드 파일**:
   * `/EmbeddedFile`, `/Launch`
   * PDF에 임베디드된 파일은 실행 가능한 악성 파일일 수 있습니다.&#x20;
   * `/Launch` 키워드는 PDF 파일이 특정 프로그램을 실행하도록 할 수 있습니다.
3. **암호화**:
   * `/Encrypt`
   * PDF가 암호화된 경우, 파일 내부의 내용을 분석하기 어렵게 만듭니다. 이는 정당한 이유가 있을 수 있지만, 악의적인 목적으로 숨기려는 의도일 수 있습니다.
4. **폼 및 멀티미디어**:
   * `/AcroForm`, `/RichMedia`, `/JBIG2Decode`, `/XFA`
   * 폼 및 멀티미디어 요소는 악성 코드 또는 악의적인 활동을 숨기기 위한 수단으로 사용될 수 있습니다. 특히 `/XFA`는 PDF의 동적 폼을 정의하는 데 사용되며, 복잡한 상호작용을 포함할 수 있습니다.
5. **스트림 및 객체**:
   * `obj`, `endobj`, `stream`, `endstream`
   * 스트림과 객체의 수가 비정상적으로 많은 경우, 이는 PDF 파일 내에 숨겨진 데이터 또는 코드가 많이 포함되었음을 나타낼 수 있습니다.
6. **페이지 수**:
   * `/Page`
   * 페이지 수는 PDF의 크기와 내용을 대략적으로 파악할 수 있게 해줍니다. 비정상적으로 많은 페이지는 주의가 필요합니다.
7. **기타 구조적 요소**:
   * `xref`, `trailer`, `startxref`
   * 이러한 요소들은 PDF 파일 구조의 무결성을 확인하는 데 중요합니다. 손상되거나 비정상적인 구조는 악성 PDF의 징후일 수 있습니다.

### 주요 키워드 설명 및 분석 <a href="#id-2" id="id-2"></a>

```
/JS               : 0
/JavaScript       : 0
/AA               : 0
/OpenAction       : 0
```

* **JavaScript 관련 키워드**: 이 키워드들이 발견되면, 스크립트 코드가 자동 실행될 가능성이 있으므로 주의가 필요합니다. 이 예에서는 모두 0이지만, 만약 값이 존재한다면 그 스크립트 내용을 분석해야 합니다.

```
/EmbeddedFile     : 0
/Launch           : 1
```

* **임베디드 파일 및 실행**: `/Launch` 키워드가 1로 되어 있는 것은 이 PDF가 특정 프로그램을 실행하려 한다는 것을 의미할 수 있습니다. 이는 잠재적으로 위험하므로 실행하려는 프로그램이 무엇인지 분석해야 합니다.

```
/Encrypt          : 0
```

* **암호화**: 이 키워드가 존재하면, PDF의 일부 또는 전체 내용이 암호화되었음을 나타냅니다. 분석이 어려울 수 있으며, 암호화를 해제해야 전체 내용을 확인할 수 있습니다.

```
/AcroForm         : 0
/RichMedia        : 0
/JBIG2Decode      : 0
/XFA              : 0
```

* **폼 및 멀티미디어**: 폼 및 멀티미디어 요소가 없지만, 만약 존재한다면 폼의 내용 및 멀티미디어 객체를 면밀히 분석해야 합니다.

```
obj            1536
endobj          767
stream          672
endstream       336
/Page            14
xref              2
trailer           1
startxref         1
```

* **스트림 및 객체**: 많은 수의 객체와 스트림은 숨겨진 데이터나 코드가 있을 가능성을 시사할 수 있습니다. 스트림과 객체의 수가 일치하지 않으면, 비정상적인 파일 구조를 나타낼 수 있습니다.

### 요약 <a href="#id-3" id="id-3"></a>

포렌식 분석 시 다음과 같은 단계를 따를 수 있습니다:

1. **JavaScript 코드 분석**: `/JS`, `/JavaScript`와 관련된 코드가 있는지 확인하고, 있다면 그 내용을 분석합니다.
2. **임베디드 파일 및 실행 분석**: `/EmbeddedFile`, `/Launch` 키워드를 확인하여 실행하려는 프로그램이 무엇인지 분석합니다.
3. **암호화 확인**: `/Encrypt` 키워드를 확인하여 파일의 암호화 여부를 확인하고, 필요한 경우 암호를 해제합니다.
4. **폼 및 멀티미디어 분석**: `/AcroForm`, `/RichMedia`, `/JBIG2Decode`, `/XFA` 키워드를 확인하여, 이들이 포함된 경우 내용을 분석합니다.
5. **객체 및 스트림 분석**: 객체와 스트림의 수가 비정상적으로 많은지 확인하고, 숨겨진 데이터나 코드를 탐지합니다.
6. **구조적 무결성 확인**: `xref`, `trailer`, `startxref` 키워드를 통해 PDF 파일 구조의 무결성을 확인합니다.

이를 통해 악성 PDF 파일을 식별하고, 필요 시 추가 분석을 통해 악성 행위를 탐지할 수 있습니다.

### 참고 레퍼런스 <a href="#id-4" id="id-4"></a>

* [ ] Github :  Didier Stevens : [pdfid.py](https://github.com/DidierStevens/DidierStevensSuite/blob/master/pdfid.py)<br>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.plura.io/ko/faq/edr/pdf.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
