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

 

윈도우 메모리


(1) 윈도우 메모리

1-1. 메모리 내 정보

  • 복호화 된 파일 컨텐츠

  • 사용자 패스워드

  • 프로세스의 임시 저장 데이터 

 

1-2-1. 메모리 분석 이유 1

  • 직접 메모리에 로드 되어 실행되는 악성코드 존재

  • 소기의 목적 달성을 위해 반드시 실행 파일로 존재

  • 압축 / 암호화 되지 않은 평문의 실행 코드가 메모리에 올라와야 함

 

1-2-2. 메모리 분석 이유 2

  • 폰 노이만 아키텍처 (Von-Neumann Architecture)

[그림 1] 폰 노이만 아키텍처


(2) 메모리 구조

2-1. 32bit CPU

  • 2^32 = 4294967296 (0 ~ 4294967295) = 4Gbyte

[그림 2] 메모리 구조 1

 

[그림 3] 메모리 구조 2

 

 

2-2. 가상 메모리

  • 32bit CPU

  • 프로세스는 자신만의 가상 주소 공간을 가짐

  • 프로세스가 소유하고 있는 메모리에 대해서만 접근

  • 프로세스가 실제 필요한 부분만 메모리에 올리는 Demand-Paging 기법 사용

  • 디스크 공간을 메모리처럼 활용 - 디스크 상에 존재하는 Paging File (Swap File)

  • 모든 프로세서 사용 가능

[그림 4] 가상 메모리 주소

 

[그림 5] 가상 메모리 영역

 

CODE 영역

  • 코드 자체를 구성하는 메모리 영역

  • 프로그램 명령이 위치하는 곳 (기계어로 제어되는 메모리 영역)

DATA 영역

  • 전역 변수(global), 정적 변수(static), 배열(array), 구조체(structure) 등이 저장

  • 초기화 된 데이터 저장

  • 프로그램이 실행 될 때 생성, 종료 시 반환

BSS 영역

  • Block Stated Symbol

  • 전역 변수(global), 정적 변수(static), 배열(array), 구조체(structure) 등이 저장

  • 초기화 되지 않은 데이터 저장

  • 프로그램이 실행 될 때 생성, 종료 시 반환

Heap 영역

  • 동적 데이터 영역

  • 필요에 의한 동적 메모리 할당 시 위치하는 메모리 영역

  • 사용자 요구에 맞게 메모리 할당

  • 메모리 주소 값에 의한 참조

Stack 영역

  • 프로그램이 자동으로 사용하는 임시 메모리 영역

  • 지역 변수(Local), 매개 변수(Parameter), 리턴 값 등 잠시 사용되고 사라지는 데이터 저장

  • 함수 호출 시 생성, 함수 끝나면 반환

[그림 6] 가상 메모리 영역 역할

 

예시

  • int A 선언

  • 실행 파일 .exe 생성 : Header(code, bss, data) > PE(Portable Executive)


(3) 메모리 구조체

 

[그림 7] 메모리 구조체

 

3-1. EPROCESS

  • 윈도우에서 프로세스와 관련된 정보는 EPROCESS 구조체를 사용하여 관리

  • 메모리 덤프는 EPROCESS 구조체와 EPROCESS 구조체 앞에 나오는 헤더 정보 추출

  • 프로세스에 대한 구조체 여부 판단 > 공격자가 수행했던 프로세스에 대한 정보 획득

[그림 8] EPROCESS 구조체

 

3-2. EPROCESS 정보

  • PCB(Process Control Block) : 스케줄링 관련 정보, KPROCESS 구조체, Type 값과 Size 값 확인

  • Create Time / Exit Time : 프로세스 실행 / 종료 시간

  • UniqueProcessId : 프로세스를 식별하는 고유한 PID 값 저장

  • ActiveProcessLinks(이중환형 링크드 리스트) : 두 개의 값이 각각 이전 프로세스와 이후 프로세스 가리킴

  • PEB(Process Environment Block) : 메모리에 올라가 있는 모듈 및 실행 커맨드 명령어 등 

