1 / 32

Using Frankencerts for Automated Adversarial Testing of Certificate Validation in SSL/TLS Implementations

Using Frankencerts for Automated Adversarial Testing of Certificate Validation in SSL/TLS Implementations. Chad Brubaker 1 Suman Jana 1 Baishakhi Ray 2 Sarfraz Khurshid 1 Vitaly Shmatikov 1 1 University of Texas at Austin 2 University of California at Davis.

baakir
Download Presentation

Using Frankencerts for Automated Adversarial Testing of Certificate Validation in SSL/TLS Implementations

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Using Frankencerts for Automated Adversarial Testing of Certificate Validation in SSL/TLS Implementations Chad Brubaker1Suman Jana1Baishakhi Ray2 Sarfraz Khurshid1Vitaly Shmatikov1 1University of Texas at Austin 2University of California at Davis

  2. Internet security = SSL/TLS

  3. SSL/TLS security objectives • End-to-end security even if the network is insecure • Authentication = certificate validation!! • Confidentiality • Integrity

  4. Certificate validation in SSL/TLS implementations

  5. How to check if implementations are correct? boolis_cert_valid (cert_t *cert) { return true; } How do people test SSL/TLS implementations?

  6. Current state oftheart Most of these are just well-formed certificates!

  7. Testing certificate validation code • Test input generation • Fuzzing - huge input space, a fuzzed string won't even parse as an X.509 cert • Symbolic analysis - does not scale to the complexity and depth of certificate validation code, false positives

  8. Interpreting test results SSL/TLS implementation test certificate accept/reject How do you know that the result is correct?

  9. Testing SSL/TLS cert validation code We tackle both of these problems in this work Test result interpretation Test certificate generation

  10. How to generate test certificates? X.509 standards…ugh!

  11. How to generate test certificates? • Requirements • Must generate “semantically bad” certificates • Should be syntactically correct, otherwise won’t exercise most of the cert validation code • Must scale to millions of certs • Idea • X.509 certs contain structured data, can we exploit that?

  12. X.509 certificate structure • Multilayered structured data • Syntactic constraints for each piece • Ex: Version must be an integer • Semantic constraints for individual piece or across multiple pieces • Ex: Version must be 0, 1, or 2 • Ex: if version!=2, extensions must be NULL

  13. How to generate test certificates? Create X.509 certs using randomly picked syntactically valid pieces Likely to violate some semantic constraints i.e. will generate “bad” test certs just as we wanted Wait, but how can we generate a large set of such syntactically valid pieces without reading X.509 specs?

  14. Scan the internet for certificates Collect 243,246 X.509 server certificates

  15. Extract syntactically valid pieces keyUsage extension from cert2 keyUsage extension from cert3 version from cert 1 ExtendedkeyUsage extension from cert4

  16. Generate 8 million frankencerts from random combinations of certificate pieces

  17. Interpret frankencert test results • Differential testing of SSL/TLS implementations • Multiple implementations of SSL/TLS should implement the same certificate validation logic • If a certificate is accepted by some and rejected by others, what does this mean?

  18. Which one is rotten ? No false positives though some instances might be different interpretations of X.509

  19. Test results summary • Tested 14 different SSL/TLS implementations • 208 discrepancies due to 15 root causes • Multiple bugs • Accepting fake and unauthorized intermediate Certificate Authorities (CAs) • Accepting certificates not authorized for use in SSL or not valid for server authentication • Several other issues attacker can impersonate any website!

  20. Some test results

  21. Exhibits

  22. Version 1 CA certificates If an SSL/TLS implementation encounters a version 1 (v1) CA certificate that cannot be validated out of band, it must reject it RFC 5280 Section 6.1.4(k) v1 CA certs do not support the CA bit: anybody with a valid v1 certificate can pretend to be a CA

  23. Exhibit 1: GnuTLS /* Disable V1 CA flag to prevent version 1 certificates in a supplied chain. */ flags &= ˜(GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT); ret = _gnutls_verify_certificate2 (flags,..)) int_gnutls_verify_certificate2(flags, ..) { if (!(flags & GNUTLS_VERIFY_DISABLE_CA_SIGN) && ((flags &GNUTLS_VERIFY_DO_NOT_ALLOW_X509_V1_CA_CRT) || issuer_version != 1)) { /*check the CA bit */ } }

  24. Exhibit 2: Google Chrome OK to click through?

  25. Exhibit 2: Google Chrome untrusted CA

  26. Exhibit 2: underlying cause • Chrome uses a modified version of NSS for SSL certificate validation • If a certificate is issued by a untrusted CA and is expired, the validation code only returns the expired error • Firefox uses a glue layer called Personal Security Manager (PSM) over NSS and thus is not affected

  27. Check the paper for more such goodies!!

  28. Conclusions • Differential testing with frankencerts is an effective technique for finding flaws in SSL/TLS implementations • Start integrating frankencerts with the test harness of your SSL/TLS implementation. The code is available at: https://github.com/sumanj/frankencert

  29. Backup Slides

  30. Frankencert features • Frankencerts are random, yet syntactically correct X.509 certificates with … • Unusual extensions • Rare and malformed values for these extensions • Strange key usage constraints • Rare combination of extensions • ... and many other unusual features

  31. Mutate a few pieces randomly

  32. Exhibit 2: MatrixSSL /* Certificate authority constraint only available in version 3 certs */ if ((ic->version > 1) && (ic->extensions.bc.ca<= 0)) { psTraceCrypto(“no CA permissions\n"); sc->authStatus = PS_CERT_AUTH_FAIL_BC; return PS_CERT_AUTH_FAIL_BC; }

More Related