Listen to the whispers: web timing attacks that work

149 pointsposted 19 hours ago
by saikatsg

21 Comments

miki123211

17 hours ago

Timing attacks are such a pernicious idea.

You look at the code and see that there's an auth check in place, you test the code to verify that the auth check has no bugs, you make sure that information is never shared with people who don't have authorization to access it, and yet it turns out it can be accessed as if there was no auth check at all.

To make matters worse, everything can be fine for some time, and then some clever optimization in the CPU, the compiler, cache layer or the database engine introduces a completely unexpected side channel.

GoToRO

16 hours ago

would adding random delays prevent this?

pwagland

14 hours ago

No, it only makes it take longer to get the underlying secret.

Timing attacks are already dealing with "noisy" data, task scheduling et al, so they all boil down to some level of statistical analysis on the response times. Adding noise to that slows you down, but the underlying bias on the timings is still there.

ozim

6 hours ago

So in practice it prevents the attack as real world attackers have limited resources and try to find easier targets.

saagarjha

3 hours ago

That’s what everyone says until they realize they understated the costs to attempt such an attack.

GoblinSlayer

3 hours ago

So you need to compute this statistics and add just the right delay to even out the bias.

saagarjha

3 hours ago

At that point you’ve implemented a constant-time algorithm.

Filligree

15 hours ago

Random delays specifically do not, as they average out. Delays until a specific point in time do work, so long as the delay is never negative.

bostik

4 hours ago

This particular case would be a fantastic fit for timer wheel.[0] Instead of writing a brittle implementation of "after a fixed time in the future" logic yourself, you queue the outgoing event to occur after N ticks [of granularity X], and let the dedicated data structure engine do the work for you.

0: https://www.snellman.net/blog/archive/2016-07-27-ratas-hiera...

wiredfool

15 hours ago

One thing that I’ve done where I previously had a random delay is implement a delay till a constant time from the start of the request. So all of the timing you get out is effectively how well sleep can target a time.

tptacek

16 hours ago

It depends on the kinds of attacks you're thinking of. For the stuff Kettle is doing, probably yes. For cryptographic side channels, probably no.

jack_pp

15 hours ago

or you could benchmark the functions that compare secrets to user input and figure out how much time it's supposed to take, add 0.5s to the average and always add time before responding to get to that target so essentially your response time is constant regardless of input

tptacek

14 hours ago

Important to keep in mind here that the timing attacks Kettle is talking about generally do not take the form of "providing secret input to a function with variable timing".

jack_pp

6 hours ago

He says this exact same thing in the Defense at the end:

> Finally, yes I do recommend using constant-time functions when comparing user input with secret keys. Just ask anyone who says this is an actual threat to provide a proof of concept.

tptacek

16 hours ago

A fun thing about this work is that it's following different threads than the remote timing attack research in cryptography follows; high-end remote timing in cryptography involves some signal processing work, which isn't really present here. Which means Kettle's attacks are likely to get more powerful.

ssklash

17 hours ago

I look forward to James Kettle's yearly research results, he's the most incredible appsec researcher I know of.

markandrewj

16 hours ago

I have never met James, but I agree his research is great. I always enjoy reading or watching his content.

biosboiii

13 hours ago

I did some research few weeks ago on the topic of database lookup timing side-channels, conclusion is: They don't really exist (for SELECT FROM WHERE commands atleast). https://altayakkus.substack.com/p/timing-side-channel-on-sql...

Sjoerd

2 hours ago

I came to the same conclusion. Many string comparison implementations don't actually compare one character at a time. In one case strcmp seemed to compare eight characters at a time, so you would need to guess eight characters correctly to get a time difference. Glibc memcmp can compare 32 bytes at a time. In C# the timing of string compare depends on whether it does Unicode normalization or not. Even then, the difference is less than a nanosecond per compared character. It is not as straightforward that every string comparison between sensitive data and user input is at risk of timing attacks.

https://www.sjoerdlangkemper.nl/2024/05/29/string-comparison...

marcus_holmes

11 hours ago

I'm curious that he appears to completely ignore the network latency/jitter on the return path. How does this work?

albinowax_

4 hours ago

With the single-packet attack, you look at the order that the responses arrive in, instead of the time they take to arrive. Since the responses are on a single TLS stream, they always arrive at the client in the order that the server issued them in. Hope that makes sense!