Insecurities

Sometimes, the world isn’t a very nice place.

When the Internet was invented, it was a space for collaboration. The technical challenge of connecting disparate computer systems in remote locations was daunting. The goal was to allow researchers at the various locations to work together, sharing data, analyses, and perspectives.

https://www.flickr.com/photos/michaelsarver/62771138The idea that some members of the community would try to exploit the system to gain access to information or resources that don’t belong to them was inconceivable. The researchers and engineers designing the protocols and tools that eventually became the Internet were focused on getting the system to work. They weren’t worried about security.

That oversight is a common thread for innovation. We often underestimate how new technologies will be misused. Einstein famously regretted his work on the atomic bomb. Kalashnikov was horrified that his rifle was used by so many to cause so much terror. Sometimes, we fail to consider the worst consequences of our best ideas. We’re so focused on making the impossible practical that we don’t spend much time considering whether impossible is such a bad thing.

The Internet has struggled with its underlying insecurity for decades. We have replacements for telnet and ftp that encrypt communications to keep anyone from eavesdropping on them. We have https to allow encrypted web traffic. We use WPA to protect wireless traffic. We can even encrypt email if we have to, but almost no one does. Security is still an afterthought. It’s bolted on to a product or protocol after it already works. Because it’s much simpler, the insecure versions are always more reliable and faster and more efficient and more convenient. We often prioritize these things ahead of security, and continue to use technologies that we know will get us into trouble eventually.

The tech industry didn’t learn from the development of the Internet. Operating systems, too, were designed for a single user who has total access to everything, as were phones and tablets. The idea that this computer might be connected to other computers, and that other software and users might exploit their access is often ignored. Even today, we run into a lot of software that won’t work without complete control over the entire computer and everything on it.

On the network side, system requirements for just about every software package we use require us to eliminate all aspects of security. They often require firewall and filtering exceptions that make our systems more vulnerable. When we point this out, we hit a brick wall. If we can’t prove that we’ve followed their requirements to the letter, they won’t help with any problems we may have.


When you’re developing software, if you design it to work first and then try to add in security later, it doesn’t work right. You end up in cycle where you try to make it more secure, but those efforts break some critical functionality. When you fix those bugs, you introduce more security problems. The result is a program that constantly needs updated, but that never really reaches a point where it’s both secure and reliable.

This process used to be hidden from most people through the beta testing process. Back in the ’90s, it was cool to get betas of new software. You could try out new software in exchange for providing feedback to the developers to help them fix bugs and get the product ready for the general public. I remember being excited about new beta versions of web browsers. It was an exciting time when you could get a glimpse of what’s next.

As we’ve moved along, though, it seems like ALL software is beta software now. Each update comes with that wonderful anticipation of the new problems we’re sure to have. The industry constantly tells us we have to keep all of our software updated, but every time we do, something breaks. That’s okay. There’s a new version next week to fix that major problem. And the update next month will fix the security vulnerabilities introduced by this fix.

We’re living in a world where software doesn’t have to work reliably or securely. It just has to be “good enough” for now. Ship new versions quickly and regularly, and don’t worry too much about it. Every time I start up my phone or my computer or my tablet or my Chromebook, I have a nice new collection of crappy software to install.

So what’s the solution? How do we move away from this endless cycle? I think it comes down to the license agreement. You know, those terms you agree to without reading every time software tries to install or update? In Google’s case, the relevant parts are sections 13 and 14 (some of which I’ve left out). They put it in all caps so you know it’s important:

13.3 IN PARTICULAR, GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS DO NOT REPRESENT OR WARRANT TO YOU THAT:
(A) YOUR USE OF THE SERVICES WILL MEET YOUR REQUIREMENTS,
(B) YOUR USE OF THE SERVICES WILL BE UNINTERRUPTED, TIMELY, SECURE OR FREE FROM ERROR,
(D) THAT DEFECTS IN THE OPERATION OR FUNCTIONALITY OF ANY SOFTWARE PROVIDED TO YOU AS PART OF THE SERVICES WILL BE CORRECTED.

