All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel De Graaf <dgdegra@tycho.nsa.gov>
To: Emil Condrea <emilcondrea@gmail.com>
Cc: Ian Campbell <Ian.Campbell@citrix.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Subject: Re: vtpmmgr bug: fails to start if locality!=0
Date: Fri, 14 Nov 2014 13:01:52 -0500	[thread overview]
Message-ID: <54664390.3000706@tycho.nsa.gov> (raw)
In-Reply-To: <CAAULxKLkbau3WsLAiAYXee+mtJN6RTtkBHP=W7bOQTa_pE-nEQ@mail.gmail.com>

On 11/14/2014 09:22 AM, Emil Condrea wrote:
> I modified linux kernel tpm_tis driver to try to start with locality 2. I
> did some logging and after taking a look with dmesg it seems that the IO
> pages for other localities are full with 1.
> in tpm_tis_init:
> for(i=0;i<5;i++){
>      release_locality(chip,i,1);
> }
> ...
> wait_startup(chip,2);
> request_locality(chip,2)
> ...
> TPM_RID(2);//FF
> TPM_RID(0);//64
> Would this mean that Atmel disabled other localities after manufacturing? I
> tried to define a NVRAM index at F200 but I have the same results.

My best guess is that locality 2 is disabled until a DRTM launch is
done.  Since your system does not support a DRTM launch, this guess
cannot easily be tested.

> I see what you mean about changing the DeepQuote behaviour in order to
> provide evidence of the VM launch but I am not sure that I understand what
> is the type of extraInfoFlags and what should it contain. Will the UUIDs
> and vTPM measurements be stored in extraInfoFlags?

extraInfoFlags would be a bitmask defined in a specification, like:

  1 - vTPM UUID present
  2 - vTPM Group UUID present
  4 - vTPM kernel measurement present
  8 - vTPM command line argument measurement present
16 - Group configuration hash present
32 - Group master public key hash present
...

This allows the later fields to be unambiguously decoded by a verifier
without requiring the disclosure of fields that are not needed (for
example, the UUIDs could be omitted for privacy reasons).

