slide-image


디지털포렌식

[2019-1]

#01


첫 주차는 물리 메모리에 대한 내용이었다.


메모리 포렌식은 사용자나 프로세스 행위를 탐지하고, 네트워크 연결 정보를 확인하거나, 

복호화, 언패킹, 디코딩을 할 수 있고, 패스워드나 암호키를 획득할 수도 있다.


메모리 포렌식은 주로 물리메모리나 페이지 파일, 하이버네이션 파일 등이 대상이 되며, 

물리 메모리는 RAM을 이야기하고, 페이지 파일은 가상 메모리에 저장되는 데이터를 의미하며, 하이버네이션 파일은 대부분 OS에서 배터리 없을 경우 자동으로 실행되며, 최대 절전 모드에서 저장되는 파일이다. 즉, 전원을 끄기 전까지 시스템 메모리에 있는 모든 내용이 비휘발성 메모리 HDD에 기록된 내용이다. 

페이지 파일은 pagefils.sys에 저장되고, 하이버네이션 파일은 hiberfile.sys에 저장된다. 


물리 메모리를 확인하는 방법은 cmd에서 

systmeinfo | findstr "메모리" 명령어로 확인이 가능하고, 


혹은 실행(win+r)에서 msinfo32에서 가능하다.


PAE는 Physical Address Extension의 약자로, 물리 주소 확장을 의미한다. 

4GB 이상의 물리 메모리를 32bit 시스템에서 사용할 수 있게 해주며, 만약 32bit에서 36bit 까지 주소를 지정해주면, 64GB까지 사용이 가능해지는 것이다. 

설정하는 방법은 bcd라는 부팅 저장 제공 프로그램을 이용해 edit 명령을 내릴 수 있다.

PAE로 확장된 공간은 보통 RAM Disk로 활용되며, 확장된 주소 공간 접근을 위해서는 AWE라는 Address Windowing Extensions API를 사용해야 한다.

AWE는 주소 윈도잉 확장 API로 물리 주소 확장에 의해 확장된 메모리에 접근하기 위한 API(winbase.h)이며, 윈도윙이라는 말은 응용 프로그램의 가상 주소 공간을 실제 메모리에 매핑하는 프로세스를 의미한다. 



DEP는 Data Excution Prevention으로 데이터 실행 방지를 의미한다. 

리눅스에서는 스택 영역에서 코드가 실행되는 것을 방지했었는데, 윈도우에서도 비슷한 기능을 하는 것 같다.

윈도우에서는 시스템 속성에서 설정 및 확인할 수 있다. 

win+x키에서 시스템을 선택하고 시스템 정보를 들어가면, 


고급 시스템 설정에서 고급 탭의 설정에 들어가면, 


데이터 실행 방지 탭을 볼 수 있다. 



ASLR은 Address Space Layout Randomization의 약자로 주소 공간 배치 랜덤화를 의미한다.

사실 위의 DEP과 ASLR은 포너블에서 항상 보는 내용인데, 이렇게 윈도우에서 보니까 뭔가 새로웠다.

어쨌든, ASLR은 스택, 힙, 라이브러리 등의 주소를 매 실행마다 랜덤으로 프로세스 주소 공간에 배치하여, 실행 시마다 데이터 주소가 바뀌어 메모리 상의 공격을 어렵게 하기 위해서 사용된다.



물리 메모리를 덤프하는 방법은 첫 번째로 하드웨어를 이용한 덤프가 있다. 하지만 시스템 충돌이나 안정성 위험 요소가 있고, 무엇보다 장비가 필요하고 매우 매우 비싸다...

그 다음에는 소프트웨어를 이용한 덤프가 있다. volatility나 Memorize 등의 프로그램을 이용하며, 거의 이 방법을 이용한다.

그 외에 크래시 덤프나 절전 모드 덤프 방법이 있으나, 크래시 덤프는 충돌 시의 원인을 알아낼 때에 사용하는 방법으로 윈도우에서만 사용이 가능하며, 절전모드 덤프는 하이버네이션 파일, 즉 사용 중이었던 영역만 덤프가 가능하다. 따라서 크래시 덤프나 절전모드 덤프는 제한된 환경에서만 가능하여 이번에는 소프트 웨어를 이용한 덤프를 해보았다.



실습을 해보면서 문제를 풀었는데, 2010 Forensic Challenge - Backing Troubles의 문제를 풀었다.


