해당 문제의 주제는 메모리에서 key 파일을 찾아 암호를 해독하는 것이 주제이며 목적이다. 일단 문제는 gzip과 tar로 압축되어 있어 압축을 해제하면 메모리 덤프가 하나 나온다. volatility로 스캔하여 보면 해당 메모리 파일을 자동으로 volatility가 파일 타입을 알지 못하여 파일의 프로필을 수동으로 지정해주어야 한다. 메모리 덤프 파일의 정보를 알기 위해서는 volatility의 imageinfo 옵션을 사용하면 된다.
[그림 1 - imageinfo]
출력 결과를 보면 지원가능한 Profile은 두개인데, Image Type을 보니 Service Pack 1이므로 Profile은 Win7SP1x86으로 해야 한다. 프로필을 옵션으로 지정하고 프로세스를 출력하여 보면 [그림 2]와 같이 출력 된다.
[그림 2 - pslist]
프로세스 목록을 보면 windows에서 사용하는 여러 프로세스를 볼 수 있는데 그 중 낯선 프로세스가 보인다. thenderbird.ex와 gpg.exe 인데 일단 이 두개의 프로세스가 무엇을 하는지 모르므로 검색을 시도해 보겠다.
[그림 3 - Google 검색 결과]
검색 결과의 링크를 클릭하여 보면 thunderbird.ex의 GUI 이미지가 보이고 PGP를 언급하고 있다. PGP 암호화와 관련된 프로그램인 것을 해당 링크를 통해 파악 할 수 있다. 이제 메모리 덤프 파일에서 PGP와 관련된 정보를 찾아야 한다. PGP 메시지는 "----- BEGIN PGP MESSAGE -----" 라는 header 시그니처와 "-----END PGP MESSAGE -----" 의 foot 시그니처를 가지고 있다. 해당 문자열들을 한번 검색 해 보자.
(관련 프로세스의 메모리 영역을 덤프해도 좋지만, 해당 프로세스들이 많기 때문에 메모리 덤프를 대상으로 분석하는것이 더 효율적이다.)
[그림 4 - strings memory.dmp | grep "BEGIN PGP MESSAGE" 검색 결과]
검색 결과를 보면 PGP 메시지 내용이 모두 출력 되지 않은 것을 알 수 있다. -C 옵션을 사용 해 검색 문자열 전후로 20줄 정도를 출력 해 보면 PGP 메시지의 전문을 볼 수 있다.
[그림 5 - PGP 메시지 전문]
해당 메시지는 따로 txt 파일등에 저장해 두도록 하고 이제 key 파일을 찾아야 한다. PGP에 사용되는 key 파일의 확장자는 .gpg로 일반 foremost나 scalpel 등 카빙도구에서는 .gpg 파일 카빙을 지원하지 않아 PhotoRec 이라는 도구를 사용하도록 하겠다. 사용법은 매우 간단하니 생략하도록 하겠다.
[그림 6 - 파일 카빙]
파일 카빙이 완료되면 여러개의 디렉토리가 생성되는데 find 명령으로 gpg 파일을 찾아주면 단 한개의 파일만이 나오고 해당 파일을 확인해보면 key 파일이란 것을 알 수 있다.
[그림 7 - key 파일 획득]
이제 리눅스에서 pgp 암호화를 지원하는 gpg 명령어로 해당 key 파일을 이용해 PGP 메시지를 복호화 하면 된다.
[그림 8 - PGP 메시지 복호화]
gpg 옵션에서 --no-default-keyring 옵션은 key 파일을 지정해 줄 때 무조건 지정해주어야 하는 옵션이며 --secret-keyring 또한 마찬가지이다.
- Key : as it turns out, Phil Zimmermann also likes sheep.
참고로 해당 문제의 PGP 메시지는 하나 더 있다. 하지만 그 메시지는 키 값과는 관련이 없어 풀이에서 언급하지 않았다. 해당 PGP 메시지를 복호화 하면 아스키 아트가 나오는데 그 내용은 조금.. 드럽다 ㅡㅡ;;
풀이에 도움이 되는 것들은 아래 주소를 참고 하였다.
'[+] Hacking > [-] Challenge Report' 카테고리의 다른 글
GitS CTF Packet 200 풀이 (1) | 2012.06.29 |
---|---|
RootBSD Forensic Challenge 풀이 (2) | 2012.06.16 |
GitS 2012 - TeL aViv+ (5) | 2012.05.05 |
Nuit du Hack Stega5 문제 풀이 (2) | 2012.03.28 |