> If we take this as a solution for systems that do not support DRTM lanch,
> they will still be forced to use locality 0 if any other is disabled and
> the TPM might return busy if other commands are currently running.
>
> Thanks.
> Emil Condrea
>
> On Sat, Nov 8, 2014 at 1:31 AM, Daniel De Graaf <dgdegra@tycho.nsa.gov>
> wrote:
>
>> On 11/07/2014 05:40 AM, Emil Condrea wrote:
>>
>>> My system does not support DRTM so I can not test this. I am interested in
>>> contributing to vtpm and making this to work without DRTM, can you give me
>>> more details about PCRs that need to be implemented using an alternate
>>> manner? When someone wants to use other locality than 0 it will run all
>>> commands with PCRs disabled? Since the vtpmmgr is tying domU to hardware
>>> TPM, deactivating PCRs will result that all commands issued by domU will
>>> not use PCRs anymore, right?
>>>
>>
>> The PCRs seen by the domU are emulated by the vTPM, and the vTPM Manager
>> has no information on any of their values or updates.  Deep quotes may
>> include a hash of the vTPM's PCR values, but the vTPM Manager is only
>> asserting that the hash was given by the vTPM.
>>
>>   Where should the new layer of PCR values stored? NVRAM ?
>>>
>>
>> They will be stored in the vtpmmgr domain's RAM; in fact, they are already
>> stored there (they just need to be used more directly).
>>
>> The PCRs in question are PCR 20-23, used by the vTPM Manager to store
>> information about the vTPM making a deep quote request.  In order to
>> support more than one vTPM, the values of these PCRs need to be reset when
>> a different client connects.  However, the reset operation for PCR 20-22 is
>> limited to locality 2.
>>
>> An alternative to this is to embed this information in the externData
>> field that is signed by the quote operation.  This requires a bit more work
>> to provide the same flexibility that the PCRs provided, but it can be made
>> equivalently secure.
>>
>> A deep quote request currently contains a PCR mask and a requestData value
>> (20 bytes) from the vTPM.  On a deep quote request, the vTPM Manager:
>>   1. Reset PCR 20-23
>>   2. Extend information about the requesting vTPM to PCR 20-23
>>     - Different information is extended into each PCR
>>     - Some clients want all information, some only want selected PCRs
>>   3. Perform a Quote with externData=requestData on the requested PCRs
>>   4. Return the result to the requesting vTPM
>>
>> The change I am suggesting requires:
>>   - Add a field to the request - extraInfoFlags
>>   - Compute externData = SHA1 (
>>          requestData
>>          extraInfoFlags
>>          [UUIDs if requested]
>>          [vTPM measurements if requested]
>>          [vTPM group update policy if requested]
>>    )
>>   - Perform deep quotes using the above externData value instead of the
>> value provided by the vTPM.
>>
>> This change also has the benefit of increasing the flexibility of the
>> request - it is simple to define additional flags and add data to the hash
>> if needed.
>>
>>
>>   On Thu, Nov 6, 2014 at 11:55 PM, Daniel De Graaf <dgdegra@tycho.nsa.gov>
>>> wrote:
>>>
>>>   On 11/05/2014 05:00 AM, Ian Campbell wrote:
>>>>
>>>>   CCing Daniel.
>>>>>
>>>>> On Fri, 2014-10-31 at 17:37 +0200, Emil Condrea wrote:
>>>>>
>>>>>
>>>>>> I am wondering if this is known issue that when I set locality!=0 to
>>>>>> vtpmmgr it does not start. It is a bit strange that every call to
>>>>>> tpm_tis_status returns 255 and device-id is also FFFF:
>>>>>> 1.2 TPM (device-id=0xFFFF vendor-id = FFFF rev-id = FF).
>>>>>> TPM interface capabilities (0xffffffff):
>>>>>>
>>>>>> I am configuring vtpmmgr using:
>>>>>>
>>>>>> kernel="/usr/local/lib/xen/boot/vtpmmgr-stubdom.gz"
>>>>>> memory=8
>>>>>> disk=["file:/var/vtpmmgr-stubdom.img,hda,w"]
>>>>>> name="vtpmmgr"
>>>>>> iomem=["fed40,5"]
>>>>>> extra="tpmlocality=2"
>>>>>>
>>>>>>
>>>>>> I also tried using :
>>>>>> iomem=["fed40,1"]
>>>>>> extra="tpmlocality=0"//works well
>>>>>>
>>>>>> or
>>>>>> iomem=["fed42,1"]
>>>>>> extra="tpmlocality=2"
>>>>>> It seems that everything that is not mapped at fed40-fed41 is
>>>>>> FFFFFFFF.
>>>>>>
>>>>>> I have an Atmel TPM chipset.
>>>>>>
>>>>>> Could it be a chipset problem to not handle well different localities?
>>>>>>
>>>>>> When I use locality=0, the device driver info is correct and
>>>>>> everything works fine:
>>>>>> 1.2 TPM (device-id=0x3204 vendor-id = 1114 rev-id = 40)
>>>>>> TPM interface capabilities (0xfd)
>>>>>>
>>>>>>
>>>>>   This may be an issue with locality 2 being unavailable unless a DRTM
>>>> launch (tboot) is performed.  Returning all-ones is the normal response
>>>> of the x86 chipset when unmapped MMIO regions are accessed; disabled
>>>> localities of the TPM may act like this.
>>>>
>>>> Does your system support the DRTM launch?  If so, can you test it to see
>>>> if this is the issue?
>>>>
>>>> In this case, to better support people who want to use the vTPM Manager
>>>> without a DRTM launch, the features of the vTPM Manager that use the TPM
>>>> 1.2 PCRs may need to be disabled or implemented in an alternate manner
>>>> such as embedding the data in the quote instead of in PCRs.  The current
>>>> design was created with the assumption that systems using it would be
>>>> performing a DRTM launch in order to fully secure the boot process.
>>>>
>>>>    In linux kernel this information is obtained using locality 0 and
>>>>
>>>>> after that other commands execute using specified locality.
>>>>>> https://git.kernel.org/cgit/linux/kernel/git/stable/linux-
>>>>>> stable.git/tree/drivers/char/tpm/tpm_tis.c#n558
>>>>>>
>>>>>>
>>>>>   Have you tested that other localities work for your TPM under Linux?
>>>>
>>>
>>>
>>>
>>>
>>>
>>>>   Thanks,
>>>>>>
>>>>>> Emil
>>>>>>
>>>>>>
>>>>>>   --
>>>> Daniel De Graaf
>>>> National Security Agency
>>>>
>>>>
>>>
>>
>> --
>> Daniel De Graaf
>> National Security Agency
>>
>


-- 
Daniel De Graaf
National Security Agency

      reply	other threads:[~2014-11-14 18:01 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-31 15:37 vtpmmgr bug: fails to start if locality!=0 Emil Condrea
2014-11-05 10:00 ` Ian Campbell
2014-11-06 21:55   ` Daniel De Graaf
2014-11-07  1:46     ` Xu, Quan
2014-11-07 10:42       ` Emil Condrea
2014-11-09  8:30         ` Xu, Quan
2014-11-16  7:15           ` Xu, Quan
2014-11-16 10:46             ` Emil Condrea
2014-11-07 10:40     ` Emil Condrea
2014-11-07 23:31       ` Daniel De Graaf
2014-11-14 14:22         ` Emil Condrea
2014-11-14 18:01           ` Daniel De Graaf [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54664390.3000706@tycho.nsa.gov \
    --to=dgdegra@tycho.nsa.gov \
    --cc=Ian.Campbell@citrix.com \
    --cc=emilcondrea@gmail.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.