* 본 게시판은 DMA 팀원이 기존에 풀었던 CTF 문제나, 개인이 작성해 낸 문제를 정리한 내용입니다. 문제에 대한 공유 및 관련 내용은 댓글에 문의 하시거나 필자의 E-Mail로 문의 주시면 내부 회의 후 답변 드리도록 하겠습니다. 추가적으로 포스팅의 제목과 실제 CTF 문제와는 관련이 없으며 풀이 과정을 토대로 어떤 내용인지에 대한 간략한 설명을 제목에 작성하였습니다.

- 필자 E-Mail : wotmd9408@naver.com

- 가상머신 : 미사용(본래 분석간에는 가상머신 활용 권고)

- OS : Windows 10 EnterPrise 64bit

- RAM : 32GB

- 필요 Tool : HxD 또는 WinHex

DMA 스터디가 쉰지도.. 대략 1년? 그정도가 된 듯 싶다. 개인의 사정에 의해, 그리고 여러가지 핑계로 인해 쉰지 약 1년쯤.. 그리고 지금으로 부터 한 두달전쯤일까.. 아래 두 Quest를 준 팀원이 어김없이 문제를 하나 던졌다. 그에게서 주어진 문제는 hi.docx 파일 뿐. 본인도 기억나진 않지만 CTF에서 나왔던 문제라고 했고, Flag를 가져오라는 미션이 주어졌다.

 

[그림 1. 실행화면]

 

저기요??? 시작부터 난관에 부딧치기 시작했다. 물론 지금처럼 이렇게 함부로 파일을 열어서는 안된다. 가상머신을 켜지 않은 지금은 더더욱 이래서는 안됐다. 문서를 받을 때 이미 수없이 질문하고 검증을 했으니 이번만은 넘어가도록 한다. 아무튼 정상적으로 켜지지 않았지만, 강제로 확인을 계속 눌러봤다.

 

[그림 2. 힌트로 보이는 문구]

 

" 이 문서는 오픈 포멧으로 저장되었습니다" 라는 문구가 보인다. 
오픈 포멧은 다음과 같이 정의되어있다. "오픈 포맷(open format)은 디지털 자료 저장을 위한 규격으로 보통 사유가 아닌 표준 조직이 관리하며 사용에 법적 제한이 없다."[1] 과연 오픈 포멧이라는 문구가 힌트가 될지, 아니면 함정이 될지는 문제를 풀어가면서 봐야 할 듯 하다.

한가지 중요한건, 이 문서가 100% 정상적인 Word 파일은 아닌것 같다는 점이다. 정상적인 워드 파일이라면 [그림 1]과 같은 오류코드는 나타나지 않고 [그림 2]의 문구가 열려야 정상이기 때문이다. 물론 완전히 손상된 파일은 또 아닌 것 같은데, 이는 어쨋든 복구로는 열리긴 열린다는 점이다.
일단, 문서 내에 흔히 랜섬웨어에 사용되는 매크로 같은 것들은 포함되지 않은 것으로 보여진다. 본 분석에 사용된 PC는 필자가 집에서 개인적으로 사용하는 PC인데, 기본적으로 워드파일의 매크로 설정을 사용하지 않고, 필요 시 알림 처리 하도록 되어 있기 때문이다.

[그림 3. 매크로 옵션]

 

문서 내에서 확인할 수 없다면 문서 밖에서 살펴보도록 하자. 우리가 늘 그래왔던 것처럼.. 일단 HxD를 켜서 해당 문서를 열어보도록 하자. 이미 어느정도 공부를 했던 분들이라면 이 문서의 일부분을 본순간 "아! 저 답은 어디에 있겠구나!"라는 것을 알 수 있겠지만, 이 블로그의 기본 목적은 그래도 나름 쉽게 풀어보는 것이기 때문에 조금 지루하더라도 같이 보는 친구에게 스포를 하지 말도록 하자.

 

[그림 4. hi.docx의 HxD 화면]

 

아마 과거에 모든 파일에는 File Signature라는 것이 존재한다는 것을 이야기 한 적이 있다. 시그니처라는 것은 일종의 그 존재만이 가지고 있는 유일한 것을 의미한다. 실제로 개인이 카드 결제 후 하는 서명도 Signature라고 하는데, 우리가 흔히 싸인 이라고 말하는 signature라는 것은 결국 자신만이 하는 서명이기 때문이다. 
필자가 분명히 바로 위에서 signature는 유일 한 것이라고 했다. 이 부분에서 고개를 갸우뚱 하는 독자분들도 분명히 존재할 것이다. 몇몇 게시글에서도 이야기 했지만 [그림 4]의 가장 앞 두개(0x4B50, PK)는 우리가 잘 알고 있듯이 ZIP의 시그니처이기 때문이다.

 

[그림 5. ZIP File Signature] 

 

