From: Andreas T. <an...@th...> - 2014-01-27 00:55:15
|
Hi Bill, Am 27.1.2014 01:09, schrieb Bill Martin: > I have been trying to get the same answers from the tpm-tools and > TrouSers through this users group folks for two months and I guess my > posts have been forgotten. This was two or three months ago. Whoaps. Let's hope I will have more luck. > It is interesting that you imply if you use AUTHREAD|AUTHWRITE when > you use PCRs 12 and 14 (at the least) that you do not have access to > NVRAM if a register changes. Correct. I am using my own trustedgrub-1.1.5 rpm on a centos6 machine. I tried getting tpm-luks to work with fedora20 but the systemd stuff is too annoying for now which made me go back to CO6. (For the record, tgrub works great on F20...) When I remove e.g. the rhgb command from the commandline PCR12 should change and indeed I do not have access to the nvram area anymore. > First, I modified my menu.lst so that PCR 12 will change. I can still > get access to my NVRAM. That is the problem and I even modified my own > copy of tpm_nvdefine to print out some debug info to try to pinpoint > what is going on. > > 1) So I'm wondering first: Did you alter PCR-12? That is very > important for me to know. As described above, yes. > 2) Also what versions of TrouSers and tpm-tools are you running? tpm-tools-1.3.8 trousers-0.3.11.2 Both freshly compiled from source as the CO6 rpms are too old. (For the record, tpm-tools on F20 is broken, https://bugzilla.redhat.com/show_bug.cgi?id=952372) > As for changing permission to AUTHWRITE only and being able to access > NVRAM, that does not make sense either because you say your access is > certainly controlled by AUTHREAD|AUTHWRITE, a weaker condition. Yes, I was very confused... > Also in case you wonder - localities don't seem to have an effect, > according to communication from one of the top TrouSers folks. Hmm. Shame. Would be nice to be able to limit stuff there but meh... One could always set bReadSTClear and do a second read on the area to lock it down... > I do not trust the usage of PCRs to define NVRAM - not yet because I > can still access information out of NVRAM regardless of the contents > of my PCR 12, which I certainly used in the nvdefine. Let's try and see what I get here: PCR-12, the commandline: [root@foo ~]# cat /proc/cmdline; md5sum /proc/cmdline ro root=/dev/mapper/vg_nuc-lv_root LANG=en_US.UTF-8 rd_LVM_LV=vg_nuc/lv_swap KEYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=vg_nuc/lv_root rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=130M@0M rd_LUKS_UUID=luks-fd1d4dcb-5e11-4fd9-b14a-b34757fe2692 rd_NO_DM rhgb quiet 39af97c75febfb238bb6a5b3547a81cc /proc/cmdline [root@foo ~]# The pcr permission file I'm using to seal the data. [root@foo ~]# tpm-luks-gen-tgrub-pcr-values -o /tmp/pcrs.out; cat /tmp/pcrs.out r 4 46a1d70bdb606a4223f9d2edab6de588fdad5d29 r 5 14deb4f77eed002430c009286f94b27cc1b522f7 r 8 8f3c9308fbc80110349a095b6441d508001f15cf r 9 97fa107b895137ce8b687b136977eb9ee3cceec9 r 12 8d2dbb8325737829a5ab9527f3fc08a0f302b68e r 14 fec0b65fea553b3891c1dc52101c96d9be84f1b7 [root@foo ~]# Let's compare against my current running PCRs: [root@foo ~]# cat /sys/class/misc/tpm0/device/pcrs | grep -E 'PCR-(0[4589]|1[24])' PCR-04: 46 A1 D7 0B DB 60 6A 42 23 F9 D2 ED AB 6D E5 88 FD AD 5D 29 PCR-05: 14 DE B4 F7 7E ED 00 24 30 C0 09 28 6F 94 B2 7C C1 B5 22 F7 PCR-08: 8F 3C 93 08 FB C8 01 10 34 9A 09 5B 64 41 D5 08 00 1F 15 CF PCR-09: 97 FA 10 7B 89 51 37 CE 8B 68 7B 13 69 77 EB 9E E3 CC EE C9 PCR-12: 8D 2D BB 83 25 73 78 29 A5 AB 95 27 F3 FC 08 A0 F3 02 B6 8E PCR-14: FE C0 B6 5F EA 55 3B 38 91 C1 DC 52 10 1C 96 D9 BE 84 F1 B7 [root@foo ~]# Looks to be identical. Let's define two tpm nvram areas, one AUTHWRITE and one AUTHREAD|AUTHWRITE [root@foo ~]# tpm_nvdefine -i 3 -o barbaz -a foobar -s 32 -f /tmp/pcrs.out -p AUTHWRITE Successfully created NVRAM area at index 0x3 (3). [root@foo ~]# tpm_nvinfo -i 3 NVRAM index : 0x00000003 (3) PCR read selection: PCRs : 4, 5, 8, 9, 12, 14 Localities : ALL Hash : 51522172b46ed13a34ca45f445472291c9675ef5 PCR write selection: Localities : ALL Permissions : 0x00000004 (AUTHWRITE) bReadSTClear : FALSE bWriteSTClear : FALSE bWriteDefine : FALSE Size : 32 (0x20) [root@foo ~]# tpm_nvdefine -i 4 -o barbaz -a foobar -s 32 -f /tmp/pcrs.out -p 'AUTHREAD|AUTHWRITE' Successfully created NVRAM area at index 0x4 (4). [root@foo ~]# tpm_nvinfo -i 4 NVRAM index : 0x00000004 (4) PCR read selection: PCRs : 4, 5, 8, 9, 12, 14 Localities : ALL Hash : 51522172b46ed13a34ca45f445472291c9675ef5 PCR write selection: Localities : ALL Permissions : 0x00040004 (AUTHREAD|AUTHWRITE) bReadSTClear : FALSE bWriteSTClear : FALSE bWriteDefine : FALSE Size : 32 (0x20) [root@foo ~]# Let's fill the nvram and see if we can read the data back: [root@foo ~]# tpm_nvwrite -i 3 -p -d 12345678901234567890123456789012 Enter NVRAM access password: Successfully wrote 32 bytes at offset 0 to NVRAM index 0x3 (3). [root@foo ~]# tpm_nvwrite -i 4 -p -d 12345678901234567890123456789012 Enter NVRAM access password: Successfully wrote 32 bytes at offset 0 to NVRAM index 0x4 (4). [root@foo ~]# tpm_nvread -i 3 00000000 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 1234567890123456 00000010 37 38 39 30 31 32 33 34 35 36 37 38 39 30 31 32 7890123456789012 [root@foo ~]# tpm_nvread -i 4 Tspi_NV_ReadValue failed: 0x0000003b - layer=tpm, code=003b (59), NV_LoadKey blob requires both owner and blob authorization [root@foo ~]# tpm_nvread -i 4 -p Enter NVRAM access password: 00000000 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 1234567890123456 00000010 37 38 39 30 31 32 33 34 35 36 37 38 39 30 31 32 7890123456789012 [root@nuc ~]# Looks good. Works exactly as it should be. Index 3 can be read without a password, index 4 needs a password to read. Now reboot and make sure the cmdline is different which also changes my PCRs. [root@nuc ~]# cat /proc/cmdline; md5sum /proc/cmdline ro root=/dev/mapper/vg_nuc-lv_root LANG=en_US.UTF-8 rd_LVM_LV=vg_nuc/lv_swap KEYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=vg_nuc/lv_root rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=130M@0M rd_LUKS_UUID=luks-fd1d4dcb-5e11-4fd9-b14a-b34757fe2692 rd_NO_DM 620e1b5a6537d7f09adc594f0b5d08e8 /proc/cmdline [root@nuc ~]# Yeah, the md5 has changed. Let's verify against PCRs: [root@nuc ~]# cat /sys/class/misc/tpm0/device/pcrs | grep -E 'PCR-(0[4589]|1[24])' PCR-04: 46 A1 D7 0B DB 60 6A 42 23 F9 D2 ED AB 6D E5 88 FD AD 5D 29 PCR-05: 14 DE B4 F7 7E ED 00 24 30 C0 09 28 6F 94 B2 7C C1 B5 22 F7 PCR-08: 8F 3C 93 08 FB C8 01 10 34 9A 09 5B 64 41 D5 08 00 1F 15 CF PCR-09: 97 FA 10 7B 89 51 37 CE 8B 68 7B 13 69 77 EB 9E E3 CC EE C9 PCR-12: 87 A9 9E 28 84 6C 43 61 0A 2F 79 4C 29 B9 DE B3 66 FD 3C 17 PCR-14: FE C0 B6 5F EA 55 3B 38 91 C1 DC 52 10 1C 96 D9 BE 84 F1 B7 [root@nuc ~]# Indeed. PCR-12 has changed. [root@nuc ~]# tpm_nvread -i 3 00000000 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 1234567890123456 00000010 37 38 39 30 31 32 33 34 35 36 37 38 39 30 31 32 7890123456789012 [root@nuc ~]# tpm_nvread -i 4 -p Enter NVRAM access password: Tspi_NV_ReadValue failed: 0x00000018 - layer=tpm, code=0018 (24), Wrong PCR value [root@nuc ~]# Ohh look at that. Index 3 is readable but shouldn't and Index 4 is correctly marked as not readable with the wrong PCR value. So I cannot reproduce your issue. But I hope I have nicely demonstrated mine. cheers, andreas |