Enhancing digital certificate security (Fake *.Google.com cert issued)
googleonlinesecurity.blogspot.com
googleonlinesecurity.blogspot.com
1) There is no reason that your mobile apps need to use the public CA system. You can either generate your own signing certificates and embed them in your apps, or if you must use CA certificates for your mobile endpoints, at least pin those SPKIs in your apps. More info here: http://www.thoughtcrime.org/blog/authenticity-is-broken-in-s...
2) If your website is high volume, Adam Langley is very generous about adding certificate pins for the CA you are using to Chrome: http://www.imperialviolet.org/2011/05/04/pinning.html This will mean that a random CA in Turkey can not be used to intercept traffic to your website from Chrome, in the exact same was that Google was protected in this incident with its own websites. Word on the street is that Firefox is now beginning to use the same list of pins.
3) Experiment with and support the development of TACK, which is a way to frictionlessly pin certificates for your website in a dynamic way (rather than having to hardcode them into browser binaries): http://tack.io
4) And of course, make sure that you're advertising HSTS headers, so that your users aren't vulnerable to sslstrip (http://www.thoughtcrime.org/software/sslstrip) attacks.
This is the worst security violation committed by a CA that I have ever read! These organizations can now issue certificates for any domain, not just google.com, and they will be seen as valid by all browsers. Fortunately Chrome already revoked the intermediate CA certs.
However it is unclear whether TURKTRUST has done so on their side yet or not. They distribute 2 main CRLs: [1] which is empty(!) and [2] which contains a bunch of serial numbers recently revoked presumably related to the incident. However their root cert [3] does not reference any of these CRLs, and their (legit) intermediate CA cert [4] is also misconfigured and points to the empty CRL:
X509v3 CRL Distribution Points:
Full Name:
URI:http://www.turktrust.com.tr/sil/TURKTRUST_Kok_SIL_s3.crl
What this means is that it appears TURKTRUST has not technically revoked anything via CRL. Perhaps they did via OCSP, but I have not checked whether their OCSP endpoint advertises the recent revocations or not.[1] http://www.turktrust.com.tr/sil/TURKTRUST_Kok_SIL_s3.crl
[2] http://www.turktrust.com.tr/sil/TURKTRUST_Nitelikli_SIL_s3.c...
[3] http://www.turktrust.com.tr/sertifikalar/19_TURKTRUST_Elektr...
[4] http://www.turktrust.com.tr/sertifikalar/20_TURKTRUST_Niteli...
[1] http://events.ccc.de/congress/2012/Fahrplan/events/5319.en.h...
The PKI in its current form and application should really go. Cross-signing of a certificate by two or more independent CAs would be also a good step forward. And so would be a native support for certificate pinning in browsers. In other words, PKI should be used for bootstrapping the trust between two unacquainted parties, but it shouldn't be the only option, nor should be used as a trust provider on an on-going basis.
Consider this, if I hold a certificate for fubar.com, why am I not permitted to issue a certificate for xyz.fubar.com? Or, better yet - another certificate for fubar.com?
(edit) Also, "Enhancing digital certificate security" is such a bullshit title. Very odd to see this coming from Google. They must be very unnerved by the incident, or they are going to use it as a stepping stone to something else.
Because business model. StartSSL.com is afaik the first (only?) CA that charges solely for identity validation and then let's you create unlimited (wildcard) certificates (with the exception of EV certs).
* No ties, just a customer.
Sadly you'll spend the rest of your time installing your root certificates in everything (good luck with mobile devices, I have torn my hair out in the past with Sony-Ericsson; Oh, you have to drag the specially-named-file-in exactly-the-right-encoding onto the HIDDEN node in the PC-suite-file-explorer-horror-window, of course. HOW OBVIOUS.)
IronKey was something I already used, so it was natural to try and build a minimal CA that fit on it.
Given the choice I'd prefer a good VPN solution but the aforementioned pre-smartphones simply couldn't do that and SSL VPNs weren't common, so TLS was what we had. Now, that little CA primarily gets used for generating Xauth-RSA certificates for my IPSEC VPNs...
I'm looking at doing this and rather not have to slog through the nuances if possible. (I deal with certain on a sufficiently infrequent basis that I have to actively try to figure the steps again. One of the frustrating things of having to deal with cryptic options)
Your experience running a homebrew setup is exactly why I think CAs will continue to exist—even if self-signed certs would be widely supported via DANE. I doubt many businesses are going to run their own CA in order to save < $1000 a year.
The issue is that according to RFC5280, nameConstraints MUST be marked critical, which would break all clients that don't support nameConstraints - including Apple OS X and iOS. As a result of not wanting to break these clients, no CA has practically deployed nameConstraints.
However, as is being discussed in the CA/Browser Forum AND Mozilla's security policy list (and previously, within PKIX), CAs and browsers are considering diverging from 5280, and not REQUIRING that 5280 be marked critical. ( https://groups.google.com/forum/?fromgroups#!topic/mozilla.d... for more context)
This will allow a transition period, where CAs that would otherwise NOT include nameConstraints (because it would break clients) can now safely include nameConstraints and not break the legacy or insecure clients that do not support them. Mozilla's proposed CA Certificate Inclusion Policy ( http://www.mozilla.org/projects/security/certs/policy/WorkIn... ) would REQUIRE that CAs use name constraints when issuing sub-CAs that are not audited, secured, and conformant with Mozilla's policy.
I'm sure every reasonably sized government already has either a root key or an intermediate key, but there should at least be enough penalty when you get caught publicly to deter it -- at least raise the cost of being caught enough that governments won't use their CA powers without fear they might be putting the capability at risk each time.
That being said, I'd hope that someone researches and figures out why the certificates were issued, to whom, and for what purpose.
If it had been innocuously issued, no one would have attempted to issue google.com certs.
Google is in a better position to detect evil google.com certs in use. There's every reason to suspect other evil certs were issued and in use as well (although google.com is probably the most attractive mainstream target; compromising gmail is important to most intelligence and police agencies).
If nothing else, maybe this would put the fear of [entity] into the organizations in question. The erstwhile incompetent ones. The malicious ones, we just need to give the boot, already.
IE, Chrome & everything else that uses the OS:
runas /user:Administrator "mmc certmgr.msc"
(might also work as another Admin user if you disabled the real Administrator account)
Expand "Trusted Root Certification Authorities"
Double-click on TURKTRUST certificate
Click "Details" tab and "Edit Properties..." button
Click "Disable all purposes for this certificate"
Repeat for each TURKTRUST certificate in turn
FireFox/Thunderbird & everyone else that reinvented the wheel: Click "Options" -> "Advanced" and choose the "Encryption" tab
Click "View Certificates" button
Choose "Authorities" tab
Click on each TURKTRUST certificate in turn and press "Delete or Distrust"...
It's ridiculous that there are well over 300 trusted root CA certificates distributed with Windows 7. Does anyone have a minimal set for the Western world? I don't want to trust Turkey, or Korea, or China, implicitly by default - I'll decide who I trust as and when I have to.Let me explain my offended part: I'm managing some servers on AWS Ireland zone, I have big list firewall rules, not copied and pasted somewhere else, I started all open, and slowly most of China, Taiwan, Korea, Russia ... being blocked -at least SMTP, SMPTS ports- .
I'm sure there're some Turkish people may be involved cyber crime, But most of computer related people I know of is a hard worker, dependable, honest... This is the point of mine being offended..I don't mind not being included in a political society. And sorry for being offended ..:) PLUR.. Peace Love Unity Respect
What he is saying makes sense if you generalize it too. Most Turkish people probably don't need their browsers to trust certificates from a Panamanian CA, and most Panamanians probably don't need to trust certificates from a Finnish CA. That shouldn't be taken as suggesting anything negative about Panamanians or Finns; it's all about removing trust relationships that are not necessary for users.
From my relatively uninformed perspective, I would say that Turkey kind of straddles the line between east and west. They are not a primarily English speaking country, they are not (yet?) in the EU nor would I normally think of them as particularly "Europey" (as I would Switzerland; "Europey" is probably just a measure of how "western Europe" a country is.).
My perspective is probably being influenced by history quite a bit as well: http://en.wikipedia.org/wiki/File:Theodosius_I%27s_empire.pn...
Check out Convergence, which sounds like exactly what you are looking for. http://convergence.io/index.html
My frustration is with mobile devices. Given the huge proliferation of devices incl. idevices in recent years, it's annoying that we do not have the same options.
I just tried looking for a way to disable said CA in iOS and can't find a way to do so. Maybe someone else has figured this out. Halp?
Longer term, yes: I think looking at punishing TURKTRUST in some way, including revoking their CA, makes sense.
If TURKTRUST is immediately revoked, then all existing sites using it are toast, despite them not being compromised. That just tells users that SSL errors are not to be trusted, that you should just click through.
Hopefully, they remove TURKTRUST from signing future certificates. That way existing customers continue to work, but they can't do more damage, and the lesson is taught. Although, I don't think that's built-in to the cert system, it'd be a decent addition.
How hard would it be to allow a website to have multiple certs? If Turktrust's important customers had redundancy, we could pull less painfully.
Or for less rollout, could browsers acknowledge turktrust only as a root for .tr hosts? That would contain the damage, but probably not hit many legitimate customers.
"TURKTRUST Inc. incorrectly created two subsidiary Certificate Authorities:
(*.EGO.GOV.TR and e-islam.kktcmerkezbankasi.org).
The *.EGO.GOV.TR subsidiary CA was then used to issue a
fraudulent digital certificate to *.google.com."
http://blogs.technet.com/b/msrc/archive/2013/01/03/security-...Here is Google's blog directory.. all on blogspot, their blogging platform:
https://www.google.com/intl/en/press/blog-directory.html#tab...
That said, if they move it under the google.com domain, I hope they do not update it to use one of those blank-awful new Blogspot templates that coerce the use of Javascript (or the Google cache) to see anything. There would be, indeed -- from my perspective -- a bit of a contradiction (making me run their Javascript).
If so, then current SSL should be regarded as 'broken' effective immediately and not used for secure transactions with Google (and probably anybody else).
> Which means all Android/iOS apps that rely on a secure channel
> to a *.google.com domain can be MITMed?
http://mitmproxy.org/doc/certinstall/android.htmlWith this fake Google certificate, I can install a box between 2 routers anywhere between you and Google - say on an open wifi hotspot or in your ISP's server room. I can then set up a simple transparent forwarding proxy that will provide the fake Google certificate for any Google SSL requests, and forward on other requests as normal. I can then log all data passed between you and Google, such as session cookies, emails, credit card details on Google wallet, etc.
This is extremely problematic as it is effectively invisible to users and can be easily used by governments such as China to ensure they have full access to anybody's encrypted communications with no risk to themselves and very little chance of being detected.
Basically, SSL, HTTPS and anything else relying on CA certs should be regarded as broken, and you should even expect that a hostile government will be listening in. USA government, for example, has full access to AT&Ts server rooms and backbone routes. China has full access and control of any network infrastructure involving communications over Chinese borders.
But even that has huge problems. (For example, who ever double-checks their SSH server fingerprints in their known_hosts file?)
> That's hardly the same thing - you have to actually
> run/install something on the Android device itself.
I was scratching my head trying to figure out where the impedance mismatch was between our two comments... first, you're obviously talking about man-in-the-middle attacks on untouched devices in the wild. Second, your original statement that I was quoting was about intercepting Google apps that contact *.google.com, which I was pointing out that you can do anyway in a controlled environment. I thought you were surprised about the latter in the context of app security, otherwise why would you mention those apps specifically instead of the entirety of all traffic you can intercept etc.Unfortunately with these open .google.com certificates in the wild, any android device that would have been securely connecting with SSL to a google server is now wide open to MITM as if it wasn't using SSL at all. I mentioned .google.com in particular since that's the certs floating in the wild, but obviously certs could be made for any site. *.google.com is also of particular issue as your Android device will hold a secure channel open for commands from Google Play. Anybody who can pretend to be Google Play can add/remove applications from your device as they wish, and Google Play itself runs with elevated privileges and can be used to keylog passwords, intercept credit cards, etc. This is bad stuff, man.
At this very minute, someone may have installed a fake cert at your ISP, and your Android device may in fact be compromised without you having any idea. Obviously a completely different issue to hijacking traffic in a controlled environment!
YMMV as I'm running Jelly Bean on both phone (CM10.1) and tablets (stock).
You could also listen to this if that's your preferred way of learning things:
https://threatpost.com/en_us/blogs/moxie-marlinspike-tack-co...
1. http://datatracker.ietf.org/doc/rfc6698/
2. http://www.imperialviolet.org/2011/06/16/dnssecchrome.html
3. http://www.imperialviolet.org/2012/10/20/dane-stapled-certif...
It seems like a much harder thing to get adoption going for but it has good thought behind it and can exist in parallel with the rest of the TCP/IP world. I would love to see it get to a place where you can just download it from Debian or Homebrew...
* Convergence.io
* DNS-based Authentication of Named Entities (DANE) + DNSSEC
* Tack.io
For various reasons listed in [1] Convergence is not likely to be implemented (by default) in major browsers.
On DANE + DNSSEC, where the cert is authenticated via the information published in your DNS, Moxie Marlinspike has said it better then I can:
"CAs are sketchy, but this is a whole new world of sketchiness. Think,
sketchasaurus. Registrars were never built or selected with security in mind,
and most of them don’t have a very good track record in this area. Shouldn’t it
be laughable that the current first step in deploying DNSSEC is to create an
account with GoDaddy?"[2]
The 2011 BlackHat video[3] and blog post[2] by Moxie Marlinspike are great sources of information.IMO, Tack.io is the most viable solution. It's compatible with the current model but removes the thread of one CA being able to compromise all domains.
[1] http://www.imperialviolet.org/2011/09/07/convergence.html
[2] http://www.thoughtcrime.org/blog/ssl-and-the-future-of-authe...
The issue is that it doesn't solve anything. We merely shift (more) responsibility to registrars and NICs. You can change (untrust) registrars I suppose but if you have a .com you'll have to trust Verisign _forever_. Well, at least as long as they operate the .com tld. So if Verisign loses your trust, there is even less you can do than today.
(but yes, that is definitely a good solution)
https://src.chromium.org/viewvc/chrome/trunk/src/net/base/tr...
Those are the sites that they're currently able to do it for. :-)
If anyone reading wants to have your own site added to the HSTS preload (or perhaps cert pin) lists, I think the Chromium developers are interested in hearing from you. I know they'll add HSTS preloads for any site, but I don't know for sure whether there's a size or popularity threshold of some sort for a cert pin.
EDIT: Oh, apparently plug ins for nginx and apache are now available. Sweeeeet.
EDIT: Although I'm a bit nervous about turning it on. Several weeks ago I couldn't get to one of my websites where I had turned on HSTS for about an hour from Chrome, and I got absolutely no feedback from Chrome about what the problem was.
Chrome acted like it was HSTS, because it refused to let me connect at all, not even with a "it's okay to connect for now." And it went away by itself after about 30-60 minutes.
I'm sure I could have wiped out some Chrome settings to fix this, but this site is also used by our customers, and I really really wanted to understand what it was. Fortunately I was the only person who has ever ran into it so far.
Is there an HSTS user group I could ask about this?
What I've seen in the past is that Chrome occasionally gets over aggressive in caching (in an attempt to be "fast" I guess). Clearing all the caches out, flushing DNS etc. usually fixes it for me.
Does anything prevent a government from privately coercing a CA into issuing certificates that enable a MITM attack?
It may be that the difficulty of getting a gag order for a CA could be greater than the difficulty of obtaining a warrant on the destination, unless the destination is foreign--but it still sounds feasible for a government to do.
Am I off base about that?
As you can see, it doesn't even take pervasive deployment of a technology like TACK to significantly mitigate the threat of rogue CAs.
We (and other people who care about certs) could probably use contributions of algorithms for detecting things that are suspicious about certificates. :-)
One thing that I believe is not yet implemented but that I should try to implement is finding observations in the Observatory that, if they had been made by Chromium, would have violated a cert pin in Chromium. (Most of the observations in the Observatory are made by Firefox users, so their browsers wouldn't notice a pin violation at the time the observation was made.)
Another thing that could be interesting is finding all apparently valid certs that have never been seen by any Perspectives notary.
Anyway, there are a lot of queries to be run!
I look in the keychain, and I see three listings for TURKTRUST and it looks like the only option is to delete them. I can't set the cert to alert or warn, which is what I would prefer rather than just fully revoke them at this time.
And Chrome hasn't asked me to update, am I safe or do these updates happen unbeknownst to me server side?
If people can lie, they will, and there will be security issues. In this case a wildcard got out for *.google.com! MITM all google.com email, sounds fun!
Correct me if I'm wrong, but there isn't a single google webmaster tools or analytics account out there connected to the wrong domain. Why? Because to engage those services you must own the domain and have access to it.
Google makes you put an HTML file they generate in root or add a meta tag. They then request that URL and look for the resource.
If you want an SSL cert, you should have to put a file at example.com/ssl.html
Wildcard SSL's are trickier. My previous SSL provider charged over 100.00 per cert and that was as a reseller. They wouldn't even offer wildcards in the beginning. I believe they do now but it's a significant application process.
You still could require the placement of a file but that doesn't entirely prove they should get a wild cert for the domain. It still seems better than nothing and would have stopped the issuing of this particular cert.
Not to mention, wouldn't you think every CA or intermediate has a blacklist if domains they simply don't provide certain for? Google, Facebook, twitter, LinkedIn, every major ISP, etc.
Or what about using DNS as a means of authentication. If you want an SSL cert you have to add a TXT record of ssl. TXT (value issuer provides). Again, in this case, they would have failed the ability to interact with google DNS and no matter what DNS server they asked would tell the same.
They could set up a phony DNS server, but the issuer has no reason or knowledge to follow that out of band chain. Then the only way is a rogue employee, which is something no technology is going to solve and probably will remain a risk of all business security from SSL certain to banks to brick and mortar inventory shrink.
All these methods are fully automatic and should be of little burden to the registrar to implement. It's not like they have to handle a million requests a day. A page that spits out a hash of the domain and curl's the resource could probably handle most registrars load.