본문 바로가기
Study/디지털포렌식

Defcon DFIR CTF 2019 Memory Forensics 풀이

by cbqnk9 2021. 6. 12.

필기시험 준비하면서 메모리 포렌식 공부하려고 풀어봤습니다.

 

https://defcon2019.ctfd.io/challenges

 

Defcon DFIR CTF 2019

 

defcon2019.ctfd.io

 

triage.mem 의 SHA1 해쉬값을 구하는 문제입니다

저는 7-zip을 설치해서 바로 구할 수 있었습니다.

운영체제 정보를 확인하는 문제입니다

imageinfo 명령어를 이용해 구할 수 있습니다.

 

노트패드의 PID를 구하는 문제입니다.

프로세스 분석 명령어 아무거나 이용해도 됩니다. 저는 pstree이용했고, 프로세스 종류가 많아 findstr 옵션 넣어줬습니다.

명령어
결과

앞에가 PID, 뒤에 정보가 PPID이므로 notepad의 PID는 3032라는 걸 알 수 있습니다.

 

wscript.exe의 자식 프로세스를 알아내는 문제입니다.

 

먼저 위 문제와 같은 방법으로 wscript의 PID를 구해주었습니다.

다음으로 wscript의 PID를 포함한 프로세스를 다시  검색하면

위와 같은 결과가 나오게 되고, PPID가 5116인 UWkpjFjDxM.exe가 자식 프로세스 인 걸 알 수 있습니다.

 

RAM 덤프가 생성 되었을 때  IP주소를 구하는 문제입니다.

네트워크 정보를 명령어인 netscan 명령어를 이용하였습니다.

 

덤프 되었을 때를 구하라고 했는데,,, offset이 가장 작은 10.0.0.101:55736이라고 생각했습니다.

뒤 55736은 LocalPort의 정보이므로, IP주소인 10.0.0.101이라는 것을 알 수 있습니다.

 

악성코드 PID를 바탕으로 공격자의 IP를 알아내는 문제입니다.

악성코드 분석 프로세스를 찾기 위해 프로세스분석 명령어를 입력해보았습니다.

 

psxview명령어를 사용하면, pslist와 psscan의 정보를 비교하여 나열해주고, 이를 통해 은닉된 정보를 확인할 수 있습니다.

pslist는 False, psscan에서 True인 프로세스를 발견했습니다. 즉, 해당 프로세스가 은닉된 프로세스라는 것을 알 수 있습니다.<- 이를 통해서 뭘 얻을 수 있는 정보는 없었습니다. 그래도 알아두면 좋으니 참고하세요!!

 

그래서 아까 사용한 명령어 netscan 목록을 보던 중에

서로 연결되어 있으면서(established) 사용한 포트가 4444인, 이름도 의심스러운 UWkpjFjDxM 이 프로세스 pid를 검색해보니

자식 프로레스로 cmd.exe 가 실행되는 것을 알 수 있습니다. 권한탈취 악성코드인가..? 

 

위의 내용을  근거하여 IP를 10.0.0.106이라는 것을 추측해볼 수 있습니다.

 

VCRUNTIME140.dll 를 사용하는 프로세스를 찾는 문제입니다.

dlllist 명령어를 이용해 dll.txt 파일을 만들었습니다.

해당 파일에서 위 dll파일을 검색했을때 나오는 프로세스는 OfficeClickToR입니다.

 

멀웨서 MD5해시값을 구하는 문제입니다.

앞문제에서 얻어낸 의심되는 악성코드

이녀석의 파일을 추출해서 구하면 될 것 같습니다.

memdump명령어를 이용해 해당 프로세스를 복구해주었는데,,, dmp파일이 나오더라구요.

검색해보니까 프로세스를 복구하려면 procdump명령어를 이용하라고 합니다.

프로세스 복구한 후, WinMD5프로그램을 이용해 MD5값을 구해주었습니다.

EasyHash / WinMD5 프로그램 실행할 때 '입력 파일을 열 수 없습니다' 라는 에러가 뜰 수가 있는데

실시간 보호 기능을 꺼주고 다시 파일 추출하면 MD5값 구할 수 있습니다.

BoB계정의 LM 해시값을 구하는 문제입니다. BoB...

hashdump 명령어를 이용하면 메모리의 해쉬값을 알 수 있습니다.

명령어 사용 결과입니다.

나온 값의 포맷이 user:id:LM:NTLM::: 이므로 LM값이 aad3b435b51404eeaad3b435b51404ee라는 것을 알 수 있습니다.

 

0xfffffa800577ba10의 VAD 노드에는 어떤 보호 기능이 있는지 알아내는 문제입니다.

vol을 이용해 VAD노드를 찾는 방법을 알아보기위해 명령어를 살펴보았습니다.

vadinfo 명령어를 이용하면 VAD노드들에 대한 확장자 정보를 보여줍니다. 이를 vad.csv로 저장해 찾아봤습니다

Protection은 PAGE_READONLY인 것을 확인할 수 있습니다.

 

0x00000000033c0000에서 시작하여 0x00000000033dff로 끝나는 보호 기능은 무엇인지 찾는 문제입니다.

방금 저장한 파일에서 검색해보면 하나의 VAD가 나옵니다

보호기능이 PAGE_NOACCESS 라는 것을 알 수 있습니다. 

시스템에서 실행되고있는 VBS 스크립트의 이름을 찾는 문제입니다.

VBS 스크립트는 visual basic script의 약자로 vbscript를 실행하기 위해서는 wscript가 실행되어야 합니다. (WScript가 vbs vbe 파일을 해석하고 실행할 수 있게 해줍니다)

따라서 wscript의 PID를 찾아주고 memdump명령어를  이용해 프로세스를 복구해주었습니다.

이후 덤프한 메모리를 strings.exe를 이용해 vbs를 포함하는 문자열을 검색해주니 vhjReLIDEuumrX.vbs가 나오게 됩니다.

strings.exe [덤프명.dmp] >> A.txt로 텍스트 파일로 변환할 수도 있습니다. 텍스트 파일에서 ctrl + F 이용해서 찾으셔도 됩니다.

 

 

2019-03-07 23:06:58 UTC에 실행된 프로그램을 찾는 문제입니다.

Application에 대한 정보를 줘서 관련 명령어를 찾아보니 shimcache가 있었습니다.

해당 시간을 포함한 내용을 검색해보니

Skype를 이용한 것을 알 수 있었습니다.

메모리 덤프할 때 노트패드로 작성된 것을 찾는 문제입니다.

먼저 psscan을 이용해 notepad의 pid를 찾고, notepad를 메모리덤프해주었습니다.

그리고 strings를 이용해 dmp 파일을 txt파일로 바꿔주고 위에서 부터 읽어봤는데

flag값이 대놓고 있었습니다...

파일 레코드 59045에 있는 shortname을 찾는 문제입니다.

record number는 mftparser명령어를 사용하면 나오므로 mftpaser를 csv(txt) 파일로 저장하고 해당 record number를 검색해 찾아주면 됩니다. 

단축 이름을 찾으라고 했으므로 EMPLOY~1.XLS입니다

 

감염된 PID를 찾는 문제입니다. 아까 위 문제에서 netscan 명령어를 통해 3496이라는 것을 알아냈습니다.

 

'Study > 디지털포렌식' 카테고리의 다른 글

Volatility 명령어 정리  (0) 2021.06.12
WEEK 01&02 디지털포렌식  (0) 2021.01.18