My bank recently changed their login process to show a preselected image which they label a "Confidence image" - ostensibly to allow a human website user to authenticate the bank's website as not being a spoof.
The old login process was:
- Visit BankName.com (entire site is secured with an EV certificate)
- Click Login link, a
GET
request to their login page - Enter username and password,
POST
submit form - Receive
HTTP 303
redirection to account dashboard page
The new process is:
- Visit BankName.com (entire site is secured with an EV certificate)
- Click Login link, a
GET
request to their login page - Enter username and password,
POST
submit form - Receive
HTTP 303
redirection to "Confidence image" page, which shows a picture I previously selected, it also prompts me to re-enter my password for a second time. AfterPOST
ing this form it redirects to my account dashboard page.
I don't see how this adds any actual security - any MITM, or any proxy for that matter (assuming the TLS security is compromised somehow) could forward the confidence image and I would recognize it. Similarly a spoof website need only forward my own credentials to the real bank login page, get a copy of the confidence image, and re-serve that - which would fool a less sophisticated user very easily.
Only a very basic spoof website (with a hard-coded confidence image page) would cause users to see the discrepancy, but the biggest problem is that it only shows the image after I have already entered my password - so the feature is useless because the spoof or attack website has already got a copy of my username and password.
I remember at one point Yahoo's OpenID login page did show a confidence-image, while that was after I entered my username,t crucially it was before I entered my password (so the login process was split between two forms) - I believe it was also based on a HTTP-only cookie, so logging in to Yahoo in a clean browser wouldn't trigger the confidence image.
Using human-intelligence to perform mutual-authentication seems like a bad idea - X.509 certificates already perform the role of server authentication, and EV certificates make this easier for less sophisticated users ("look for the green"). I fail to see the motivation... or success behind this move, and am frustrated by having to jump through another hoop to login to my bank.
UPDATE: A few weeks after my bank introduced these confidence-images they changed the login process so you enter your password after seeing the image:
- Visit BankName.com, click the Login link
- Enter username only.
- Response page has the confidence-image and a password input box
- Submit with the correct password to get to your account dashboard
An interesting comment by Joshua suggests that these images could help in MITM situations provided every image request is logged and could be used as evidence of a phish attack, like so:
- User clicks link in phishing email, opens TotallyNotFakeBank.com/login
- This login page only has a username prompt.
- After submitting the username, the MITM server makes a new request to the real bank website and gets the real confidence image. This request will be from the MITM's own IP address (Hypothetically the MITM site could use the client/victim to make an AJAX request for the image, but if CORS and other restrictions are set-up correctly this should be impossible)
- The MITM generates the fake confidence-image page and re-serves the image to the victim, and the victim passes their password.
- The victim subsequently loses money after the attackers use the credentials to get money from the account.
- The victim informs their bank and the bank checks the access-logs of the confidence image and sees that the original request for the confidence-image did not come from their usual web-browser, leading the bank to believe their customer's story instead of assuming it was a false report.