소학회/인프런_강의정리

[Memory Forensic Volatility 와 악성코드 분석] ~7/24 강의 정리본

도아돵 2023. 7. 24. 02:59

[보안 메커니즘]

CPU - 링 모드

RING 0,3 주사용 / 대체로 1,2번은 자주 사용 X

RING 0-윈도우 운영체제의 모든 커널 코드

RING 3-유저모드 프로그램

CPU가 끊임없이 링 레벨을 확인함 -> 권한이 없는 메모리 접근 시 인터럽트!!

커널인지 유저 모드인지 링모드를 통해 확인함

 

유저는 프로세스를 바로 접근 불가 

유저모드 쪽에 PEB,TEB 를 통해 프로세스 접근 가능 (??)

 

KTHREAD에서만 디스패칭 정보 있음

*윈도우는 특권과 계정권한을 모두 사용하여 시스템 관리자로 어떤 계정들이 보안 관련 작업을 할 수 있는지 제어

 

[보안 식별자 :  SID(Security ID)]

- 시스템에서 동작하는 객체들을 식별하기 위해서 사용 (로컬과 도메인 그룹, 로컬 컴퓨터, 도메인, 도메인 멤버, 서비스)

- 보안 관리자는 프로세스인 Lsass.exe에서 관리

- SID는 크게 4개의 값으로 구분할 수 있으며, 하위 권한 식별 필요 시 -A가 추가되는 구조 (S-R-I-A[-A])

-> SID의 필드별 설명(S,R,I,A를 필드라고 부름)

S : 고정된 값 S = Identifies a SID

R :  보정 값 1 = 현재는 1이 사용된다. 이유는 없으며, Microsoft의 사정에 따라 변경될 수 있다.

I : 권한 식별

A: 하위 권한 식별

ex) S-1-1-0 = NULL (Everyone을 의미)

 

슈퍼특권들 위험할 수 있다 ..!>>!!!

음 강연자분 혼자 가상머신에 자료 복사해와서ㅓ 실습 진행 ..

 

이벤트 로그 종류

로그를 다 외울 필요까진 없음 .. 그냥 뭐 이런게 있구나 ~ / 포렌식에선 타임로그 중요*


 

 

[EPROCESS]
- 개별 프로세스를 나타내는 거대한 구조체
- KPROCESS(Kernel Process Block)의 포인터 포함
(프로세스 정보, 생성되는 스레드 정보를 가짐)
- 프로세스 식별 정보
- 프로세스에서 사용하는 메모리 정보
- PEB 위치 정보를 확인할 수 있으며 커널 모드에 위치 (PEB에는 EPROCESS에 관한 정보를 포함)

 

EPROCESS와 연관된 개체들

- 프라이빗 가상메모리 공간: 프로세스 실행파일 DLL,공유라이브러리,스택공간,합공간 , 사용자 입력 정보

 

 

dt _EPROCESS 입력 시 많은 구조체들 알 수 있음

 

 

 

 

 

 

EPROCESS 어떻게 찾는가 ? -> KDBG를 통해 찾기 가능 

[KDBG(_KDDEBUGGER_DATA64) 구조체]
- 크래시나 디버깅 시에 필요한 커널의 정보들을 담은 구조체
- 이 구조체는 아래와 같은 구조의 헤더로 시작


typedef struct _DBGKD_DEBUG_DATA_HEADER64 {
LIST_ENTRY64 List;
ULONG OwnerTag;
ULONG Size;
} DBGKD_DEBUG_DATA_HEADER64, *PDBGKD_DEBUG_DATA_HEADER64;

 


• 다음의 경우를 통하여 패턴 매칭
- List 변수의 마지막 8바이트가 항상 0으로 채워짐
- OwnerTag는 KDBG로 세팅
- Size는 XP일 경우 0x290, Windows 2000의 경우 0x208 Bytes

 

VAD (Virtual Address Descriptor)

: 페이지 폴트 발생 시 MMU는 프로세스 주소 공간에서 어떤 가상 주소가 예약되어 있는지 여부를 추적할 수 있게    관리하는 데이터 구조체 집합

- 각 프로세스 주소 공간 상태를 서술하며 자체 균형 AVL Tree 형식으로 구성되어 탐색을 용이하게 만듦

 

VAD유형

     -> Vad   -   nt!mm   -   Mm virtual address descriptors

     -> VadF   -   nt!mm   -   VADs created by a FreeVM splitting

     -> Vadl   -   nt!mm   - Mm virtual address descriptoer (long)

     -> VadS   -   nt!mm   - Mm virtual address descriptoer (short)

     **삽입된 쉘 코드를 포함하는 메모리 영역은 파일로 백업되지 않기 때문에 VadS나 VadF로 Tag가 설정

 

 VadS나 VadF로 Tag가 설정되어 있다면 한 번 의심해볼것 !!

파일로 백업되지 않은 부분에 MZ파일이 있다는 것은 인젭션된 (?) 모듈일 가능성 높음

<- 볼라틸리티 플러그 인을 통해 찾아볼 수 있음

 

DLL 세가지 이중 연결 리스트

-EPROCESS->Peb->Ldr->_PEB_LDR_DATA

 

  • Windbg *86으로 열어줄 것
  • 업로드 된 강의자료로 파일 오픈 후 심볼 설정