회사 X가 포렌식 수사를 의뢰하였다.

1) 직원이 동료로부터 PDF 파일이 첨부된 이메일을 받았다.

2) 처음 파일을 열었을 때는 아무 일도 없었으나, 그 이후 은행 계좌에서 비정상적인 활동을 보였다.

3) 회사 X에서 감염을 의심하고 해당 직원의 가상 머신에 대한 메모리 이미지를 덤프하였다.


문제1: 감염된 PC에서 실행되는 프로세스들의 리스트를 나열하시오. 어떤 프로세스가 최초 공격 루트로 가장 의심되나요?

문제2: 감염 도중 해당 PC에서 열렸던 소켓들의 리스트를 나열하시오. 소켓이 열린 프로세스 중 의심가는 것이 있나요?

문제3 : 의심되는 프로세스의 메모리에 있는 의심가는 URL들을 나열하시오.


Bob.vmem이 이미지 덤프 파일이다. 직원 이름이 Bob인가 보다...


일단 Volatility는 Python 기반의 메모리 포렌식 툴로, 윈도우, 리눅스, 맥 OS에서 사용이 가능하며, 플러그인 형태로 다양한 기능을 제공 하는 점이 특징이다. 

cmd에서 명령어로 조작하며, 해보다보면 명령어 앞부분은 거의 비슷하여 사용하기에 쉽다.


사용법으로는, 첫째로 이미지 프로파일을 확인해야 한다.

프로파일 정보를 알아야 플러그인을 통해 분석이 가능하므로 필수적으로 해야한다.

프로파일에는 생성 메모리 덤프의 OS, 서비스 팩, 커널 정보가 있지만, OS가 가장 중요하다. 


vol.py가 있는 폴더로 이동하여(:C 내부에 존재해야 함) 명령어를 쳐보았다.


이미지 파일의 프로파일 정보를 가져오는 명령어는 vol.py -f [이미지파일] imageinfo이다. 

해보면 Failed이 엄청 뜰텐데 일단 무시..

뜨면, 저 빨간 부분이 OS이름이다. 이제부터 저걸 주구장창 이용한다.

두 개면 최신것을 덤프하는 것을 추천하던데, 사실 큰 차이는 못 느끼겠다. 여러개이면 되는 걸로 하자.


cf) 플러그인을 확인하는 명령어는 vol.py --info

플러그인 옵션을 확인하는 명령어는 vol.py [플러그인이름] --help

외부 플러그인 로드하는 명령어는 vol.py --plugins=[경로] [플러그인이름]


그 다음은 목적에 따라 다르겠지만 문제를 풀기 위해 프로세스 목록을 보았다.

프로세스 목록을 보는 명령어는 리눅스와 비슷하게 여러개가 있는데, pstree, pslist, psscan, psxview 들이 있다.

pstree는 트리 형태로 나열하는 것이고, pslist는 실행중인 ps정보를 나열하며, psscan은 실행중인 것 뿐만 아니라 종료된 프로세스까지 나온다.

psxview는 pslist와 psscan의 정보들을 비교해서 나열함으로써 은폐된 프로세스 정보를 획득할 수 있다.

명령어 형태는 vol.py -f [이미지파일명] --profile=[프로파일명(아까 OS정보)] pslist/psscan/psxview/pstree 중 하나이다.

의심되는 프로세스명으로는 system 파일처럼 보이는 이름 (진짜 시스템 파일일 수도 있으나, 위장한 것일 수도 있어서)과, 부모가 없는 PS이다.

일단 pstree하였다. 문제에서 메일에서 PDF 파일을 받아서 파일을 열었다고 했으니 AcroRd(아크로뱃 리더)와 그 부모 프로세스인 firefox가 의심된다.

그리고 psxview도 해봤으나, 아직까지는 그 외에 수상한 프로세스를 모르겠다.


그리고 pslist도 해보았는데, firefox와 AcroRd 가 실행되고 난 직후에 svchost가 실행됨을 알 수 있었다.

근데, 찾아보니 svchost는 그 전날 이미 실행이 되어 있었는데, 최초 실행된 PID는 880이었다.


따라서 문제1 답: firefox.exe, AcroRd32.exe, svchost.exe / firefox.exe


그 다음으로 네트워크 정보를 알 수 있는 명령어는 connections, connscan, sockets, sockscan, netscan 들이 있다.

