kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* KVM hook for code integrity checking
@ 2010-04-30 14:53 Suen Chun Hui
  2010-05-05  9:05 ` Avi Kivity
  0 siblings, 1 reply; 4+ messages in thread
From: Suen Chun Hui @ 2010-04-30 14:53 UTC (permalink / raw)
  To: kvm

Dear KVM developers,

I'm currently working on an open source security patch to use KVM to
implement code verification on a guest VM in runtime. Thus, it would be
very helpful if someone can point to me the right function or place to
look at for adding 2 hooks into the KVM paging code to:

1. Detect a new guest page (which I assume will imply a new pte and
imply a new spte).
Currently, I'm considering putting a hook in the function
mmu_set_spte(), but may there is a better place.
This hook will be used as the main entry point into the code
verification function

2. Detect a write fault to a read-only spte (eg. for the case of
updating the dirty bit back to the guest pte)
Unfortunately, I'm unable to find an appropriate place where this
actually takes place after reading the code many times.
This hook will be used to prevent a secondary "peek" page from modifying
an existing verified code page.

I will gladly contribute my work(my phd thesis) to the list once it is
workable, if anyone find it useful.
Thank you in advance.

Regards,
Chun Hui

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: KVM hook for code integrity checking
  2010-04-30 14:53 KVM hook for code integrity checking Suen Chun Hui
@ 2010-05-05  9:05 ` Avi Kivity
  2010-05-06  4:51   ` Suen Chun Hui
  0 siblings, 1 reply; 4+ messages in thread
From: Avi Kivity @ 2010-05-05  9:05 UTC (permalink / raw)
  To: Suen Chun Hui; +Cc: kvm

On 04/30/2010 05:53 PM, Suen Chun Hui wrote:
> Dear KVM developers,
>
> I'm currently working on an open source security patch to use KVM to
> implement code verification on a guest VM in runtime. Thus, it would be
> very helpful if someone can point to me the right function or place to
> look at for adding 2 hooks into the KVM paging code to:
>
> 1. Detect a new guest page (which I assume will imply a new pte and
> imply a new spte).
> Currently, I'm considering putting a hook in the function
> mmu_set_spte(), but may there is a better place.
> This hook will be used as the main entry point into the code
> verification function
>    

This is in general not possible.  Hosts with npt or ept will not see new 
guest ptes.

It could be done with physical pages, but you'll have no way of knowing 
if the pages are used in userspace, the kernel, or both.

> 2. Detect a write fault to a read-only spte (eg. for the case of
> updating the dirty bit back to the guest pte)
> Unfortunately, I'm unable to find an appropriate place where this
> actually takes place after reading the code many times.
> This hook will be used to prevent a secondary "peek" page from modifying
> an existing verified code page.
>    

set_spte() or mmu_set_spte() may work.

-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: KVM hook for code integrity checking
  2010-05-05  9:05 ` Avi Kivity
@ 2010-05-06  4:51   ` Suen Chun Hui
  2010-05-06  9:04     ` Avi Kivity
  0 siblings, 1 reply; 4+ messages in thread
From: Suen Chun Hui @ 2010-05-06  4:51 UTC (permalink / raw)
  To: kvm

Hi,

Thanks for the reply.

On 05/05/2010 11:05 AM, Avi Kivity wrote:
> On 04/30/2010 05:53 PM, Suen Chun Hui wrote:
>> Dear KVM developers,
>>
>> I'm currently working on an open source security patch to use KVM to
>> implement code verification on a guest VM in runtime. Thus, it would be
>> very helpful if someone can point to me the right function or place to
>> look at for adding 2 hooks into the KVM paging code to:
>>
>> 1. Detect a new guest page (which I assume will imply a new pte and
>> imply a new spte).
>> Currently, I'm considering putting a hook in the function
>> mmu_set_spte(), but may there is a better place.
>> This hook will be used as the main entry point into the code
>> verification function
>>    
>
> This is in general not possible.  Hosts with npt or ept will not see
> new guest ptes.
>

Yes, I was only considering the case of using shadow paging. Would this
be possible then, since the walker would have to parse gpte anyway?

> It could be done with physical pages, but you'll have no way of
> knowing if the pages are used in userspace, the kernel, or both.
>
>> 2. Detect a write fault to a read-only spte (eg. for the case of
>> updating the dirty bit back to the guest pte)
>> Unfortunately, I'm unable to find an appropriate place where this
>> actually takes place after reading the code many times.
>> This hook will be used to prevent a secondary "peek" page from modifying
>> an existing verified code page.
>>    
>
> set_spte() or mmu_set_spte() may work.
>


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: KVM hook for code integrity checking
  2010-05-06  4:51   ` Suen Chun Hui
@ 2010-05-06  9:04     ` Avi Kivity
  0 siblings, 0 replies; 4+ messages in thread
From: Avi Kivity @ 2010-05-06  9:04 UTC (permalink / raw)
  To: Suen Chun Hui; +Cc: kvm

On 05/06/2010 07:51 AM, Suen Chun Hui wrote:
> Hi,
>
> Thanks for the reply.
>
> On 05/05/2010 11:05 AM, Avi Kivity wrote:
>    
>> On 04/30/2010 05:53 PM, Suen Chun Hui wrote:
>>      
>>> Dear KVM developers,
>>>
>>> I'm currently working on an open source security patch to use KVM to
>>> implement code verification on a guest VM in runtime. Thus, it would be
>>> very helpful if someone can point to me the right function or place to
>>> look at for adding 2 hooks into the KVM paging code to:
>>>
>>> 1. Detect a new guest page (which I assume will imply a new pte and
>>> imply a new spte).
>>> Currently, I'm considering putting a hook in the function
>>> mmu_set_spte(), but may there is a better place.
>>> This hook will be used as the main entry point into the code
>>> verification function
>>>
>>>        
>> This is in general not possible.  Hosts with npt or ept will not see
>> new guest ptes.
>>
>>      
> Yes, I was only considering the case of using shadow paging. Would this
> be possible then, since the walker would have to parse gpte anyway?
>    

It's possible, but it's not a good idea to require shadow paging.  It's 
slow and doesn't scale well.

-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-05-06  9:04 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-30 14:53 KVM hook for code integrity checking Suen Chun Hui
2010-05-05  9:05 ` Avi Kivity
2010-05-06  4:51   ` Suen Chun Hui
2010-05-06  9:04     ` Avi Kivity

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).