- 메모리 분석이 중요한 이유


  ● 악성 파일의 흔적을 찾기 위해서는 메모리 영역에서 분석해야 하기 때문

  ● 개인정보보호 프로그램이 악성코드 판별 기능이 없어서 악성코드조차 보호를 하는 경우가 발생하기 때문

  ● 안티포렌식 기술로 인한 무결성이 저해되기 전 메모리 복구를 하여 정보를 얻어내는것이 중요하기 때문


- 메모리 덤프


  ● 하드웨어를 이용한 메모리 덤프

  ● 소프트웨어를 이용한 메모리 덤프

  ● OS Crash 덤프

  ● 하이버네이션


- 가상 메모리 구조


  ● 가상 메모리란 가상의 기억공간으로 물리적으로 존재하지 않는 메모리다. 프로세스 생성 시 고정된 크기의 가상 메모리가 할당이           되는데 해당 프로세스는 이 가상 메모리를 이용하여 해당 작업을 수행한다. 여기서 가상 메모리는 32bit, 64bit 컴퓨터마다 고정 용량       이 다르다. 또한 가상 메모리 주소와 물리 메모리 주소도 다르며 가상 주소는 물리 메모리 주소와 맵핑되며 부족한 부분은 디스크 주       소를 사용한다.


그림 1) 가상 메모리와 기억 장치의 주소 맵핑(http://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/Virtual_memory.svg/200px-Virtual_memory.svg.png)


  ● 가상 메모리 구조를 간단히 보면 사용자 영역, 커널 영역이 있으며 디테일한 것은 서적이나 구글링을 통해 확인. 이 책엔 디테일한 구조가 나타나 있지만 구글링을 통해 찾지 못했음... 참고로 [그림 2]에서 위가 높은주소, 아래가 낮은주소를 뜻함.


그림 2) 가상메모리 구조

(http://blog.naver.com/psychoria?Redirect=Log&logNo=40113053480)


  ● 가상 메모리와 물리 메모리 맵핑은 TLB -> 가상주소와 물리주소 맵핑 -> 있다면 TLB에 업데이트 시키고 물리주소의 데이터 가져옴

    -> 없다면 가상메모리 주소 자체가 invalid거나 page-out상황



625

그림 3) 가상 메모리 물리 메모리 맵핑 과정

(http://sweeper.egloos.com/m/2988646)




그림 4) 가상주소로 물리주소 찾는 과정


 - EPROCESS, KPROCESS(PCB), PEB

  ● 위 단계와 아래 단계에서 모르는 용어가 몇 개 나와 이를 공부하고자 용어들을 간단하게 정리하려고 한다.


  ● EPROCESS

   ◇ 프로세스가 생성되면 해당 프로세스의 정보를 가진 EPROCESS라는 구조체가 커널 메모리에서 생성된다. 프로세스 관리를 이해하        기 위해 여러 객체를 포함하고 있으며 시스템 공간에 존재하기 때문에 WinDbg에서 확인할 수 있다.(그림 5의 맨 왼쪽 위치)


  ● KPROCESS(Process Control Block(PCB))

   ◇ EPROCESS의 하부 구조체로 해당 프로세스의 정보를 가지고 있다. 커널 동기화 객체, Dispatcher 객체, CR3 레지스터 값(Context        Switching시 Page Directory 물리 주소 저장소), 쓰레드 리스트 헤더, 프로세스 생성&종료 시간.... 등(그림 5의 오른쪽 위에 위치)

   ◇ 중요한 필드가 무엇인지 잘 몰라서 추후 공부하겠음....


  ● PEB(Process Environment Block)

   ◇ 유저 모드에서 수정되는 정보를 저장하는 구조체이고 프로세스 실행에 필요한 정보들을 담고 있다. 밑에 다시 설명




그림 5) EPROCESS, KPROCESS(PCB), PEB

