보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

[웹해킹보안] GET, POST

2013. 8. 27. 13:16

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

악성코드 배포에 많이 사용되는 PDF 를 들어봤지만 왜 그럴까 하고 생각해보진 못했다. 이제야 조금 이해가 된다. 여러 객체가 물릴 수 있는 PDF 에 악성코드 코드를 심을 수도 있겠다는 ㅜㅜ


참고문헌

http://blog.naver.com/PostView.nhn?  

  blogId=hazycode&logNo=50128349644&redirect=Dlog&widgetTypeCall=true

- PDF Reference Sixth Edition by Adobe Systems Incorporated



1. PDF 를 구성하는 4가지 요소

1) Object

- PDF 문서는 여러 작은 데이터 오브젝트들로 구성된 모임


2) File Structure

- 파일 구조는 PDF 파일 내에 오브젝트들이 어떻게 저장되고 어떻게 접근되고 업데이트 되는지 결정.


3) Document Structure 

- 문서 구조는 여러 간단한 오브젝트들이 어떻게 PDF의  각 문서를 구성하고 배치되는지 설명


4) Content Streams

- 콘텐트 스트림은 PDF 문서의 외곽이나 그래픽 요소들을 묘사하는 일련의 명령들을 가지고 있다



2. 기본 오브젝트

- PDF 는 다음의 8가지 기본적인 오브젝트 타입을 지원하다.

1) Boolean 오브젝트

- true, false value

- 배열의 요소나 dictionary 의 엔트리 값으로써 사용될 수 있다.


2) Numeric 오브젝트

- 2가지 종류를 지원. 정수형, 실수형

- 정수형 : 123, +17, -98 등

- 실수형 : 34.5, +123.64, -.002, 0.0 등


3) String 오브젝트

- 문자 스트링은 () 괄호 안에 쓰여진다.

a) 문자 스트림

- 스트링이 너무 길다면 백슬러쉬(\)를 사용해서 하나의 라인으로 여러 라인으로 쓸 수 있다.


b) 16진수 스트링

- 16진수 스트링은 괄호 <, > 로 둘러싸인 16진수 아스키 문자로 이루어진다.

- 2개의 16진수가 짝을 이뤄 1바이트를 이룬다. 짝이 안 맞을 경우 맨 마지막은 0 으로 간주한다.

- <901FA> => 90, 1F, A0 로 구성된 3바이트 스트링


4) Name 오브젝트

- Name 오브젝트는 하나의 심볼로써 하나의 유일한 문자열이다.

- 똑같은 문자열의 다른 2개의 Name 오브젝트가 있을 순 없다.

- Name 오브젝트는 슬러쉬(/)로 시작된다. 슬러쉬는 name 의 일부로 취급되는 것이 아니라 지금부터

  Name 오브젝트가 시작된다는 것을 알리는 역할을 한다.

- 대문자와 소문자도 구별한다.

- 유효한 Name 예



5) Array 오브젝트

- 여타 다른 언어 문법의 배열과 달리 PDF 의 배열은 다양한 형태의 오브젝트 조합을 가질 수 있다, 즉 

  하나의 배열에 number 오브젝트가 들어갈 수 있고, string 오브젝트가 들어갈 수 있다.

- 배열은 괄호 [, ] 내의 연속된 오브젝트들로 쓸 수 있다. 예) [539 3.14 false (Ralph) /SomeName]


6) Dictionary 오브젝트

- Dictionary 오브젝트는 엔트리로 알려진 2개의 오브젝트들의 짝들의 연계 테이블이다.

- 첫번째 요소는 키(Key)이고 두번째 요소는 값(value)이다.

- Key 는 반드시 name 오브젝트야만 한다.

- Value 는 어느 종류의 오브젝트라도 상관없다. 심지어 value 가 또 다른 dictionary 일 수도 있다.

- 엔트리의 value 가 null 이라면 그 엔트리는 없는 것으로 간주한다.

- Dictionary 오브젝트는 <<, >> 사이에 key 와 value 쌍으로 나타난다.



7) Stream 오브젝트

- String 오브젝트와 같이 연속적인 바이트의 집단이다(이진 데이터)

- stream 오브젝트는 길이에 제한이 없는 반면 string 오브젝트는 제약이 있다.

- 상대적으로 크기가 큰 이미지 파일이나 페이지 구성 오브젝트는 이 stream 오브젝트로서 표현

- Stream 오브젝트는 dictionary 오브젝트와 그 뒤를 따라서 오는 키워드 stream 과 endstream 사이의

  여러 바이트들로 구성 되어져 있다.



- Dictionary 오브젝트 뒤에 오는 키워드 stream 은 반드시 carriage return 과 line feed 가 합쳐진 

   end-of-line 마커로 끝이 나야 한다.

- 그리고 이진 데이터들은 키워드 stream 과 endstream 사이에 위치하고 이 stream 오브젝트의

   dictionary 오브젝트의 엔트리 /Length 엔트리가 이 이진 데이터의 크기를 명시한다.

