Security 정보보안/Forensics

[디지털 포렌식 스터디] 3주차

gapsoo 2024. 4. 3. 14:13

 

스터디 내용: 강의 듣고 따라하기

 

https://inf.run/zmPL

 

[지금 무료] 기초부터 따라하는 디지털포렌식 | 훈지손 - 인프런

훈지손 | 기초부터 따라하는 디지털포렌식 강의입니다. 강의를 따라하다보면 "물 흐르듯, 자연스럽게" 실력이 늘어가는 강의를 추구합니다., 초보자 눈높이에 딱 맞춘, 원리를 이해하는 디지털

www.inflearn.com


 

침해 사고 대응 기법 -> 메모리 포렌식

메모리: 프로그램 올라갈 수 있는 공간

 

----

 

1강. 도구 설치, 환경 설정, 문제 다운로드

 

- Volatility

- Windows Terminal

- 시스템 환경 변수 설정

- 문제 다운로드

- 터미널 명령어 학

1) Volatility Wiki - Memory Samples

2) CTF-d - GrrCon 2015

 

 

 

 

 

Volatility 다운로드

 

시스템 환경 변수 설정 > Path 변수 설정 > Volatility 위치 경로 추가

 

이 작업을 통해 터미널에서 volatility에 접근할 수 있다.

 

시스템 환경 변수란?

 

 

 

현재 'C:\Users\wltn1>' 에는 

 

 

Volatiliy가 존재하지 않는다.

 

그런데, 시스템 환경 변수를 설정해줌으로써

내가 현재 어느 경로에 있든, 'volatility'를 입력하여 volatility에 접근할 수 있다.

 

 

시스템 환경 변수를 설정했기 때문에 'volatility'를 입력하고 tab 버튼을 누르면 저렇게 모든 단어가 완성된다.

 

 

Windows terminal 설치

 

 

이미 설치되어 있었다.

 

 

 

 

 

문제 풀이

 

문제 풀이를 위한 파일 다운로드

 

 

 

 

 

Window Terminal 기초 사용법에 대해 학습이 필요하다.

아래 링크로 학습하면 된다.

 

 

 

 

https://velog.io/@hunjison/Windows-Terminal-%EA%B8%B0%EC%B4%88-%EC%82%AC%EC%9A%A9%EB%B2%95

 

Windows Terminal 사용법

Windows Terminal이 새롭게(?) 나왔다.Linux나 MacOS에 비해 Windows는 터미널이 구리다는 점이 항상 아쉬웠는데 참 좋은 소식이다.그럼에도 Linux 터미널에 익숙해진 나에게 Windows Terminal은 2% 부족한 느낌이

velog.io

 

 

 

 

 

 

 

---

볼라틸리티는 메모리를 수집하는 도구이다.

 

 

 

이미지 인포가 뭐냐면, 메모리 덤프를 보고 볼라틸리티가 어떤 운영체제의 메모리 덤프인지 판단을 하는 것.

왜 필요하냐면, 어떤 운영체제인지가 모든 분석에 앞서 사용되는 정보이기 때문에 앞으로 꼭 필요한 과정이다.

 

 

'WinXPSP2x86' 을 복사 해주고, 그 다음 pslist라는 명령어에 활용할 것이다.

 

 

 

 

volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 pslist

라는 명령어를 입력했다.

 

결과 화면

 

 

pslist란?

 

프로세스의 리스트를 출력하는 명령어

 

 

그런데, 출력 값이 화면에 가득 차서 알아보기가 힘들기 때문에, 다음 명령어를 통해 출력 내용들을 pslist.log에 저장한다.

 

 

 

 

 

 

저장이 잘 된 것을 확인할 수 있다.

 

볼라틸리티를 통해 처음으로 분석한 이 이미지에 들어있던 프로세스들의 리스트이다.

 

이제 프로세스들을 볼 수 있는 도구가 pslist, pstree, psscan, psxview 이렇게 4개가 있다.

 

각각을 활용해 출력을 해보도록 하겠다.

 

 

 

 pstree, psscan, psxview 도 각각의 로그 파일에 내용을 저장하였다.

 

 

 

 

만든 파일을 이렇게 열어볼 수 있었다

 

 

 

1, 2, 3 .. 번째 각각의 한 줄은 각각의 프로세스이다.

 

 

작업 관리자를 열면 프로세스 목록을 확인할 수 있다.

 

 

이것들은 분석하고자 하는 메모리 안에서 실행되었던 프로세스들의 리스트이다.

 

 

 

pslist는 시간 순서대로 출력해준다.

 

 

 

psscan은 offset 순서대로 출력해준다. 메모리 파일의 어떤 위치에 존재하는지 그 순서대로 출력을 한다. psscan을 따로 쓰는 이유는 offset 순서는 중요하지 않은데, 숨김 프로세스를 확인할 수 있기 때문이다.

 

 

pstree를 쓰는 이유는, pid 와 ppid를 (부모 자식 관계) 기반으로 구조화해서 보여준다. 이게 중요한 이유는 수상한 프로세스 리스트를 확인하기에 좋은 도구이다.

 

 

 

psxview는 조금 더 고차원의 도구인데, pslist와 psscan을 포함해서 한 눈에 볼 수 있는 도구이다.

공격자가 의도적으로 숨긴 프로세스를 의심하기에 좋은 도구이다. 

 

 

 

---

위의 도구를 사용해서 의심스러운 프로세스들의 목록을 만드는 것이 우리의 목표.

 

 

