[Digital Forensic] 메모리 분석 (2)

 

메모리 분석


(4) 프로세스

  • 메모리 분석에서 제일 중요한 것은 프로세스를 찾는 것

  • 특히 루트킷에 의해 숨겨진 프로세스를 찾는 것은 안티 루트킷 도구들과 메모리 분석으로 할 수 있는데, 안티 루트킷 도구를 사용하면 조사 환경에 어떠한 영향을 주기 때문에 포렌식 관점에서 메모리 분석보다 좋지 못한 방법 (무조건은 아님)

 

메모리에서 프로세스를 찾기 전에 프로세스가 어떻게 정보를 저장하고 어떻게 관리가 되는지부터 공부해야 한다.

 

윈도우에서는 EPROCESS라는 구조체로 프로세스의 모든 정보가 들어가 있다.

 

다음은 포렌식 관점에서 볼 때, 중요한 EPROCESS 구조체이다.

 

1) PCB (Process Control Block)

  • DISPATCHER_HEADER, 디렉토리 테이블 주소, KTHREAD 목록, 우선 순위, 커널/유저 CPU 시간 등에 대한 정보를 가짐

 

2) CreateTime

  • 프로세스가 종료된 시간 정보를 가짐

  • 64bit 윈도우 시간 형식을 지님

 

3) ExitTime

  • 프로세스가 시작된 시간 정보를 가짐

  • 64bit 윈도우 시간 형식을 지님

 

4) UniqueProcessId

  • 프로세스 ID 값을 가지고 있음

 

5) ActiveProcessLinks

  • ActiveProcess List를 구성하는 이중 링크드 리스트

 

6) ObjectTable

  • 오브젝트 핸들 테이블의 위치를 가리키는 포인터 값

 

7) WorkingSet Page

  • 프로세스의 WorkingSetPage

  • WorkingSet은 어떤 특수 프로세스 전용으로 할당된 물리적 메모리 페이지 그룹

 

8) PEB (Process Environment Block)

  • 프로세스 실행에 필요한 정보들을 담고 있음

  • BaseAddress, Module List, Heap/Stack 정보가 들어 있음

 

만약 메모리 덤프 파일에서 프로세스를 찾는다면 PCB와 ActiveProcessLinks 항목을 주로 이용할 것이며, 프로세스 정보를 찾는다면 나머지 필드들과 PEB 항목을 주로 이용할 것이다.

 

EPROCESS의 PCB 항목 데이터 타입을 보면 KPROCESS라고 되어 있는데 이 또한 구조체로서 EPROCESS의 하부 구조체이다.

 

KPROCESS는 프로세스의 스케줄링 관련 정보를 저장하고 있으며, KPROCESS 하부 구조체 중 DISPATCHER_HEADER라는 하부 구조체가 있는데 이 구조체는 프로세스들 사이의 동기화에 필요한 구조체이며 메모리 덤프에서 오브젝트를 찾을 때 중요한 역할을 한다.

 

커널 영역에 있는 또 다른 구조체인 ETHREAD, KTHREAD는 위 구조체들과 구조는 같으나 다루고 있는 대상이 스레드라는 점에서만 차이가 있다.

 

 

4-1. PEB

  • EPROCESS의 하부 구조체 중 하나로, 프로세스의 환경 설정 값을 가짐

  • 하지만 직접 값을 가지고 있지는 않으며, 사용자 영역에 있는 PEB에 대한 포인터 값만을 가짐

  • 커널 영역에 속하는 PEB를 사용자 영역에 하나 더 두고 그것을 포인터 값으로 가지는 이유는 PEB에 저장되는 데이터는 사용자 모드로 접근하는 이미지 로더, 힙 매니저, 윈도우 시스템 DLL 파일이 필요로 하는 정보이기 때문

  • 그렇기 때문에 커널 영역에 있으면 접근하지 못하므로 사용자 영역에 저장하는 것

 

