TLS Implementation Failures
By now we have all attempted to access a website in any modern browser and found ourselves reading a warning that proceeding is dangerous. These tend to pop up when one encounters self-signed certificates, which themselves are not inherently evil, rather than certificates issued by one of the many globally trusted root certificate authorities. Failures in TLS implementation are not necessarily due to the use of self-signed certificates, but could rest in a failure to add the signing certifiate to the appropriate trust store after having verified the signer is who they say they are.
Everyone verifies certificates, right? Failing to do so extinguishes any real benefit of transport layer security, and exposes an extraordinarily large attack surface in the multitude of RESTful APIs and chat services that make the world of IoT tick. If, for whatever reason, your service does not mandate client certificates how safe can you be if you are not certain your clients are checking certificates? Since it requires more work to ignore certificate checking (examples below) surely no one is goiing the extra mile to do it wrong...
wget --no-check-certificate https://icanhazip.com
vs.wget https://icanhazip.com
curl -k https://icanhazip.com
vscurl https://icanhazip.com
resp = requests.get(url, verify=False)
vsresp = requests.get(url)
Unfortunately, ignoring certificate checks is fairly normal in some circles (looking at you, IoT) and if you want to know if a device on your network is guilty the process for finding out is trivial. This, of course, also means that a malicious attack is just as easy. So is preventing such attacks: always check certificates.
Are you curious if the brand new IoT widget you just recieved is Doing It Rightâ„¢? By now we know every one of these devices is constantly phoning home to the mothership about your every move, but how can you check if this is done securely? Glad you asked!
No time to watch an ASCII Cast?
bettercap
to gather information on network hosts, and ARP spoofsslsplit
to forge TLS certs on the fly- An
iptables
pre-routing NAT rule to direct TLS traffic throughsslsplit
tshark
to inspect the raw traffic, and anything intercepted bysslsplit
- Five minutes of your time
Final Thoughts
If the answer to "are you verifying certificates?" is no, then you are doing it wrong and putting both sides of your communications at risk. If you are a developer, and you do not know if you are checking certificates go take a look at your libraries and find out which extra options you need to use to disable checking. Search your source for these options. If you find them, file a bug and fix it. Immediately!