Scenario: We have our dedicated servers hosted with a hosting provider. They are running web apps, console apps along with the database which is Sql Server Express edition.
The applications encrypt/decrypt the data to/from the DB. We also store the keys in their server. So theoretically, the hosting provider can access our keys and decrypt our data.
Question: How we can prevent the hosting providers to access our data?
We don't want hosting provider's users to just log into Sql Server and see the data.
We don't want an un-encrypted copy of database files in the box.
To mitigate no. 1: Encrypting app.configs to not store plain text DB username and password.
To mitigate no. 2: Turn on EFS on Sql Server data folder. We could use TDE but the Sql Server is Web Edition version and the hosting company is going to charge us a fortune to use Enterprise Edition.
I'd really appreciate if you guys have any suggestions about above.
I can suggest following, but it's still possible to break, but hard to perform.
First of all, you would need collocation, so you bring your own hardware. Best is to go to such extreme measures not for all your hosts, but only for critical one.
Also verify that no new PCIe devices was installed. Or that IOMMU is configured to block devices from access to RAM, etc.
As an alternative, you could replace step 4 with downloading encryption keys from some external host, during boot, providing that host with cryptographic signature generated by TPM. In this case you would be able to revoke server access to keys remotely.
Crucial parts are secure boot and intrusion sensor. Most likely attacker would try opening your box using normal means, which would trigger sensor. Just make sure that sensor doesn't reset it's state when case is closed back.
But that won't help if attacker would slice case open in places not covered by sensor.
Then sophisticated attacker could attach wires to RAM lines or PCI lanes, and observe state of RAM.
This would give good enough security. But still breakable in theory. In practice should be quite secure.
Implementing such schema would be quite expensive in terms of engineer-hours. And can be quite brittle, system updates can break it. And you need to have way to unbrick system, if that was you who opened the case.