4-2. ActiveProcessLink

  • 환형 이중 링크드 리스트로 이루어짐

  • 이 항목을 통해 프로세스의 목록을 얻을 수 있음

 

환형 이중 링크드 리스트 : 이중 링크드 리스트에 PsActiveProcessLink라는 커널 전역변수를 추가해 순환 구조를 만들어 준 것

 

PsActiveProcessLink : ActiveProcessLink와 같은 구조로 되어 있으며, 이 변수에 접근하려면 커널 프로세스 권한 필요

 

ActiveProcessLink : 작업 관리자를 열면 System(4)라는 프로세스를 볼 수 있는데 이 프로세스는 윈도우 커널을 의미하며, 언제나 ActiveProcessLink의 첫 번째 프로세스가 됨

 

 

4-3. DKOM (Direct Kernel Object Manipulation)

  • 커널 오브젝트(EPROCESS)를 수정하여 프로세스를 숨기는 방법

  • 정상적인 프로세스 환형 이중 링크드 리스트에서 숨기고자 하는 프로세스를 환형 이중 링크드 리스트에서 빼내는 것

  • 일반적으로 ActiveProcessLink를 참조하여 프로세스 목록을 얻는 도구들은 숨겨진 프로세스를 찾을 수 있음

 

숨겨진 프로세스는 자신을 가리키도록 만드는데 이렇게 하는 이유는 숨겨진 프로세스에 의해 BSOD가 일어나지 않게 하기 위함이다.

 

커널이 프로세스를 관리하기 위해 참조하는 ActiveProcessLink에서 제외되면 커널의 관리를 받지 못하므로 프로세스가 종료되야 하는데 종료되지 않는 이유는 다음과 같다.

 

  • 숨겨진 해당 프로세스가 점유하고 있는 자원이 회수되지 않고 메모리에 그대로 남아 있기 때문에 프로세스는 생존할 수 있는 것

  • 윈도우는 프로세스 단위가 아닌 스레드 단위로 처리 기준을 정해 놓았기 때문에 프로세스가 종료되더라도 스레드만 살아있으면 얼마든지 어떠한 행위의 동작이 가능

 

 

4-4. 커널 오브젝트 검색 방법

 

1) 리스트 워킹

  • 하나의 단서를 근거로 하여 목적지까지 거슬러 올라가는 방법

  • 어떤 프로세스의 ActiveProcessLink를 알고 있다면 앞이나 뒤의 프로세스를 계속 찾다 보면 결국 다시 처음 출발하였던 곳으로 돌아올 것이고, 그 동안 거쳐왔던 프로세스를 나열하면 프로세스 목록이 얻어지는 것

  • 하지만 DKOM 기법을 이용하면 이 검색 방법으로는 숨겨진 프로세스를 찾을 수 없음

 

2) 또 다른 리스트 워킹

  • 명칭은 위와 같지만 다른 리스트 워킹 방법

  • 이 기법은 EPROCESS가 아닌 또 다른 커널 구조체인 KPCR을 기초로 함

  • KPCR은 XP, 2003에서 가상 주소 0xFFDFF000에 위치하며 KPCR의 확장 영역인 KPCRB는 같은 버전에서 0xFFDFF120에 위치

  • KPCRB는 EPROCESS의 KTHREAD 구조체에 대한 포인터 값이 들어 있어 KPCRB를 통해 KTHREAD를 알면 EPROCESS의 위치도 알 수 있음

  • 이 방법은 위 기존 리스트 워킹 방법과 마찬가지로 DKOM 기법이 적용된 프로세스는 찾지 못하며, Vista 이후 버전들의 KPCR 주소가 컴퓨터마다 달라 Vista 이후 버전에는 적용하기 힘듦

 

3) 패턴 매칭

  • 리스트 워킹 한계 극복을 위해 개발된 기법

  • 해당 방법의 기본 원리는 Windows의 프로세스와 스레드의 일정한 구조를 이용한 것

  • 예로, 모든 커널 오브젝트는 OBJECT_HEADER라는 구조체를 공통적으로 가지고 있으며, 이를 이용해 메모리에서 오브젝트를 찾을 수 있음


