volatility3.plugins.linux.hidden_modules module
- class Hidden_modules(context, config_path, progress_callback=None)[source]
Bases:
PluginInterface
Carves memory to find hidden kernel modules
- Parameters:
- build_configuration()
Constructs a HierarchicalDictionary of all the options required to build this component in the current context.
Ensures that if the class has been created, it can be recreated using the configuration built Inheriting classes must override this to ensure any dependent classes update their configurations too
- Return type:
- property config: HierarchicalDict
The Hierarchical configuration Dictionary for this Configurable object.
- property context: ContextInterface
The context object that this configurable belongs to/configuration is stored in.
- classmethod get_hidden_modules(context, vmlinux_module_name, known_module_addresses, modules_memory_boundaries)[source]
Enumerate hidden modules by taking advantage of memory address alignment patterns
This technique is much faster and uses less memory than the traditional scan method in Volatility2, but it doesn’t work with older kernels.
From kernels 4.2 struct module allocation are aligned to the L1 cache line size. In i386/amd64/arm64 this is typically 64 bytes. However, this can be changed in the Linux kernel configuration via CONFIG_X86_L1_CACHE_SHIFT. The alignment can also be obtained from the DWARF info i.e. DW_AT_alignment<64>, but dwarf2json doesn’t support this feature yet. In kernels < 4.2, alignment attributes are absent in the struct module, meaning alignment cannot be guaranteed. Therefore, for older kernels, it’s better to use the traditional scan technique.
- Parameters:
context (
ContextInterface
) – The context to retrieve required elements (layers, symbol tables) fromvmlinux_module_name (
str
) – The name of the kernel module on which to operateknown_module_addresses (
Set
[int
]) – Set with known module addressesmodules_memory_boundaries (
Tuple
) – Minimum and maximum address boundaries for module allocation.
- Yields:
module objects
- Return type:
- classmethod get_lsmod_module_addresses(context, vmlinux_module_name)[source]
Obtain a set the known module addresses from linux.lsmod plugin
- Parameters:
context (
ContextInterface
) – The context to retrieve required elements (layers, symbol tables) fromvmlinux_module_name (
str
) – The name of the kernel module on which to operate
- Return type:
- Returns:
A set containing known kernel module addresses
- static get_modules_memory_boundaries(context, vmlinux_module_name)[source]
Determine the boundaries of the module allocation area
- Parameters:
context (
ContextInterface
) – The context to retrieve required elements (layers, symbol tables) fromvmlinux_module_name (
str
) – The name of the kernel module on which to operate
- Return type:
- Returns:
A tuple containing the minimum and maximum addresses for the module allocation area.
- classmethod get_requirements()[source]
Returns a list of Requirement objects for this plugin.
- Return type:
- classmethod make_subconfig(context, base_config_path, **kwargs)
Convenience function to allow constructing a new randomly generated sub-configuration path, containing each element from kwargs.
- Parameters:
context (
ContextInterface
) – The context in which to store the new configurationbase_config_path (
str
) – The base configuration path on which to build the new configurationkwargs – Keyword arguments that are used to populate the new configuration path
- Returns:
The newly generated full configuration path
- Return type:
- property open
Returns a context manager and thus can be called like open
- run()[source]
Executes the functionality of the code.
Note
This method expects self.validate to have been called to ensure all necessary options have been provided
- Returns:
A TreeGrid object that can then be passed to a Renderer.
- classmethod unsatisfied(context, config_path)
Returns a list of the names of all unsatisfied requirements.
Since a satisfied set of requirements will return [], it can be used in tests as follows:
unmet = configurable.unsatisfied(context, config_path) if unmet: raise RuntimeError("Unsatisfied requirements: {}".format(unmet)
- Return type:
- version = (1, 0, 0)