13.6 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.

Translation: I don’t know what you think this software is going to do, or if you’ve bought into all of our marketing hype, but no matter how low your expectations are, you should lower them more. 

14. LIMITATION OF LIABILITY

14.1 SUBJECT TO OVERALL PROVISION IN PARAGRAPH 13.1 ABOVE, YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU FOR:

(A) ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL CONSEQUENTIAL OR EXEMPLARY DAMAGES WHICH MAY BE INCURRED BY YOU, HOWEVER CAUSED AND UNDER ANY THEORY OF LIABILITY.. THIS SHALL INCLUDE, BUT NOT BE LIMITED TO, ANY LOSS OF PROFIT (WHETHER INCURRED DIRECTLY OR INDIRECTLY), ANY LOSS OF GOODWILL OR BUSINESS REPUTATION, ANY LOSS OF DATA SUFFERED, COST OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR OTHER INTANGIBLE LOSS;

(B) ANY LOSS OR DAMAGE WHICH MAY BE INCURRED BY YOU, INCLUDING BUT NOT LIMITED TO LOSS OR DAMAGE AS A RESULT OF:

(I) ANY RELIANCE PLACED BY YOU ON THE COMPLETENESS, ACCURACY OR EXISTENCE OF ANY ADVERTISING, OR AS A RESULT OF ANY RELATIONSHIP OR TRANSACTION BETWEEN YOU AND ANY ADVERTISER OR SPONSOR WHOSE ADVERTISING APPEARS ON THE SERVICES;

(II) ANY CHANGES WHICH GOOGLE MAY MAKE TO THE SERVICES, OR FOR ANY PERMANENT OR TEMPORARY CESSATION IN THE PROVISION OF THE SERVICES (OR ANY FEATURES WITHIN THE SERVICES);

(III) THE DELETION OF, CORRUPTION OF, OR FAILURE TO STORE, ANY CONTENT AND OTHER COMMUNICATIONS DATA MAINTAINED OR TRANSMITTED BY OR THROUGH YOUR USE OF THE SERVICES;

14.2 THE LIMITATIONS ON GOOGLE’S LIABILITY TO YOU IN PARAGRAPH 14.1 ABOVE SHALL APPLY WHETHER OR NOT GOOGLE HAS BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.

Translation: whatever happens, it’s not our fault. Even if we do it on purpose.

The software companies have created conditions of use that eliminate any sense of accountability on their part. They won’t guarantee that their product will do anything, and they won’t be responsible for any damage created by it. Even if they willfully cause problems or data loss, lie to you about the product, and interfere with other technologies you’re using, they have no liability.

I keep waiting for the courts to throw these things out. End users are clicking through these agreements without reading them because they have no choice. They’re not making informed decisions to give away their rights. They’re not so excited to try out new software that they’re setting up test environment that have no important data or work to do. They’re just trying to get to the Internet, to check their email, to open a PDF file, and to get some work done. Where’s the stable, reliable software product that helps them do that?

Without any incentive to ship reliable, stable, secure code, we’re going to continue to be inundated with updates. Every time there’s a security breach or an internet outage or a loss of data, we’re going to blame the end user. “We told you not to trust our software.” “Why don’t you have a backup.” “What do you MEAN you’re still using that horrible old software from next month.” “Don’t you dare delay this update.”

So until something changes, we’ll keep installing updates, and then update the updates. And then reboot to find that there’s a bug fix for the update.

Photo credit: Michael Sarver on Flickr

 

 

5 Password Recommendations

We’ve been a little more proactive lately about suggesting that people change their passwords from time to time. Usually, passwords are the annoying step standing between us and our data. We use them so often, and they’re so familiar, that we can become careless about them. Here are five recommendations for better passwords.

Email passwords are really important. In most cases, password resets can be done through email. If you go to Facebook, for example, and tell them you forgot your password, you can reset it if you have access to the email account tied to the Facebook one. The same is true for most online services. If you have access to email, you can get access to almost every account tied to that email address. So your email password should be among your most heavily guarded.

