Charles F.,

The processor is a Xeon X5675.† Sorry for the omission in the last email as my first reply bounced back.† Yes, /boot/list.data exists and is present in grub.conf.† I don't have an SINIT defined in my grub.conf because previous instances in using it gave a message saying the one included in my BIOS is a newer version, so it was ignoring the supplied one and using the BIOS provided SINIT module.† I will try adding it (Xeon-5600-3500-SINIT-v1.1.BIN) back in to grub conf and see if that helps.† Thanks for the suggestion to only use the mle element.†

grub.conf:
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-279.5.1.el6.x86_64)
††††††† root (hd0,0)
††††††† kernel /tboot.gz logging=vga,serial,memory vga_delay=15 loglvl=all
††††††† module /vmlinuz-2.6.32-279.5.1.el6.x86_64 ro root=/dev/mapper/vg_penguin-lv_root intel_iommu=on rd_NO_LUKS rd_LVM_LV=vg_penguin/lv_swap rd_LVM_LV=vg_penguin/lv_root rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto LANG=en_US.UTF-8† KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet reboot=pci max_loop=255
††††††† module /initramfs-2.6.32-279.5.1.el6.x86_64.img
††††††† module /Xeon-5600-3500-SINIT-v1.1.BIN
††††††† module /list.data

I tried creating a policy with just the MLE element, and wrote it to the owner index:

# tpmnv_relindex -i 0x20000001 -p $TPM_PASS
# lcp_writepol -i owner -f list.pol -p $TPM_PASS

Successfully write policy into index 0x40000001
# lcp_readpol -i owner -p $TPM_PASS
No size has been specified. Will read all index data.
begin to call the tss Tspi_NV_ReadValue
the policy is:
02 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 e1 88 37 d8 77 00 16 e2 a0 4d 56 ae 61 e0
0b eb 28 1f f0 b9
version: 2
hash_alg: 2
policy_type: 0 - LCP_POLTYPE_HASHONLY
sinit_revocation_counter: 0
policy_control: 0
policy_hash: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Successfully read value from index: 0x40000001.

Upon reboot, I got the following:

TBOOT: reading Verified Launch Policy from TPM NV...
TBOOT: TPM: get capability, return value = 00000002
TBOOT: TPM: fail to get public data of 0x20000001 in TPM NV
TBOOT:†††† :reading failed
TBOOT: reading Launch Control Policy from TPM NV...
TBOOT:†††† :54 bytes read
TBOOT: v2 LCP policy data found
TBOOT:†††† :reading failed
TBOOT: failed to read policy from TPM NV, using default
TBOOT: policy:
<default policy>
TBOOT: TPM: write nv 20000002, offset 00000000, 00000004 bytes, return = 00000002
TBOOT: Error: write TPM error: 0x2.
TBOOT: no policy in TPM NV
TBOOT: IA32_FEATURE_CONTROL_MSR: 0000ff07
<etc>
TBOOT: executing GETSEC[SENTER]...
<Machine reboot>

One interesting thing I noticed this go around is that the TBOOT header says it's version 1.7.2, even though I downloaded the 1.7.3 source and compiled it for this machine.† Did someone just forget to increment the version?† Or am I incorrect about the code I got from sourceforge?

-Charles B


On Wed, Mar 27, 2013 at 2:06 PM, <Charles.Fisher@gdc4s.com> wrote:

Also,

To just get things working, I would skip creating the policy elements for the pcrs andcustom, and just go with the mle element. After you get things working, then is the time to add additional stuff.

Charles

From: Charles Bushong [mailto:bushong1@gmail.com]

Sent: Wednesday, March 27, 2013 10:50 AM
To: Fisher, Charles-p99463
Cc: tboot-devel@lists.sourceforge.net
Subject: Re: [tboot-devel] verifying module against policy failed

Charles F.,

Alright, I looked a bit more into this and tried to run something along these lines:

