일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C언어 알고리즘
- c언어
- 활성화함수파이썬
- 버퍼오버플로우
- 딥러닝파이썬
- 8086CPU레지스터
- 보안
- 백준
- 백준알고리즘
- 달고나bof
- 소프트맥스함수
- 파이썬
- 인공지능
- 항등함수
- 밑바닥부터시작하는딥러닝
- C언어알고리즘
- C알고리즘
- 신경망구현
- 파이썬신경망
- FTZlevel10
- 스트림암호
- 알고리즘
- BOF
- 신경망파이썬
- BOJ
- 신경망 학습
- 딥러닝
- 정보보안
- 신경망
- 머신러닝
- Today
- Total
HeeJ's
[03] pslist 우회하기(PROCESS) :: Anti Memory Forensics/Volatility 본문
[03] pslist 우회하기(PROCESS) :: Anti Memory Forensics/Volatility
meow00 2020. 8. 1. 02:57psxview의 필드들의 우회를 진행해보려고 한다.
실습환경 : Windows10 x64
psxview의 필드들 중, pslist 우회를 제일 먼저 진행해보고자 한다.
우회를 진행할 프로세스는 MalwareProcess이다.
volshell을 실행시키고,
ps() 명령어로 MalwareProcess의 가상주소를 확인해주었다.
=> 0xfffffa80090bb600
MalwareProcess의 Flink 주소를 IMGSF50Start_x의 Flink에 넣어주어 IMGSF50Start_x의 Flink가 GoogleUpdate를 가리키게 하여 MalwareProcess를 은닉.
위의 방법으로 pslist를 은닉해보려고 한다.
그러기 위해서 MalwareProcess의 EPROCESS를 확인해 0x188에 위치한 ActiveProcessLinks를 확인해야한다.
ActiveProcessLinks를 LIST_ENTRY로 확인하면 Flink와 Blink의 주소를 얻을 수 있다.
MalwareProcess의 Flink와 Blink를 얻었다.
Flink값을 hex로 변환해주면
0xfffffa8006e0dcb8 임을 알 수 있다.
Flink를 이용해 뒤 프로세스인 GoogleUpdate.e로 이동해보았다.
아래의 Offset과 맨 위 ps()의 GoogleUpdate.e의 offset을 같은 것을 확인하며 다음 프로세스로 넘어온 것을 확인할 수 있다.
MalwareProcess의 KPROCESS를 확인해보았다.
KPROCESS는 NULL 동기화 객체와 관련된 디스패처 객체 헤더, 가상 메모리의 CR3 레지스터 값, 프로세스에 속해있는 스레드 리스트 헤더, CPU에 대한 종속성, 프로세스 우선순위, 프로세스에서 생성되는 스레드의 기본 실행 시간 값 등과 같은 정보를 가지고 있다.
[출처] https://wisetrue.tistory.com/218
MalwareProcess의 DTB(DirectoryTableBase)를 찾아내기 위해서이다.
DTB값을 이용하면 가상주소를 물리주소로 변환할 수 있다.
어쩌구 저쩌구 이렇게 하면 되지만,
psxview를 보면, 물리주소가 나와있어 그걸 이용해도 된다.
psxview에서 확인한 MalwareProcess의 물리주소는 0x1dabb600이다.
이제 IMGSF50Start_x의 Flink 값을 MalwareProcess의 값으로 바꿔주어
IMGSF50Start_x에서 link를 타면 GoogleUpdate.e로 이동할 수 있도록 해주면 된다.
MalwareProcess에서 GoogleUpdate.e로 이동하는 ActiveProcessLinks(Flink)값이 0xfffffa8006e0dcb8이었음을 기억하고,
IMGSF50Start_x의 물리주소를 psxview에서 확인하고, (0x1dabbb30)
flink값을 변환해주기 위해 HxD로 sample.vmem을 열어주었다.
그리고
IMGSF50Start_x의 물리주소 값으로 이동해주었다.
03 00 58 00 이라는 EPROCESS의 헤더 시그니처를 확인하고
ActiveProcessLinks(Flink)가 존재하는 0x188만큼 뒤로 이동했다.
이 부분이 바로 IMGSF50Start_x의 Flink 값인 것이다. (0xfffffa80090bb788)
위의 값은 리틀엔디안 방식으로 읽어주어야 한다.
이 부분의 값을 아까 기억해 두었던 MalwareProcess의 Flink값인 0xfffffa8006e0dcb8로 바꾸어주고
저장하였다.
그리고 sample.vmem을 다시 psxview로 열어보면
MalwareProcess의 pslist가 False로 바뀌면서 pslist가 은닉된 것을 확인할 수 있다.
[출처] 제일 멋진 우리 PM님 블로그 S2
'<Project> > <Anti Memory Forensic>_2020' 카테고리의 다른 글
[05] thrdproc 우회하기(PROCESS) :: Anti Memory Forensics/Volatility (0) | 2020.08.02 |
---|---|
[04] psscan 우회하기(PROCESS) :: Anti Memory Forensics/Volatility (0) | 2020.08.02 |
[02] 프로세스 이동 :: Anti Memory Forensics/Volatility (0) | 2020.07.30 |
[01] Volatility 시작하기 :: Anti Memory Forensics/Volatility (0) | 2020.07.26 |
[00] 안티포렌식 (Anti-Forensic) (0) | 2020.07.16 |