When testing chipsec in a QEMU virtual machine (x86-64 CPU with default
machine), it fails:
$ ./chipsec_main.py
...
[-] ERROR: Chipset requires a supported PCH to be loaded. Unknown PCH: VID = 0xFFFF, DID = 0xFFFF, RID = 0xFF
[!] WARNING: *******************************************************************
[!] WARNING: * Unknown platform!
[!] WARNING: * Platform dependent functionality will likely be incorrect
[!] WARNING: * Error Message: "Unknown PCH: VID = 0xFFFF, DID = 0xFFFF, RID = 0xFF"
[!] WARNING: *******************************************************************
[-] ERROR: To run anyways please use -i command-line option
Enumerating the PCI devices gives:
$ ./chipsec_util.py -i pci enumerate
...
[CHIPSEC] Enumerating available PCIe devices...
BDF | VID:DID | Vendor | Device
-------------------------------------------------------------------------
00:00.0 | 8086:1237 | Intel Corporation | 440FX - 82441FX PMC [Natoma]
00:01.0 | 8086:7000 | Intel Corporation | 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 | 8086:7010 | Intel Corporation | 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.3 | 8086:7113 | Intel Corporation | 82371AB/EB/MB PIIX4 ACPI
00:02.0 | 1234:1111 | |
00:03.0 | 1AF4:1000 | Red Hat, Inc. | Virtio network device
This virtual machine simulates a i440FX PMC (and does not provide a PCH).
This is also described in QEMU machines list:
$ qemu-system-x86_64 -M help
...
pc Standard PC (i440FX + PIIX, 1996)
Add a configuration file in chipsec to support such a system. With it,
chipsec starts successfully:
$ ./chipsec_main.py
[CHIPSEC] API mode: using CHIPSEC kernel module API
[!] Unknown PCH: VID = 0xFFFF, DID = 0xFFFF, RID = 0xFF; Using Default.
[!] Results from this system may be incorrect.
[CHIPSEC] OS : Linux 5.7.0-kali1-amd64 #1 SMP Debian 5.7.6-1kali2 (2020-07-01) x86_64
[CHIPSEC] Python : 3.8.4 (64-bit)
[CHIPSEC] Helper : LinuxHelper (None)
[CHIPSEC] Platform: Intel 440FX PMC
[CHIPSEC] VID: 8086
[CHIPSEC] DID: 1237
[CHIPSEC] RID: 02
[CHIPSEC] PCH : Default PCH
[CHIPSEC] VID: FFFF
[CHIPSEC] DID: FFFF
[CHIPSEC] RID: FF
...
Moreover, when booting a VM with `qemu-system-x86_64 -M pc,smm=on` it is
possible to successfully read the SMRAMC register:
$ ./chipsec_util.py reg read PCI0.0.0_SMRAMC
...
[CHIPSEC] Executing command 'reg' with args ['read', 'PCI0.0.0_SMRAMC']
[CHIPSEC] PCI0.0.0_SMRAMC=0xA
[*] PCI0.0.0_SMRAMC = 0x0A << System Management RAM Control (b:d.f 00:00.0 + 0x72)
[00] C_BASE_SEG = 2 << SMRAM Base Segment = 010b
[03] G_SMRAME = 1 << SMRAM Enabled
[04] D_LCK = 0 << SMRAM Locked
[05] D_CLS = 0 << SMRAM Closed
[06] D_OPEN = 0 << SMRAM Open
Signed-off-by: Nicolas Iooss <nicolas.iooss_git@polytechnique.org>
CHIPSEC: Platform Security Assessment Framework
CHIPSEC is a framework for analyzing the security of PC platforms including hardware, system firmware (BIOS/UEFI), and platform components. It includes a security test suite, tools for accessing various low level interfaces, and forensic capabilities. It can be run on Windows, Linux, Mac OS X and UEFI shell. Instructions for installing and using CHIPSEC can be found in the manual.
NOTE: This software is for security testing purposes. Use at your own risk. Read WARNING.txt before using.
First version of CHIPSEC was released in March 2014: Announcement at CanSecWest 2014
Recent presentation on how to use CHIPSEC to find vulnerabilities in firmware, hypervisors and hardware configuration, explore low level system assets and even detect firmware implants: Exploring Your System Deeper
Release Convention
- CHIPSEC uses a major.minor.patch release version number
- Changes to the arguments or calling conventions will be held for a minor version update
Projects That Include CHIPSEC
Contact Us
For any questions or suggestions please contact us at: chipsec@intel.com
Mailing list:
Twitter:
- For CHIPSEC release alerts: Follow us at CHIPSEC Release
- For general CHIPSEC info: Follow CHIPSEC
For AMD related questions or suggestions please contact Gabriel Kerneis at: Gabriel.Kerneis@ssi.gouv.fr