#Hash tboot.gz
lcp_mlehash Ėc "logging=vga,serial,memory vga_delay=10 loglvl=all" /boot/tboot.gz > tboot_hash
#Create the MLE Element
lcp_crtpolelt --create --type mle --ctrl 0x00 --minver 17 --out mle.elt tboot_hash
#Get current pcr's
export pcr_file=`find /sys/devices -name pcrs`
cat $pcr_file | grep -e PCR-00 -e PCR-01 > pcrs
#Create PCONF element
lcp_crtpolelt --create --type pconf --out pconf.elt pcrs
#Create CUSTOM element (this references the VLP .pol file)
lcp_crtpolelt --create --type custom --out custom.elt --uuid tboot vl_ver1.pol
#Combine the elements into an unsigned list
lcp_crtpollist --create --out list_unsig.lst mle.elt pconf.elt custom.elt
#Sign the list
openssl genrsa -out privkey.pem 2048
openssl rsa -pubout -in privkey.pem -out pubkey.pem
cp list_unsig.lst list_sig.lst
lcp_crtpollist --sign --pub pubkey.pem --priv privkey.pem --out list_sig.lst
lcp_crtpol2 --create --type list --pol list.pol --data list.data list_{unsig,sig}.lst
#Write the policy to nvram
lcp_writepol -i owner -f list.pol -p $TPM_PASS

When I tried to run this, it spit out the following.† I had to transcribe this myself as I don't have access to the serial printout right now.† Since it wont boot, just restarts after trying to execute SENTER, I can't access txt-stat either.

TBOOT: TPM: get capability, return value = 00000002

TBOOT: TPM: fail to get public data of 0x20000001 in TPM NV

TBOOT:†††† :reading failed

<I expected this, because I removed the 20000001 index to try and narrow down the problem>

TBOOT: reading Launch Control Policy from TPM NV...

TBOOT:† †† :54 bytes read

TBOOT: no LCP module found
TBOOT:†††† :reading failed

TBOOT: failed to read policy from TPM NV, using default
TBOOT: policy:

<default policy>

TBOOT: no policy in TPM NV.

<continued on like normal, then rebooted the machine when trying to execute SENTER>

Any thoughts?


-Charles B.

On Tue, Mar 26, 2013 at 11:16 AM, Charles Bushong <bushong1@gmail.com> wrote:

Charles F,

You're right.† I haven't written anything to the owner index.† It seems in my shuffling of various configurations, that part was lost.† The problem is, now that I'm writing this, it's stopping on SENTER and rebooting the system.† I have tried with the following configurations:

###Attempt 1
###VLP


tb_polgen --create --type nonfatal vl_ver1.pol

tb_polgen --add --num 0 --pcr 18 --hash image --cmdline "ro root=/dev/mapper/vg_penguin-lv_root intel_iommu=on rd_NO_LUKS rd_LVM_LV=vg_penguin/lv_swap rd_LVM_LV=vg_penguin/lv_root rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto LANG=en_US.UTF-8† KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet reboot=pci max_loop=255" --image /boot/vmlinuz-2.6.32-279.5.1.el6.x86_64 vl_ver1.pol
tb_polgen --add --num 1 --pcr 19 --hash image --cmdline "" --image /boot/initramfs-2.6.32-279.5.1.el6.x86_64.img vl_ver1.pol

#### Create and write Launch Control Policy (LCPv1)
lcp_mlehash -c "logging=vga,serial,memory loglvl=all" /boot/tboot.gz > mle_hash
lcp_crtpol -t hashonly -m mle_hash -o lcp_v1.pol

lcp_writepol -i owner -f lcp_v1.pol -p $TPM_PASS


lcp_writepol -i 0x20000001 -f vl_ver1.pol -p $TPM_PASS

#### Result: Instant system reset once it hit SENTER

####Attempt 2
###VLP


tb_polgen --create --type nonfatal vl_ver1.pol

