PC Review


Reply
Thread Tools Rate Thread

Best practice for "hiding" secrets

 
 
Picho
Guest
Posts: n/a
 
      9th Aug 2004
Hi all,

Lets say I have a "secret" I wish to "hide", lets say a database password.
For the more detailed problem, a web application/service that uses a
connection string.

all the solutions I came up with (embedding in code, encrypting-decrypting)
involve embedding the/another secret in the code. since my problem cannot
request a user intervention, I am at a stop.

what will be the best way to avoid writing secrets in code or hiding them
anywhere else (registry, external files) while avoiding user intervention to
retrieve the secret?

Thanx,

Picho

P.S. - I am taking into consideration the axume that says that anything
embedded (hard coded) in the code can be extracted by means of debugging or
reflecting etc.


 
Reply With Quote
 
 
 
 
Keith
Guest
Posts: n/a
 
      9th Aug 2004
This approach is a radical shift for some shops, but do not allow any
applications to make connections into your database. (jaw drops on chest).
Instead, have your apps connect to a component that establishes a connection
and returns a DataSet, DataReader, etc. Then use Domain security to
determine who can access which data. We face this challenge every day at my
clients' sites. Some accept this change, some fight it. Just have to ask
yourself if security is important to you.


"Picho" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Hi all,
>
> Lets say I have a "secret" I wish to "hide", lets say a database password.
> For the more detailed problem, a web application/service that uses a
> connection string.
>
> all the solutions I came up with (embedding in code,

encrypting-decrypting)
> involve embedding the/another secret in the code. since my problem cannot
> request a user intervention, I am at a stop.
>
> what will be the best way to avoid writing secrets in code or hiding them
> anywhere else (registry, external files) while avoiding user intervention

to
> retrieve the secret?
>
> Thanx,
>
> Picho
>
> P.S. - I am taking into consideration the axume that says that anything
> embedded (hard coded) in the code can be extracted by means of debugging

or
> reflecting etc.
>
>



 
Reply With Quote
 
Picho
Guest
Posts: n/a
 
      9th Aug 2004
thank you Keith for your reply.

what you say is not a practical solution, we could easly be discussing the
way that 'component' connects to the database (the web-application is not so
different than any other component except for the channel it uses or being
in the DMZ)....

Picho

"Keith" <css@NO_SPAM_ConsultWithUs.com> wrote in message
news:(E-Mail Removed)...
> This approach is a radical shift for some shops, but do not allow any
> applications to make connections into your database. (jaw drops on

chest).
> Instead, have your apps connect to a component that establishes a

connection
> and returns a DataSet, DataReader, etc. Then use Domain security to
> determine who can access which data. We face this challenge every day at

my
> clients' sites. Some accept this change, some fight it. Just have to ask
> yourself if security is important to you.
>
>
> "Picho" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
> > Hi all,
> >
> > Lets say I have a "secret" I wish to "hide", lets say a database

password.
> > For the more detailed problem, a web application/service that uses a
> > connection string.
> >
> > all the solutions I came up with (embedding in code,

> encrypting-decrypting)
> > involve embedding the/another secret in the code. since my problem

cannot
> > request a user intervention, I am at a stop.
> >
> > what will be the best way to avoid writing secrets in code or hiding

them
> > anywhere else (registry, external files) while avoiding user

intervention
> to
> > retrieve the secret?
> >
> > Thanx,
> >
> > Picho
> >
> > P.S. - I am taking into consideration the axume that says that anything
> > embedded (hard coded) in the code can be extracted by means of debugging

> or
> > reflecting etc.
> >
> >

>
>



 
Reply With Quote
 
Nick Malik
Guest
Posts: n/a
 
      9th Aug 2004
This is what aspnet_setreg was created for.

See this article:
http://msdn.microsoft.com/library/de...itysection.asp