connections과 netscan은 활성화 상태의 네트워크 연결 정보를 나열하며, connscan은 거기에 이미 종료된 연결 정보까지 나열한다.

sockets는 활성화 상태 네트워크 (TCP, UDP, RAW 등)의 연결 정보를 나열하며, sockscan은 거기에 이미 종료된 연결 정보를 나열한다.

명령어 형태는 netscan 빼고는 vol.py -f [이미지파일] --profile=[XP/2003 profile] connections/connscan/sockets/sockscan이며,

netscan은 vol.py -f [이미지파일] --profile=[Vista/2008/7 profile] netscan 이다.

profile은 아까와 같이 OS이름이며, OS로 사용가능한 명령어가 조금 갈린다.

Bob은 XP였으니까 connections로 해보았다.


여기 나오는 ip를 http://www.ip-adress.com/ip_tracer/ (d가 하나이다!)에서 검색하면 지역이 나온다. 아마 IP2Location같은 역할을 하는 모양이다.

아까 파이어폭스와 아크로뱃리더, svchost가 수상했는데 각각의 PID는 888, 1752, 880였다. 

파이어폭스와 아크로뱃 리더는 아이피가 같았으나, svchost는 아이피가 달랐는데, 아이피를 저 사이트에 검색해보니, 파이어폭스와 아크로뱃 리더는 이스라엘이 나왔고, svchost는 이란이 나왔다. (이..란...)

 


그리고 소켓을 sockets를 이용해 확인해보았다. 


시간이 뒤죽박죽인데, 서브라임과 엑셀을 이용해 시간대로 정렬해 보았다.


PDF가 열린 순간부터를 확인하고 싶어서 AcroRd 소켓이 열린 이후의 시간대를 봤더니, 880, 1040, 1244 가 있었다.


확인해보니 모두 svchost.exe 의 PID였다..!

문제2 답: 소켓 리스트 나열한 내용, svchost.exe 


그 다음 되는 URL을 나열하려면, 메모리 덤프를 추출해야 한다.

메모리를 덤프하는 명령어는 vol.py -f [이미지파일] --profile=[profile] memdump -p [PID] -D [저장위치]이다.

그리고 덤프된 파일을 텍스트 파일로 변환하기 위해, strings.exe [덤프된 파일] >> [텍스트 파일명] 을 해주어야 한다.


명령어만 보아도 알 수 있듯이, PID를 알아야 한다. 지금까지 의심되었던 PID는 880, 1040, 1244, 888, 1752이고, 각각을 모두 해주어야 한다. 나는 그냥 vol.py가 있는 경로에 폴더를 만들어서 거기에 저장해 주었다. 경로는 ""로 감싸주어야 한다.

그리고 텍스트로 변환까지 해준다. http와 https만 찾아서 보기 좋게 sort 해 주었다.


양이 어마어마하게 많은데, 문제에서 은행 계좌라는 키워드를 아직 쓰지 않았으므로, pdf와 bank 키워드로 url을 찾아보았다.


나는 banki와 bankofamerica.com밖에 못찾았는데, 아무리 찾아도 pdf이 포함된 url이 없는데, 왜인지 잘 모르겠다ㅠㅠ


또한 답에는 아이피가 포함된 url이 있었다. 아까 의심되었던 아이피가 포함된 url이었다.

이것도 아무리 찾아도 찾지 못했다..

또한 답에 하나가 더 있는데, pdf가 열린 후에 로드된 php url이었다...이것도 찾지 못했다..


왜인지 나는 없는 url이 없어서 많이 찾지 못했다...



문제3 답: 

Ahttps://onlineeast#.bankofamerica.com/cgi-bin/ias/*/GotoWelcome

https://banki

http://193.104.22.71/~produkt/9j856f_4m9y8urb.php

http://193.104.22.71/~produkt/69825439870/73846525#N

http://193.104.22.71/~produkt/983745213424/34650798253

http://search-network-plus.com/cache/PDF.php?st=internet%20Explorer%206.0

http://search-network-plus.com/cache/cgi.bin/ias/*/GotoWelcome

'EVI$I0N > 2019-1' 카테고리의 다른 글

[디지털포렌식] #02  (0) 2019.04.06
[웹보안] #02  (0) 2019.04.01
[딥러닝] #01  (0) 2019.03.25
[와이어샤크] #01  (0) 2019.03.25
[웹보안] #01  (0) 2019.03.16