LinkedIn Password Leak: Salt Their Hide
CowboyRobot writes "Following yesterday's post about Poul-Henning Kamp no longer supporting md5crypt, the author has a new column at the ACM where he details all the ways that LinkedIn failed, specifically related to how they failed to 'salt' their passwords, making them that much easier to crack. 'On a system with many users, the chances that some of them have chosen the same password are pretty good. Humans are notoriously lousy at selecting good passwords. For the evil attacker, that means all users who have the same hashed password in the database have chosen the same password, so it is probably not a very good one, and the attacker can target that with a brute force attempt.'"
By that argument, because many users use the same password for multiple services then there's no point in hashing passwords in the first place because "somebody else is bound to have a leak". Yes, if you have multiple instances of hash-x then it probably maps to "p433word" or something similar, but that's no reason to roll over and ignore a fairly standard security practice. A statement like this is far more worrying than "Sorry, we screwed up, we're fixing it."
Please consider this account deleted, I just can't be bothered with the spam anymore.
Isnt salting and hashing a standard practice for passwords even for low security stuff?
With something as high profile as Linkedin, how did it get missed?
Arent there audits,etc to check for this type of stuff?
Isnt it similar to releasing a range of cars, all of which have the same key (or something similar. Analogies are my weak point, as is the English language)
Funny! Learned to "always salt your passwords" in Udacity CS253: Webapps.
There is an inherent trade off here, if you store hashed but unsalted passwords then you can use crypto to avoid ever sending the password, or it's equivalent over the network. If you salt your passwords then this is much harder, and generally most people just send the plain text password over the network.
Given the rather poor security of SSL to MIM attacks these days I think I'd rather have passwords exchanged securely over the network than salting.
Frankly, these companies need to do a better job keeping the password hash database separate and secure from the rest of their systems.
I'll say it again: OpenID.
AccountKiller
I think I will start visiting websites I no longer use, and deactivate my accounts. If that doesn't work, I'll fill the "user profile" with a bunch of nonsense & scramble the password. It worries me that over the last ~20 years I've visited a bunch of places and left behind details about myself. I never used linked-in but I imagine if I did, I'd be in potential trouble now (leaked info).
My AC stalker: " I personally agree with your posts most of the time, but that won't keep me from modding you troll"
Do they understand how hashes work?
Yes, Poul-Henning Kamp understand how hashes work. Much, much, much better than you do. But if you feel compelled to lecture the writer of MD5crypt on your wonderful insights into how hashes work, please, feel free.
https://www.browserid.org/
It's the closest I've seen to SSH Keys. That's all I want, SSH Keys for web auth.
This may well be a very daft question but:
It appears that the default is to use a simple solution when people are first developing their websites.
Isn't this what libraries are for? Why isn't the default secure method in development environments/website template/distros etc to use a much more secure method?
Why is there no standard library that I just say (for example) store_user_password($user_name); and it takes care of it?
If there is such a thing why isn't it more universally used and why blame the website implementers for what is a dev environment/toolkit/whatever problem?
If the technology the article talks about has been known since the 80s why isn't it the standard in all the modern environments? And whatever the answer I'm not sure the blame rests in the users of however they develop this(unless they are writing their website in C based CGI...).
"The weirdest thing about a mind, is that every answer that you find, is the basis of a brand new cliche" -
So if I crack other people's passwords on Linkedin, can I put that up as a skill in my resume on Linkedin?
Always wanting to salt everything. Maybe LinkedIn just wanted to be leaner??
This LinkedIn hack could lead to even more high-profile hacks, due to the unique user base that LinkedIn has
On most sites (like Facebook) most of the stupid passwords will belong to stupid 13 year old kids with nothing of value to hackers, but on a site like LinkedIn you are more likely to get the password for some computer illiterate corporate executive. In many cases this is the same simplistic password he uses at work, where he insisted he be given admin-level access on all of their servers "because hes an executive"
Computer security is always about the weakest link in the chain, and when one of those "links" partied his way though business college and never thinks twice about password reuse, you have a pretty weak chain. LinkedIn is like an x-ray showing the hackers who the weak links are.
If you're looking for hash collisions, you're not going to target a particular hash; you're going to leverage the magic of the birthday paradox and hash your way through a dictionary with passwords listed in order of decreasing probability (with "password" and "12345" listed first, then "p@ssw0rd" and "OU812", etc.) and match the resulting hash with entries in the password file. And you're going to do this once, building one rainbow table, and try it on every unsalted, SHA1 hashed password list you can get your grubby hands on, until you have a nice little dictionary of username / password pairs - and try it on whatever services you're targeting, because most people tend to reuse the same password over and over again (usually Joshua97 or MaryJune05 or some other combination of their kids' names and birthdates).
One to Many... But a lot of those Many are characters you are not going to type with your keyboard.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
Phew, close one, my password is MaryJane420.
You know, you can already have client side certificates that are supported by browsers for quite a long time now.
For examples of sites that use this: startssl.com. They can even be your OpenID provider and you then authenticate with them via client SSL cert. No passwords.
Sadly, slashdot.org OpenID implementation does not seem to work with their authentication. All I get is "server_not_allowed." error. Oh well, I guess I will remain AC :)
Salting used to be very important to hide weak passwords from rainbow tables. Now that it takes mere minutes of GPU time to replicate a large rainbow table, salting doesn't buy you nearly as much as it used to. Assuming the attacker gets the salts along with the passwords, but in case of a breach you have to assume they do.
id put linkedin or any other social networking site on my usual password list where i wouldnt put ebay or PayPal .... what baffles me most is why no one is cashing in on the password gap the risk maybe? the impossibility to secure? so far i never heard of facebook, or microsoft or google being hacked , i wonder what happened to sony still i still suspect some inside penetration there who's gonna make a buck providing the world with that one simple login then? probably some indian or asian guy i guess
Free speech was meant to be free for all... how can anyone grow up in a nanny state ?
With all the talk these days about low-sodium diets, they just wanted to provide their users with a healthy alternative.
#naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
I checked my Linkedin password against the list to see if it was there or not. It turns out it wasn't but I thought I'd change it anyway to be on the safe side. I checked my 2nd, 3rd and 4th choices on the leaked list before changing. All of those were on the list. It surprised me a little because they're not common passwords or particularly obvious. I guess it shows if you get a large enough group of people together, similar though processes are going to lead to similar passwords.
Somewhere, an astute, MBA-sporting LinkedIn user just proudly placed a salt shaker atop of their post-it note of passwords and smugly called it a day.
Don't use his md5crypt and think you did anything useful he says. http://phk.freebsd.dk/sagas/md5crypt_eol.html
Imagine if you weren't allowed to use roads because a bus company complained about your driving 3 times. --skunkpussy
That *you* aren't going to type with *your* keyboard. I used to have a ^E in my password. (Most modern websites don't support control characters, sigh...)
For the sake of argument assume a database of millions of salted SHA-1 passwords was compromised. What is the effective difference?
These passwords can still be brute force at todays mega ridiculous n core, GPU accelerated rates at extremely low cost. This is only getting worse with each die shrink while human ability to remember complex passwords remain fixed.
Salting only protects you from precomuted "rainbow" brute force methods which means if you have a big enough table your password is cracked in seconds to minutes rather than oh I don't know what is the average for your typical password? Hour, day..two days? week tops...? Does this difference really mean anything substaintial to the vicitim?
Bottom line yer still at substantial risk whether your passwords are salted or not therefore the assumptions and actions taken to mitigate a compromise are the same whether salted or not.
Too many see hashed passwords as secure so they don't take the necessary steps to sufficiently protect their data at rest.
The only acceptable solution to this problem in my view is better security. Use strong reversable encryption on passwords were they are stored. Isolate and control sensitive data, sane key management, operational security...etc. When I hear people say salt the passwords yea great idea ..do it but this really does not fix or solve a damn thing.
It should not just stop with password storage. There is also todays universal yet insane practice of sending plaintexts over SSL.
I would rather see plaintexts or hashes stored in a secure database using mutual knowledge of passwords to establish trust between parties... this would enable zero knowledge systems like SRP to provide mutual authentication including session keys to bootstrap encryption of the session enhancing or replacing SSL with a much better and personal source of trust.
The problem seems to lie with websites storing cryptographic hashes where a hacker can get at them, rather than having a system where the computer that stores the hashes can ONLY accept a hash from the server of the website, and that can ONLY output a "YES" or "NO".
This whole thing is like a bank insisting that when you deposit money with them, that you provide your own lock-box for your cash, because their vault isn't that secure.
They make much hay out of the notion that ultra powerful cracking machines can test a zillion bajillion passwords per yoctosecond... but in reality, if a cracker did not have the file with all the password hashes, it could really only try something like 3 attempts per 8 hours, or per day, (before the server locks the account for security) or whatever the settings are, it's usually not designed to allow more than a handful of tries in a while, and hopefully the server would block the IP address of anyone obviously trying this kind of thing.
So our passwords aren't really the problem, unless you're using the Planet Druidia Airshield Password, (1, 2, 3, 4,... 5.) or something similar.
My bank requires a PIN after login, which to me multiplies however many possible passwords there are by 10,000. But the real security is the fact that if you enter that password wrong three times, it stops letting you guess.
To me, the real problem seems to be twofold, that the hashes are vulnerable to being stolen, and that operators of websites, etc., put arbitrary, stupid limitations on passwords. I'm not bitching about having to use at least one upper case, one lower case, etc. etc., I'm talking about one that doesn't let you use every one of the 255 basic ASCII characters, and that limits you to 10 or 12 characters or some other arbitrary thing. They should, I feel, enhance the length, and allow the use of all characters you can get to.
How hard would this password, hashed properly, be to "guess"?
"bo0kshelf stereo span1shb00k clock 1212`~~` "
versus
" bookshelf stereo spanishbook clock 1212"
but most websites I've been to would complain that the password is too long, or wouldn't like the " `~~` " part at the end, or the fact that there are no capital letters. So, while the first password is clearly stronger than the second, isn't the second strong enough? 35 characters, chosen from between a and z, plus the spacebar, plus 0-9. I think that's 37^35 possible passwords, yields about 7.7 * 10 ^ 54 possible passwords. That of course only applies if the password cracker KNOWS that I only used lower case letters and numbers. If you incorporate the possibility of using upper case, etc., symbols, you have about 95 ^ (MAX PASSWORD LENGTH), if you allow passwords of up to say... 128 characters... you end up with passwords that would be trivial to remember, and insanely hard to break. (1.4 * 10 ^ 253 possible combinations...)
So the problem is NOT generally with the user's choice of passwords, it's with the server's inability to keep those damned password hash files secure, and with their policies of insisting on placing arbitrary stupid limits on what can go into a password. Just requiring users to choose 4 or 5 or 7 words at random (or even not really random) without number replacement or symbols would go a long way to fixing the damned problem.
So why not allow users to make their pw's whatever they want, any of 255 characters, such as alt 0208, or "Ã", or whatever, and pick up to 128 of them, including spaces? I think it's because they want to be able to dodge the blame that is theirs for allowing someone to steal the password hash file. No matter how strong the passwords are, if someone gets that hash file, how long it takes to guess the passwords it contains is only a function of how much computer power they can bring to bear against them. With the new computers that keep coming out every few weeks, the password hashes might just about as well be rot-13'ed instead of SHA-256'ed. They'll get them eventually, anyway. Why force users to be responsible for security, when the server operator is?
So a useless site is easily cracked for people who use poor passwords of insufficient length such that they would have the same hash codes. Not a big deal.
They have cause me to go and change a number of sites.
I tried to contact customer support.
They just send back junk mail.
FURBAR
What you wrote doesn't make sense...
If you hash the same string again and again using the same hash method you will get the same hash value. That is by design for the standard definition of a hash function and what makes them useful.
If you hash different strings it is unlikely they will result in the same hash... but that likelihood depends on the size of the sting being hashed compared to the size of the hash and the design of the hash method.
Or perhaps the hash method used should make it so it's not possible to guess the length of the password, filling in the password with some collection of characters after password entry. What I mean is, suppose the maximum password length is 128 characters. The user chooses "12345" as a password.
The server takes "12345", then adds "The quick red fox jumps over the lazy brown dogs" over and over until the length reaches 128 characters. So even though from the user's perspective, his password is "12345" the server regards the password as
"The quick red fox jumps over the lazy brown dogsThe quick red 12345 fox jumps over the lazy brown dogsThe quick red fox jumps ove" (if I counted it right...)
and then it encrypts/hashes that, and ends up having your password hash as something like:
"Uj&8Anv0 H6Hfg*ggYly54jbt0Gy0tygvulTY78Jbyi~Mbi=6Bt8p,mYUILMN$InQRup($ylp56vcd%^OKHtOJG7690>J%^^7D3w43swazzZA"
The portion that is the users password is located in the middle, or something similar.
When the user with the "weak" password of "12345" goes to log-in, the password he types in is then hashed to the 128 character garbled string...
he only sees " ***** " in the password field, but what is stored on the server is the long string. Now the customer doesn't have to bring his own strongbox to the bank.
Experience: Director if IT Security for a large Social Media Product.
Objective: A position where I can apply my experience and lessons learned in a fast paced and dynamic environment, targeting a large customer base. ::Hired:: By Facebook.
Huh?
I suggest all premium users, who have paid for the service in some way or another, request some for of discount for a while. Any service that that effectively holds the keys to part of your public identity doesn't understand and implement basic credentials security (especially after the few high-profile cases that have hit in the few years prior to this incident) is simply not fit for purpose.
Not taking a jab at you personally, but I've never understood the "you deserve what you got, silly victim!" mentality. No victims *deserve* to be victimized.
I think a lot of people are thinking one thing, but saying another (inaccurately).
It's not so much a cyclist deserves getting hit by a car when they blow through a intersection, but they're asking for it. It's not so much that Bishop Desmond Tutu deserves to get zapped by lightening, but he's asking for it he places golf during a thunderstorm on an wide open golf course.
A think lot of people say "deserve it" when they really mean "ask for it". If you're going to 'tempt fate', then don't be surprised if the dice roll against you at some point.
Maybe something like
5a177h3e1rh1D3
would still be convenient to remember while being tougher to crack?
It is one-to-many, not one-to-one. It is unlikely that you will see a hash collision with the same password string.
Fail. Hashes are a many-to-one mapping, not one-to-many.
The file going around is simply a pile of hashes, no logins. Did the crackers get both? Or did they just get the hashes?
Because the hashes may as well be piles of random data if you can't pair them with a login.
I have not heard a peep about the logins themselves. Are we just assuming they were taken?
--
BMO
It's called a password manager. KeePass is a nice one. There are many others. How many passwords are so important to you that must internalize all of them? For me, the answer is "very few". Never reuse. Never recycle.
Still, you're right that passwords are unideal--a PGP-like solution would be better. Even done poorly, all they could leak would be the information that you have an account. But if you stored a different PGP-key for each site in Keepass, then they couldn't even do that.
Insert self-referential sig here.
Huh?
sha1sum blah = 5bf1fd927dfb8679496a2e6cf00cbe50c1c87145
sha1sum 5bf1fd927dfb8679496a2e6cf00cbe50c1c87145 = 9dbc5291ce0269baafbf68a6346b5510a1b30860
sha1sum 9dbc5291ce0269baafbf68a6346b5510a1b30860 = caa4e37211fda75d91b9bf3231f9fbeb434d56e8
[...]
No more dances for you!
Obviously, linkedin is learning fast from the publicity here, but that doesn't stop other companies from sending emails with your password if you click "forgot password". (*cough*T-Mobile*cough*) I deny that proper password security is either hard or expensive. What we really need is a good way to shame companies into doing it right. Preferably one that doesn't involve leaking a few million passwords.
Um, no, it's many-to-one; a hash is a function - meaning it is deterministic - whose codomain is smaller than the domain. For any string s, h(s) = h(s). If you hash the same password without a salt using the same hash function (assuming a null key, which is usually used with hash functions with this application), you will always get the same hash.
Using a key doesn't help, because once you have the key, you only have to calculate one rainbow table. It's better than using the precompiled rainbow tables for null keys, but not much.
Using a salt, on the other hand, forces you to build a rainbow table for each salt value.
I learned about this a few years ago when my application under went a code review by Wells Fargo. However, the fix wasn't that difficult to implement. Since un-salted MD5 can be "easily" cracked, it was possible to write an application which decrypted the passwords in the database and re-encrypted them with the new salt. Luckily the database wasn't too large at the time so the application finished in a few hours.
What he is saying is that "blah" isn't the ONLY string that yields a hash of "5bf1fd927dfb8679496a2e6cf00cbe50c1c87145".
However, finding any of the (infinitely many) strings that do is... difficult.
Basic password security these days:
When users select a password, check whatever the user submitted against a set of common password dictionaries - ideally, apply some rules to it (733t speak translation, add numbers or symbols to the beginning or end, capitalization games, etc.). This should help prevent P@$$w0rd (8 characters, upper case, lower case, numbers, symbols - it must be a great password!)
Use a Long, cryptographically random salt. This makes attacks against sets of password hashes more expensive.
Use a known PBKDF2 implementation (http://www.ietf.org/rfc/rfc2898.txt); perhaps BouncyCastle or Microsoft, with at least a couple hundred thousand iterations. This makes attacks against even one password hash much more expensive.
If your PBKDF2 implementation allows it, use SHA512 (best) or SHA256 as the hash algorithm. This also makes attacks against even one password hash more expensive.
The parent AC probably meant if you hash blah 50 times with the same algorithm you always get the same output (ie, the algorithm is deterministic, not random).
The attack on MD5 and SHA1 passwords is brute force, and it's quite tractable on commodity GPU hardware. This is why you use a proper KDF like bcrypt.
It's true! I'm now posting from your AC account!
Think about it. 6 million unsalted password hashes without matching use data. If this is real password data, how big is the chance that someone would find their password in there?
Perhaps as big as the chance that you get a Google hit when you search for your password?
AFAIK all we have is:
- Someone posting a list claiming it's from LinkedIn
- Some people confirming that the hash of their LinkedIn password is on that list
That doesn't really prove anything, right?
- People tend to pick similar passwords
- People use the same password on different sites
I read this in some blog, but I already had my doubts then.
I guess you don't use terminal type 3270 too often. Control E is often configured to clear your field from the cursor to the end. So your password would be saved as what you typed minus the Ctrl-E... Unless you intentionally go back a few characters and do the ctrl-e last.
Back in the olden days of DOS my password often had Alt-219 atl-176 alt-177 and alt-178
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
Really drives me nuts, such a company and such a rookie oops. Could not bring this to words in a complaint, so I sent them a bag of salt. Substantial amount, 25 lb, to be there as a reminder. Arrives by EOB Thursday.