The idea is to store your credentials in a registry setting, in an encrypted
format. Even if someone gets your app, they don't get the registry. You
can set ACLs on the registry keys to prevent anyone outside the network from
getting the encrypted credentials. There is a utility already in existence
to allow system admins to encrypt the credentials and store them into the
correct spots, and your config files can pull the credentials without many
code changes on your part.

HTH
--- Nick


"Picho" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Hi all,
>
> Lets say I have a "secret" I wish to "hide", lets say a database password.
> For the more detailed problem, a web application/service that uses a
> connection string.
>
> all the solutions I came up with (embedding in code,

encrypting-decrypting)
> involve embedding the/another secret in the code. since my problem cannot
> request a user intervention, I am at a stop.
>
> what will be the best way to avoid writing secrets in code or hiding them
> anywhere else (registry, external files) while avoiding user intervention

to
> retrieve the secret?
>
> Thanx,
>
> Picho
>
> P.S. - I am taking into consideration the axume that says that anything
> embedded (hard coded) in the code can be extracted by means of debugging

or
> reflecting etc.
>
>



 
Reply With Quote
 
Keith
Guest
Posts: n/a
 
      9th Aug 2004
Understood, but that is why you have obfuscators and MD5, etc. It's a lot
safer in if you get the goodies out of an ASP file.

We also use the method Nick suggests with mixed results. If you go this
route, make sure you use accounts that do not expire automatically. If this
is not an option then be sure to change these passwords before they expire
(reminder in Exchange)


"Picho" <(E-Mail Removed)> wrote in message
news:%(E-Mail Removed)...
> thank you Keith for your reply.
>
> what you say is not a practical solution, we could easly be discussing the
> way that 'component' connects to the database (the web-application is not

so
> different than any other component except for the channel it uses or being
> in the DMZ)....
>
> Picho
>
> "Keith" <css@NO_SPAM_ConsultWithUs.com> wrote in message
> news:(E-Mail Removed)...
> > This approach is a radical shift for some shops, but do not allow any
> > applications to make connections into your database. (jaw drops on

> chest).
> > Instead, have your apps connect to a component that establishes a

> connection
> > and returns a DataSet, DataReader, etc. Then use Domain security to
> > determine who can access which data. We face this challenge every day

at
> my
> > clients' sites. Some accept this change, some fight it. Just have to

ask
> > yourself if security is important to you.
> >
> >
> > "Picho" <(E-Mail Removed)> wrote in message
> > news:(E-Mail Removed)...
> > > Hi all,
> > >
> > > Lets say I have a "secret" I wish to "hide", lets say a database

> password.
> > > For the more detailed problem, a web application/service that uses a
> > > connection string.
> > >
> > > all the solutions I came up with (embedding in code,

> > encrypting-decrypting)
> > > involve embedding the/another secret in the code. since my problem

> cannot
> > > request a user intervention, I am at a stop.
> > >
> > > what will be the best way to avoid writing secrets in code or hiding

> them
> > > anywhere else (registry, external files) while avoiding user

> intervention
> > to
> > > retrieve the secret?
> > >
> > > Thanx,
> > >
> > > Picho
> > >
> > > P.S. - I am taking into consideration the axume that says that

anything
> > > embedded (hard coded) in the code can be extracted by means of

debugging
> > or
> > > reflecting etc.
> > >
> > >

> >
> >

>
>



 
Reply With Quote
 
Scott M.
Guest
Posts: n/a
 
      9th Aug 2004
This is not an uncommon approach at all and there are several reasons why
this is a good way to go.

First, the UI could be running on a public machine and the component could
be running on a secure machine (which sits behind a firewall). This
prevents the component from the vulnerabilities of a public machine.

Second, by having your data access layer in its own component, no other part
of the application knows anything about where the data comes from or how to
obtain it. This is beneficial in case that code were to get hacked.

-Scott


