[OS] 윈도우 메모리( Windows Memory)

(1) 윈도우 메모리
1-1. 메모리 내 정보
-
복호화 된 파일 컨텐츠
-
사용자 패스워드
-
프로세스의 임시 저장 데이터
1-2-1. 메모리 분석 이유 1
-
직접 메모리에 로드 되어 실행되는 악성코드 존재
-
소기의 목적 달성을 위해 반드시 실행 파일로 존재
-
압축 / 암호화 되지 않은 평문의 실행 코드가 메모리에 올라와야 함
1-2-2. 메모리 분석 이유 2
-
폰 노이만 아키텍처 (Von-Neumann Architecture)

(2) 메모리 구조
2-1. 32bit CPU
-
2^32 = 4294967296 (0 ~ 4294967295) = 4Gbyte


2-2. 가상 메모리
-
32bit CPU
-
프로세스는 자신만의 가상 주소 공간을 가짐
-
프로세스가 소유하고 있는 메모리에 대해서만 접근
-
프로세스가 실제 필요한 부분만 메모리에 올리는 Demand-Paging 기법 사용
-
디스크 공간을 메모리처럼 활용 - 디스크 상에 존재하는 Paging File (Swap File)
-
모든 프로세서 사용 가능


CODE 영역
-
코드 자체를 구성하는 메모리 영역
-
프로그램 명령이 위치하는 곳 (기계어로 제어되는 메모리 영역)
DATA 영역
-
전역 변수(global), 정적 변수(static), 배열(array), 구조체(structure) 등이 저장
-
초기화 된 데이터 저장
-
프로그램이 실행 될 때 생성, 종료 시 반환
BSS 영역
-
Block Stated Symbol
-
전역 변수(global), 정적 변수(static), 배열(array), 구조체(structure) 등이 저장
-
초기화 되지 않은 데이터 저장
-
프로그램이 실행 될 때 생성, 종료 시 반환
Heap 영역
-
동적 데이터 영역
-
필요에 의한 동적 메모리 할당 시 위치하는 메모리 영역
-
사용자 요구에 맞게 메모리 할당
-
메모리 주소 값에 의한 참조
Stack 영역
-
프로그램이 자동으로 사용하는 임시 메모리 영역
-
지역 변수(Local), 매개 변수(Parameter), 리턴 값 등 잠시 사용되고 사라지는 데이터 저장
-
함수 호출 시 생성, 함수 끝나면 반환

예시
-
int A 선언
-
실행 파일 .exe 생성 : Header(code, bss, data) > PE(Portable Executive)
(3) 메모리 구조체

3-1. EPROCESS
-
윈도우에서 프로세스와 관련된 정보는 EPROCESS 구조체를 사용하여 관리
-
메모리 덤프는 EPROCESS 구조체와 EPROCESS 구조체 앞에 나오는 헤더 정보 추출
-
프로세스에 대한 구조체 여부 판단 > 공격자가 수행했던 프로세스에 대한 정보 획득

3-2. EPROCESS 정보
-
PCB(Process Control Block) : 스케줄링 관련 정보, KPROCESS 구조체, Type 값과 Size 값 확인
-
Create Time / Exit Time : 프로세스 실행 / 종료 시간
-
UniqueProcessId : 프로세스를 식별하는 고유한 PID 값 저장
-
ActiveProcessLinks(이중환형 링크드 리스트) : 두 개의 값이 각각 이전 프로세스와 이후 프로세스 가리킴
-
PEB(Process Environment Block) : 메모리에 올라가 있는 모듈 및 실행 커맨드 명령어 등

3-3. ActiveProcessLink
-
Flink 값 : 다음 프로세스 ActiveProcessLink를 가리킴
-
Blink 값 : 이전 프로세스의 ActiveProcessLink 시작점을 가리킴
-
PSActiveProcessHead 전역 변수 : Flink, Blink 값을 가지고 있음





-
KPROCESS의 Type 값과 Size 값 확인

-
Process인 경우 85343690 값을 가지고 있으며, PsProcessType 값과 동일

-
POOL_HEADER 의 PoolTag 값 확인


(4) DKOM(Direct Kernel Object Manipulation)
-
커널 객체(구조체)를 변경하여 은닉하는 방식
-
커널 디버깅을 통해 은닉하고자 하는 프로세스의 FLINK / BLINK 변경

4-1. 프로세스 은닉

-
1) 프로세스 확인

-
2) 해당 프로세스 상세 정보 확인

-
blink / flink 주소 값 변경
-
ed [blink 주소 값] [flink 주소 값]
-
ed [flink 주소 값 + 0x4] [blink 주소 값]
-
g

-
.dump /f c:\dfl\dbg.dmp
이후 volatility 메모리 분석 도구를 통하여 분석할 수 있으며, 사용 플러그인은 pslist, pstree, psscan 명령어로 확인 가능하다.
(5) 메모리 분석 요구사항
-
커널 오브젝트 구조
-
프로세스 관리
-
메모리 관리 기법

5-1. 커널 오브젝트
커널 오브젝트에 대한 내용 및 구조는 다음 [그림 25]와 같다.

'OS' 카테고리의 다른 글
[OS] Windows Structure & Folder (0) | 2020.05.21 |
---|---|
[OS] Windows Boot Process (0) | 2020.05.21 |