tb_polgen --add --num 0 --pcr 18 --hash image --cmdline "ro root=/dev/mapper/vg_penguin-lv_root intel_iommu=on rd_NO_LUKS rd_LVM_LV=vg_penguin/lv_swap rd_LVM_LV=vg_penguin/lv_root rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto LANG=en_US.UTF-8† KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet reboot=pci max_loop=255" --image /boot/vmlinuz-2.6.32-279.5.1.el6.x86_64 vl_ver1.pol
tb_polgen --add --num 1 --pcr 19 --hash image --cmdline "" --image /boot/initramfs-2.6.32-279.5.1.el6.x86_64.img vl_ver1.pol

###LCPv2
lcp_mlehash Ėc "logging=vga,serial,memory loglvl=all" /boot/tboot.gz > tboot_hash
lcp_crtpolelt --create --type mle --ctrl 0x00 --out mle.elt tboot_hash
lcp_crtpollist --create --out list_unsig.lst mle.elt
lcp_crtpol2 --create --type list --pol list.pol --data list.data list_unsig.lst
cp list.data /boot

tcsd
lcp_writepol -i owner -f list.pol -p $TPM_PASS


lcp_writepol -i 0x20000001 -f vl_ver1.pol -p $TPM_PASS

###Add /list.data to /boot/grub/grub.conf

#### Result: Instant system reset once it hit SENTER

The processor is a Xeon X5675.† I'll keep playing around with the LCP, because it seems like this might be the root of my problems.† Any insight you can offer would be a big help.

-Charles B.

On Mon, Mar 25, 2013 at 9:14 PM, <Charles.Fisher@gdc4s.com> wrote:

There appear to be a couple of things that I donít understand. It appears that while you have written you VL policy, you havenít written a Launch Control Policy (which goes in the owner NV index). What your LCP will be depends on the processor, which you didnít mention in you post. That is the place the tboot is validated by the SINIT module, and then when it returns tboot validates the remainder of the modules in grub.

It may be possible to do what you tried, but I have always had to have a LCP, which is where tboot and it command line are validated, so the first tb_polgen line is the one for vmlinuz-2.6.32-279Ö

Charles

From: Charles Bushong [mailto:bushong1@gmail.com]
Sent: Monday, March 25, 2013 8:52 AM
To: tboot-devel@lists.sourceforge.net
Subject: [tboot-devel] verifying module against policy failed

Hi all,

I'm trying to get tboot up and running for my first time, and this list has been a great help.† However it seems I'm running into some problems when actually validating the modules.† I was hoping someone might have some insight as to what I'm doing wrong.† I'm using tboot 1.7.3 and legacy grub if it makes a difference.

I get ownership and define the nvram indicies without much issue (finally).† Then I create and write the v1 policy with this:

tb_polgen --create --type nonfatal vl_ver1.pol
tb_polgen --add --num 0 --pcr 18 --hash image --cmdline "logging=vga,serial,memory loglvl=all" --image /boot/tboot.gz vl_ver1.pol
tb_polgen --add --num 1 --pcr 19 --hash image --cmdline "$kernel_cmdline" --image /boot/vmlinuz-2.6.32-279.5.1.el6.x86_64 vl_ver1.pol
tb_polgen --add --num 2 --pcr 19 --hash image --cmdline "" --image /boot/initramfs-2.6.32-279.5.1.el6.x86_64.img vl_ver1.pol
lcp_writepol -i 0x20000001 -f vl_ver1.pol -p $TPM_PASS

There are a few red flags that are sticking out to me.

1) Does this post-GETSEC[SENTER] error code mean anything?

TBOOT: TXT.ERRORCODE: 0xc0000001
TBOOT: AC module error : acm_type=0x1, progress=0x00, error=0x0

2) Modules failing.
TBOOT: verifying module "
/vmlinuz-2.6.32-279.5.1.el6.x86_64 (kernel command line)"...
TBOOT:†† verification failed
TBOOT: verifying module against policy failed.
TBOOT: verifying module "
/initramfs-2.6.32-279.5.1.el6.x86_64.img"...
TBOOT:†† verification failed
TBOOT: verifying module against policy failed.
TBOOT: all modules are verified

I can't figure out why it's reading the policy without issue, getting into GETSEC[SENTER], and then still failing the policy check.† Any help or points in the right direction would be appreciated.† Thanks!


-Charles