qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Blue Swirl <blauwirbel@gmail.com>
To: "Bud P. Bruegger" <bruegger@ancitel.it>
Cc: qemu-devel@nongnu.org, John Forrester <forrester@ancitel.it>
Subject: Re: [Qemu-devel] QEMU as a "virtual smart card"?
Date: Thu, 3 Sep 2009 21:51:01 +0300	[thread overview]
Message-ID: <f43fc5580909031151i23550fb4h1a4898e2e17c18f2@mail.gmail.com> (raw)
In-Reply-To: <20090903170931.1e7d5772@bud-laptop>

On Thu, Sep 3, 2009 at 6:09 PM, Bud P. Bruegger<bruegger@ancitel.it> wrote:
> On Wed, 2 Sep 2009 17:58:18 +0300
> Blue Swirl <blauwirbel@gmail.com> wrote:
>
>> On Wed, Sep 2, 2009 at 2:47 AM, Jamie Lokier<jamie@shareable.org>
>> wrote:
>> > Bud P. Bruegger wrote:
>> >> At least looking naively at QEMU, it seems that its CPU and RAM are
>> >> well protected from the host operating system--in a way to say
>> >> make it practically impossible for some malware to extract the
>> >> secret key used in a virtual machine.
>> >
>> > No, the CPU and RAM state inside QEMU is easily read from the host.
>> > Just run a debugger and attach to the running QEMU process.  It's
>> > not completely simple, but it's far from secure.
>>
>> For additional complexity, the CPU registers, memory, instruction set
>> and I/O could be encrypted but there is still a problem: where to
>> store the keys. The keys could be handled by another host process,
>> which could also try to attest that no debugger is attached (at least
>> on that level of virtualization). Performance would suck of course and
>> the attestation process could be fooled.
>
> First of all thanks to everyone for the replies and advice.
>
> As for encryption of RAM and processor, wouldn't it be necessary to
> decrypt things before using it and that would be visible to the
> observer on the host machine?

The translator will read (decrypt) the memory one instruction at a
time, but the instructions will be thrown away. The translated code in
TBs will be plain unencrypted host machine code. Someone could even
write a decompiler to reconstruct the unencrypted instructions based
on the machine code sequences in TBs.

> While surely not bullet proof and impossible to crack, I thought that
> there may be other ways of rising the hurdle quite a bit.
>
> Assume that I wanted to protect a secret algorithm in some C program.
> Normally this is compiled into the machine code of a certain processor
> and there are standard tools (disassembler, debugger) that can be used
> to figure out what the secret algorithm does.
>
> A virtual machine has a virtual processor.  Assume now that I was to
> shuffle around machine instructions both in the processor of the
> virtual machine and in the back-end of my c-compiler.  I imagine that
> it would be possible to automate this process (some refactoring tool?)
> and to do some random shuffling.
>
> At this point, I guess before looking at the code I'd have to create my
> own tools (disassembler, debugger) before even starting to look at what
> is happening.
>
> So maybe there would even be some more room to generate a "random
> virtual processor" together with a "random C compiler".  Kind of like
> generating a key pair :-)

There's still the translated output.

> That would still leave RAM unprotected, I guess...  But maybe there
> could be a way of adding some "random" RAM/CPU combination with enough
> entropy..

RAM could be encrypted, for example MMU (preferably TLB based) could
be enhanced to decrypt/encrypt each page with a different key. The CPU
would need to see unencrypted data, but not all of it at the same
time.

> do you think that is a valid idea?

You could validate it with something simple, like by modifying a user
emulator so that code pages massaged with XOR still execute. Or
reverse the bits in a byte, turn the memory upside down so that
address 0 is actually (unsigned long)-1, etc.

I don't think this makes any sense from guest security point of view,
it's still just obscurity.

On the other hand, there is a new benefit when considering a hostile
guest case: even if the guest could break out from the the VM, the
twisted CPU would also see the host memory in a distorted way. And if
we perform the distortion twice by running QEMU inside another twisted
VM, the guest inside would have to break from a VM twice with no idea
of what kind of machine instructions could be executed in the middle
VM. Direct bypass to the real world would still be possible, though
the guest would still need to reverse both distortions while doing any
host memory writes.

  reply	other threads:[~2009-09-03 18:51 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-31 16:08 [Qemu-devel] QEMU as a "virtual smart card"? Bud P. Bruegger
2009-09-01 22:27 ` Laurent Vivier
2009-09-01 23:47 ` Jamie Lokier
2009-09-02 14:58   ` Blue Swirl
2009-09-03 15:09     ` Bud P. Bruegger
2009-09-03 18:51       ` Blue Swirl [this message]
2009-09-04 12:08       ` Paul Brook
2009-09-04 13:12       ` Lennart Sorensen
2009-09-04 13:40         ` Bud P. Bruegger
2009-09-05  2:21           ` Jamie Lokier
2009-09-02  6:58 ` [Qemu-devel] " Paolo Bonzini
2009-09-02  9:17   ` François Revol

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=f43fc5580909031151i23550fb4h1a4898e2e17c18f2@mail.gmail.com \
    --to=blauwirbel@gmail.com \
    --cc=bruegger@ancitel.it \
    --cc=forrester@ancitel.it \
    --cc=qemu-devel@nongnu.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 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).