views:

131

answers:

6

I want to make a secure website using ASP.NET, but when I publish it, the domain administrator can see all the data stored in my database (SQL Server). I want to hide my data and code from the domain administrator too. Are there any procedures to do that? Please give me the address of a good domain I can use, which will give me all administrative power of my website (Domain owner also cannot access my databases and files.) Thanks for your suggestion.

A: 

Remove the BUILTIN\Administrators group from the sysadmin role - obviously this can only be done by a server admin, but in a proper environment, it is possible for domain admins to only be able to maintain servers nad not see data.

In 2008, the default is to not include this.

As for code, you can obfuscate your DLLs, but there is no complete way to hide code from someone who can access the filesystem.

ck
But how to hide the code? Administrator can see the Database administrator name and password from the code.
chanchal1987
@ck: So I can't able to hide anything being an user (not administrator)?
chanchal1987
@ck: Are there any domain service who will give me administrative power of the database and files?
chanchal1987
@chanchal - the safest option will be to have your own dedicated server, but even then, unless you have your own data centre, the data centre admins will be admins on the server.
ck
@CK - Is there really a way to prevent domain admins from taking control over the box? I was under the impression that so long as a box is a part of domain, the domain admin can do whatever they want. Isn't that true? Can you please clarify what is meant by "proper environment"
Gaurav Kumar
+2  A: 

Have you looked at: SQL Server 2008 Transparent Data Encryption?

Also:

SQL Server 2008 Transparent Data Encryption

Understanding Transparent Data Encryption (TDE)

Mitch Wheat
@Mitch Wheat: But if I am trying to encrypt data using a single password for all user (password will be hide from users too) then I have to store password into source code files. Administrator can easily see that.
chanchal1987
+1  A: 

You can encrypt data, but there's no way to protect code (especially not web-facing code), but frankly the question doesn't make sense - if you have trust issues with someone you have an implicit trust relationship with then you need to find a different provider.

If you don't trust anyone (personal psychology not withstanding) you need to host it yourself.

Addendum: look at it from the other way round, why would you host something for someone without being able to inspect it for security and even legal concerns?

annakata
+1  A: 

Have you considered using a Virtual Private Server? I believe with a VPS you should be able to have complete control over who has access to what at the operating system level.

PhilPursglove
+1  A: 

If you want total security there's quite a few things you need to implement:

As others have said you need physical encryption of your database. Merely blocking them from accessing the database is not enough because they have access to the physical database files and can use tools on them to access the data directly.

You will want to use web.config encryption

Walkthrough: Encrypting Configuration Information Using Protected Configuration

How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI

This is rather questionable security however since it requires a key container to be installed upon the server it would be arguably achievable for a nefarious administration to copy your key and then use it to manually decrypt your web.config. To protect yourself further than that you would need to create a secured web service (secured both for message transport, SSL, and secured message that the content itself is encrypted inside the SSL transport tunnel, see WCF services security) that your application constantly talks to for protected data like the login users for the sql server database and then apply rotating passwords to make it if they intercepted one password that it might not be valid anymore if it's been rotated.

After this point you will need to use source code protection that includes decompilation protection and code obfuscation. This will add a layer of protection from prohibiting viewing the source of your application directly for information about how else you protect your application (this will only go so far to stop a sophisticated cracker though).

All in all at this point you've achieved nearly the highest level of code/data security you can inside a hosted environment but this goes back to the core problem. If you have concerns that the system operator is nefarious then all of these protections even can still be beaten if the admin is skilled enough and has enough motivation to do it.

If you need protection above and behind this you would really want to look at colocation hosting or at the very least dedicated server hosting that would allow you to apply encryption at the operating system level as this protects you from the most effective brute strength attacks which involve just ripping out hard drives from a machine and spraying ram with air duster upside down to freeze it and then attempt to steal encryption keys from the ram itself disconnected from the server.

Having security that makes you immune (or nearly immune) to this kind of attack basically requires using TrueCrypt for native encryption of your file system where you do not have it cache the keys/key files in memory. At this point the only last part of security left is to host at a reputable data center like ThePlanet or Rackspace that has 24/7 electronic surveillance that it would be nearly impossible for a nefarious employee to be able to compromise your server without video recordings of it occuring.

Chris Marisic
A: 

You won't be able to hide the source code, but you do have some options to make it less inviting to admins:

  1. obfuscate - deter people from knowing what is happening syntactically. While they can follow the code and eventually figure it out (if they want), it requires more effort. After all, with enough effort and know-how, anything can be cracked.

  2. encrypt - because the web page needs to be decrypted by the server, the server needs to have a key to decrypt it. This key needs to be stored in a file that the server (and thus admin) has access to. Using some obfuscation, you can try and hide this (again), but any places there is a symmetric encryption, a superuser has the ability to get at it.

Note:

  1. Any time something is encrypted, it will most likely require a decrypt to use/view. The process will be a negative performance impact.

  2. When things are encrypted, especially from an admin perspective, it is essentially an invitation calling for alarm; it creates curiosity. If it's data, that's one thing, but code should not need to be encrypted where there is trust. It's like saying that you have something you want to hide, generally meaning something "bad" that you don't want found out.

vol7ron