- 모든 stream 오브젝트에 같이 나오는 dictionary 오브젝트 중에 공통적인 엔트리가 몇몇 있는데 

   /Length 엔트리, /Filter 엔트리가 있다.

- /Filter 엔트리는 필터의 이름을 명시하고 필터는 여러 목적으로 사용될 수 있는 이진 데이터를

   해당 목적에 맞게 해석하는 역할을 한다.

- /Length 엔트리의 경우 필수적인 엔트리이고, /Filter 엔트리는 선택적인 엔트리이다.


8) 간접 오브젝트

- PDF 파일에서 레이블된 (이름이 붙여진) 오브젝트들을 간접 오브젝트라고 한다

- 간접 오브젝트는 오브젝트 고유의 식별자를 갖게 되며 다른 오브젝트는 이를 이용하여 이 오브젝트

  를 참조할 수 있다.

a) 오브젝트 수(양수)

- 간접 오브젝트는 보통 연속적으로 자기의 고유 숫자가 정해지지만 반드시 그런 건 만은

   아니다. 

b) 생성 수(0을 포함한 양수)

- 새로 생성된 간접 오브젝트는 생성 숫자로  0 을 받는다. 만약 나중에 파일이 업데이트 된다

   면 이 숫자는 변경될 수 있다.

- 간접 오브젝트의 정의는 우선 오브젝트 수가 오고 다음 생성 수 그리고 키워드 obj 와 endobj 로 둘러

   싸여진 오브젝트 값이 따라온다.

- 예



3. PDF 파일 구조

1) 표준 PDF 파일의 4가지 요소

a) PDF 명세 버전을 알리는 한 줄의 헤더

b) PDF 문서를 구성하는 오브젝트를 포함하는 body

c) 간접 오브젝트에 관한 정보를 가지고 있는 전역 참조(cross-reference) 테이블

d) 전역 참조의 위치와 body 내 특정 오브젝트의 위치 정보를 가지고 포하하고 있는 트레일러(trailer)




2) 파일 헤더

- PDF 1.7 버전을 따르는 파일의 경우 다음과 같을 수 있다. 예) %PDF- 1.7


3) 파일 body

- PDF 파일의 body 는 문서의 실질적인 내용을 담고 있는 간접 오브젝트들로 구성된다. 

- 이러한 오브젝트들은 문서의 내용, 폰트나 페이지, 이미지 등과 같은 요소를 나타낸다.


4) 전역 참조 테이블

- 전역 참조 테이블은 각 간접 오브젝트의 위치 정보를 가지고 있어, 특정 오브젝트를 찾기 위해 파일

  을 다 읽어야 하는 번거로움을 피하고 랜덤 엑세스를 가능하게 해준다.

- 각 전역 참조 섹션은 키워드 xref 를 포함하는 한 줄로 시작된다. 그 뒤로 1개 이상의 전역 참조 서브 

  섹션이 순서 없이 따라온다.

- 오브젝트 숫자는 0 부터 시작한다.

- 각 전역 참조 서브섹션은 연속된 오브젝트 숫자의 엔트리만을 포함한다. 각 서브섹션은 스페이스로 

  구분된 2개의 숫자로 시작되는데, 첫 숫자는 해당 서브섹션의 첫 번째 엔트리 오브젝트 숫자이고, 

  두번째 숫자는 해당 서브섹션이 포함하고 있는 엔트리 개수이다.

- 실제 파일 예



- 그 다음으로 한 줄씩 실질적인 간접 오브젝트의 위치 정보를 담고 있는 엔트리가 나온다. (위 그림에

  3번째, 4번째 빨간 밑줄)

- 각 엔트리는 정확히 20바이트 길이, end-of-line 마커를 포함

- 엔트리는 2가지 종류의 엔트리

a) 현재 사용중인 엔트리

b) 지워져서 사용되지 않는 엔트리



5) 트레일러

- PDF 파일의 트레일러는 파일 내 전역 참조 테이블과 특정 오브젝트를 빨리 찾게 해준다.

- 파일 트레일러 위치 



 - 트레일러 구조와 설명



- Prev 엔트리가 없으면 한 번도 업데이트가 되지 않았음을 추측할 수 있다.


6) 그 외 타입들

a) /Page

- 페이지를 나타낸다

b) /Encrypt

- DRM 기술이 적용되었거나

- 파일을 읽을 때 비밀번호가 필요하다는 것을 말한다.

c) /ObjStm

- Object Stream

- 다른 오브젝트에 사용될 수 있는 Object Stream

d) /JS

- JavaScript 가 사용되고 있음을 말한다.

e) /AA, /OpenAction

- 문서 또는 페이지가 오픈될 때 자동 실행되는 것이다

f) /JBig2Decode

- JBIG2 압축이 사용된 것을 말한다.

- 그 외 Standard Filter 에는 ASCIIHexDecode, ASCII85Decode, LZWDecode, FlateDecode, 

   RunLenghtDecode, CCITTFaxDecode, DCTDecode, 

g) /RichMedia

- 플래시(Flash)가 들어있음을 나타낸다.

h) /Launch

- 액션이 얼마나 실행되었는지를 나타낸다.


Posted by i kiss you
,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.