Killing SSLv3 Before Bed

Killing SSLv3 Before Bed

Tutorials poodle security ssl sysadmin

So Google's security team dropped another one on us yesterday. POODLE. Which, yes, is a real acronym (Padding Oracle On Downgraded Legacy Encryption) and not just someone at Google having a rough Tuesday and needing a laugh. It's an attack against SSL 3.0, the ancient encryption protocol that basically nothing modern actually wants to use anymore but that a shocking number of servers still accept because turning it off felt scary.

I want to be annoyed about this. I am a little annoyed about this. But mostly I'm just tired, because this is the third time in 2014 I've had to go SSH into every box I run and patch something with a cute name. Heartbleed back in April. Shellshock in September. Now POODLE in October. At some point I want to open a pool and take bets on when the next one drops, except I already know the answer is "eventually, and probably soon."

Anyway. Here's the short version for anyone who runs their own server and hasn't dealt with this yet: SSLv3 is broken in a way that lets an attacker who can sit on your network connection (open wifi at a coffee shop, say) potentially decrypt small pieces of "secure" traffic, one byte at a time, by forcing a downgrade from TLS to SSLv3 and then abusing how SSLv3 does its padding. It's not trivial to pull off and it's not going to be used against you by some random script kiddie tomorrow, but it's exactly the kind of thing that becomes trivial once someone packages it into a tool. Which always happens.

The actual fix is boring, which is the best kind of fix. You just turn SSLv3 off entirely. Nobody legitimate needs it in 2014 — even IE6 on ancient Windows XP boxes generally has TLS 1.0 available.

If you're running Apache, find your SSL config (usually somewhere under /etc/apache2/mods-enabled/ssl.conf or in your vhost file) and make sure you've got:

SSLProtocol all -SSLv2 -SSLv3

If you're running nginx, it's in your server block:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Just leave SSLv3 off the list entirely. Restart, then go test yourself against Qualys SSL Labs' checker to make sure it actually took. I did this on my own little VPS last night around 11pm instead of, you know, sleeping, and it took maybe four minutes once I found the right config file. The annoying part isn't the fix, it's remembering where you buried the config six months ago.

One thing worth flagging if you run anything customer-facing: turning off SSLv3 will break connections from genuinely ancient clients, mainly IE6 on Windows XP. If your traffic logs show a meaningful chunk of that (some corporate intranets and government sites still do, unbelievably), you've got an actual tradeoff to think about instead of just flipping the switch. For personal sites and most small stuff, nobody's going to notice. I checked my access logs going back two weeks and found exactly zero legit IE6 hits, mixed in with the usual pile of bots pretending to be every browser under the sun.

The other story going around this week that I'll mention without really digging into it: there's been a bunch of noise about Dropbox passwords supposedly leaking, with someone posting a batch of credentials online claiming they came from Dropbox. Dropbox says (and I believe them, for what it's worth) that they weren't breached and the credentials came from other sites that got hacked, then got tried against Dropbox because people reuse passwords everywhere. Which, yeah. Everyone reuses passwords everywhere. I still catch myself doing it on some throwaway forum account and then feeling bad about it for the rest of the day. Use a password manager. I know, I know, everybody says this. I finally started using one myself back in the summer and it's the most boring good decision I've made all year.

Anyway, go check your server's SSL config. It'll take you less time than reading this post did.