I Just Logged In As You: How It Happened
codinghorror.com
codinghorror.com
The lesson's simple: before you re-use a password think about what's in it's pool, and for fuck's sake use a unique password for OpenID and your password manager.
My work and my school share servers, so I use the same password. Personal stuff gets a separate password, etc.. At the end of the day, I only have to remember 4 passwords and maybe 2 or 3 usernames, but I don't feel that it's lowered my security at all.
Set your password to something random, and use a client-side SSL certificate to authenticate yourself to your OpenID provider. You can use the password reset feature if you lose your SSL certificate.
I've got instructions on how to do this on my website here: http://joel.franusic.com/How-to-set-up-a-client-side-SSL-cer...
So, I started learning about network programming etc, and built my own talker. Registration etc etc. I got quite a few people to register on it, and was surprised when I realized they were just using the same login details as they used on the 'main' talker we talked on.
So I logged in as one of them on the main talker and impersonated him... got banned for a bit. It really is surprising how easily this is done. (I was young, and foolish).
"Hey can you just try out this webapp for me? register here." <-- Always use a 'throwaway' login.
When you put in your details, however, instead of doing any "registration", it works for a few seconds in the background, and then pops up a box listing all the sites it just logged into successfully using that username/password combination. As long as it's done by someone reputable enough that users won't think they actually got their password recorded by the server (Microsoft? Bruce Schneier?) it could be a very successful educational technique.
1) Palin's password was not compromised directly. Instead, the backup "private security questions" had answers which were in the public domain -- such as "name of your high school" -- to a sufficiently dedicated adversary. (There are four in Wasilla. Sort of narrows the search space a bit versus trying to brute force a password, right?)
2) This doesn't prove OpenID is a good idea, at all. Let's review facts: the site which was compromised uses OpenID and presumably an OpenID provider which has bulletproof security. The problem with this is that, for most users, the vulnerability is not the strongest provider but the weakest one, since they share credentials everywhere. Equivalently, you could say that the weakest link is the user. (Even on an Internet where EVERY site used OpenID, most users would fall for a compromise-anywhere-compromise-everywhere phishing attack.)
Patio11's point is that this is common user behavior, so OpenID doesn't offer any better security than its weakest point, which becomes sites not using OpenID but storing the same password as OpenID. I have to disagree, though: The alternative to OpenID is many more login/password pairs, which has exactly the same problem to a worse degree: too many passwords to remember, so the users reuse them.
Oh, and for those who claim my password was a dictionary
word, and thus this is a de-facto dictionary attack. Well,
I just went to http://www.merriam-webster.com/dictionary/
.. and entered my old password there:
"The word you've entered isn't in the dictionary. Click
on a spelling suggestion below or try again using the
search bar above."
Like I said, it *ain't a dictionary word!* It might be in
cracking tables somewhere, but it isn't a dictionary word,
at least not of the type you can use in Scrabble without
getting challenged..
Uh, Jeff? If you password isn't long, it's going to be in the rainbow table, no matter how complex. Nobody uses their machine to hash the lines from /usr/share/dict/words anymore! They just download a highly-compressed rainbow table, which will have every non-dork password in it.And Jeff used an insecure password on both the "evil site" and his Open ID provider.
The attacker only had access to Jeff's hash because he had access to a site that Jeff used.
I was expecting the answer to be that Jeff somehow revealed his real password publicly somewhere, not that this idiot stole it from a database that he had trusted access to.
This would be grounds for instant dismissal or even legal action in my book.
Add a column named 'salt' to USER, then the PASS column=PASSWORD(salt+'text');
SALT column = salt
Is the way used in most distributable web applications.
PASS column = HMAC(plaintext_pass, salt)
I might be wrong? As I understand it there are issues with MD5(MD5(password) + salt) that HMAC avoids. I'm still not 100% sure I understand the difference, but I think that is what the wikipedia article on HMAC is saying: http://en.wikipedia.org/wiki/HMAC#Design_principles
Dunno if it helps anything when it comes to salting. Anyone else who knows?
If the attacker was motivated to have Jeff Atwood's password, he could have grabbed the salted hash and used a password cracker against it. We're talking a single password for a high profile user, so why not spend a few hours of CPU time on it?
Only an adequate password hashing algorithm (ie, SLOW) would have really prevented this.
http://paulbuchheit.blogspot.com/2007/09/quick-read-this-if-...
Use a different hashing function, probably bcrypt. (Note to self: go back and check some of my old code that did/does exactly what you describe...doh!)