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

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

도아돵 2023. 7. 17. 02:52

[커널]
- 운영체제 핵심!!//운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 가지 서비스 제공//하드웨어의 추상화

[커널의 기능적인 요소]
프로세스 관리
- 커널은 CPU 스케줄링을 관리
- 각각의 스레드별로 CPU 스케줄링
- 모든 스레드와 프로세스에 대한 정보는 메모리상의 데이터 구조체에 의해서 유지, 관리

[파일 접근]
- 디바이스 드라이버에 의해서 각종 파일시스템이 구현 및 처리
- 파일시스템에 대한 일관적인 인터페이스 제공

[보안]
- 프로세스간의 독립성 보장
- 각각의 프로세스 메모리 영역 분리 및 권한 설정
(대표적예시: 안티바이러스 .., 보안관리도 커널이 관리한다 )


[메모리 관리]

- 메모리 주소는 동시에 여러 개의 물리 메모리 주소로 매핑

 


 

실습 – Windbg를 활용한 커널 디버깅 

WinDbg - 커널 디버깅을 완벽하게 지원
- 확장 플러그인 등 강력한 기능 내장
- 명령어를 직접 입력해야 하는 CLI(Command Line Interface) 방식
https://msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx4
WinDbg Symbol - 전역 변수의 이름과 주소
- 각 엔트리 포인트의 함수 이름과 주소
- 로컬 변수의 이름과 주소
- 소스 파일의 경로와 줄 번호
- 변수와 구조 등의 타입 정보


* WinDbg<-명령어를 외워야한다는 단점이 있음 초심자는 사용하기 어려움 , 올리디버거는GUI방식

 

현재 노트북 내에 비쥬얼스튜디오 2022/window11버전이라 조건에 맞는 프로그램들을 다운로드함

 

엄청 헤메다가 시작한 다운로드 .. 벌써 체감상 6시간 한 기분
저번에 못받았던 것들도 다시 다운로드하는중

;

엥 아무리 설치 후 진행해도 windbg 실행안되고 똑같이 다시 경로로 다운받으라는 창만 연속하여 뜬다 ....<- 회의 때 물어봐야할듯                                                                                                                                                                                         

이런 식으로 모두 완료 하였는데 왜 계ㅖ속 아래 처럼 뜰까 .......?/??

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

뭐가 문젠진 모르겠지만 처음 다운로드 할 땐 다운로드 양이 적은 두 번째껄로 진행했었는데 실행되지 않아 첫번째로 다시 다운로드 받아서 진행하였다 .. 그랬더니 실행 되었다. 왜그랬을까 과연 ?

 

symbolpath 경로 설정// File-Symbol File Path or Ctrl +s

커널 디버깅 = 로컬 커널 디버깅,원격 커널 디버깅

커널 디버깅 모드를 활성화 ( 안전 장치) 

로컬 커널 디버깅 - 로컬머신 (추적,중지,제어기능 사용 불가능)

원격 커널 디버깅 - 별도 머신 ( 추적,중지,제어기능 사용 가능)

FIle - Kernel Debug

가상머신 종료 후 다시 버츄얼 박스 들어간 후 설정

경로 중요 !! \\.\pipe\vb_com !!

 

가상 머신 키지 않고 설정 바꿔줄 시 파이프가 만들어지지 않으므로 오류창이 뜬다

반드시 가상머신 키고 설정 바꿔줄 것!!

 

아 .. 강의대로 진행하였는데

이렇게 뜬다 .. 왜지  회의시간에 논의해봐야겠다 ..


*영주 블로그 참조 

가상머신에서 WinXP를 먼저 실행 후 COM설정한 것을 확인하려고 했는데 가상머신이 열리지 않는 오류가 남..

그래서 WinXP설정에서 존재하는 파이프~를 체크 해제한 후 가상머신을 실행했더니 실행이 되었고, Windbg에서 COM설정한 것도 확인을 눌렀다.

존재하는 파이프~ 해제 후 가상머신 열고 다시 진행해보았는데도 

이런에러창이 뜨고있다 점점머리가 아파온다 ^^ 

#계속 시도해본 끝에 진행되었다 ....... 대체 왜 계속 오류났었을까 ?? 흠 

아무튼 !!

;

dt_EPROCESS  심볼이 제대로 로드되었다면 EPROCESS 구조체 불러올 수 있음 !!

 

반드시 커널디버깅이 되어야 앞으로의 실습진행이 원활


[메모리 관리]
- 프로세스 별로 가상의 메모리 공간을 할당하여 기존의 물리 메모리의 용량 한계를
극복하고 충분하고 개별적인 메모리를 프로세스에 할당
- 메모리상의 일부 영역을 디스크로 페이징(paging)시켜 메모리 공간처럼 사용
- 메모리 관리자가 관리
(가상 메모리 할당과 해제, 프로세스간 메모리 공유, 파일과 메모리 맵핑 등)

 

*페이징_ 램은 '물리디스크'창고에 넣어 필요할 때 마다 사용

