- 메모리 분석이 중요한 이유
● 악성 파일의 흔적을 찾기 위해서는 메모리 영역에서 분석해야 하기 때문
● 개인정보보호 프로그램이 악성코드 판별 기능이 없어서 악성코드조차 보호를 하는 경우가 발생하기 때문
● 안티포렌식 기술로 인한 무결성이 저해되기 전 메모리 복구를 하여 정보를 얻어내는것이 중요하기 때문
- 메모리 덤프
● 하드웨어를 이용한 메모리 덤프
● 소프트웨어를 이용한 메모리 덤프
● 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상황
그림 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을 통한 프로세스 은닉 구조
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 |