PDF ํ์ผ ๋ถ์
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
์์ธํ ๋ด์ฉ์ ํ์ธํ์ธ์: https://trailofbits.github.io/ctf/forensics/
PDF ํ์์ ๋ณต์ก์ฑ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์จ๊ธธ ์ ์๋ ์ ์ฌ๋ ฅ์ผ๋ก ์ ์๋ ค์ ธ ์์ด CTF ํฌ๋ ์ ์ฑ๋ฆฐ์ง์ ์ค์ฌ์ด ๋ฉ๋๋ค. ์ด๋ ์ผ๋ฐ ํ ์คํธ ์์์ ์ด์ง ๊ฐ์ฒด๋ฅผ ๊ฒฐํฉํ๋ฉฐ, ์ด์ง ๊ฐ์ฒด๋ ์์ถ๋๊ฑฐ๋ ์ํธํ๋ ์ ์๊ณ , JavaScript๋ Flash์ ๊ฐ์ ์ธ์ด๋ก ์์ฑ๋ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. PDF ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ธฐ ์ํด Didier Stevens์ ์๊ฐ ์๋ฃ๋ฅผ ์ฐธ์กฐํ๊ฑฐ๋ ํ ์คํธ ํธ์ง๊ธฐ ๋๋ Origami์ ๊ฐ์ PDF ์ ์ฉ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
PDF๋ฅผ ์ฌ์ธต์ ์ผ๋ก ํ์ํ๊ฑฐ๋ ์กฐ์ํ๊ธฐ ์ํด qpdf ๋ฐ Origami์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. PDF ๋ด ์จ๊ฒจ์ง ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ ๊ณณ์ ์จ๊ฒจ์ ธ ์์ ์ ์์ต๋๋ค:
- ๋ณด์ด์ง ์๋ ๋ ์ด์ด
- Adobe์ XMP ๋ฉํ๋ฐ์ดํฐ ํ์
- ์ ์ง์ ์์ฑ
- ๋ฐฐ๊ฒฝ๊ณผ ๊ฐ์ ์์์ ํ ์คํธ
- ์ด๋ฏธ์ง ๋ค์ ํ ์คํธ ๋๋ ๊ฒน์น๋ ์ด๋ฏธ์ง
- ํ์๋์ง ์๋ ์ฃผ์
๋ง์ถคํ PDF ๋ถ์์ ์ํด PeepDF์ ๊ฐ์ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ถคํ ํ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ํ PDF์ ์จ๊ฒจ์ง ๋ฐ์ดํฐ ์ ์ฅ ๊ฐ๋ฅ์ฑ์ ๋งค์ฐ ๋ฐฉ๋ํ์ฌ, ์๋ ์์น์์ ๋ ์ด์ ํธ์คํ ๋์ง ์์ง๋ง PDF ์ํ ๋ฐ ๋์ ์กฐ์น์ ๋ํ NSA ๊ฐ์ด๋์ ๊ฐ์ ์๋ฃ๋ ์ฌ์ ํ ๊ท์คํ ํต์ฐฐ์ ์ ๊ณตํฉ๋๋ค. ๊ฐ์ด๋์ ์ฌ๋ณธ๊ณผ Ange Albertini์ PDF ํ์ ํธ๋ฆญ ๋ชจ์์ ์ด ์ฃผ์ ์ ๋ํ ์ถ๊ฐ ์ฝ๊ธฐ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์ ์ฑ ๊ตฌ์ฑ ์์
๊ณต๊ฒฉ์๋ ๋ฌธ์๊ฐ ์ด๋ฆฌ๊ฑฐ๋ ์ํธ์์ฉํ ๋ ์๋์ผ๋ก ์คํ๋๋ ํน์ PDF ๊ฐ์ฒด์ ์์ ์ ์์ฃผ ์ ์ฉํฉ๋๋ค. ๊ฒ์ํ ๊ฐ์น๊ฐ ์๋ ํค์๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- /OpenAction, /AA โ ์ด๊ฑฐ๋ ํน์ ์ด๋ฒคํธ์์ ์คํ๋๋ ์๋ ์์ .
- /JS, /JavaScript โ ํฌํจ๋ JavaScript(์ข ์ข ๋๋ ํ๋๊ฑฐ๋ ๊ฐ์ฒด์ ๋ถํ ๋จ).
- /Launch, /SubmitForm, /URI, /GoToE โ ์ธ๋ถ ํ๋ก์ธ์ค / URL ์คํ๊ธฐ.
- /RichMedia, /Flash, /3D โ ํ์ด๋ก๋๋ฅผ ์จ๊ธธ ์ ์๋ ๋ฉํฐ๋ฏธ๋์ด ๊ฐ์ฒด.
- /EmbeddedFile /Filespec โ ํ์ผ ์ฒจ๋ถ(EXE, DLL, OLE ๋ฑ).
- /ObjStm, /XFA, /AcroForm โ ์ ์ฝ๋๋ฅผ ์จ๊ธฐ๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉ๋๋ ๊ฐ์ฒด ์คํธ๋ฆผ ๋๋ ์์.
- ์ ์ง์ ์ ๋ฐ์ดํธ โ ์ฌ๋ฌ %%EOF ๋ง์ปค ๋๋ ๋งค์ฐ ํฐ /Prev ์คํ์ ์ ์๋ช ํ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋์์์ ๋ํ๋ผ ์ ์์ต๋๋ค.
์ด์ ์ ํ ํฐ์ด ์์ฌ์ค๋ฌ์ด ๋ฌธ์์ด(์: powershell, cmd.exe, calc.exe, base64 ๋ฑ)๊ณผ ํจ๊ป ๋ํ๋๋ฉด PDF๋ ๋ ๊น์ ๋ถ์์ด ํ์ํฉ๋๋ค.
์ ์ ๋ถ์ ์์ฝํ
# Fast triage โ keyword statistics
pdfid.py suspicious.pdf
# Deep dive โ decompress/inspect the object tree
pdf-parser.py -f suspicious.pdf # interactive
pdf-parser.py -a suspicious.pdf # automatic report
# Search for JavaScript and pretty-print it
pdf-parser.py -search "/JS" -raw suspicious.pdf | js-beautify -
# Dump embedded files
peepdf "open suspicious.pdf" "objects embeddedfile" "extract 15 16 17" -o dumps/
# Remove passwords / encryptions before processing with other tools
qpdf --password='secret' --decrypt suspicious.pdf clean.pdf
# Lint the file with a Go verifier (checks structure violations)
pdfcpu validate -mode strict clean.pdf
์ถ๊ฐ๋ก ์ ์ฉํ ํ๋ก์ ํธ (2023-2025๋ ๋์ ํ๋ฐํ ์ ์ง๋จ):
- pdfcpu โ PDF๋ฅผ lint, decrypt, extract, compress ๋ฐ sanitizeํ ์ ์๋ Go ๋ผ์ด๋ธ๋ฌ๋ฆฌ/CLI.
- pdf-inspector โ ๊ฐ์ฒด ๊ทธ๋ํ์ ์คํธ๋ฆผ์ ๋ ๋๋งํ๋ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์๊ฐํ ๋๊ตฌ.
- PyMuPDF (fitz) โ ์์ ํ๊ฒ ํ์ด์ง๋ฅผ ์ด๋ฏธ์ง๋ก ๋ ๋๋งํ์ฌ ๊ฐํ๋ ์๋๋ฐ์ค์์ ๋ด์ฅ๋ JS๋ฅผ ์คํํ ์ ์๋ ์คํฌ๋ฆฝํธ ๊ฐ๋ฅํ Python ์์ง.
์ต๊ทผ ๊ณต๊ฒฉ ๊ธฐ์ (2023-2025)
- PDF ํด๋ฆฌ๊ธ๋กฏ์ MalDoc (2023) โ JPCERT/CC๋ ์ํ ํ์์๊ฐ ์ต์ข
%%EOF ์ดํ์ VBA ๋งคํฌ๋ก๊ฐ ํฌํจ๋ MHT ๊ธฐ๋ฐ Word ๋ฌธ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๊ด์ฐฐํ์์ผ๋ฉฐ, ์ด๋ ์ ํจํ PDF์ด์ ์ ํจํ DOC์ธ ํ์ผ์ ์์ฑํฉ๋๋ค. PDF ๋ ์ด์ด๋ง ํ์ฑํ๋ AV ์์ง์ ๋งคํฌ๋ก๋ฅผ ๋์นฉ๋๋ค. ์ ์ PDF ํค์๋๋ ๊นจ๋ํ์ง๋ง
file์ ์ฌ์ ํ%PDF๋ฅผ ์ถ๋ ฅํฉ๋๋ค.<w:WordDocument>๋ฌธ์์ด์ด ํฌํจ๋ PDF๋ ๋งค์ฐ ์์ฌ์ค๋ฝ๊ฒ ์ทจ๊ธํด์ผ ํฉ๋๋ค. - Shadow-incremental ์
๋ฐ์ดํธ (2024) โ ์ ๋ค์ ์
์ฑ
/OpenAction์ด ์๋ ๋ ๋ฒ์งธ /Catalog๋ฅผ ์ฝ์ ํ๊ธฐ ์ํด ์ฆ๋ถ ์ ๋ฐ์ดํธ ๊ธฐ๋ฅ์ ์ ์ฉํ๋ฉฐ, ๋ฌดํดํ ์ฒซ ๋ฒ์งธ ์์ ๋ณธ์ ์๋ช ๋ ์ํ๋ก ์ ์งํฉ๋๋ค. ์ฒซ ๋ฒ์งธ xref ํ ์ด๋ธ๋ง ๊ฒ์ฌํ๋ ๋๊ตฌ๋ ์ฐํ๋ฉ๋๋ค. - ํฐํธ ํ์ฑ UAF ์ฒด์ธ โ CVE-2024-30284 (Acrobat/Reader) โ ์ทจ์ฝํ CoolType.dll ํจ์๋ ๋ด์ฅ๋ CIDType2 ํฐํธ์์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์กฐ์๋ ๋ฌธ์๊ฐ ์ด๋ฆฌ๋ฉด ์ฌ์ฉ์์ ๊ถํ์ผ๋ก ์๊ฒฉ ์ฝ๋ ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค. 2024๋ 5์ APSB24-29์์ ํจ์น๋จ.
YARA ๋น ๋ฅธ ๊ท์น ํ ํ๋ฆฟ
rule Suspicious_PDF_AutoExec {
meta:
description = "Generic detection of PDFs with auto-exec actions and JS"
author = "HackTricks"
last_update = "2025-07-20"
strings:
$pdf_magic = { 25 50 44 46 } // %PDF
$aa = "/AA" ascii nocase
$openact = "/OpenAction" ascii nocase
$js = "/JS" ascii nocase
condition:
$pdf_magic at 0 and ( all of ($aa, $openact) or ($openact and $js) )
}
๋ฐฉ์ด ํ
- ๋น ๋ฅธ ํจ์น โ Acrobat/Reader๋ฅผ ์ต์ Continuous ํธ๋์ผ๋ก ์ ์งํ์ญ์์ค; ์ค์ ์์ ๊ด์ฐฐ๋ ๋๋ถ๋ถ์ RCE ์ฒด์ธ์ ๋ช ๋ฌ ์ ์ ์์ ๋ n-day ์ทจ์ฝ์ ์ ํ์ฉํฉ๋๋ค.
- ๊ฒ์ดํธ์จ์ด์์ ํ์ฑ ์ฝํ
์ธ ์ ๊ฑฐ โ
pdfcpu sanitize๋๋qpdf --qdf --remove-unreferenced๋ฅผ ์ฌ์ฉํ์ฌ ์์ PDF์์ JavaScript, ํฌํจ๋ ํ์ผ ๋ฐ ์คํ ์์ ์ ์ ๊ฑฐํ์ญ์์ค. - ์ฝํ ์ธ ๋ฌด์ฅ ํด์ ๋ฐ ์ฌ๊ตฌ์ฑ (CDR) โ ์๋๋ฐ์ค ํธ์คํธ์์ PDF๋ฅผ ์ด๋ฏธ์ง(๋๋ PDF/A)๋ก ๋ณํํ์ฌ ํ์ฑ ๊ฐ์ฒด๋ฅผ ๋ฒ๋ฆฌ๋ฉด์ ์๊ฐ์ ์ถฉ์ค๋๋ฅผ ์ ์งํ์ญ์์ค.
- ๋๋ฌผ๊ฒ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ ์ฐจ๋จ โ Reader์ ๊ธฐ์ โํฅ์๋ ๋ณด์โ ์ค์ ์ ํตํด JavaScript, ๋ฉํฐ๋ฏธ๋์ด ๋ฐ 3D ๋ ๋๋ง์ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ๊ต์ก โ ์ฌํ ๊ณตํ(์ฒญ๊ตฌ์ ๋ฐ ์ด๋ ฅ์ ์ ์ธ๋ฌผ)์ ์ด๊ธฐ ๋ฒกํฐ๋ก ๋จ์ ์์ต๋๋ค; ์ง์๋ค์๊ฒ ์์ฌ์ค๋ฌ์ด ์ฒจ๋ถ ํ์ผ์ IR์ ์ ๋ฌํ๋๋ก ๊ต์กํ์ญ์์ค.
์ฐธ๊ณ ๋ฌธํ
- JPCERT/CC โ โPDF์ MalDoc โ ์ ์ฑ Word ํ์ผ์ PDF ํ์ผ์ ํฌํจ์์ผ ํ์ง ์ฐํโ (2023๋ 8์)
- Adobe โ Acrobat ๋ฐ Reader์ ๋ํ ๋ณด์ ์ ๋ฐ์ดํธ (APSB24-29, 2024๋ 5์)
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