[그림 9] EPROCESS 정보

 

3-3. ActiveProcessLink

  • Flink 값 : 다음 프로세스 ActiveProcessLink를 가리킴

  • Blink 값 : 이전 프로세스의 ActiveProcessLink 시작점을 가리킴

  • PSActiveProcessHead 전역 변수 : Flink, Blink 값을 가지고 있음

[그림 10] ActiveProcessLink

 

[그림 11] EPROCESS 카빙 1

 

[그림 12] EPROCESS 카빙 2

 

[그림 13] EPROCESS 카빙 3

 

[그림 14] EPROCESS 카빙 4

 

  • KPROCESS의 Type 값과 Size 값 확인

 

[그림 15] EPROCESS 카빙 5

 

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

 

[그림 16] EPROCESS 카빙 6

 

  • POOL_HEADER 의 PoolTag 값 확인

 

[그림 17] EPROCESS 카빙 7

 

[그림 18] EPROCESS 카빙 8


(4) DKOM(Direct Kernel Object Manipulation)

  • 커널 객체(구조체)를 변경하여 은닉하는 방식

  • 커널 디버깅을 통해 은닉하고자 하는 프로세스의 FLINK / BLINK 변경

[그림 19] DKOM

 

 

4-1. 프로세스 은닉

 

[그림 20] 프로세스 은닉 (1)

  • 1) 프로세스 확인

 

[그림 21] 프로세스 은닉 (2)

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

 

[그림 22] 프로세스 은닉 (3)

  • blink / flink 주소 값 변경

  • ed [blink 주소 값] [flink 주소 값]

  • ed [flink 주소 값 + 0x4] [blink 주소 값]

  • g

 

[그림 23] 프로세스 은닉 (4)

  • .dump /f c:\dfl\dbg.dmp

 

이후  volatility 메모리 분석 도구를 통하여 분석할 수 있으며, 사용 플러그인은 pslist, pstree, psscan 명령어로 확인 가능하다.


(5) 메모리 분석 요구사항

  • 커널 오브젝트 구조

  • 프로세스 관리

  • 메모리 관리 기법

[그림 24] 메모리 분석 요구 사항

 

5-1. 커널 오브젝트

 

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

 

[그림 25] 커널 오브젝트 구조 및 내용

'OS' 카테고리의 다른 글

[OS] Windows Structure & Folder  (0) 2020.05.21
[OS] Windows Boot Process  (0) 2020.05.21

[OS] Windows Structure & Folder

 

윈도우 구조체


(1) 윈도우 구조체 (Windows Structure)

 

1-1. HAL (Hardware Abstraction Layer)

  • 새로운 하드웨어가 개발되어 시스템이 장착되더라도 드라이버 개발자가 HAL 표준에 따라 드라이버가 개발하면 장착된 하드웨어와 시스템 간 원활한 통신이 가능

  • 번역자 역할

1-2. 마이크로 커널 (Micro Kernel)

  • 본래 커널의 역할을 여러 관리자에게 분담시키고 자신의 하드웨어와의 통신만을 제어

  • %SystemRoot%system32%ntoskrnl.exe 파일이 수행

1-3. 입출력 관리자

  • 시스템의 입출력을 제어

  • 장치 드라이버 사이에어 메시지를 전달

  • 응용 프로그램이 하드웨어와 곧바로 통신할 수 있는 통로 제공

1-4. 객체 관리자

  • 파일, 포트, 프로세스, 스레드와 같은 각 객체에 대한 정보 제공

1-5. 보안 참조 관리자

  • 각 데이터나 시스템 자원의 제어 허가 / 거부함으로써 강제적으로 시스템 보안 설정을 책임

1-6. 프로세스 관리자

  • 스레드를 생성하고 요청에 따라서 처리

1-7. 로컬 프로시저 호출 (Local Procedure Call)

  • 프로세스는 서로의 메모리 공간을 침범하지 못하기 때문에 프로세스 간에 통신이 필요한 경우에 이를 대신해 줄 수 있는 장치

