Pools Flashcards
Kernel Pool
A range of memory that can be divided up into smaller blocks for storing any type of data that a kernel-mode component (the NT module, third-party device driver, etc.) requests. Similar to the heap, each allocated block has a header (_POOL_HEADER) that contains accounting and debugging information. You can use this extra data to attribute memory blocks back to the driver that owns them–and to an extent make inferences about the type of structures or objects contained within the allocation.
PoolType
Specifies the type of system memory to use for the allocation. NonPagedPool(0) and PagedPool(1) are the enumeration values for nonpageable and pageable memory.
ObCreateObject
A function in the kernel that is the central point from which all executive objects are created.
Tag (Pool Tag argument)
specifies a four-byte value, typically composed of ASCII characters that should uniquely identify the code path taken to produce the allocation.
ExAllocatePoolWithTag
Argument is called with the appropriate size, memory type, and tag.
Pool Tag Scanning
Refers to finding allocations based on the four-byte tag. When you perform a scan, the tag is just your starting point.
Custom Constraints on Pool Tag Scanning
Volatility allows you to add custom constraints per object type. For example, if a process’ creation timestamp should never be zero, you can configure the scanner based on that knowledge.
CM25 & CM31 tag
The CM in these tag names stands for configuration manager, which is the kernel component that maintains the Windows Registry.
PoolTrackTable
Member of _KDDEBUGGER_DATA64 data block that points to an array of _POOL_TRACKER_TABLE structures–one for each unique pool tag in use.