I have an internal WPF client application that accesses a database.
The application is a central resource for a Support team and as such includes Remote Access/Login information for clients. At the moment this database is not available via a web interface etc, but one day is likely to.
The remote access information includes the username and passwords for the client’s networks so that our client’s software applications can be remotely supported by us. I need to store the usernames and passwords in the database and provide the support consultants access to them so that they can login to the client’s system and then provide support. Hope this is making sense.
So the dilemma is that I don’t want to store the usernames and passwords in cleartext on the database to ensure that if the DB was ever compromised, I am not then providing access to our client’s networks to whomever gets the database.
I have looked at two-way encryption of the passwords, but as they say, two-way is not much different to cleartext as if you can decrypt it, so can an attacker… eventually. The problem here is that I have setup a method to use a salt and a passcode that are stored in the application, I have used a salt that is stored in the db, but all have their weaknesses, ie if the app was reflected it exposes the salts etc.
How can I secure the usernames and passwords in my database, and yet still provide the ability for my support consultants to view the information in the application so they can use it to login?
This is obviously different to storing user’s passwords as these are one way because I don’t need to know what they are. But I do need to know what the client’s remote access passwords are as we need to enter them in at the time of remoting to them.
Anybody have some theories on what would be the best approach here?
update
The function I am trying to build is for our CRM application that will store the remote access details for the client. The CRM system provides call/issue tracking functionality and during the course of investigating the issue, the support consultant will need to remote in. They will then view the client’s remote access details and make the connection
A similar situation occurs at our company, where the database administrators wish to maintain a pool of credentials amongst themselves.
I was originally going to post this idea, but erickson beat me to it. However, it may be worth while to post some pseudo code to elaborate, so I suppose my time answering the question isn’t completely wasted…
Things you will need:
First off, let’s set up the database schema. These tables will be demonstrated shortly.
Before a user can begin using this system, they must be registered.
The user can sign in to the system.
A secret can then be granted to a recipient user.
Finally, a user that have been granted access to a secret (the recipient) can retrieve it.
Hopefully this can help. It certainly helped me flesh out my ideas.