"Picho" <(E-Mail Removed)> wrote in message
news:%(E-Mail Removed)...
> thank you Keith for your reply.
>
> what you say is not a practical solution, we could easly be discussing the
> way that 'component' connects to the database (the web-application is not

so
> different than any other component except for the channel it uses or being
> in the DMZ)....
>
> Picho
>
> "Keith" <css@NO_SPAM_ConsultWithUs.com> wrote in message
> news:(E-Mail Removed)...
> > This approach is a radical shift for some shops, but do not allow any
> > applications to make connections into your database. (jaw drops on

> chest).
> > Instead, have your apps connect to a component that establishes a

> connection
> > and returns a DataSet, DataReader, etc. Then use Domain security to
> > determine who can access which data. We face this challenge every day

at
> my
> > clients' sites. Some accept this change, some fight it. Just have to

ask
> > yourself if security is important to you.
> >
> >
> > "Picho" <(E-Mail Removed)> wrote in message
> > news:(E-Mail Removed)...
> > > Hi all,
> > >
> > > Lets say I have a "secret" I wish to "hide", lets say a database

> password.
> > > For the more detailed problem, a web application/service that uses a
> > > connection string.
> > >
> > > all the solutions I came up with (embedding in code,

> > encrypting-decrypting)
> > > involve embedding the/another secret in the code. since my problem

> cannot
> > > request a user intervention, I am at a stop.
> > >
> > > what will be the best way to avoid writing secrets in code or hiding

> them
> > > anywhere else (registry, external files) while avoiding user

> intervention
> > to
> > > retrieve the secret?
> > >
> > > Thanx,
> > >
> > > Picho
> > >
> > > P.S. - I am taking into consideration the axume that says that

anything
> > > embedded (hard coded) in the code can be extracted by means of

debugging
> > or
> > > reflecting etc.
> > >
> > >

> >
> >

>
>



 
Reply With Quote
 
Hernan de Lahitte
Guest
Posts: n/a
 
      9th Aug 2004
Agree with Nick. If you want to further customize aspnet_setreg for your own
configuration settings, you have a sample here:

http://weblogs.asp.net/hernandl/arch...InConfigs.aspx


--
Hernan de Lahitte
Lagash Systems S.A.
http://weblogs.asp.net/hernandl


This posting is provided "AS IS" with no warranties, and confers no rights.

"Nick Malik" <(E-Mail Removed)> wrote in message
news:JtMRc.274437$Oq2.260080@attbi_s52...
> This is what aspnet_setreg was created for.
>
> See this article:
>

http://msdn.microsoft.com/library/de...itysection.asp
>
> The idea is to store your credentials in a registry setting, in an

encrypted
> format. Even if someone gets your app, they don't get the registry. You
> can set ACLs on the registry keys to prevent anyone outside the network

from
> getting the encrypted credentials. There is a utility already in

existence
> to allow system admins to encrypt the credentials and store them into the
> correct spots, and your config files can pull the credentials without many
> code changes on your part.
>
> HTH
> --- Nick
>
>
> "Picho" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
> > Hi all,
> >
> > Lets say I have a "secret" I wish to "hide", lets say a database

password.
> > For the more detailed problem, a web application/service that uses a
> > connection string.
> >
> > all the solutions I came up with (embedding in code,

> encrypting-decrypting)
> > involve embedding the/another secret in the code. since my problem

cannot
> > request a user intervention, I am at a stop.
> >
> > what will be the best way to avoid writing secrets in code or hiding

them
> > anywhere else (registry, external files) while avoiding user

intervention
> to
> > retrieve the secret?
> >
> > Thanx,
> >
> > Picho
> >
> > P.S. - I am taking into consideration the axume that says that anything
> > embedded (hard coded) in the code can be extracted by means of debugging

> or
> > reflecting etc.
> >
> >

>
>



 
Reply With Quote
 
Chris Mullins
Guest
Posts: n/a
 
      9th Aug 2004