(5) 메모리 분석

이전에는 메모리 분석이라고 하면 문자열 검색이나 파일 카빙 정도에 그쳤지만, 요즘은 메모리 연구가 계속 되어 메모리에서 추출할 수 있는 데이터와 그 방법들이 많아져 전문 도구까지 개발되어 사용자들에게 배포되었다.

 

파일 카빙 : 바이너리 데이터로부터 의미있는 데이터를 획득하는 기법으로 의미 있는 데이터를 선별해 추출한다는 것이 일반 추출과 구분지어 줌

 

 

5-1. volatility

  • 해당 도구는 메모리 분석 툴로, 다양한 기능과 플러그인을 제공하는 CLI 도구이며, 파이썬 기반으로 만들어 짐

  • 해당 도구에서 프로세스 목록을 얻는 방법은 pslist와 psscan이 있음 (pstree도 방법 중 하나)

  • pslist와 psscan 옵션 결과는 덤프 이미지에 따라 다를 수 있으며, pslist는 리스트 워킹 방식을 사용하기 때문에 숨겨진 프로세스를 찾지 못하는 반면, psscan 옵션은 패턴 매칭 방식을 사용하여 숨겨진 프로세스까지 찾아 줌

  • 속도면에서는 pslist가 더 빠르지만 결과물 면에서는 psscan이 더 좋음

  • 네트워크 연결 정보는 connections, connscan 옵션을 사용하면 정보를 얻을 수 있음

 

그런데 connections와 connscan 옵션 결과가 다르게 나오기도 한다.

 

이유는 connections 옵션이 제대로 실행이 되지 않았기 때문이며, 윈도우 보안패치 때문이다.

 

해당 도구는 여러가지 플러그인을 추가할 수 있도록 되어 있고, 이 도구를 모듈로 또 다른 도구를 제작할 수도 있다.

 

실제로 외국 전문가들은 해당 도구 플러그인을 만들어 추가 후 사용하고 있기도 하고, 국내에서는 해당 도구 플러그인을 이용해 간단 스크립트를 만들어 작업을 자동화하기도 한다.

 

 

5-2. Redline

  • Memoryze 도구의 업그레이드 버전으로 GUI 버전

  • .net(닷넷) 프레임워크를 기반으로 제작되었으며, 포터블 형식으로 폴더만 외장장치로 복사하여 다른 시스템에사 사용할 수 있는 장점을 가짐

  • 하지만 지원하지 못하는 이미지 버전 등이 있어 아직 모든 시스템에 적용할 수 있는 것은 아니며, 구동하려는 시스템에 .NET(닷넷) 프레임워크가 설치되어 있지 않다면 실행되지 않음

 

Redline은 4가지(Quick, Standard, Full, Custom) 분석 모드를 지원하고 있고, MRI core 리포트부터 여러 가지 리포트를 보여준다.

 

프로세스 목록은 물론 핸들, 실행 명령어, 네트워크 연결 정보, 후킹, 드라이버 목록 등의 정보를 보여준다.

 

해당 도구는 프로세스 별로 핸들, 네트워크 정보 등을 볼 수 있도록 되어 있어 편리하다.


메모리에서는 유효한 데이터를 얼마든지 찾을 수 있으며, 암호화가 되지 않은 채로 저장되어 충분히 유효한 데이터를 찾을 수 있다.

 

이런 이유로 침해사고가 발생했을 시에 휘발성 정보 수집도 중요하지만 메모리 덤프 파일을 획득하는 것도 중요하다.

 

메모리 덤프를 수행하였을 때 데이터가 얼마나 남아있는가에 따라 얻을 수 있는 데이터의 양이 달라지기 때문이다.


# Reference

 

http://www.yes24.com/Product/Goods/8511539

+ Recent posts