> For the complete documentation index, see [llms.txt](https://docs.plura.io/ko/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.plura.io/ko/faq/edr/pdf.md).

# 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>