(https://t1.daumcdn.net/cfile/tistory/1168DE0C4B7BB72130)



 - 프로세스

  ● 메모리 분석 시 프로세스를 찾는 것이 중요하다.  EPROCESS에는 많은 필드들이 있고 이들을 모두 분석한다면 아마....EPROCESS       의 필드 중 몇 가지 필드에 대해 설명하겠다.


㉠ PEB(Process Environment Block)

   ◇ 프로세스의 환경설정 값을 가지고 있고 프로세스가 로드한 모듈이나 이미지 로더, 힙 매니저 등 데이터를 담고 있다. 

       커널영역의 EPROCESS에 있는 PEB는 유저영역의 PEB의 주소를 가지고 있고, 유저영역의 PEB는 실제 프로세스 관련 데이          터들을 담고 있다.(그림 5 에서 동그라미를 제외한 부분이 커널 영역, 동그라미 친 부분이 유저영역)

 PEB가 커널영역과 유저영역에 둘 다 있는 이유는 데이터를 유연하게 접근하기 위해 유저영역에 둔 것이다. 

   

㉡ ActiveProcessLink

   ◇ 이 필드는 해당 시스템의 프로세스들 간의 연결을 담당하는 역할을 하고 이중연결리스트로 되어 앞뒤로 프로세스 walking을          할 수 있다. 예를들어 cmd.exe와 notepad.exe가 시스템에 올라와 있고 WinDbg로 cmd.exe의 ActiveProcessLink로 따라가게        된다면 notepad.exe의 EPROCESS의 PCB 필드를 가리키고 있다.

그림 6) ActiveProcessLink 역할 구조

(http://m.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?seq=17602)


 ※ PSActiveProcessHead는 ActiveProcessLink의 첫 시작점이다. 따라서 환형구조를 이루고 있다.

  

   ◇ DKOM(Direct Kernel Object Manipulation)


그림 7) DKOM을 통한 프로세스 은닉 구조

(http://codeengn.com/archive/Reverse%20Engineering/Hooking/DKOM%EC%9D%84%20%EC%9D%B4%EC%9A%A9%ED%95%9C%20%EC%9D%80%EB%8B%89%20%EA%B8%B0%EB%B2%95%20%5Balonglog%5D.pdf)


 ActiveProcessLink에서 은닉하고자 하는 프로세스의 링크를 없애는 것이다. 그림 7을 보면 더욱 이해가 편할 것이다. 프로세스를 은닉하는 이유는 프로세스를 은닉함으로써 분석을 어렵게 하고, 빠른 대응을 하지 못하게 함이 아닐까 생각한다.


  ● Process Enumeration

   ◇ Win API : CreateToolHelp32SnapShot()-> Process32First() -> Process32Next() -> NtGetSystemInformation() 호출

  -> NtGetSystemInformation()이 조작되면 Process 목록을 모두 출력하지 못하는 상황 발생

   ◇ 작업관리자, pslist(Volatility)

  -> 악성코드에 의해 OS는 잘못된 정보들을 얻어올 수 있음

   ◇ 리스트 워킹 : ActiveProcessLink를 따라다니며 모든 프로세스 목록을 얻음

   ◇ EPROCESS Scanning(패턴매칭) : EPROCESS가 공통적으로 가진 필드들을 조사하는 방법

   ◇ CSR PROCESS List 활용 : CSRSS.EXE 프로세스 생성시 내부적으로 프로세스 목록을 가지고 있다.

  -> 하지만 system, smss, csrss 프로세스는 나타나지 않는다.

   ◇ Thread List 활용 : Thread가 속한 Process를 얻을 수 있다.


'Computer > #Go2 포렌식' 카테고리의 다른 글

File System #3  (0) 2014.01.14
File System #2  (0) 2013.12.23
File System #1  (0) 2013.10.28
Live Response  (0) 2013.10.08
들어가며...  (0) 2013.10.07

+ Recent posts