pstree로 확인했을 때, 이 부분이 의심스럽다고 한다.

 

그 이유는, 

 

smss.exe는 세션 매니저 서브 시스템을 나타내는 윈도우의 정상적인 프로세스이다.

winlogon.exe는 윈도우 인증 유틸리티 프로세스이다.

wuaclt.exe는 마이크로소프트 웹사이트에서 운영체제 웹 업데이트를 확인하고 ~... 의 기능을 가진 프로세스이다.

.

.

.

위의 프로세스들은 안전한 것들이다.

 

 

그러나 이름이 정상적인 프로세스명이어도, 악성 코드들이 이름을 변조한 것일 수도 있기 때문에 (특히 svchost.exe - 윈도우 백그라운드 서비스 처리 프로세스) 의심해 볼 필요가 있다.

 

그렇다면, 빨간색 동그라미 안의 explorer.exe는 윈도우 탐색기 프로세스이다.

reader_sl.exe는 어도비 리더 프로그램이다. (pdf)

 

원래 pdf 문서를 통한 악성코드가 굉장히 많은데, 그런 배경지식을 가지고 pdf 파일을 의심스럽다고 체크할 필요가 있다

 

 

시간 순서대로 봤을 때, reader_sl.exe가 의심이 되는 상황이기 때문에, 시간 순서대로 다음에 실행된 것들에 대해서도 의심을 가질 필요가 있다.  

 

 

reader_sl.exe는 또한 숨겨진 프로세스는 아니었다.

 

 

----

 

다시 볼라틸리티로 가보겠다.

 

이번에는 메모리에서 커맨드라인 관련 명령어를 사용하여 어떤 커맨드라인을 사용했는지를 검색해볼 것이다.

 

 

cmdscan, consoles, cmdline 명령어의 출력 결과를 각각의 log 파일에 저장해주었다.

 

 

 

cmdscan, consoles는 아무것도 안 나왔다.

 

 

 

cmdline은 프로세스가 실행될 때 인자값을 같이 볼 수 있다.

 

cmdline은 뭔가가 나왔는데,

아까 의심스러웠던 reader_sl.exe에 관련된 인자값을 보고 싶었으나, 안 나와있다.

 

---

 

 

이번에는 filescan 도구를 사용했다.

 

filescan은 메모리 내에 존재하는 모든 파일에 대한 정보를 보여준다.

(용량이 큼)

 

 

 

filescan.log을 열면 오프셋 전체에서 존재하는 파일들의 리스트를 전부 보여준다.

 

 

다 보는 것이 아니라 의심스러웠던 reader_sl.exe 관련 정보들을 찾아준다.

 

 

 

맨 앞에 '0x...'로 시작하는 오프셋 값을 복사하여 터미널에 입력해준다.

 

 

cridex 폴더 안에 files라는 폴더를 만들어주고,

 

방금 복사했던 reader_sl.exe 프로세스의 오프셋을 이용하여

' volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 dumpfiles -Q 0x00000000023ccf90 -D .\files\ -n' 를 입력해준다.

 

 

이렇게 하면,

 

 

cridex\files 안에 두 가지 파일이 생성이 되었다.

 

이게 뭐냐면,

메모리 내에 reader_sl이라는 프로그램이 저장되어있는데, 이 파일들을 '바이러스 토탈'이라는 파일 검사 사이트에 집어넣어 볼 것이다.

 

 

검사 결과가 나왔는데,

악성코드일지도 모르는 파일이 검출이 되었다.

 

----

이번에는 네트워크 정보를 볼 것이다.

 

 

네트워크 정보가 담겨있는 connections.log 파일을 살펴보겠다.

 

 

connections 라고 하면 연결된 tcp 통신 목록 출력하는 것이다.

 

분석하고자 하는 컴퓨터의 로컬 주소, 원격지 주소에 대해 알 수 있다 (둘이 통신을 하고 있음)

8080 포트, 1484 프로세스를 사용하고 있다.

 

그러면

 

 

1484 프로세스를 사용하고 있는 explorer.exe를 의심해볼 수 있다고 한다.

그렇다면 tree 구조상 explorer.exe 파일 아래에 있는 reader_sl.exe 또한 더욱 의심을 해볼 수 있다.

 

---

 

이번에는 메모리 덤프를 해줄 거고, 분석 대상은 reader_sl.exe 이다.

(explorer.exe는 용량이 너무 커서 상대적으로 용량이 작은 reader_sl.exe 부터 분석을 하는 것이다.)

 

 

이렇게 하면, reader_sl.exe의 메모리 영역을 1640.dmp라고 저장을 하게 되는 것이다.

 

이제 dump 안에 들어가면 dmp 파일이 있다.

 

 

 

안에 쓰레기 값이 많은데, 이러한 불필요한 정보를 제거하고 보려면

 

 

이렇게 파일을 만들어준 다음에,

찾기 기능을 활용하여 리모트 어드레스의 ip 주소를 입력해줄 것이다.

 

 

 

두 가지 결과가 걸려 나오는 것을 볼 수 있다.

 

 

공격자의 웹사이트 주소로 추측이 된다.

 

 

예상 시나리오는, reader_sl.exe의 취약점으로 바로 위에서 발견된 악성  url로 접속을 한 것 같다. 주소를 찾아보면 '~bank' 가 걸리는 걸 보니, 은행 관련 피싱 시나리오인 것 또한 예측할 수 있다.