*메모리 관리자=mmu라 부름
[물리 메모리]
- 컴퓨터 실제의 한 물리적 부분으로 속도는 빠르나 용량의 한계를 가짐

[가상 메모리]
- 프로세스 별로 할당되는 가상의 메모리로 용량을 매우 크게 할당할 수 있음

실행파일(exe파일)은 페이지 테이블 엔트리를 참조하여 물리 메모리에 존재함 /exe파일 읽기위해선 커널에 접근하여야함

*Sysinternals Suite 다운로드 및 압축 풀기 후 vnmap 열고 에브리띵을 통해 가상메모리 확인가능

->강의에서는 에브리띵의 프로그램을 접근하였지만 카카오톡으로 확인해보았다.

 


[윈도우 실행부 객체(Window Executive Object)]
- 윈도우의 각 환경 서브시스템은 상이한 운영체제의 이미지를 자신의 애플리케이션에 투영함.

 

*익스큐티브 객체와 객체 서비스:환경 서브시스템이 자신만의 객체 버전과 그 밖의 자원을 구축하는 데 사용하는 근본이 되는 것

 

- 실행부(Executive Object)가 소유 및 관리하며 모두 42개의 객체 유형을 구현함

 

 

[핸들과 객체]

-객체:시스템 리소스를 재표현한 데이터 구조체 

-응용프로그램은 객체 데이터와 시스템리소스에 직접적으로 접근 불가

-커널은 데이터 객체를 컨트롤 하는 핸들 전달

 

 

 

+객체헤더 ; 객체 이름,디렉터리,보안 디스크립터,쿼터차지,오픈핸들개수 및 목록,객체 유형,참조카운트

객체 바디: 객체 특징적 데이터

 

*비트마스크 = InfoMask


풀 만들 때마다 태그를 달아줌/ 메모리 스캔은 풀헤더를 통해 확인

[풀 태그(Pool Tag)]
- 할당을 실행하기 위해 취한 경로를 유일하게 식별하는 ASCII 문자로 구성된 4바이

- 마이크로소프트에서 디버깅과 감사 목적으로 제작

풀 태그 검색방식
 풀 태그 탐색에 이용!
(Volatility의 경우 견고한 시그니쳐 확인으로 오탐을 줄임,
할당 크기와 메모리 유형은 오탐을 제거하는 데 주요역할을 함)
PVOID ExAllocatePoolWithTag(
_In_ POOL_TYPE PoolType,
_In_ SIZE_T NumberOfBytes,

_In_ ULONG Tag
);

 

 

 

 

 

 

 

 

 

 

Poolmon 실습 

 

메모리 유형(페이지,비페이지) / 할당 수 / 해제된 수 / 할당에서 점유하고 있는 전체 바이트 수/ 할당의 평균 바이트 등의 정보들을 리포트함

 

C드라이브 내에 gflag.exe 파일을 찾아 다음과 같이 디포트 되어있는지 확인할 수 있

 

 

원래 실습과정 중 일부인 라이브러리에서 poolmon.exe파일을 찾고 cmd 창으로 

#cd (poolmon.exe파일 경로) 입력시 왼쪽과 같은 그림이 떠야하는데 내 실습창은 오른쪽과 같았다 .. 아무래도 잘못된 호환을 지닌 버전으로 다운로드 한 것이었다 머리가 아파온 다 하 하하 .. 처음부터 다 엎어야 하는 걸까 ? ㅋ ㅋ 눈물이 앞을 가린다..


[디바이스 드라이버]

- 로드 가능한 커널 모드 모듈(sys 확장자)로 I/O 관리자와 관련 하드웨어 사이를 인터페이스로 연결 (IRP, I/O Request Packet)
- 직접 하드웨어를 조작하지 않고, 하드웨어와 통신하기 위해 HAL 내의 함수를 호출
- 유저 모드 프로그램과 통신하기 위해서 IRP에 대한처리가 필요

 

WDK 무조건 설치 !! / 소스찾아가는 경로에는 절떄 띄어쓰기가 있으면 안된다 !!!

exe 파일 실행시 -> main 함수 호출

dll 파일 실행시 -> process attaach/dettach 경우 나뉨

OnUnload 는 dll 로 따질 때 dettach  경우임


콜백(Callback)
- 다른 코드의 인수로서 넘겨주는 실행 가능한 코드
- 콜백을 넘겨 받는 코드는 특정 코드를 실행

• 콜백 함수
- 호출될 함수를 알려 주어 다른 프로그램/모듈에서 함수를 호출하게 하는 방법.
- 일반적으로 운영 체계(OS)가 호출할 애플리케이션의 함수를 지정해 특정한 사건 또
는 메시지가 발생했을 때 호출되도록 지정가능

콜백실습- 파이썬코딩

-> 지금까지 실습하면서 느낀점 : 내가 봤을 땐 외장하드 꼭 필요 ... 프로그램들 전부 넣고 실습 사용할 떄마다 용량 차지 않도록 외장하드 사용해주는 것이 좋을듯...