W3C home > Mailing lists > Public > public-fx@w3.org > October to December 2011

Re: Documenting Timing Attacks in Rendering Engines

From: Gregg Tavares (wrk) <gman@google.com>
Date: Mon, 12 Dec 2011 13:06:57 -0800
Message-ID: <CAKZ+BNpNMtG6FTppwxx+_OuQKO5S8Kdf=AA85_zJmz0PZdC79g@mail.gmail.com>
To: Chris Marrin <cmarrin@apple.com>
Cc: Adam Barth <w3c@adambarth.com>, Vincent Hardy <vhardy@adobe.com>, "public-fx@w3.org" <public-fx@w3.org>
On Mon, Dec 12, 2011 at 11:48 AM, Chris Marrin <cmarrin@apple.com> wrote:

>
> On Dec 12, 2011, at 10:23 AM, Adam Barth wrote:
>
> > I'm happy to start talking about solutions once folks stop pretending
> > this vulnerability doesn't exist.
>
> One solution would be to hide the amount of time it takes to render from
> the content author. This is theoretically possible if you render in a
> different thread than the one in which JavaScript is running (the web
> thread). For instance, the web thread could construct a list of commands
> used to render the page and then pass that list to another thread or
> process for the actual rendering. While rendering is happening in that
> other thread, the web thread can continue, generating a new display list
> for the next frame.
>
> You'd still throttle the web thread to the display refresh rate to avoid
> generating more display lists than could possibly be useful. But the actual
> rendering could take an arbitrary amount of time without affecting the rate
> at which display lists are generated. Since shader execution time is purely
> a rendering artifact, the author would never know how long it has taken.
>
> The downside of this approach (other than additional complexity) is that,
> if rendering is slower than the display refresh rate, more display lists
> would be generated than rendered. These would simply be discarded, but the
> browser would be doing more work than it does today when under heavy
> rendering load.
>

In this particular case I think the problem boils down to
requestAnimationFrame. It's only going to give you frames as fast as it
takes to render and one way or another you can use that to get your timing.
(I don't think setInterval/setTimeout would be any different). At some
point the JavaScript or HTML renderer will be throttled waiting for this
other process to do work. You just need to figure out how much work to give
it to find that throttling point and then use that to adjust how long
rendering takes.


>
> Many graphics libraries used in browsers today use, or can be made to use,
> display lists. So while this would not be a simple solution it would be a
> practical one. It would add complexity, but I think it would solve the
> problem of timing attacks in any page rendered content.
>
> -----
> ~Chris
> cmarrin@apple.com
>
>
>
>
>
>
Received on Monday, 12 December 2011 21:07:35 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 12 December 2011 21:07:35 GMT