1-8. 가상 메모리 관리자

  • 응용 프로그램의 요청에 따라 RAM의 메모리를 할당해주고, 가상 메모리의 페이징(Paging) 제어

1-9. Win32 서브 시스템

  • Win32 서브 시스템은 윈도우의 기본적인 서브 시스템

  • 32비트 응용 프로그램이 동작할 수 있게 도와주고, 기본적인 윈도우의 사용자 인터페이스 제공

  • 비디오 디스플레이, 키보드, 마우스 등을 지원하는 서브 시스템

1-10. POSIX (Portable Operating System Interface)

  • 유닉스 운영체제에 기반을 두고 있는 일련의 표준 운영체계 인터페이스

1-11. 보안 서브 시스템

  • 사용자가 로그인 할 때, 데이터를 보호하고 운영체제가 이를 제어할 수 있도록 만든 서비스 시스템 

1-12. OS/2 서브 시스템

  • OS/2와 호환을 위한 서브 시스템

1-13. 프로세스

  • 실행 중인 프로그램

  • 개별 프로세스는 자신의 가상 주소 공간에서 실행

  • 커널이 제공하는 인터페이스를 통해서만 다른 프로세스와 연동

  • 운영체제는 각각의 프로세스가 사용하는 시스템의 자원을 추적 및 제어


(2) Kernel (커널)

 

[그림 1] 커널

 

  • 운영체제의 핵심 부분

  • 하드웨어와 프로세스의 보안을 책임지는 역할

  • 한정된 시스템 자원을 효율적으로 관리하는 자원 관리 역할

  • 일관성 있는 인터페이스 제공하는 추상화 역할


(3) Windows Folder

3-1. C:\Documents and Settings

  • 각기 다른 사용자 계정이 존재하며, 각 계정 아래에 계정 별 환경 정보를 저장

  • 즐겨 찾기, 내 문서, 시스템 폰트, Outlook Express 편지함 등의 폴더 존재

  • All Users 폴더의 하위 폴더에는 모든 사용자들이 공통적으로 가지고 있는 바탕 화면과 시작 메뉴에 대한 정보 존재 

3-2. C:\Program Files

  • 각종 응용 프로그램들이 설치되는 폴더

  • C:\Program Files\Common Files에는 시스템 정보 파일 존재

3-3. C:\Windows

  • 운영체제를 구성하는 핵심 파일들과 마우스 사용 커서, 글꼴 등 저장

  • Cursors : Windows 사용 각종 커서

  • Downloaded Program Files : 인터넷에서 다운로드 받은 플러그인이나 Active X 등 저장

  • inf : 각종 프로그램 설치 파일, inf 확장자 파일들만 모아 둔 폴더

  • Repair : '마지막으로 성공한 구성'으로 부팅할 때, 사용하는 레지스트리 정보 저장

  • System : 16bit 처리를 담당하는 시스템 드라이브와 DLL 파일 저장

  • System32 : Windows 실행에 핵심이 되는 DLL, Drive가 저장되어 있는 폴더

  • System32/config : Windows의 레지스트리 파일 저장

이외에 다른 Windows 폴더들은 다음과 같다.

 

[그림 2] Windows 폴더

'OS' 카테고리의 다른 글

[OS] 윈도우 메모리(Windows Memory)  (0) 2020.05.21
[OS] Windows Boot Process  (0) 2020.05.21

[OS] Windows Boot Process

 

윈도우 부트 프로세스


(1) 윈도우 부팅 과정

 

윈도우 운영체제의 부트 프로세스 과정은 다음과 같다.

 

[그림 1] 부트 프로세스 과정

 

  • 1. POST (Power On Self Test)

  • 2. BUS Test

  • 3. RTC (Real Time Clock)

  • 4. Video (POST)

  • 5. RAM Test

  • 6. CMOS (Complementary Metal-Oxide-Semiconductor)

  • 7. MBR (Master Boot Record)

 