Be careful about tying accounts together. It’s really tempting to use that “Login with Facebook” or “Login with Google Plus” link on that neat web site you want to try out so you don’t have to set up a separate account. But be careful doing that. In some cases, you may be making connections between those accounts that you don’t want. Maybe I don’t need Facebook to know that I’m using this tool. Or maybe I don’t want this new tool to be posting things on my Facebook wall. While the promise of one login for everything is really attractive, make sure you understand how the data moves between the sites, and what you’re giving them permission to do.

Change your passwords. The old adage is that your password is like your underwear. Don’t leave them lying around. Change them once in a while. Don’t share them with friends. Sometimes, despite our best efforts, passwords get out. Maybe there was malware on a computer you used. Maybe some web site got hacked and was storing passwords in a format that made it possible to steal them. Maybe someone saw you type in a password and figured it out. If you change your password once in a while, you reduce the possibility that someone will be able to exploit one of these kinds of indiscretions. It’s also a good idea to use different passwords on each site, and a password manager to keep track of them all. That way, if one of your passwords does get out, it doesn’t give the attacker access to all of your online accounts.

Complicated passwords are good passwords. If someone can guess your password, they can become you online. Computer programs can be written to guess passwords, and they’re really fast. A “brute force” attack tries every possible password until it hits on the right one. There are products available that can try 3 million passwords per second. You want a long password that’s not easy to guess.

Let’s take a very simple case. Suppose your password is one character long, and that it’s a number. If I’m trying to guess your password, there are only 10 possible passwords for you to have. So it will be very easy for me to guess it. Now, suppose instead that your password can be a letter or a number. Now, there are 36 possible passwords. That’s a little better. But what if we use both lower-case and upper-case letters, as well as numbers and punctuation symbols? A quick look at my keyboard shows 95 possible values. This gets really powerful as the length of the password increases. So a standard 4-character pin that you would use to access your ATM or open your garage door would have 10 x 10 x 10 x 10 = 10000 possible values. But if it could include all 95 characters on the keyboard, it would have 95 x 95 x 95 x 95 = 81450625 possible values. That’s a lot harder to guess. There’s a whole science called information entropy behind all this if you’re interested.

And if you make it a long password, that’s even better. An 8-character password is 95 times as good as a 7-character password. If you want a pretty good password, try using a passphrase instead. If I use “Four score and 7 years ago!” as my password, I have a 27-character password that includes uppercase, lowercase, numbers, and punctuation. While it’s still not a fantastic password because of the dictionary words, it’s a lot better than the name of your cat, or your child’s birthday. Plus, it’s easy to remember.

All passwords suck. Passwords are a holdover from a time when we didn’t have such fantastic computing power. We’re at the point now where just about any password can be cracked if given enough time and resources. And because passwords must be remembered and entered frequently, we tend to use some of the easier-to-guess ones. If I use “MfABKSsnaQVDcdgIIpityTxX2yn” as my 27-character password instead of the opening of the Gettysburg Address, it’s much less likely to be guessed. But I’m also much less likely to remember it.

Ultimately, we’re going to reach the point where computing power is so advanced that any password that provides even a modest amount of security will be too cumbersome and impractical to actually use. To solve that problem, we’ll need multi-factored authentication. You really have that now. Think back to the ATM example I mentioned earlier. What’s to keep someone from walking up to an ATM machine and guessing your password? After all, there are only 10,000 combinations of four digits. It’s not very secure at all. The reason ATM cards don’t get hacked all the time is that you have to actually have the card to use the password. The authentication has two factors: something you have (the card) and something you know (the pin). To get access to the account, you have to have both.

On my Google account, I have two-factor authentication turned on. If someone tries to log in to my Gmail account, it sends a text message to my phone with a six-digit code. I have to type that code in to the web browser to log in. That way, I have to know my password, but I also have to prove that I have access to my cell phone. It’s a little less convenient, but it’s a lot more secure.

Proving who you are online is difficult, and it’s getting harder. But being diligent about password management can help you avoid identity theft problems.

Photo credit: Lulu Hoeller on Flickr.