위 사진은 자주 애용하는 File Signature 정리 사이트[2]에서 캡쳐한 부분으로, 일반적으로 파일의 값이 PK로 시작할 경우 ZIP 파일인 경우가 대부분이다. 그런데 왜 워드파일인 docx의 확장자에서 zip파일의 파일 시그니처가 확인 되는 것일까?

마이크로소프트에서 제공하는 Office 확장자들(docx, pptx, xlsx 등)은 OOXML(Office Open XML)을 기반으로 한 파일 포멧을 가지고 있는데, 기본적으로 XML 파일을 기반으로 하고 있다. 2000년 Excel 을 위해 만들어진 초기 버전이 발표되었으며, 2002년 워드를 위한 파일포멧이 추가되었고, 2003년 오피스에 통합되었다. 그리고 이 OOXML은 '압축된' XML 기반의 파일형식을 가지고 있기 때문에 HxD에서 확인될 때 ZIP파일과 같은 PK로 시작하는 signature를 가지고 있는 것이다. 자, 이제 그러면 본격적으로 분석을 위해 분석용 백업 파일을 생성하고 확장자를 zip으로 변경하도록 하자.

[그림 6. docx 파일을 zip 파일로 바꾼 후 압축 해제 직전 모습]


파일 시그니처가 zip파일과 동일하기 때문에 zip 파일로 확장자를 변경한다 하더라도 동작을 안한다거나 하는 문제가 발생하지는 않는다.(zip 파일 이외에 7zip같은 확장자로 변경을 시도하지는 말자. 두 확장자는 파일 시그니처가 다르다.)
[그림 6]에서 보이는 모습이 실제 word 파일의 구조라고 보면 된다. 위에서 설명했듯이 OOXML 파일포멧을 가지고 있는 word 파일은 압축된 XML의 형태를 가지고 있고 폴더를 들어가보면 xml 파일들이 다수 들어가 있는 것을 알 수 있다.

각각의 폴더의 내용들에 대해서는 이곳에서 다루지는 않을 것이다. 주 목적이 아닐뿐더러, 글이 너무 길어지면 보기 짜증나는 수도 있으니까 말이다. 아무튼 위에서 워드파일은 압축된 xml 파일들이라고 말했다. 이제부터 각 폴더를 들어가 특이한 내용이 있는지 한번 확인해보도록 하자.

 

[그림 7. word 폴더 내 존재하는 파일들]

 

필자의 경우는 무식하게 하나하나 열어보긴 했었지만, 이 글에서는 그 부분은 생략하도록 한다. word라는 폴더를 보면 secret.xml이라는 뭔가 우리를 부르는 듯한 파일이 하나 존재한다. 해당 파일을 열어보면 아래와 같은 내용이 존재한다.

 

[그림 8. secret.xml]

 

secret.xml을 열면 우리가 알 수 없는 문자열로 표기되어 있는 xml 파일을 볼 수 있다. 그런데 뭔지 모르겠으면서도 뭔가 어디선가 본거 같은 형태이다. =(equal) 표시가 있다면 가장 확실하겠지만 그렇게 난이도가 쉬운 문제를 CTF에서 내 줬을것 같지는 않다. 일단 가장 머리속에 가장 의심되는 base64를 먼저 이용해보자. 구글에 base64 decoding을 검색하면 가장 먼저 뜨는 사이트가 있다. 필자는 그곳을 제일 많이 이용하는 편이다.[3]

 

[그림 9. secret.xml 내용의 base64 디코딩 결과]

 

우리가 원하는 값이 저곳에 포함되어 있는 것으로 보인다. CTF란 말 Capture The Flag, 즉 Flag를 찾으면 되는 내용이고 친절하게 secret flag= 라는 내용이 있는 것으로 봐서 bcactf{0OxMl_1s_4m4z1Ng가  Flang 값인 것을 알 수 있다.
마지막으로 끝내기 전에, secret.xml이 기본적으로 워드파일내에 존재하는지 확인해 보도록 하자.
동일한 내용의 워드파일을 test.docx라는 파일로 만들고 zip 파일로 변경하였다.

[그림 10. 원본파일 확인을 위한 테스트 파일 생성]

 

이후 백업파일을 생성 후 위 과정과 동일한 과정을 거쳐 secret.xml이 존재하는지 확인해 보았다

[그림 11. 변경되지 않은 docx 파일의 word 폴더]

변조되지 않은 워드 파일에는 secret.xml이 없다!
문제를 푸는데는 여러가지 방법이 있을 수 있다. 이 방법 외에 다른 방법이 더 있을지는 모르겠으나, 공부에는 왕도가 없고 풀이에도 크게 왕도는 없다!! 문제 출제자가 원하는 답변은 있겠지만...

 

※ 출처

[1] https://ko.wikipedia.org/wiki/%EC%98%A4%ED%94%88_%ED%8F%AC%EB%A7%B7
[2] https://www.garykessler.net/library/file_sigs.html

[3] https://www.base64decode.org/

Posted by Latte_
,