[그림 2] 윈도우 부팅 과정

 

  • 1. MBR (Master Boot Record)

  • 2. 부트 섹터 (Boot Sector)

  • 3. NTLDR (Winload.exe)

  • 4. Ntoskrnl.exe

  • 5. Smss.exe

  • 6. Csrss.exe

  • 7. Wininit.exe

  • 8. Lsass.exe

  • 9. Services.exe

  • 10. 프로그램 실행

  • 11. 커널 요청


(2) 윈도우 프로세스 설명

1. csrss.exe (Client / Server Runtime SubSystem, Win32)

  • 윈도우 콘솔 관장

  • 스레드 생성 / 삭제

  • 32비트 가상 MS-DOS 모드 지원

2. explorer.exe

  • 작업 표시줄, 바탕 화면과 같은 사용자 셀 지원

3. lsass.exe (Local Security Authentication Server)

  • Winlogon 서비스에 필요한 인증 프로세스 담당

4. mstask.exe (Windows Task Scheduler)

  • 시스템에 대한 백업이나 업데이트 등에 관련된 작업 스케줄러

5. smss.exe (Session Manager System)

  • 사용자 세션을 시작

  • Winlogon / Win32(csrss.exe) 구동

  • 시스템 변수 설정

  • Winlogon이나 csrss가 끝나기를 기다려 정상적인 Winlogon과 csrss 종료 시 시스템 종료

6. Spoolsv.exe (Printer Spooler Service)

  • 프린터와 팩스의 스풀링 기능 담당

7. Service.exe (Service Control Manager)

  • 시스템의 서비스들을 시작 / 정지

  • 서비스들간 상호 작용 기능 수행

8. System

  • 대부분의 커널 모드 스레드의 시작점이 되는 프로세스

9. System Idle Process 

  • 각 CPU마다 하나씩 실행되는 스레드로서 CPU의 잔여 프로세스 처리량을 %로 표시

10. winlogon.exe (Windows Logon Process)

  • 사용자 로그온 / 로그오프를 담당

  • 윈도우 시작 / 종료 시에 활성화

  • <단축키 : Ctrl + Alt + Del>

11. taskmgr.exe (task manager)

  • 작업 관리자 자신

12. winmgmt.exe (Windows Manager Service)

  • 장치들에 대한 관리

  • 계정 관리

  • 네트워크 등의 동작에 관련된 스크립트를 위한 프로세스

13. msdtc.exe (Distributed Transaction Coordinator)

  • 웹 서버 및 SQL 서버 구동 시 다른 서버와의 연동을 위한 프로세스

14. ctfmon.exe (Alternative User Input Services)

  • 키보드, 음성, 손으로 적은 글 등 여러 가지 텍스트 입력에 대한 처리를 할 수 있도록 지원

15. dfssvc.exe

  • 분산 파일 시스템(DFS, Distributed File System)에 대한 지원을 위해 백그라운드로 실행 되는 프로세스

16. Wininit.exe

  • 코어 시스템 프로세스, 백그라운드 프로세서


(3) Svchost.exe 프로세스

 

Svchost.exe

  • 동적 연결 라이브러리(DLL)에서 실행되는 서비스의 일반 호스트 프로세스 이름

  • 저장 위치 : %SystemRoot%\System32

  • Svchost.exe 정보 : HKLM/Software/Microsoft/WindowsNT/CurrentVersion/Svchost

  • Svchost에서 실행 중인 서비스 목록 확인 : 프로세스 모니터링 Tools (procexp, tlist, pslist...)

  • Svchost와 유사한 이름을 갖는 바이러스 : Win32.HLLP.Jeefo.36352, Win32.HLLW.Agobot...

  • Svchost로 인한 오류 현상 : CPU 점유율 상승 (시스템 지연), 메모리 증가

해당 프로세스는 작업 관리자에서 실제 악성 프로그램으로 보이지 않고, 다수의 Svchost.exe 프로세스가 실행되므로 악용되는 사례가 매우 많다.

'OS' 카테고리의 다른 글

[OS] 윈도우 메모리(Windows Memory)  (0) 2020.05.21
[OS] Windows Structure & Folder  (0) 2020.05.21

+ Recent posts