This post was syndicated from: Errata Security and was written by: Robert Graham. Original post: at Errata Security
The cliche is that hackers are geniuses. That’s not true, hackers are generally stupid.
The top three hacking problems for the last 10 years are “phishing”, “password reuse”, and “SQL injection”. These problems are extremely simple, as measured by the fact that teenagers are able to exploit them. Yet they persist because, unless someone is interested in hacking, they are unable to learn them. They ignore important details. They fail at grasping the core concept.
Phishing happens because the hacker forges email from someone you know and trust, such as your bank. It appears nearly indistinguishable from real email that your bank might send. To be fair, good phishing attacks can fool even the experts.
But when read advice from “experts”, it’s often phrased as “Don’t open emails from people you don’t know”. No, no, no. The problem is that emails appear to come from people you do trust. This advice demonstrates a lack of understanding of the core concept.
What’s going on here is human instinct. We naturally distrust strangers, and we teach our children to distrust strangers.Therefore, this advice is wired into our brains. Whatever advice we hear from experts, we are likely to translate it into “don’t trust strangers” anyway.
We have a second instinct of giving advice. We want to tell people “just do this one thing”, wrapping up the problem in one nice package.
But these instincts war with the core concept, “phishing emails appear to come from those you trust”. Thus, average users continue to open emails with reckless abandon, because the core concept never gets through.
Similarly there is today’s gem from the Sydney Morning Herald:
When you create accounts on major websites, they frequently require you to “choose 8 letters with upper case, number, and symbol”. Therefore, you assume this is some sort of general security advice to protect your account. It’s not, not really. Instead, it’s a technical detail related to a second layer of defense. In the unlikely event that hackers break into the website, they’ll be able able to get the encrypted version of everyone’s password. They use password crackers to guess passwords at a rate of a billion-per-second. Easily guessed passwords will get cracked in a fraction of a second, but hard to guess passwords are essentially uncrackable. But it’s a detail that only matters once the website has already been hacked.
The real problem with passwords is password reuse. People use the same password for unimportant websites, like http://flyfishing.com, as they use for important sites, like http://chase.com or their email. Simple hobbyist sites are easily hacked, allowing hackers to download all the email addresses and passwords. Hackers then run tools to automate trying out that combination on sites like Amazon, Gmail, and banks, hoping for a match.
Therefore, the correct advice is “don’t reuse passwords on important accounts”, such as your business accounts and email account (remember: your email account can reset any other password). In other words, the correct advice is the very opposite what the Sydney Morning Herald suggested.
The problem here is human nature. We see this requirement (“upper-case and number/symbol”) a lot, so we gravitate toward that. It also appeals to our sense of justice, as if people deserve to get hacked for the moral weakness of choosing simple passwords. Thus, we gravitate toward this issue. At the same time, we ignore password reuse, because it’s more subtle.
Thus we get bad advice from “experts” like the Sydney Morning Herald, advising people to do the very opposite of what they should be doing. This article was passed around a lot today in the cybersec community. We all had a good laugh.
SQL injection is not an issue for users, but for programmers. However, it shares the same problem that it’s extremely simple, yet human nature prevents it from being solved.
Most websites are built the same way, with a web server front-end, and a database back-end. The web server takes user interactions with the site and converts them into a database query. What you do with a website is data, but the database query is code. Normally, data and code are unrelated and never get mixed up. However, since the website generates code based on data, it’s easy to confuse the two.
What SQL injection is that the user (the hacker) sends data to a website frontend that actually contains code that causes the backend to do something. That something can be to dump all the credit card numbers, or create an account that allows the hacker to break in.
In other words, SQL injection is when websites fail to understand the differences between these two sentences:
- Susie said “you owe me $10”.
- Susie said you owe me $10.
It’s best illustrated in the following comic:
The core concept is rather easy: don’t mix code with data, or as the comic phrases it “sanitize your database inputs”. Yet the problem persists because programmers fail to grasp the core concept.
The reason is largely that professors fail to understand the core concept. SQL injection has been the most popular hacker attack for more than a decade, but most professors are even older than that. Thus, they continue to teach website design ignoring this problem. The textbooks they use don’t eve mention it.
These are the three most common hacker exploits on the Internet. Teenagers interested in hack learn how to exploit them within a few hours. Yet, the continue to be unsolved because if you aren’t interested in the issues, you fail to grasp the core concept. The concept “phishing comes from people you know” to “don’t trust emails from strangers”. The core concept of hackers exploiting password reuse becomes “choose strong passwords”. The core concept of mixing code with data simply gets ignored by programmers.
And the problem here isn’t just the average person unwilling or unable to grasp the core concept. Instead, confusion is aided by people who are supposed to be trustworthy, like the Sydney Morning Herald, or your college professor.
I know it’s condescending and rude to point out that “hacking happens because people are stupid”, but that’s really the problem. I don’t know how to point this out in a less rude manner. That’s why most hacking persists.