views:

1122

answers:

19

From Wired magazine:

...the Palin hack didn't require any real skill. Instead, the hacker simply reset Palin's password using her birthdate, ZIP code and information about where she met her spouse -- the security question on her Yahoo account, which was answered (Wasilla High) by a simple Google search.

We cannot trust such security questions to reset forgotten passwords. How do you design a better system?

+1  A: 

Only provide questions that aren't on the public record.

bdukes
+3  A: 

Authenticating everything by sending emails is a reasonably effective solution. (although, that might not have been workable for Yahoo in this case :)).

Rather than messing about with security questions or other means to recover passwords, simply respond to password recover requests by sending an email to a predefined email account with an authorisation link. From there you can change passwords, or whatever you need to do (never SEND the password though - you should always store it as a salted hash anyway, always change it. Then if the email account has ben compromised, at least there's some indication to the user that their other services have been accessed)

Dan
bah humbug! email is sent in open clear text, which people seem to forget can be redirected and peeked at anywhere a long the way. many more major hubs/routers are in control of black hats that you think.
stephenbayer
+2  A: 

The true answer is, there isn't a fool proof way to keep hackers out. I hate security questions, but if your going to use them, allow for user defined security questions. As a user, if I must have a security question on a site to set up an account, I really like having the ability to setup my own security question to allow me to ask something that only I know how to answer. It doesn't even have to be a real question in this case. But a users account is then as secure as the stupidity of the user, and the fact that many users will use something like "question?" and "answer!" or something equally dumb. You can't save users from their own stupidity.

stephenbayer
+1  A: 

when its not an email system, email them a link to a secure page, with a hash that must come back in the query string to reset password.

Then if someone tried to reset your password, you would know, and they wouldn't be able to guess the hash potentially.

We use 2 guids multiplied together, represented as hex.

DevelopingChris
+11  A: 

The insecurity of so-called "security questions" has been known for a long time. As Bruce Schneier puts it:

The result is the normal security protocol (passwords) falls back to a much less secure protocol (secret questions). And the security of the entire system suffers.

What can one do? My usual technique is to type a completely random answer -- I madly slap at my keyboard for a few seconds -- and then forget about it. This ensures that some attacker can't bypass my password and try to guess the answer to my secret question, but is pretty unpleasant if I forget my password. The one time this happened to me, I had to call the company to get my password and question reset. (Honestly, I don't remember how I authenticated myself to the customer service rep at the other end of the phone line.)

