Why IRC over SSL is pointless (2009)
quakenet.org
quakenet.org
- User visits IRC network website
- User logs in
- User is given a single-use token or command containing a token
- User sends token to NickServ
- User is authenticated
Not invincible to MITM, but at least it avoids leaking credentials in plaintext.
Using any sort of authentication involving a separate channel would stop them from authenticating without user interaction. Unless of course it could also be automated. However, I doubt it is easy enough to create a standard for this.
If your only goal is to stop leaking the password in cleartext, that could also be achieved using established standards such as SASL or a challenge-response mechanism such as CRAM-MD5.
They are basically arguing that while SSL might cover 9/10 cases, because it doesn't cover that 1 case, they will leave the other 9 open.
It's inconvenient to restart all your connections because you need to apply an openssl patch, it's when worse when all the tls handshakes increase the time to get everyone back online when you do.
so you'd be more accurate to say it covers 98/100 of cases, and we leave the other 2 open
the main obstacle these days is that a secure PKI deployment for a network ran by 40 different companies with no legal structure is a hard problem, not the technical challenge of putting a cert in your ircd.conf
So I'd say that it's just not for the 2% that are using the secure channels, but probably for the majority of the userbase that is active for more than a couple of sessions.
PKI deployment in a semi-untrusted environment is still very difficult.
freenode messed it up by sharing their private key between all irc servers, which are hosted on other people's hardware. they had servers compromised in this period, and no forward secrecy enabled, so any TLS traffic captured over those multiple years has been effectively compromised.
presumably this was done to save money on CA fees, a problem that's gone away now that letsencrypt exists.
note that when I wrote the article the general assumption was that openssl was a reasonably good piece of software... not many people hold this view today.
an ircd isn't as easy to upgrade as nginx, upgrading them each time there's a new openssl vulnerability would make for a very splitty network.
separating the tls termination from the ircd (and locking it in a seccomp sandbox) would allow it be restarted independently... and is in progress.
(re: nickserv passwords, our channel service supports CRAM-MD5, so that isn't really a problem)
The lesson that I take from this is that saying "no" to people who want to build a bad idea isn't sufficient, because it's just pitting your energy against theirs. You need to lick the chocolate by building something that is good enough to remove the incentive to build the bad idea, without replicating its worst flaws.
I should have built the damn thing myself.
This seems like a perfect candidate for something like CloudFlare's Keyless SSL, but I'm not aware of any ircds having support for something like that.
You cite the freenode mess. All true. Even with that major screwup, it protected their users to a certain extent, even with compromised keys after the fact. (The majority of snoopers aren't motivated enough to store the ciphertext).
It seems true that the payoff is higher for a successful MITM for IRC than a normal website, but such a MITM is far from guaranteed to happen.
Saying that such or such method of protection can be broken so it shouldn't be implemented means we shouldn't implement _any_ security measure - since there is not one 100% secure measure.
given IRC is mostly about channels, this renders TLS mostly pointless for IRC.
(TLS works fine with two endpoints communicating directly... mostly, it's still a kitchen sink protocol that probably needs replacing)
VPNs and proxies could also obviously work, but introduce their own difficulties.
To me this seems like saying a webmail site shouldn't use SSL because the recipient might also use a webmailer and happily accept a self-signed certificate and bypass the browser warning. Sure, it's no replacement for E2E crypto, but to me that's a clear case of perfect being the enemy of good.
(I just tried it)
I just did for two of the author's comments, I don't think they should be dead at all.
1) The author states that their opinion changed somewhat
2) The author explicitly names a compromised deployment (Freenode). Haven't fact checked that, but that _seems_ like a good argument
3) The architecture of the network (random organizations sponsor servers) seems like a plausible excuse for headaches/complications as far as I'm concerned.
I don't think that. Why would you think that?
Why would gamers care more about privacy and security than groups like programmers or sysadmins?
[1] http://arstechnica.com/tech-policy/2015/05/teen-pleads-guilt...
Some individual programmers might have a state adversary or somesuch after them—but that's one adversary attempting to MITM one user. In a competitive game with computer-savvy players, you could potentially see every player becoming an adversary against half the other users on the service.
One possible fix is, have the IRC client refuse to connect to a server if the certificate is invalid.
In my opinion, implementing SSL is really more about preventing mass capturing (and later forging) user identities/credentials than it is about trying to create either perfect security or preventing an attack on a server.
I like to use this case to demonstrate to people that little scraps of unimportant data can be combined to identify someone.
It's theoretically possible to deploy Let's Encrypt now for IRC servers, which removes the cost issue. The new problems become the automated creation and deployment of IRC server certificates. You'll most likely need to use the DNS-01 challenge type, since most IRC servers aren't running a HTTPd and even if they were, you couldn't guarantee that the ACME server would pick the IP of the actual requesting server out of the "pool" records (e.g. irc.example.net). Using DNS-01 means you'll need to write code to interface with your DNS server, which also means securing that interaction (so other people can't modify your DNS records and get signed certs for your domain as well).
I actually manage the (signed) certificates for one of the IRC networks I'm an administrator for. Our two blockers for deploying Let's Encrypt are the aforementioned challenges with DNS-01, and the fact that our software currently validates server-to-server links using the fingerprint of each server's individual certificate, hardcoded into the configuration file. If we're switching certs every 3 months, we'll need some way to either distribute certificate configuration more efficiently or we'll need to change the ircd to verify the certificate chain instead of the fingerprint.
FWIW, our current deployment of signed certs is the "one cert to rule them all" deployed to all servers on our network. This is definitely not ideal, but it's by far the cheapest and easiest option prior to Let's Encrypt. All other options we evaluated were simply way too expensive ($X,000+), extremely labor-intensive (e.g. manually obtaining a new cert for every single server every year/every time something changed), or both.
That's one of the recommended solutions for shared-hosting providers who don't want to use DNS-based validation.
Running a HTTPd on each server is a bad idea for us since it increases DDoS attack surface area. This would essentially have the same distribution issue that I would need to solve with a DNS-01 client as well, so either way new code is required.
The current draft for IRCv3.3 of the IRCv3 working group already has a draft for Strict Transport Security, see http://ircv3.net/specs/core/sts-3.3.html
We need the same culture shift in IRC clients that took place in browsers. Every IRC client should take certificate validation serious and do it properly. For that to happen, we need more SSL-enabled IRC servers and users that want to use it.