"Picho" <(E-Mail Removed)> wrote
> Lets say I have a "secret" I wish to "hide", lets say a database password.
> For the more detailed problem, a web application/service that uses a
> connection string.
>
> all the solutions I came up with (embedding in code,

encrypting-decrypting)
> involve embedding the/another secret in the code. since my problem cannot
> request a user intervention, I am at a stop.


The DPAPI stuff is pretty good for a wide variety of problems along this
line. It doesn't cover all the possible cases, but certainly many of 'em.

The ASP.NET Security guide has an excellent overview of DPAPI.


--
Chris Mullins


 
Reply With Quote
 
Picho
Guest
Posts: n/a
 
      9th Aug 2004
thank you guys for the lead, it is very helpful.

just to see if i get it right:
we use a tool (aspnet_setreg) that uses an API func (CryptProtectedData) to
encrypt the un/pwd.

2 questions:

1. assuming that this encryption is role-based and in our case the ASPNET
user account, only the same user can decrypt the information?
2. if 1 is true, do we know of a way to impersonate as ASPNET in order to
decrypt this inforamtion? i am basicly asking how safe is this method.

thank you again

Picho


"Hernan de Lahitte" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Agree with Nick. If you want to further customize aspnet_setreg for your

own
> configuration settings, you have a sample here:
>
>

http://weblogs.asp.net/hernandl/arch...InConfigs.aspx
>
>
> --
> Hernan de Lahitte
> Lagash Systems S.A.
> http://weblogs.asp.net/hernandl
>
>
> This posting is provided "AS IS" with no warranties, and confers no

rights.
>
> "Nick Malik" <(E-Mail Removed)> wrote in message
> news:JtMRc.274437$Oq2.260080@attbi_s52...
> > This is what aspnet_setreg was created for.
> >
> > See this article:
> >

>

http://msdn.microsoft.com/library/de...itysection.asp
> >
> > The idea is to store your credentials in a registry setting, in an

> encrypted
> > format. Even if someone gets your app, they don't get the registry.

You
> > can set ACLs on the registry keys to prevent anyone outside the network

> from
> > getting the encrypted credentials. There is a utility already in

> existence
> > to allow system admins to encrypt the credentials and store them into

the
> > correct spots, and your config files can pull the credentials without

many
> > code changes on your part.
> >
> > HTH
> > --- Nick
> >
> >
> > "Picho" <(E-Mail Removed)> wrote in message
> > news:(E-Mail Removed)...
> > > Hi all,
> > >
> > > Lets say I have a "secret" I wish to "hide", lets say a database

> password.
> > > For the more detailed problem, a web application/service that uses a
> > > connection string.
> > >
> > > all the solutions I came up with (embedding in code,

> > encrypting-decrypting)
> > > involve embedding the/another secret in the code. since my problem

> cannot
> > > request a user intervention, I am at a stop.
> > >
> > > what will be the best way to avoid writing secrets in code or hiding

> them
> > > anywhere else (registry, external files) while avoiding user

> intervention
> > to
> > > retrieve the secret?
> > >
> > > Thanx,
> > >
> > > Picho
> > >
> > > P.S. - I am taking into consideration the axume that says that

anything
> > > embedded (hard coded) in the code can be extracted by means of

debugging
> > or
> > > reflecting etc.
> > >
> > >

> >
> >

>
>



 
Reply With Quote
 
Hernan de Lahitte
Guest
Posts: n/a
 
      10th Aug 2004
Answers:

> 1. assuming that this encryption is role-based and in our case the ASPNET
> user account, only the same user can decrypt the information?

1) This tool (aspnet_setreg) uses the DPAPI "LocalMachine" mode so the key
material will be bind to that particular machine (not the user account of
the process)

2) Not apply because of 1).

Note: aspnet_setreg does not use the "additional" entropy value that DAPI
accepts when working on LM mode so anyone with control of your machine (and
of course access to the registry key, that's why you should set a strong ACL
to this key) will be able to decrypt the data.