I think the better technique is to just send an e-mail with a link they can use to generate a new random password to the e-mail account the user originally used to register. If they didn't request a new password, they can just ignore it and keep using their old one. As others have pointed out, this wouldn't necessarily have helped Yahoo, since they were running an e-mail service, but for most other services e-mail is a decent authentication measure (in effect, you foist the authentication problem off on the user's e-mail provider).

Of course, you could just use OpenID.

Chris Upchurch
I think the big problem is... how do you send an email with a link, when the email is blocked becuase you've lost the password for it?Its the old joke about IT helpdesk "my email's not working", "ok, send us a ticket via email and we'll look into it".
gbjbaanb
the problem with using email is it only shifts the problem. now you have multiple people relying on the security of your EMAIL password, thus implicitly sharing a single password for multiple sites. I know people who've fallen victim to this :/
Kent Fredric
( not to mention the entire email protocol is as secure as putting it up on a billboard. an attacker can just sniff the wire for hrefs and beat you to them, and then change your email address )
Kent Fredric
If the site uses http (not s) for login, then it might as well use email for password reset codes.
Steve Jessop
even a site using unsecure http can still implement a secure logon procedure... in the end, https does nothing you could not do with javscript as well! (however, i agree that https SHOULD be used for secure logon, just not that it MUST be used)
dionadar
+1  A: 

always send the password reset to a registered email account (which is tricky for an email account) or send a PIN number to a registerd mobile phone, or a link to a IM address, etc - basically, capture some secondary contact information on registration and use it to send a 'password reset' link.

Never let anyone change their password directly, always make sure they go through an additional step.

gbjbaanb
+1  A: 

Well for one it should not directly reset the password but send an email with a link to reset the password. That way she would have got the email and known that it was not her who initiated the reset, and that her question / answer had been compromised.

In the case where the email address is no longer valid, it should wait for a timeout ( few days or a week ) before allowing a new email to be attached to an account.

KPexEA
+1  A: 

Send a message to a different e-mail account, or text their cell phone, or call them, or send a snail-mail message. Anything that doesn't involve matters of public record or preferences that may change at any time.

tloach
+2  A: 

Do away with the (in)security questions completely. They're such an obvious security hole that I'm actually a bit surprised that it's taken this long for them to create a serious (well, highly-publicized) incident.

Until they disappear, I'm just going to keep on telling websites which use them that I went to "n4weu6vyeli4u5t" high school...

Dave Sherohman
A: 

I prefer to keep things simple and use an honor system approach. For example I'll present the user with something like,

Is this really you? Select: Yes or No.

Simucal
Of course! It seems so obvious now!
Zack Peterson
hey, its harder to break than security questions - at least the answer is not found on google :D
dionadar
you kick ass...
Rook
+3  A: 

It 'depends' on the 'system'.

  • If you are a Bank or a credit card provider, you have already issued some physical token to your customer that you can validate against and more.

  • If you are an ecommerce site, you ask for some recent transactions -exact amounts, credit card number used et al..

  • If you are like Yahoo, an automated approach I would use is to send an activation code via either a phone call or a text message to the cell phone along with some other basic question and answers.

Jay

Jay
+3  A: 

Have the user enter 3 questions and answers. When they request a reset present them with a drop down of 5 questions, one if which is a random one from the 3 they entered. Then send a confirmation email to actually reset the password.

Of course, nothing is going to be truly "hacker proof".

Chuck
+1 Nice! Easy for user, makes cracking a bit more time consuming.
ya23
+2  A: 

Treating these security questions as something actually being two-factor authentication is totally misleading. From spurious items read before, when certain (banks) sites were required to have "two-factor authentication" they started implementing this as a cheap way to do it. Bruce Schneier talked about this a [while back][1].

Multiple factors are best things that are not-the-same. It should not be all things you "know" but something you know and something you have, etc. This is where the hardware authentication tokens, smart cards, and other such devices come into play.

[1]: http://www.schneier.com/blog/archives/2005/03/the_failure_of.html The Failure of Two-Factor Authentication

Kris Kumler
+4  A: 

Having seen a lot of posters suggest email, all I can suggest is DONT use email as your line of defense.

Compromising somebodys email account can be relatively easy. Many web based email services DONT provide any real security either, and even if they offer SSL, its often not default and you are still relying on the weakness of the email password to protect the user ( Which, in turn has a reset mechanism most the time ).

Email is one of the most insecure technologies, and there are good reasons why its a really bad idea to send information like credit card details over them. They're usually transmitted between servers in plaintext, and equally often, between server and desktop client equally unencrypted, and all it takes is a wire sniff to get the reset url and trigger it. ( Don't say I'm paranoid, because banks use SSL encryption for a good reason. How can you trust the 20-200 physical devices on the route have good intentions? )

Once you get the reset data, you can reset the password, and then change your(their) email address, and have permanent control of their account ( it happens all the time ).

And if they get your email account, all they have to do is have a browse through your inbox to find whom you're subscribed with, and then easily reset the password ON ALL OF THEM

So now, using the email based security, can lead to a propogative security weakness!. I'm sure thats beneficial!.

The question being asked Is one I figure is almost impossible to do with software alone. This is why we have 2-factor authentication with hardware dongles that respond to challenges with their own unique private key signature, and only if you lose that are you screwed, and you then have to deal with a human ( oh no ) to get a new one.

Kent Fredric
+6  A: 

Out-of-band communication is the way to go.

For instance, sending a temporary password in SMS may be acceptable (depending on the system). I've seen this implemented often by telecoms, where SMS is cheap/free/part of business, and the user's cellphone number is pre-registered...

Banks often require a phone call to/from a specific number, but I personally am not too crazy about that....

And of course, depending on the system, forcing the user to come in to the branch office to personally identify themselves can also work (just royally annoy the user).

Bottom line, DON'T create a weaker channel to bypass the strong password requirements.

AviD
Clarification, email is NOT a good secondary channel for transmitting secure information, such as a replacement password.
AviD
+2  A: 

Good security questions are a misnomer. They actually create a vulnerability into a system. We should call them in-secure questions. However, recognizing the risk and value they provide, "good" security questions should have 4 characteristics: 1. cannot be easily guessed or researched (safe), 2. doesn't change over time (stable), 3. is memorable, 4. is definitive or simple. You can read more about this at http://www.goodsecurityquestions.com.

Here's a list of good, fair, and poor security questions.

+1  A: 

When users are involved (and mostly when not, too) there is no security; there is only the illusion of security. There's not a lot you can do about it. You could have 'less common' security questions but even they are prone to exploitation since some people put everything out in the public eye.

Secondary channels like email offer a reasonable solution to the problem. If the user requests a password reset you can email them a password reset token. Still not perfect, as others have said, but exploiting this would require the attacker to be somewhere in the line of sight between the website, its MTA and the users MUA. It's technically easy but I suggest that the reality is it's just too much work/risk for them to bother on anyone except very high profile individuals.

Requiring the user to supply SSL or GPG public keys at account creation time will help enormously, but clueless users won't know what those things are let-alone be able to keep their private keys secure and backed up so they don't lose them.

Asking the user to supply a second emergency password (kind of like PIN/PUK on mobile phone SIM cards) could help but it's likely the user would use the same password twice or forget the second password too.

Short answer, you're S.O.L unless you want to educate your users on security and then hit them with a cluestick until they realise that it is necessary to be secure and the slight amount of extra work is not simply there to be a pain in the arse.

Adam Hawes
+1  A: 

Generate a hash that contains the person's username and password and send it over Https to the user as a file. The user saves the file to disk. It is their responsibility to store this file in a secure location. Alternatively you can send it to their email address but this will result in less security. If the user forgets their login credentials they must then upload this file. Once the server verifies the username and password, they are then presented with a dialog to alter their password.

Johann Blake
That seems far more failure-prone than asking him to remember a pass phrase of his own choosing.
Zack Peterson
This would only work for specific cases. I for one wouldn't trust a site that tells me to save a mysterious file to a "safe place" on my computer. And what if its been a few years since I first created my account? I might not even know what computer I was using at the time much less what happened to the file.
Peter