일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ctf
- lord of sql injection
- Reflected XSS
- 안드로이드
- Suninatas
- kibana
- MFT
- Docker
- otter
- XSS
- NTFS
- vulnhub
- elasticsearch
- InsecureBank
- CTF-d
- base64
- frida
- foremost
- Volatility
- Openstack
- logstash
- SQL Injection
- diva
- ESXi
- igoat
- 인시큐어뱅크
- 2018
- Strings
- beebox
- 파이썬
- Today
- Total
Information Security
EPROCESS 본문
EPROCESS?
- 개별 프로세스를 나타내는 거대한 구조체
- KPROCESS(Kernel Process Block)의 포인터 포함 (프로세스 정보, 생성되는 스레드 정보를 가짐)
- 프로세스 식별 정보
- 프로세스에서 사용하는 메모리 정보
- PEB 위치 정보를 확인할 수 있으며
- 커널 모드에 위치
![](https://blog.kakaocdn.net/dn/bCiB1H/btqQIXMZlXG/GFfa9OYEzTxkThYIgAzJlk/img.png)
_EPROCESS의 구조체를 확인할 수 있다.
![](https://blog.kakaocdn.net/dn/IbWB6/btqQIbrbPzS/HGR8D11jioxpkXG7J2imKK/img.png)
KDBG를 통해 _EPROCESS를 찾을 수 있다.
![](https://blog.kakaocdn.net/dn/deLnZP/btqQPyZujqr/TF7zelV70xOruWISCFddpK/img.png)
KDBG(_KDDEBUGGER_DATA64) 구조체?
- 크래시나 디버깅 시에 필요한 커널의 정보들을 담은 구조체
- 이 구조체는 아래와 같은 구조의 헤더로 시작
패턴 매칭
- List 변수의 마지막 8바이트가 항상 0으로 채워짐
- OwnerTage는 KDBG로 세팅
- Size는 XP일 경우 0x290, Windows 2000의 경우 0x208 Bytes
VAD(Virtual Address Descriptor)
페이지 폴트 발생 시 메모리 관리자는 프로세스 주소 공간에서 어떤 가상 주소가 예약되어 있는지 여부를 추적할 수 있게 관리하는 데이터 구조체 집합
Vad - nt!mm - Mm virtual address descriptors
VadF - nt!mm - VADs created by a FreeVM splitting
Vadl - nt!mm - Mm virtual address descriptors (long)
VadS - nt!mm - Mm virtual address descriptors (short)
삽입된 쉘 코드를 포함하는 메모리 영역은 파일로 백업되지 않기 때문에 VadS나 VadF로 Tag가 설정된다.
EPROCESS -> Peb -> Ldr -> _PEB_LDR_DATA
![](https://blog.kakaocdn.net/dn/bNCFrK/btqQIW8t7Io/X5DA2844vRVlFmOG4LjPy1/img.png)
DLL 리스팅 방법
- 접근 순서
fs -> _TEB -> _PEB -> _PEB_LDR_DATA
레지트 정보를 조회 후 Base에 저장되어 있는 TEB 주소를 조회하면 PEB 주소를 알 수 있다.
![](https://blog.kakaocdn.net/dn/efjioD/btqQJEmcKK4/z3yfMpmXvkRcSGSoHeGaqK/img.png)
PEB의 구조체를 조회 하면 LDR 주소를 알 수 있다.
![](https://blog.kakaocdn.net/dn/cYEe6p/btqQR6azlq9/OkZCLriJL05Oyr9FxLHNT1/img.png)
PEB_LDR_DATA 주소를 확인할 수 있다.
![](https://blog.kakaocdn.net/dn/b69VsE/btqQNpV25Q4/LGEOhTA8iSmiiEZrfgtzX0/img.png)
LIST_ENTRY 주소를 조회하면 Flink와 Blink 연결된 모듈들을 조회했다.
![](https://blog.kakaocdn.net/dn/nArLs/btqQIbdLX3D/UZD4dbvAVTx2af4DpBrfr0/img.png)
Flink 첫번째를 조회하면 덤프 형식으로 아무것도 알 수가 없다.
![](https://blog.kakaocdn.net/dn/cGbjK0/btqQKt5Ki3y/cOx6O841FwIh09GbxikBtk/img.png)
base 주소를 조회하면 MZ로 시작하는 것으로 보아 base 정보라는 것을 알 수 있다.
![](https://blog.kakaocdn.net/dn/NNmHE/btqQE8n2EZR/oxehbMeUEfobTTC6qK1pY1/img.png)
DLL에 대한 이름을 확인할 수 있다.
![](https://blog.kakaocdn.net/dn/bl8wOb/btqQKvJfV7s/t33YnCuBbbuAa6Pl8O3f2K/img.png)