Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WiP: introspection - replicate TPM PCRs measurements directly from measured content (TCPA/TPM Event log) #1568

Draft
wants to merge 7 commits into
base: master
Choose a base branch
from

Commits on Jan 5, 2024

  1. - Addition of nvmutil (nvm) from osboot project to play with gbe (Tha…

    …nks @githubisnonfree!)
    
    - Addition of ifdtool from coreboot project to extract gbe
      - As of now, its implemented in a hacky way:
        - ifdtool dir is copied over ifdtool_cross at coreboot's module configure step
        - then initrd packing step checks for CONFIG_NVMUTIL and builds and pack ifdtool_cross/ifdtool
        - As a result, what is build under build/coreboot/$BOARD is coreboot's real, where build/coreboot/ content follows Makefile rules
    - CONFIG_NVMUTIL in board config adds both ifdtool_cross/ifdtool and nvmutil into initrd
    - Added CONFIG_NVMUTIL to all hotp-maximized boards (to test for
     size changes)
    
    Manually tested (working!):
    - backup rom from: `flashrom -p internal -r /tmp/backup.rom`
    - go to that dir: `cd /tmp`
    - extract gbe from ifdtool on backup.rom: `ifdtool -x backup.rom`
    - source shell functions: `. /etc/functions`
    - show current PHY mac address: `nvm showmac flashregion_3_gbe.bin`
    - generate mac address from sourced shell functions: `newmac=$(generate_random_mac_address)`
    - show new mac: `echo $newmac`
    - change mac from nvmtool on extracted gbe: `nvm flashregion_3_gbe.bin setmac $newmac`
    - insert modified gbe into backup.rom.new with ifdtool: `ifdtool -i gbe:flashregion_3_gbe.bin backup.rom`
    - flash back modified gbe only through flashrom: `flashrom -p internal --ifd -i gbe -w backup.rom.new`
    
    Signed-off-by: Thierry Laurion <insurgo@riseup.net>
    tlaurion committed Jan 5, 2024
    Configuration menu
    Copy the full SHA
    7007d18 View commit details
    Browse the repository at this point in the history
  2. WiP : Add ifdtool and cbfstool to experiment from Heads with cbmem/cb…

    …fstool/ifdtool to get same cbmem -L/TPM eventlog/introspection of PRC content equivalence
    
    Signed-off-by: Thierry Laurion <insurgo@riseup.net>
    tlaurion committed Jan 5, 2024
    Configuration menu
    Copy the full SHA
    5bcd6cd View commit details
    Browse the repository at this point in the history
  3. WiP tpmr: add calc_pcr to simulate PCR content from reset state, meas…

    …uring files/strings to arrive to same cbmem -L (TCPA/Event log content from real measured stuff)
    
    Traces:
    
    When looking at TCPA log/TPM Event log:
    
    ~ # cbmem -L
    coreboot TPM log:
    
     PCR-2 5622416ea417186aa1ac32b32c527ac09009fb5e SHA1 [FMAP: FMAP]
     PCR-2 8bbaeca78eb7e169df69d3687258318b58c8671e SHA1 [CBFS: bootblock]
     PCR-2 73ccefadc0a1be8184be89800e69186a260ebe40 SHA1 [CBFS: fallback/romstage]
     PCR-2 d697f8c98ef6f1b4aca397821e176bb48a227212 SHA1 [CBFS: fallback/postcar]
     PCR-2 b88302e3a46fb7fb11b92730d05c41b5f1f11bcf SHA1 [CBFS: fallback/ramstage]
     PCR-2 b688d567b0dfe1e1c6e4584289619a525b85cbd6 SHA1 [CBFS: bootsplash.jpg]
     PCR-2 9130eeb4cfe031edeabc56e6b84812d49a5a6bda SHA1 [CBFS: fallback/payload]
    
    We see that PCR2 is extended from reset state (40*0) with:
    FMAP (only one not under cbfs), bootblock, fallback/romstage, fallback/postcar, fallback/ramstage, bootsplash.jpg, fallback/payload
    
    cbmem permits to extract FMAP from cbmem:
    ~ # cbmem --rawdump $(cbmem -l | grep FMAP | awk -F " " {'print $3'}) | xxd
    00000000: 5f5f 464d 4150 5f5f 0101 0000 60ff 0000  __FMAP__....`...
    00000010: 0000 0000 a000 464c 4153 4800 0000 0000  ......FLASH.....
    00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    00000030: 0000 0000 0000 0300 0000 0800 0000 9800  ................
    00000040: 4249 4f53 0000 0000 0000 0000 0000 0000  BIOS............
    00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    00000060: 0000 0000 0800 0002 0000 464d 4150 0000  ..........FMAP..
    00000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    00000080: 0000 0000 0000 0000 0000 0000 0002 0800  ................
    00000090: 00fe 9700 434f 5245 424f 4f54 0000 0000  ....COREBOOT....
    000000a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    000000b0: 0000 0000 0000                           ......
    
    ~ # xxd -r cbmem.txt  | sha1sum
    6ecd73787c001bbc1215bd8787361e1a63b580cb  -
    
    This sha1sum doesn't match reported TCPA/Event log for FMAP entry:
    6ecd73787c001bbc1215bd8787361e1a63b580cb != 5622416ea417186aa1ac32b32c527ac09009fb5e
    
    FMAP extracted from cbfsutil externally from ROM image is padded with ff up to 512 bytes (this is dynamic and cannot be hardcoded magic):
    
    user@heads-tests-deb12:~/heads$ sudo cbfstool ~/heads/build/x86/qemu-coreboot-whiptail-tpm1/heads-qemu-coreboot-whiptail-tpm1-v0.2.0-1955-gfff99df-dirty.rom read -r FMAP -f xxx.bin
    user@heads-tests-deb12:~/heads$ xxd xxx.bin > hex.txt
    user@heads-tests-deb12:~/heads$ cat hex.txt
    00000000: 5f5f 464d 4150 5f5f 0101 0000 60ff 0000  __FMAP__....`...
    00000010: 0000 0000 a000 464c 4153 4800 0000 0000  ......FLASH.....
    00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    00000030: 0000 0000 0000 0300 0000 0800 0000 9800  ................
    00000040: 4249 4f53 0000 0000 0000 0000 0000 0000  BIOS............
    00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    00000060: 0000 0000 0800 0002 0000 464d 4150 0000  ..........FMAP..
    00000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    00000080: 0000 0000 0000 0000 0000 0000 0002 0800  ................
    00000090: 00fe 9700 434f 5245 424f 4f54 0000 0000  ....COREBOOT....
    000000a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
    000000b0: 0000 0000 0000 ffff ffff ffff ffff ffff  ................
    000000c0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    000000d0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    000000e0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    000000f0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    00000100: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    00000110: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    00000120: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    00000130: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    00000140: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    00000150: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    00000160: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    00000170: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    00000180: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    00000190: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    000001a0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    000001b0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    000001c0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    000001d0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    000001e0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    000001f0: ffff ffff ffff ffff ffff ffff ffff ffff  ................
    user@heads-tests-deb12:~/heads$ xxd -r hex.txt | sha1sum
    5622416ea417186aa1ac32b32c527ac09009fb5e  -
    
    This matches FMAP region measured in TCPA/TPM event log for FMAP trace above:
    6ecd73787c001bbc1215bd8787361e1a63b580cb = 6ecd73787c001bbc1215bd8787361e1a63b580cb
    
    It seems that coreboot measured boot code does the same as cbfstool (padding prior of measuring) instead of taking only the raw output we could replicate with cbfs....
    
    Signed-off-by: Thierry Laurion <insurgo@riseup.net>
    tlaurion committed Jan 5, 2024
    Configuration menu
    Copy the full SHA
    07e3bf7 View commit details
    Browse the repository at this point in the history
  4. Makefile modules/coreboot modules/nvmutil: remove unneeded ifdutil/cb…

    …fsutil/nvmutil for this task.
    
    cbmem+cbfs is enough
    
    Signed-off-by: Thierry Laurion <insurgo@riseup.net>
    tlaurion committed Jan 5, 2024
    Configuration menu
    Copy the full SHA
    6f69f89 View commit details
    Browse the repository at this point in the history
  5. bin/tpmr .ash_history: add needed functions to be able to call tpmr r…

    …ecalculate_firmware_pcr_from_cbfs
    
    .ash_history: add tpmr recalculate_firmware_pcr_from_cbfs but remove unneeded deprecated ways of doing things
    
    Signed-off-by: Thierry Laurion <insurgo@riseup.net>
    tlaurion committed Jan 5, 2024
    Configuration menu
    Copy the full SHA
    2e29463 View commit details
    Browse the repository at this point in the history
  6. bin/tpmr:recalculate_firmware_pcr_from_cbfs Add basic TPM2 suppport

    Signed-off-by: Thierry Laurion <insurgo@riseup.net>
    tlaurion committed Jan 5, 2024
    Configuration menu
    Copy the full SHA
    223b545 View commit details
    Browse the repository at this point in the history
  7. WiP tpmr: unify simulated PCR output with raw/TPM event log output fo…

    …r comparison
    
    Buggy as of now, will reverify next week
    
    ~ # tpmr verify_coreboot_measured_boot_tpm_event_log_vs_content_measured #Valida
    te coreboot TPM event log against cbmem FMAP+cbfs content
    [  293.267413] TRACE: Under /bin/tpmr
    [  293.390454] TRACE: Under /bin/tpmr
    [  293.441752] TRACE: Under /bin/tpmr:replay_pcr
    [  293.551759] TRACE: Under /bin/tpmr:extend_pcr_state
    [  293.574966] DEBUG: Initial PCR state: 0000000000000000000000000000000000000000000000000000000000000000
    [  293.639890] DEBUG: Extending PCR state with passed argument #1 hash: 02778dad5303b911adc8828cf5101a251a9b2a5a2b711a44159fb89a5a0b5198
    [  293.761500] DEBUG: Extending PCR state with passed argument #2 hash: 5444dba991b48df882ed1e2b85f0c90f947f6c7f8ed3dd6c91dc70dd661b66cb
    [  293.899682] DEBUG: Extending PCR state with passed argument #3 hash: 13d3cacde02deff3d5e1ae2b52e5647c67046fb359b58d3899365a87a7161090
    [  294.028814] DEBUG: Extending PCR state with passed argument #4 hash: cea785e25dfdc94b8296a0a2bcc75d2f44f93543d0eb4236a0efa5add87fc97a
    [  294.137824] DEBUG: Extending PCR state with passed argument #5 hash: bb2ff5833f90c09916fb972f49963653cf207cc65033276d458e00ce31d4b3d7
    [  294.259655] DEBUG: Extending PCR state with passed argument #6 hash: bc172d6c3551a44fbd6beef7ebbb2d4fa1452c46fcfdeebef1c519f13d668f1b
    [  294.400277] DEBUG: Extending PCR state with passed argument linuxboot#7 hash: bf037ed20105da5af9affb40353a4bccc9c8e69f2b03b81260573821ccbfa6d8
    [  294.514983] DEBUG: Extended final PCR state: ab50d5acd93870448844392a2582099650614e0c75f3b6c3f3a5f7a811ab3bca
    [  294.561181] DEBUG: Replayed cbmem -L clean boot state of PCR=2 ALG=sha256 : ab50d5acd93870448844392a2582099650614e0c75f3b6c3f3a5f7a811ab3bca
    [  294.699187] TRACE: Under /bin/tpmr
    [  294.765450] TRACE: Under /bin/tpmr:recalculate_firmware_pcr_from_cbfs
    [  294.812153] TRACE: Under /bin/tpmr:read_and_pad_FMAP_from_cbmem
    [  295.853558] TRACE: Under /bin/tpmr:calc_pcr
    [  295.909978] TRACE: Under /bin/tpmr:extend_pcr_state
    [  295.955343] DEBUG: Initial PCR state: 0000000000000000000000000000000000000000000000000000000000000000
    [  296.036572] DEBUG: Extending PCR state with passed argument #1 hash: 02778dad5303b911adc8828cf5101a251a9b2a5a2b711a44159fb89a5a0b5198
    [  296.196037] DEBUG: Extending PCR state with passed argument #2 hash: 5444dba991b48df882ed1e2b85f0c90f947f6c7f8ed3dd6c91dc70dd661b66cb
    [  296.364665] DEBUG: Extending PCR state with passed argument #3 hash: 13d3cacde02deff3d5e1ae2b52e5647c67046fb359b58d3899365a87a7161090
    [  296.528953] DEBUG: Extending PCR state with passed argument #4 hash: cea785e25dfdc94b8296a0a2bcc75d2f44f93543d0eb4236a0efa5add87fc97a
    [  296.683826] DEBUG: Extending PCR state with passed argument #5 hash: bb2ff5833f90c09916fb972f49963653cf207cc65033276d458e00ce31d4b3d7
    [  296.843403] DEBUG: Extending PCR state with passed argument #6 hash: bc172d6c3551a44fbd6beef7ebbb2d4fa1452c46fcfdeebef1c519f13d668f1b
    [  297.011405] DEBUG: Extending PCR state with passed argument linuxboot#7 hash: bf037ed20105da5af9affb40353a4bccc9c8e69f2b03b81260573821ccbfa6d8
    [  297.142107] DEBUG: Extended final PCR state: ab50d5acd93870448844392a2582099650614e0c75f3b6c3f3a5f7a811ab3bca
    [  297.200198] DEBUG: Replayed cbmem -L clean boot state of PCR=2 ALG=sha256 : ab50d5acd93870448844392a2582099650614e0c75f3b6c3f3a5f7a811ab3bca
    [  297.375755] DEBUG: Original TPM PCR2 value:     2 : 0xAB50D5ACD93870448844392A2582099650614E0C75F3B6C3F3A5F7A811AB3BCA
    [  297.438635] DEBUG: TPM event log reported by cbmem -L: coreboot TPM log:
    [  297.472275]
    [  297.514744] PCR-2 02778dad5303b911adc8828cf5101a251a9b2a5a2b711a44159fb89a5a0b5198 SHA256 [FMAP: FMAP]
    [  297.559260] PCR-2 5444dba991b48df882ed1e2b85f0c90f947f6c7f8ed3dd6c91dc70dd661b66cb SHA256 [CBFS: bootblock]
    [  297.594767] PCR-2 13d3cacde02deff3d5e1ae2b52e5647c67046fb359b58d3899365a87a7161090 SHA256 [CBFS: fallback/romstage]
    [  297.632653] PCR-2 cea785e25dfdc94b8296a0a2bcc75d2f44f93543d0eb4236a0efa5add87fc97a SHA256 [CBFS: fallback/postcar]
    [  297.688218] PCR-2 bb2ff5833f90c09916fb972f49963653cf207cc65033276d458e00ce31d4b3d7 SHA256 [CBFS: fallback/ramstage]
    [  297.723743] PCR-2 bc172d6c3551a44fbd6beef7ebbb2d4fa1452c46fcfdeebef1c519f13d668f1b SHA256 [CBFS: bootsplash.jpg]
    [  297.760327] PCR-2 bf037ed20105da5af9affb40353a4bccc9c8e69f2b03b81260573821ccbfa6d8 SHA256 [CBFS: fallback/payload]
    [  297.823487] DEBUG: Calculated TPM PCR2 value from files: ab50d5acd93870448844392a2582099650614e0c75f3b6c3f3a5f7a811ab3bca
    [  297.872171] DEBUG: Measured boot from TPM event log: ab50d5acd93870448844392a2582099650614e0c75f3b6c3f3a5f7a811ab
    [  297.905953] 3bca
    [  297.955757] DEBUG: Measured boot from content measured by coreboot: ab50d5acd93870448844392a2582099650614e0c75f3b6c3f3a5f7a811ab3bca
    Failed: TPM event log does not match content measured by coreboot
    [  298.008151]  !!! ERROR: TPM event log does not match content measured by coreboot !!!
    
    the 3cba on second line is weird. Close but not good enough
    
    Signed-off-by: Thierry Laurion <insurgo@riseup.net>
    tlaurion committed Jan 5, 2024
    Configuration menu
    Copy the full SHA
    bf7677c View commit details
    Browse the repository at this point in the history