IoT Security Anti-Patterns
blog.cloudflare.com
blog.cloudflare.com
Hoping to keep secrets from a physical attacker on a general purpose microcontroller is an excellent example of an IoT security anti-pattern. It's a shame the author missed the wider point.
So what is the alternative? He is not seriously advocating polling, is he?
Segregating your 'dumb' controller/sensor nodes and restricting their ability to talk elsewhere via routing, firewalling or proxies would reduce the risk of a single crappy device leaking onto the internet. At the cost of some centralisation of control in your gateway/router/whatever, of course. And you still need some form of crypto on your local network to protect against local/physical attackers.
Is it a coincidence that this post comes a few days after CF announces a "private network for IoT"[1]? My wirelessly-enabled Crystal Ball says no. I wonder if it's because the IoT is itself a big enough pie with current attention on (lack of) security, or if it's more to protect their main business from Mirai N+1/DDoSoT or whatever.
Just as anyone can sign anyone's email up to mailing lists.
If you're willing to incorporate it in the design from the outset, use specific components, and organize the project with that as a focus, you can make quality things.
Most things end up as an echo-y, impossible to hear cacophony as soon as there's many actors involved, because they just don't care and don't plan for it -- it would be a "waste of money", because it still performs economically without that.
You even have parallels like adding things to existing projects to try and fix them, and that not being nearly as effective than had you designed it better in the first place.
Systems are heterogeneous, and so are the exploits. A great example of this would be getting into a smart TV through broadcast signals (Weeping Angel).
A good place to start would be at the system level with a DREAD, DREAD-D, STRIDE or other model analysis. This is often a creative process, and experience counts.
Just like you design software with the end user in mind, you should design security systems with the attacker in mind. Just like you prioritize features for by your expected user personas, you should prioritize security measures by your expected attacker personas. And just like you always want to cover the "basics" of UX, you always want to cover the "basics" of security.
First you should take care of the "low hanging fruit," meaning you should implement industry best practices at all levels of the stack. Hopefully this is sufficient to mostly mitigate any threats of getting caught in widely targeted attacks, like mass scans for Wordpress vulnerabilities.
Unfortunately, implementing security best practices is only the beginning of defending against motivated attackers focused specifically on you as a target.
Once you've taken care of the easy wins, you have to balance the tradeoffs of engineering effort and complexity required to make certain mitigations. In practice, this means that what your security system will look like largely depends on the question: What is your threat model?
If you are an IoT vendor, your threat model is becoming a node in a botnet. That means you need to defend against a focused attacker reverse engineering your product to find a vulnerability that can be used to root the device remotely. Unfortunately this is basically impossible to defend against, but you can make their job much more difficult with binary obfuscation, symbol stripping, aslr, etc. Your best hope at that point is the attacker gets frustrated and decides to target some other product.
If you're a search engine (cough cough) your threat model may be people scraping your search results (as hypocritical as that is...) In that case your first priority might be catching bots and serving up captchas.
Point is, your "security engineering" largely depends on your domain and threat model, just like "traditional" software engineering depends on domain and user base.
(That said, IANASecurityProfessional ;) )
Some might like the convince of an IoT device like the Echo. That's a personal choice. Properly developing both sides of the device spectrum should improve quality and security.
I'm extremely selective about what devices on my network actually get internet access, and IoT is like leaving your front door unlocked (and wide open) in the worst neighborhood you could possibly imagine. I'm kind of blown away people allow these things into their home.
If you want me to put your shitty IoT device in my home, open source it and then we'll talk.
This idea that we shouldn't even consider connecting tools to the internet because the internet is scary and dangerous feels like a knee-jerk reaction to me. I believe there is a right way to build these tools where the risk added is minimal to non-existent. Refusing to pursue this tech at all because some people do it wrong just feels like ludditism to me.
Imagine what would have happened if people abandoned computer technology after the first few viruses were discovered.
My issue with the current trend is that 'IoT'/Internet-enabled is a way to both sell a product, and then effectively rent access to it via the 'cloud' interface. If you stop paying, your device is (mostly) useless. If they stop supporting it, your device is (mostly) useless. The actual whereabouts of any data produced by your device is probably unknown, as is its security and usage.
It's the same tired old "If you're not paying..., you're the product", except that you're actually paying.
Many of these abuses are much harder to do if you don't expose your exciting new Thing of Internet directly to the entire global communications infrastructure, but then we're back in the bad old days where people had to use software that wasn't a thin client in a browser[1].
I'd really really like a LAN of Things, or a VPN of Things, that still functions after your service has gone bankrupt or sold their souls to Oracle or something. But of businesses, especially those riding the wave of 'your data is feedstock to our deep-learning quantum magic pixies, and we'd never ever sell it all for a cheap buck[2]' would find it much trickier if that sweet sweet data wasn't coming their way.
Development & distribution, as well as actually charging for for things, become harder problems though, which means everyone wants to head to the promised land of *aaS, where A/B unicorns frolic in the fields and green/blue munchkins guide your clueless users down the yellow brick upgrade pipeline.
[1] Only mostly sarcastic. [2] unless someone offered
Even taking these benefits as given, neither of these things need to be connected to the internet, especially not directly. A fitness application that stores your data locally and potentially offers to sync your data across devices, sure, but for these things you describe (and most IoT things, mind you), the benefits of connecting them to the internet are minimal at best.
I don't think anyone is suggesting that IoT devices store their data in some opaque format that can only be accessed on-device. However, for most of these things the model is to treat all IoT devices as dumb terminals for a cloud service, which unnecessarily has deleterious effects on your privacy and security and makes your device's utility dependent on the provider's infrastructure.