블로그 이전했습니다. https://jeongzero.oopy.io/
Rich header 구조
본문 바로가기
보안/Window

Rich header 구조

728x90

1. RICH header 란?

 

  • Rich 헤더란 문서화 되지 않은 구조이며 컴파일 정보가 담겨있다. 실행할 때 사용되는 정보가 아니므로 유사도 측정에 아주 큰 도움이 되는 특징들은 아니지만, 부수적으로 판단을 할 수 있는 정도로 활용 가능하다

 

  • 또한 RIch header가 요새 유행하고 있다고 한다. 왜냐하면 rich header 부분을 사용해서 Kaspersky lab의 GReAT팀이 공격 그룹을 밝혀낸 사례가 있다고 한다. 다음은 해당 보고서의 일부를 발췌한 내용이다

     

    📘
    "2018 평창 올림픽 기간 동안 유포된 Olympic Destoryer에서는 Bluenoroff 패밀리의 파일과 동일한 RIch 헤더를 공유하였고 이는 동일한 환경을 사용하여 빌드되었다는 것을 뜻한다"

     

  • 결론적으로 Rich header는 Attack Group 간의 유사성을 표현하는데 간접 지표로서 활용이 가능하다. 간접 지표의 의미는 해당 부분은 변조가 가능하기 때문에 신뢰성이 떨어지기 때문이다. 그리고 유사성 표현의 지표로는 컴파일 정보를 가지고 판단한다

 

 

2. RICH header 구조

 

PE 구조에서 DOS 헤더다음에 DOS STUB이 존재하는데 rich header는 여기 STUB 부분에 존재한다. 

 

 

  • Rich Header의 구조는 Rich identifier이 나온 뒤 4바이트의 체크섬 값이 나온다.

 

Rich Header 구조 

 

  • 이 4바이트의 체크섬 값을 통해 Rich header 내용이 xor 연산되어있다. 따라서 이를 통해 xor 연산하기 이전의 값을 구할 수 있다.

 

 

Xor을 통해 나온 결과는 다음과 같다. 이는 Rich Header의 구조를 보여준다 

Rich header 구조 

  1. Header(4+12bytes)
    • "Dans" : 4bytes
    • Zero padding (or not)

     

  1. @Comp.id Blocks (n x 8 bytes )

    Compiler build number and id의 줄임말으로서, ID값은 각 목록 항목의 유형을 나타낸다. 예를 들어 특정 ID는 특정 버전의 C 컴파일러를 사용하여 생성된 OBJ 파일을 나타낸다. ID 값은 Visual Studio릴리즈 간에 변경되는 값이다. 이러한 ID는 각 컴파일러 또는 어셈블러에서 생성되며 @Comp.id 심볼 형식으로 연결되 각 OBJ 파일 내에 저장된다 

     

     

    • mCV (2byte) : 결과물을 만들기 위한 컴파일러의 마이너 버전
    • prodID (2byte) : 특정 실별 또는 객체 유형을 지정하는 고유 식별자
    • count (4byte) : 특정 ProdID 및 mCV가 링커에서 사용된 빈도 지정

     

  1. Footer ( 8 + x bytes)
    • "Rich" identifier
    • Checksum (== Xor key)
    • Zeropadding

     

     

정리를 하면 아래의 그림과 같이 Rich header의 영역을 추출할 수 있고, 이제 추출한 rich header에서 유의미한 값을 추출하여 추후에 유사도 측정할때 사용해야 한다. 

 

 

 

728x90

'보안 > Window' 카테고리의 다른 글

PE 구조 분석  (0) 2020.05.05
window x64 환경에서 Universal shellcode 만들기  (8) 2020.04.12