Stefan Bechtold talks about our paper on semantic remote attestation (local copy - slides of my USENIX VM talk) over on this TC Blog. In short, we think that remote attestation as it is now is fundamentally broken (see the paper for a long explanation of why), and semantic remote attestation tries to fix all that and attest program behavior rather than program binaries.
Stefan raises a couple of questions about our technique:
However, it seems to me that the proposal suffers from at least two limitations: First, although the authors give some examples of what kind of behavior their trusted virtual machine could analyze, it is an open question whether this mechanism can provide all the different kinds of information a remote challenger needs when he does a remote attestation. More work and explanation is probably needed in this area. Secondly, and more importantly, this proposal only works with applications written in Java and similar languages - as the language-based trusted virtual machine needs the high-level information that is included in Java bytecode.
(emphasis mine)
To address the first point: I think right now there is no general consensus on what kinds of information a remote challenger needs. There are some probable scenarios though: DRM comes to mind (and not just for corporate interests, for
regular people too), as well as
high-level application-specific properties that vary from application to application and are hard to generalize. In the case of file-sharing applications, one might want to enforce polices of the form “share file X only within group G”. Currently, we simply trust a client to respect such policies, with no way to either enforce or check them ourselves. For example, it turned out that
a popular BitTorrent client was not properly respecting the “private” flag on torrents. Another related property is that of controlling
information flow within a program. This comes up whenever a program manipulates sensitive information (financial records, confidential documents) on our behalf. We are currently working on ways to
enhance the JVM with dynamic information-flow control capabilities, with the final goal of being able to remotely attest such properties.
Ultimately, semantic remote attestation itself is a policy-agnostic technique (as it should be!) and, in my view, has the capability to remotely attest a broad variety of high-level policies.
Now, the second point — this indeed is the more important, and more interesting question. Imagine that what we call the TrustedVM isn’t the JVM, but something lower on the software stack. Say, the operating system. Or even lower — the x86 instruction set.
As we go lower in the abstraction tower, our “funnel” gets wider — we’re able to capture the behavior of more and more software. At the hardware instruction set level we can capture the behavior of the entire system (indeed, projects such as
ReVirt have done this). There is a tradeoff though: lower levels of abstraction have lesser high-level information, and consequently,
it is hard to make high-level policy decisions at a low level. For example, the OS is not aware of application-level policies such as “the reply to such-and-such network request must be of such-and-such form and possess such-and-such properties”. And don’t even think about doing such things at the ISA level.
So where does that leave us? We’re stuck with the age-old dilemma of choosing a sweet-spot along a tradeoff curve. Where is that sweet-spot? I honestly don’t know. But with more software being targeted to managed runtimes, my bet would be that the sweet-spot is at the level of the language runtime. And in the meanwhile, it would really interesting to see how the ideas of semantic remote attestation can be applied at the level of the operating system by (the age-old) technique of syscall interception.