--
Hernan de Lahitte
Lagash Systems S.A.
http://weblogs.asp.net/hernandl


This posting is provided "AS IS" with no warranties, and confers no rights.

"Picho" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> thank you guys for the lead, it is very helpful.
>
> just to see if i get it right:
> we use a tool (aspnet_setreg) that uses an API func (CryptProtectedData)

to
> encrypt the un/pwd.
>
> 2 questions:
>
> 1. assuming that this encryption is role-based and in our case the ASPNET
> user account, only the same user can decrypt the information?
> 2. if 1 is true, do we know of a way to impersonate as ASPNET in order to
> decrypt this inforamtion? i am basicly asking how safe is this method.
>
> thank you again
>
> Picho
>
>
> "Hernan de Lahitte" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
> > Agree with Nick. If you want to further customize aspnet_setreg for your

> own
> > configuration settings, you have a sample here:
> >
> >

>

http://weblogs.asp.net/hernandl/arch...InConfigs.aspx
> >
> >
> > --
> > Hernan de Lahitte
> > Lagash Systems S.A.
> > http://weblogs.asp.net/hernandl
> >
> >
> > This posting is provided "AS IS" with no warranties, and confers no

> rights.
> >
> > "Nick Malik" <(E-Mail Removed)> wrote in message
> > news:JtMRc.274437$Oq2.260080@attbi_s52...
> > > This is what aspnet_setreg was created for.
> > >
> > > See this article:
> > >

> >

>

http://msdn.microsoft.com/library/de...itysection.asp
> > >
> > > The idea is to store your credentials in a registry setting, in an

> > encrypted
> > > format. Even if someone gets your app, they don't get the registry.

> You
> > > can set ACLs on the registry keys to prevent anyone outside the

network
> > from
> > > getting the encrypted credentials. There is a utility already in

> > existence
> > > to allow system admins to encrypt the credentials and store them into

> the
> > > correct spots, and your config files can pull the credentials without

> many
> > > code changes on your part.
> > >
> > > HTH
> > > --- Nick
> > >
> > >
> > > "Picho" <(E-Mail Removed)> wrote in message
> > > news:(E-Mail Removed)...
> > > > Hi all,
> > > >
> > > > Lets say I have a "secret" I wish to "hide", lets say a database

> > password.
> > > > For the more detailed problem, a web application/service that uses a
> > > > connection string.
> > > >
> > > > all the solutions I came up with (embedding in code,
> > > encrypting-decrypting)
> > > > involve embedding the/another secret in the code. since my problem

> > cannot
> > > > request a user intervention, I am at a stop.
> > > >
> > > > what will be the best way to avoid writing secrets in code or hiding

> > them
> > > > anywhere else (registry, external files) while avoiding user

> > intervention
> > > to
> > > > retrieve the secret?
> > > >
> > > > Thanx,
> > > >
> > > > Picho
> > > >
> > > > P.S. - I am taking into consideration the axume that says that

> anything
> > > > embedded (hard coded) in the code can be extracted by means of

> debugging
> > > or
> > > > reflecting etc.
> > > >
> > > >
> > >
> > >

> >
> >

>
>



 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
NOW WHAT? "The maximum number of secrets that may be stored in a single system has been exceeded" aloha Windows Vista Security 7 12th Sep 2008 09:45 PM
"Auto-Hide" of taskbar not working. How to force "Hiding" ? Frank Callone Windows XP Help 2 20th Mar 2007 12:29 AM
"Auto-Hide" of taskbar not working. How to force "Hiding" ? Frank Callone Windows XP General 1 19th Mar 2007 10:10 AM
"Pattern" or "best practice" in security checks Anders K. Jacobsen [DK] Microsoft ASP .NET 1 6th Dec 2004 03:46 AM
Best practice for "hiding" secrets Picho Microsoft Dot NET Framework 9 10th Aug 2004 02:13 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 06:40 AM.