PDF 문서 포맷은 내부의 컨텐츠를 보호하기 위한 목적으로 암호화를 지원한다. (PDF 1.1)
암호화는 모든 문서 내 integer, Boolean 값을 제외하고는 모든 문자열과 스트림에 적용된다. 암호화는 encryption dictionary 에 의해 처리되며, 해당 정보는 다음과 같이 first-page trailer dictionary 안에 “/Encrypt” 라는 엔트리와 함께 존재한다.
[그림] trailer 정보
모든 encryption dictionaries 주요 엔트리 정보는 다음과 같다.
- /Filter 엔트리는 security handler의 이름으로, 디폴트로는 /Standard 값을 갖는다.
- /V 엔트리는 암호와 복호에 사용되는 알고리즘을 명시하고 있고, 예제는 40bit의 암호화 키를 사용하고 있다는 것을 명시하고 있다.
- /Length 엔트리는 /V 가 2 또는 3일 경우만 존재하기 때문에 현재 예제(1)에는 사용되지 않는다. .
특히, PDF 에서 사용하는 표준 암호화 방식은 MD5 message-digest algorithm(described in Internet RFC 1321, The MD5 Message-Digest Algorithm; see theBibliography) 과 RC4 로 알려진 proprietary encryption algorithm을 사용한다.
Standard security handler 를 위한 부가적인 encryption dictionary 엔트리 정보는 다음과 같다.
- /R엔트리는 security handler 의 revision 정보를 명시한다.
- /O 엔트리는 owner/user 패스워드를 기반의 32비트 문자열로서, 암호화 키 처리 과정에서 사용되고 입력되는 owner 패스워드의 유효성을 체크하는 데 사용된다.
- /U 엔트리는 user 패스워드 기반의 32 비트 문자열로서, 패스워드를 위한 사용자 프롬프트를 사용할 것인지 결정하고, user/ower 패스워드의 유효성 체크에 사용된다.
- /P 엔트리는 사용자 권한을 명시하는 플래그이다.
보다 자세한 정보는 PDF Reference를 참고한다. (예제 참고 버전은 1.4 )
* PDF Reference :
http://www.adobe.com/devnet/pdf/pdf_reference.html
http://www.adobe.com/devnet/pdf/pdf_reference.html
암호화된 PDF 파일은 스펙에 명시된 알고리즘을 프로그래밍 적용하거나 알려진 PDF Decryption 툴을 통해 복호화할 수 있다.
다음은 CVE-2013-0640 PDF 제로데이 취약점 파일을 복호화한 예제이다. .
( 복호화 전후의 PDF 파일은 많은 변화가 있고, 복호화 후의 파일 구조가 보다 단순하다는… ^^;;)
[그림]암호화된 파일
[그림]복호화된 파일
2 Comments
김수현
안녕하세요? 저는 이화여대 컴퓨터 공학과에 재학 중인 김수현입니다.
제가 여성보안전문가를 꿈꾸는데 몇 가지 질문할 게 있어서 그러는 데 이메일 좀 올려주시면 안될까요?.
hacksum
아래 메일로 질문 주시면 됩니다.
“h4cksum@gmail.com”
감사합니다 🙂