ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Memory Forensics - 사용자 행위 파악 (MemLabs Lab 2)
    DreamHack/포렌식 2025. 1. 6. 19:32

    오랜만에 공부를 잡습니다.
    다시 열심히 해보겠습니다.

     

    1. 첫번째 플래그

    더보기

    힌트는 딱 여기까지만 듣고 풀어보려고 한다.

    난 영어를 못하니까 자동 번역으로 봐보면 일단 몇가지 확인해보면

    1. 3개의 플래그로 구성되어 있다.
    2. 환경, 브라우저, 비밀번호 관리자 등을 사용하는 애플리케이션...? 내 기억으로는 크롬의 비밀번호 자동 저장되는 파일이 있었는데 그게 레지스트리 값이였는지 아예 다른 파일이였는지 기억이 안나지만 조금 다시 찾아보면 알듯하다.

    일단 환경을 강조한 것으로 보아 환경 변수를 알아봐야하므로,
    이전 Lab 0 을 다루는 메모리 포렌식 기초 부분에서 volatilty 3.0 의 플러그인 중에서 프로세스와 프로세스가 사용하는 환경 변수들을 출력해주는 envars 옵션을 이용해서 뽑아내야할듯하다.

    python C:\Users\R\Desktop\도구\volatility3-develop\vol.py -c config.json -f .\MemoryDump_Lab2.raw windows.envars > envars.log

    이렇게 써야겠지만 그 전에 config.json 으로 설정 파일이 없으니까 만들어주고 해야겠지?

    python C:\Users\R\Desktop\도구\volatility3-develop\vol.py --save-config config.json -f .\MemoryDump_Lab2.raw windows.info

    설정 파일을 만들어줬으니 이제 환경 변수를 확인해보자.

    python C:\Users\R\Desktop\도구\volatility3-develop\vol.py -c config.json -f .\MemoryDump_Lab2.raw windows.envars > envars.log

    천천히 envars.log를 확인해보자

    보다가 감이 안잡혀서 풀이 조금 봤다.

    걍 프로세스 중에서 브라우저와 비밀번호 관리자를 담당하는 프로세스를 파헤치면 되는 것이였다.

    그래서 브라우저쪽은 일단 Chrome.exe 를 보면 된다.

    풀이에서 Chrome.exe 의 메모리 덤프 파일을 확인해보면 된다고하므로,

    windows.memmap 플러그인을 사용해보면 된다.
    chrome.exe 는 pid 값이 2296 이므로 명령어는

    python C:\Users\R\Desktop\도구\volatility3-develop\vol.py -c config.json -f .\MemoryDump_Lab2.raw -o C:\Users\R\Desktop\mem문제 windows.memmap --pid 2296 --dump > memmap_2296.log 를 사용하면 될듯하다.

    python C:\Users\R\Desktop\도구\volatility3-develop\vol.py -c config.json -f .\MemoryDump_Lab2.raw -o C:\Users\R\Desktop\mem문제 windows.memmap --pid 2296 --dump > memmap_2296.log

    여기서 python [vol.py의 경로] -c [설정파일 경로명] -f [해당 메모리 raw 파일] -o [덤프할 프로세스가 저장되어야할 경로] windows.memmap -pid [원하는 프로세스의 id 값] -dump > [이에 대한 기록 파일명] 이므로

    위처럼 vol.py: error: The output directory specified does not exist: \2296\ 은 기존 드림핵 풀이에서는 2296 이라는 폴더를 만들어놓고 프로세스 메모리 덤프 파일을 그곳에 저장한 것이므로 저장 경로를 직접 정해주면 됩니다.

    어쨋든 해당 chrome.exe 프로세스가 사용한 메모리를 덤프한 파일인 pid.2296.dmp 가 나왔다.

    아 근데 메모리 덤프한다고 나오는게 답이 아니였구나....ㅋㅋㅋ

    그냥 단순하게 환경변수쪽에서 chrome.exe 가 사용하는 환경변수를 확인해보면 수상한 base64로 인코딩된 값이 보이는데, 이를 다시 디코딩해주는 것이였다....

    정답은 flag{w3lc0m3_T0_$T4g3_!_Of_L4B_2} 이였다.

    2. 두번째 플래그

    더보기

    아하. 

    다른 플래그가 있었다.
    난 flag{adfaf 이랑 asgawgw , asdfasf} 이런 형식일 줄 알았는데, 그게 아니였구나

    일단 브라우저에 대해서 이야기했는데, 답을 보니 이건 좀 대표적인 예시이긴한데 시간이 좀 들어야지 찾을만한 플래그 값이라고 생각이 들었다.

    chrome 브라우저는 익숙하게 알겠지만 각 프로필마다의 폴더가 존재하고, 그 프로필들은 프로필의 아이콘, 접속기록과 다운로드와 같은 정보가 담겨있는 history 파일과 다양한 journal 파일을 갖고 있다.

    이 파일들은 어찌되었든 chrome 브라우저를 사용자가 켜놓았다면, 프로세스가 참고하기 위해 반드시 사용하며 업데이트하고 기록해야하는 파일들이므로, 메모리 덤프에서도 이 파일들이 남아있을 것이다.

    그러므로 특정 프로세스가 사용한 파일들을 덤프할 수 있는 플러그인을 사용하면 된다.

    일단 확인하기 위해서 filescan 플러그인을 써보자.

    원래 python이 인코딩 인식을 못해서 utf-8로 하게끔 만들어주는 명령어인
    set PYTHONIOENCODING=utf-8 을 실행하여 명령어가 돌아가게해줘야하는데,

    set PYTHONIOENCODING=utf-8 을 입력해도 오류가 나오길래 그냥 강제로 실행하는 코드를 gpt에게 받아서 사용했다.

    일단 filescan.log를 확인해보면 Chrome에서 사용자가 남기는 History 파일의 경로와 파일명이 일치하는 것을 찾을 수 있었다.

    이제 이걸 뽑아내보자.

    History 파일은 물리적 주소로 0x3fcfb1d0 에 위치한다.

    이를

    dumpfiles 플러그인을 이용해서 뽑아낼 것이다.

    python C:\Users\R\Desktop\도구\volatility3-develop\vol.py -c config.json -f .\MemoryDump_Lab2.raw windows.dumpfiles --physaddr 0x3fcfb1d0 

    이렇게 명령어를 쓰면 될듯하다.

    파일이 2개 나온 것 같은데, 크기를 확인해보면 dat 파일이 history 파일인듯하다.

    Chrome 브라우저의 History 파일은 SQLite 로 열 수 있다.

    이중에서 url 경로를 자세히보면 딱 하나 다운로드를 할 수 있는 듯한 경로가 있다.

    https://mega.nz/#F!TrgSQQTS!H0ZrUzF0B-ZKNM3y9E76lg

    이 경로로 들어가보면, Important.zip 이라는 파일이 있다 이걸 다운로드 받고 열어보면,

    important.png 가 있고 이를 확인해보면, 반디집에서 확인할 수 있는 메모와 암호가 주어진다. 이를 입력해서 내용을 확인해보자.
    암호는 3스테이지의 플래그의 SHA1 해시값이다.

    드림핵에서 준 플래그 값은 이러했다. 이를 뽑아내보자.

    https://emn178.github.io/online-tools/sha1.html

     

    SHA1

    This SHA1 online tool helps you calculate hashes from strings. You can input UTF-8, UTF-16, Hex, Base64, or other encodings. It also supports HMAC.

    emn178.github.io

    여기에서 뽑아내보면

    6045dd90029719a039fd2d2ebcca718439dd100a 가 비밀번호이다.
    flag{oK_So_Now_St4g3_3_is_DoNE! !}

    3. 세번째 플래그

    더보기

    이거 문제 꽤나 찾아야할 범위가 너무 많아서 풀이를 봐야지만 풀 수 있을 정도인듯하다.

    3개의 플래그를 풀이를 보지않고 다 찾아내는 사람이 과연 있을까... 정말 고수일거같은데...

    규빈님말고는 생각이 안난다...ㅋㅋ

    마지막 플래그는 비밀번호 관리자라는 키워드에서 힌트를 얻어올 수 있다.

    프로세스 목록을 보면,

    KeePass.exe

    KeePass.exe 라는 프로세스가 있다. 이건 패스워드를 안전하게 보관해주는 프로그램이라고 한다.
    프로그램에서 암호화된 데이터베이스 파일을 가지며, 이를 패스워드로 열어내는 방식이라고 한다.

    KeePass 가 사용하는 암호화된 데이터베이스 파일은 확장자가 .kdbx 이다.

    filescan.log 를 통해서 확인해보면 Hidden.kdbx 파일이 존재한다.

    위에서 파일을 뽑아낸 것처럼 똑같이 명령어를 만들어보면,

    python C:\Users\R\Desktop\도구\volatility3-develop\vol.py -c config.json -f .\MemoryDump_Lab2.raw windows.dumpfiles --physaddr 0x3fb112a0 이다.

    0x3fb112a0 를 사용하는 프로세스 KeePass.exe 가 사용하는 파일은 1개이다.

    이 파일은 존재하지만, 사용하려면 KeePass.exe 를 직접 사용해야한다.
    그리고 추가적으로는 암호화된 데이터베이스를 풀어내기 위한 비밀번호가 필요하다.

    https://keepass.info/download.html

     

    Downloads - KeePass

     

    keepass.info

    다운로드해서 사용해보자.

    kdbx 확장자 파일을 추가해주고 비밀번호를 입력하면 될듯하다.

    그럼 이제 문제는 비밀번호를 찾아내야한다는 것이다.

    프로세스들이 사용하는 파일들이 있는 filescan.log를 다시 확인해보면,

    Password.png 라는 파일이 존재한다.
    물리적 주소 값은 0x3fce1c70 이다.

    다시 또 앞에서 사용한 명령어에서 물리적 주소 값만 바꿔주면

    python C:\Users\R\Desktop\도구\volatility3-develop\vol.py -c config.json -f .\MemoryDump_Lab2.raw windows.dumpfiles --physaddr 0x3fce1c70 이다.

    해당 파일을 png 확장자로 원래대로 바꿔줘서 확인해보자.

    P4SSw0rd_123

    비밀번호는 P4SSw0rd_123 이다.
    입력해주면 해당 유저들의 이름과 비밀번호가 나온다.

    Flag 유저

    flag{w0w_th1s_1s_Th3_SeC0nD_ST4g3_!!} 라고 나온다.

     

    꽤나 빡센데...?

    진짜진짜 메모리 포렌식도 많은 연구가 이뤄졌구나...

    그리고 volatility 가 메모리 포렌식 도구 1위인 이유를 알겠네....

    나름 메모리 포렌식으로 입문하기에 좋은 문제였던것 같다.

    'DreamHack > 포렌식' 카테고리의 다른 글

    Memory Forensics - 사용자 행위 파악 (MemLabs Lab 3)  (0) 2025.01.07
    이벤트 로그 (참고) [지속수정]  (2) 2024.11.16
    Autoruns  (0) 2024.10.11
    Find the USB  (1) 2024.10.06
    Corrupted Disk Image  (3) 2024.10.06
Designed by Tistory.