Building Defense in Depth using the Full Spectrum of SQL Server Encryption
Presented by Mike Keleher 20 years of software development experience 3 years DBA experience 2 time Bisk Presidents Club Award winner MIS Degree from University of South Florida
"Cybersecurity must mean more than protecting the system -- it must also include protecting data," said John Cohen, former acting undersecretary for intelligence and analysis at DHS. "If information contained within government and private-sector systems is encrypted, then the harm caused by cyberattacks such as this one would be minimal." Security experts: OPM breach shows Einstein isn't enough FCW.com Article dated 6/15/2015
Topics Encryption terminology Column level encryption Code encryption SQL Server connection encryption Transparent Data encryption Reporting Services encryption TLS and SSL Problems and solutions SQL Server 2016 Always Encrypted
Keys A value supplied to an algorithm to encrypt or decrypt data Symmetric keys Uses only one key to both encrypt and decrypt data Asymmetric keys Uses a pair of mathematically related keys Private key can decrypt Public key can encrypt
Algorithms A mathematical function used with a key to encrypt or decrypt a message AES (widely endorsed as the most secure selection) Triple DES RSA BLOWFISH
Hash function A hash function takes in data and returns back a fixed length block of bits such that any change to the data should result in a different block.
Certificates A package that contains a user's Public Key, which has been signed and encrypted using the private key of a well-known Certificate Authority and based on the x.509 standard. Enables SSL
Certificate Authority Certificate Authority is the issuer of the certificate. It is denoted in the “Issued by” section of the certificate and can be based on one of the following Self signed Domain certificate Public CA certificate
Certificate Trust and trust chains There are two types of certificate authorities (CAs), root CAs and intermediate CAs To facilitate this process of verifying a chain of trust, every certificate includes the fields «Issued To» and «Issued By» Certificate validation commonly called “Walking the certificate chain”
Key protection hierarchy
Key scheme in SQL Server 1. Service Master Key Symmetric key in the master database encrypted by the Windows Data Protection API. Used to encrypt linked server connection information, credentials and proxy accounts. 2. Database Master Key Symmetric key created within a database and encrypted by password supplied during creation using AES_256 algorithm for 2012 and above, triple DES for earlier versions 3. Asymmetric keys and Certificates Use public\private key pairs. Certificates generated within SQL are all self signed. Private key encrypted by password or Database Master Key. 4. Symmetric keys Can be encrypted by password, certificate, asymmetric key, another symmetric key, or Extensible Key Management provider. Can’t be protected directly by the DMK.
Service master Key Created automatically by SQL Server the first time there is a need for it Can only be opened by the service account Regenerating or restoring is resource intensive Protects linked server logins and credentials Not accessible by the server if you restore master database to a different system and change service accounts
Database master key Encrypted by Service Master Key using AES 256 Two copies exist. One in the user database and one in the master
Asymmetric key Can be encrypted by password, certificate or symmetric key Can be created from a file Cannot be backed up separately from the database It is possible to use ALTER to remove the private key so the Asymmetric key can only be used to encrypt and not decrypt
Certificates By default, certificate private key is encrypted by Database Master Key Can be altered to remove private key Certificate and private key backed up to separate files Every Certificate in SQL Server is a self signed certificate that adheres to the x.509 standard Can be used to encrypt data
Symmetric key No backup No private key removal Can be reproduced on different servers from script SQL Server will allow changes to methods for encrypting the key, but will never allow the key to be unencrypted on the server
Certificate Encryption Example
Extensible Key Management Provides an interface for Hardware Security Modules to perform cryptography Introduced in 2008 Only available in … Enterprise Edition
Encryption System tables
Example Encryption function Each key has a key guid that must be used Encryption and decryption functions can have authenticators
Authenticators Helps deter whole value substitution Integrated into the encrypted column and required to decrypt
Column Encryption Encrypted data must be stored in Varbinary column Remains encrypted in memory and in storage
Anatomy of an encrypted column Symmetric key cipher text message format
Indexing encrypted columns Encryption functions on server are non-deterministic, therefore the output is not repeatable
Indexing that won’t work EncryptByKey returns different values for the same message
Resolving the indexing problem Be careful. If a workaround is implemented incorrectly it could compromise the encrypted data Hashing the message makes it output predictable and can lead to a dictionary attack
Replicating Encrypted Columns Transfer data without decrypting Data is encrypted on publisher, in transit and at subscriber and only decrypted when used. Same symmetric or asymmetric key must be created on both databases
Permissions needed to decrypt Grant REFERENCES on symmetric keys Grant CONTROL to those who will manage these objects Anyone with CONTROL can run BACKUP CERTIFICATE CONTROL permission on a certificate is required to use it for decryption either directly or indirectly Warning: The db_owner role, db_securityadmin and the db_ddladmin role have CONTROL permissions on certificates and the db_backupoperator role can back up the database.
Procedure Code signing with Certificates Can generally be used to solve some granular permission issues There are five steps of module signing: Create a signing certificate Sign the module using the signing certificate Create a certificate user and map to the certificate Grant the permissions to the certificate user Grant permission to the module for the users/groups
Code signing example Create a signing certificate Sign the module using the signing certificate Create a certificate user and map to the certificate Grant the permissions to the certificate user Grant permission to the module for the users/groups
Results
Code signing concept It’s like telling the user “You don’t have permissions to operate the motor, but you do have permission to knock over the first domino”
Where is my encryption? using System views to find encryption artifacts
Stored procedure encryption Only available in SQL Server 2008 and above Converts text of procedures to obfuscated form, even in system tables Encrypted procedures can’t be replicated Text still available to administrators using the Dedicated Administrative Connection Can be used with functions, views and triggers as well
Connection encryption Install Certificate on Server Configure server to use Certificate and force connection encryption using SQL Server Configuration Manager
Man in the middle Attack Possible when using self-signed certificates or certificate obtained using identity theft
Potential issues with Connection Encryption Java VMs handle their own connection encryption Replication agents can be affected Set trust server certificate to yes and use the encryptionlevel option for the distributor
Transparent Data Encryption Encrypts Data files and log files Encrypts and protects backup files Only available in... Enterprise Edition, however, backup encryption is available on all versions of SQL Server starting in 2014 To implement, create a Database Master Key and Certificate in the master database, then create a Database Encryption Key in the user database and set the user database encryption property to ON. If you want to encrypt your data and log files and don’t have Enterprise Edition there is good news…
Encrypting database files without TDE EFS Encrypting File System Requires a Certificate on the system encrypting the files
Reporting Services Encryption If you have any instances of Reporting Services, then the encryption keys and password needs to be backed up
TLS and SSL How channel encryption is negotiated between systems Determine the highest level protocol mutually supported by the client and the server. The currently recognized protocols are, from highest to lowest: TLS1.2,TLS1.1, TLS1.0, SSL3.0, SSL2.0
How to cause Trouble... and recover from it
Changing systems and service accounts in one move Changing systems and service accounts during a restore of master, msdb and user databases will cause the Service Master Key to be inaccessible What you will lose if you can't recover: a. Encrypted backups b. TDE Encrypted files c. Encrypted Column data d. Linked Server Logins e. Credentials
Service Master Key recovery There is a way to recover… If your system reports a problem… Warning: Do not regenerate the Service Master Key Until you have recovered it first 2012 and earlier 2014 and later use SSCM
Only taking backups of databases without backups of keys and certificates Inhibits recovering user database to other servers Solutions restore problematic user databases from a good backup to same server under a different name Build a new server, restore master, msdb and user databases and it's imperative to use the same service account and password Warning: If you don’t backup either the master database or the Service Master Key you could lose it all
Changing the service account outside of the SQL Server Configuration Manager SQL Server will re-encrypt the Service Master Key when the account information is changed using SQL Server Configuration Manger. Do not use Computer Manager or other command line options as they are not aware of the encryption requirements Back up the Service Master Key Warning: If you change the password for the service account outside of SQL Server Configuration Manager and the server crashes before it can be restarted, you could lose access to the Service Master Key
Using encrypting file system without backing up the certificate Only one important point to make about this slide The Title says it all Work with your system administrator
A Practical Example of Solving Encryption Problems The Scenario A SQL Server instance implemented by a group outside of IT had their instance crash Unrecoverable system board error occurred You are a Database Administrator assigned to rebuilding the instance and provided with the following facts One of their team members decided to encrypt a substantial number of columns in a mission critical database The person who set up the instance had a backup job that ran every day. It deleted the previous days backups and created a current backup set. They have the domain user and password used as the service account However, they only backed up the user databases and not the master database.
More Details about the situation When you inquire about how the encryption was implemented, you are sent a hyperlink to an StackOverflow blog page and were told that they copied the script from this page and ran it.... no one saved the script He did mention that he changed all of the parameters, but forgot to change the Key_Source
The Solution We can solve this by applying knowledge of the key Hierarchy, system tables and format of the encrypted data Facts we know We have a backup of the user database We know the script that was used to create the keys We also know that they Key_Source is used to create the symmetric key and the identity_value is used to generate the key_guid We know that the symmetric key was encrypted by the certificate We know the format of the encrypted column
Decryption attempt
If you only had the password for the database master key … but you don’t in this situation
Documentation for symmetric key
The script
One last item before we can decrypt
SQL Server 2016 Always Encrypted
Back up Keys and certificates Back up all Database Master Keys, Service Master Keys and Certificates Symmetric and Asymmetric keys are backed up with the database, however, if you want to share a symmetric key among several systems it can be created from a file or using the algorithm, key_source and identity_value parameters If you have any column encryption, it is important to back up the Database Master Key and keep the password used to encrypt it safe and accessible
Reference material Raul Garcia’s Blog Indexing Encrypted Columns Encrypted Message Description Channel 9 Always Encrypted Video Technet SQL Server Encryption MSDN SQL Server Encryption X.509 Certificate Format and Validation How to Crack the Symmetric Keys in the Database Wide OpenHow to Crack the Symmetric Keys in the Database Wide Open
Contact Information LinkedIn: Michael Keleher
Thank you for attending