chipsec.modules.tools.smm.smm_ptr module¶
A tool to test SMI handlers for pointer validation vulnerabilities
- Reference:
- Presented in CanSecWest 2015:
Usage:
chipsec_main -m tools.smm.smm_ptr -l log.txt \
[-a <mode>,<config_file>|<smic_start:smic_end>,<size>,<address>]
mode: SMI fuzzing modeconfig= use SMI configuration file <config_file>fuzz= fuzz all SMI handlers with code in the range <smic_start:smic_end>fuzzmore= fuzz mode + pass 2nd-order pointers within buffer to SMI handlersscan= fuzz mode + time measurement to identify SMIs that trigger long-running code paths
size: size of the memory buffer (in Hex)address: physical address of memory buffer to pass in GP regs to SMI handlers (in Hex)smram= option passes address of SMRAM base (system may hang in this mode!)
In config mode, SMI configuration file should have the following format
SMI_code=<SMI code> or *
SMI_data=<SMI data> or *
RAX=<value of RAX> or * or PTR or VAL
RBX=<value of RBX> or * or PTR or VAL
RCX=<value of RCX> or * or PTR or VAL
RDX=<value of RDX> or * or PTR or VAL
RSI=<value of RSI> or * or PTR or VAL
RDI=<value of RDI> or * or PTR or VAL
[PTR_OFFSET=<offset to pointer in the buffer>]
[SIG=<signature>]
[SIG_OFFSET=<offset to signature in the buffer>]
[Name=<SMI name>]
[Desc=<SMI description>]
Where:
[]: optional line
*: Don’t Care (the module will replace * with 0x0)
PTR: Physical address SMI handler will write to (the module will replace PTR with physical address provided as a command-line argument)
VAL: Value SMI handler will write to PTR address (the module will replace VAL with hardcoded _FILL_VALUE_xx)
Examples:
>>> chipsec_main.py -m tools.smm.smm_ptr
>>> chipsec_main.py -m tools.smm.smm_ptr -a fuzzmore,0x0:0xFF -l smm.log
>>> chipsec_main.py -m tools.smm.smm_ptr -a scan,0x0:0xff
Warning
This is a potentially destructive test