SlideShare a Scribd company logo
Managing Secrets at Scale
Alex Schoof, Fugue - Velocity EU 2015
Secrets are EVERYWHERE
Mishandling secrets can be very bad
We’re really bad at managing secrets
We tend to manage secrets the same way
we tell people not to manage software
Secret management should be core
infrastructure
Lots of new secret management systems
have been released in 2015
There is no one-size-fits-all solution
You have to understand your Threat Model
and Trust Boundaries
What are we going to talk about?
● Core principles of modern secret management
● How a modern secret management system works
● Some existing open source secret management systems
Core Principles
Principle
Minimal Privilege
The set of principals (actors) able to
perform an action on a secret should
be the smallest set required.
Implications
● We have authentication and authorization on usage of secrets
● We have enforceable access control policy for operations on secrets
● We have an audit trail to make sure we are doing it right
Principle
Secrets Expire
Secrets expire for a variety of reasons:
built-in expiration in protocols, third
party policy, internal policy,
compromise, etc.
Implications
● Deployment of any given secret is not a one-time event
● We must be able to easily rotate secrets
● A deployment artifact should not be the authoritative source of a secret
Secrets should never be in source control
Corollary: Changing a secret should not
require a full deployment
Principle
It should be easier to do the right
thing than the wrong thing
If operations on secrets require
human intervention, long waits, or
complex ceremony, people will do
other things, like hardcode secrets
Implications
● We need to provide easy-to-use programmatic operations on secrets
○ CRUD operations (Create, Read, Update, Delete)
○ List
○ Audit
Principle
The Weakest Link
The security of a secret is only as
strong as the weakest access control
mechanism on the storage,
transmission, or use of that secret
Implications
● We need strong controls on every secret operation
● Secrets should NEVER be persisted in plain text
● Proper root secret storage is very important
○ Operator laptops are now part of your trust boundary for secrets they can access
Principle
Secrets must be highly available
For many applications, access to
secrets is a requirement for basic
functionality
Implications
● Tier-0 service
● Need good operational and deployment practices
● Be aware of circular dependencies and bootstrapping problems
Principles of Secret Management
● Minimal Privilege
● Secrets Expire
● It should be easier to do the right thing than the wrong thing
● Weakest Link
● Secrets must be highly available
So, we need a system that:
● Supports easy-to-use programmatic CRUD operations on secrets
● Provides an audit trail
● Protects secrets at every stage of their lifecycle
● Permits access control to be defined by policy
● Is highly available
Building a Secret Management System
Quick Caveat
● DON’T invent your own crypto
● DON’T implement someone else’s crypto
● Use standard libraries and battle-tested algorithms
Secret Service
Secret Service
Secret
Store
ID NAME VALUE
1 prod.db.password pass123$
2 dev.db.password qC$qwf#$FQ3f44q#$
3 prod.some-api.key foobar
ID NAME VALUE
1 prod.db.password Ek
(pass123$)
2 dev.db.password Ek
(qC$qwf#$FQ3f44q#$)
3 prod.some-api.key Ek
(foobar)
How do we store the key?
Secure key storage
Hardware
● Hardware Security Module (HSM)
● Trusted Platform Module
● Smartcard
Provide hardware key storage and usually have hardware-accelerated cryptography
All use PKCS#11-style interface
Can generate or import keys, can use keys, cannot export keys
Generally requires a certificate or password to use
Key Management Services
● Presents an HSM-like interface, typically over the network
● available in public cloud environments (i.e. AWS KMS)
● much less expensive than dedicated HSMs
Still need some credential to access the KMS
Or, we could not store the key...
Quorum Systems
● Shamir’s Secret Sharing
○ Make a k-1-degree polynomial with a y-intercept of the secret value
○ Take n points from the polynomial
○ Any k of the n points can recreate the original polynomial via interpolation
● Can keep shares on smartcards, in safes, etc.
● Introduces a collusion requirement
● Other secret servers that are up verify that the new server is trusted, and then
transfer the secret to it, directly or via secret sharing
● Need secure boot/remote attestation to do safely
● Completely hands-off, but very hard to do right
Peer-to-peer induction of secret servers
Secret Service
Master Key
Storage
Secret
Store
Key Wrapping
● Secure key storage is expensive
● We might want arbitrary-sized secrets
● Have one (or more) master key(s) on an HSM, or in a KMS
● For each secret in the secret-store, generate a unique data-encryption key
● encrypt the secret with the data encryption key
● encrypt the data-encryption key with the master key
● store the encrypted (wrapped) data-encryption key next to the encrypted data
● Add message authentication code (MAC) or use AES-GCM to prevent tampering
and chosen-ciphertext attacks
ID NAME VALUE DATA_KEY
1 prod.db.password Ek1
(pass123$) Em
(k1)
2 dev.db.password Ek2
(qC$..Q3f44q#$) Em
(k2)
3 prod.some-api.key Ek3
(foobar) Em
(k3)
Secret Service
Master Key
Storage
Secret
Store
Secret Servicelog
Master Key
Storage
Secret
Store
Secure logging
● Append-only
● Signed logs to detect tampering
○ Signed logs are really, REALLY hard to get right
○ Use an existing secure logging implementation
Secret Servicelog
Master Key
Storage
Secret
Store
Secret Servicelog
Client
Master Key
Storage
Secret
Store
Authenticating the service
Secret Servicelog
Client
TLS
Master Key
Storage
Secret
Store
Authenticating the Client
Client Authentication
● Either API key to sign requests to the secret service, or SSL client certificate
● Created at provision or launch of the instance
○ Can use this token as a root of trust for giving other tokens to the client
● Should try to use some out-of-band mechanism to verify the host
● Examples:
○ IAM Roles for EC2
○ Chef client certificates
○ Generate CSR at boot and send to CA that can list running instances for verification
○ Keys generated in hardware
Protecting the authentication token
● Agent-based systems
○ Can let you do cool things like FUSE drivers that use POSIX auth
● Control access to certificate or API keys using standard access control
mechanisms
○ Filesystem permissions
○ Mandatory Access Control systems (SELinux, AppArmor, etc)
○ Kernel Key Retention Service
Secret Servicelog
Client
TLS
✅
✅
Master Key
Storage
Secret
Store
Basic Operations
CREATE(name, value)
● Access control check
● Log the request
● Wrap value and store in secret store
● Set any initial access control policy (i.e. set owner)
READ(name)
● Perform access control check for name
● Log the request
● Unwrap value for name and send it back
UPDATE(name, value)
● Access control check
● Log the request
● Wrap value, overwrite old value
UPDATE(name, value)
● Access control check
● Log the request
● Wrap value, overwrite old value
● Generate new version of value
In general, secrets should be versioned and
immutable
Operations with versions
● CREATE(name, value) = UPDATE(name, value, 1)
● READ(name, version=`latest`)
● UPDATE(name, value, version)
ID NAME VERSION VALUE DATA_KEY
1 prod.db.password 1 Ek1
(pass123$) Em
(k1)
2 dev.db.password 1 Ek2
(qC$..Q3f44q#$) Em
(k2)
3 prod.some-api.key 1 Ek3
(foobar) Em
(k3)
4 prod.db.password 2 Ek4
(b3tterPassword!) Em
(k4)
5 prod.db.password 3 Ek5
(ce8hq7fq9&^Ae$) Em
(k5)
DELETE(name, value, version)
● Access control check
● Log the request
● Distinguish between actual delete and logical delete
○ Will you need to decrypt old data encrypted with a deleted key?
● Revoke asynchronous public keys
LIST(name?, version?)
● Access control check
● Log the request
● Do a scan or prefix search
PUT_POLICY(name, value, policy)
● This is a privilege escalation avenue
● Need to require higher-level interface
● Makes sense to use separate channel or interface
● Policy can range from complex documents to a set of flags
○ IAM policy
○ POSIX-style ACL
○ Booleans for each user
Secret Servicelog
Client
TLS
✅
✅
CREATE
READ
UPDATE
DELETE
LIST
Admin Interface
✅
TLS
PUT_POLICY
✅
Master Key
Storage
Secret
Store
Considerations for Interfaces and Libraries
● Make sure you don’t leak secrets outside your trust boundary
○ Logs
○ Core dumps
○ Swap
● Easy-to-use verbs help usability
○ `get_secret(“prod-password”, version=3)`
Availability
High-Availability Secret Services
● Run in multiple Availability Zones or Data Centers
● Want secret service to be close to clients (physically and topologically)
● Data store needs to be highly available
● Need to be able to boot/induct new instances of the secret service
● Spend time hardening your secret servers!
Secret management is Tier-0
● Operational metrics
● Canaries
● Integration tests
● Code reviews
● ACL on commits/deployment
Client-side caching
● Publish/Subscribe can be a useful semantic here
● Helps with network partition from the secret service
● Can also reduce read-load on the secret service
● Make sure the cache never writes plaintext to disk
○ Or swap, or core dump, etc.
● May need to perform access control check on the client
○ Unless security boundary ~= instance boundary
Secret Servicelog
Client
TLS
✅
✅
CREATE
READ
UPDATE
DELETE
LIST
Admin Interface
✅
✅
TLS
PUT_POLICY
Master Key
Storage
cache
Secret
Store
Some existing tools
Vault
● Client/Server system for secret management
● Pluggable backend for secret storage (disk or Consul)
● Uses secret splitting (quorum system) to protect master key(s)
● Symmetric tokens or TLS certs for authentication
● HCL (Hashicorp Config Language -- JSON-like language) used for writing
authorization policy
● Secret management operations available via CLI or HTTP API
● Nifty “dynamic secret” system
https://www.vaultproject.io/
Keywhiz
● Client/Server secret management system
● Uses relational DB for secret storage
● Derivation key(s) stored in memory or an HSM, data keys derived from
derivation keys using HKDF (HMAC-based key derivation -- see RFC5869)
● Client TLS certificates used to authenticate for CRUD operations
● LDAP or passwords used to authenticate for admin operations (like ACL
management)
● Group-based ACLs
● CLI, API, or sweet FUSE driver
https://square.github.io/keywhiz/
CredStash
● Lightweight Python utility for managing secrets on AWS
● Uses DynamoDB for secret store
● Uses KMS to hold master key(s)
● Uses IAM policies for access control
● Uses IAM Roles for EC2 for instance identity
● Secret management operations available via CLI, Python library, or
Puppet/Ansible modules
https://github.com/fugue/credstash
Sneaker
● Golang utility for managing secrets on AWS
● Uses S3 for secret store
● Uses KMS to hold master key(s)
● IAM and S3 ACLs for access control policy
● Operates on files, rather than values
● Secret management operations available via CLI
https://github.com/codahale/sneaker
Most of this is very new
You have to understand your Threat Model
and Trust Boundaries
Secret management should be core
infrastructure
Q & A
Slides: http://bit.ly/1kXSTaa
Further reading
● Threat modeling: https://msdn.microsoft.com/en-us/library/ff648644.aspx
● Remote attestation: https://courses.cs.washington.
edu/courses/csep590/06wi/finalprojects/bare.pdf
● KMS: https://docs.aws.amazon.com/kms/latest/developerguide/overview.html
● Signed syslog: https://tools.ietf.org/html/rfc5848
● Kernel Key Retention service: https://www.kernel.
org/doc/Documentation/security/keys.txt
● Shamir’s Secret Sharing: https://en.wikipedia.org/wiki/Shamir's_Secret_Sharing
● PKCS#11: http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.
40-os.html

More Related Content

PDF
Secret Management with Hashicorp’s Vault
AWS Germany
 
PDF
Overview of secret management solutions and architecture
Yuechuan (Mike) Chen
 
PDF
Introducing Vault
Ramit Surana
 
PDF
Introduction to Vault
Knoldus Inc.
 
PPTX
Hashicorp Vault ppt
Shrey Agarwal
 
PPTX
Vault - Secret and Key Management
Anthony Ikeda
 
PDF
Vault
dawnlua
 
PDF
Vault 101
Hazzim Anaya
 
Secret Management with Hashicorp’s Vault
AWS Germany
 
Overview of secret management solutions and architecture
Yuechuan (Mike) Chen
 
Introducing Vault
Ramit Surana
 
Introduction to Vault
Knoldus Inc.
 
Hashicorp Vault ppt
Shrey Agarwal
 
Vault - Secret and Key Management
Anthony Ikeda
 
Vault
dawnlua
 
Vault 101
Hazzim Anaya
 

What's hot (20)

PDF
HashiCorp's Vault - The Examples
Michał Czeraszkiewicz
 
PDF
Hashicorp Vault: Open Source Secrets Management at #OPEN18
Kangaroot
 
PPTX
Vault Open Source vs Enterprise v2
Stenio Ferreira
 
PDF
Neil Saunders (Beamly) - Securing your AWS Infrastructure with Hashicorp Vault
Outlyer
 
PPTX
Secret Management with Hashicorp Vault and Consul on Kubernetes
An Nguyen
 
PPTX
Hashicorp Vault Open Source vs Enterprise
Stenio Ferreira
 
PPTX
Secure your app with keycloak
Guy Marom
 
PDF
Using Vault to decouple MySQL Secrets
Derek Downey
 
PDF
Adopting HashiCorp Vault
Nicolas Corrarello
 
PPTX
Keeping a Secret with HashiCorp Vault
Mitchell Pronschinske
 
PDF
Credential store using HashiCorp Vault
Mayank Patel
 
PDF
Introduction to Globus for System Administrators
Globus
 
PDF
Introduction to Kong API Gateway
Yohann Ciurlik
 
PPT
Ssl https
Andrada Boldis
 
PPTX
API Security : Patterns and Practices
Prabath Siriwardena
 
PDF
OAuth2 and Spring Security
Orest Ivasiv
 
ODP
Kong API Gateway
Chris Mague
 
PPTX
The Rise of Secrets Management
Akeyless
 
PPTX
Ceph and Openstack in a Nutshell
Karan Singh
 
HashiCorp's Vault - The Examples
Michał Czeraszkiewicz
 
Hashicorp Vault: Open Source Secrets Management at #OPEN18
Kangaroot
 
Vault Open Source vs Enterprise v2
Stenio Ferreira
 
Neil Saunders (Beamly) - Securing your AWS Infrastructure with Hashicorp Vault
Outlyer
 
Secret Management with Hashicorp Vault and Consul on Kubernetes
An Nguyen
 
Hashicorp Vault Open Source vs Enterprise
Stenio Ferreira
 
Secure your app with keycloak
Guy Marom
 
Using Vault to decouple MySQL Secrets
Derek Downey
 
Adopting HashiCorp Vault
Nicolas Corrarello
 
Keeping a Secret with HashiCorp Vault
Mitchell Pronschinske
 
Credential store using HashiCorp Vault
Mayank Patel
 
Introduction to Globus for System Administrators
Globus
 
Introduction to Kong API Gateway
Yohann Ciurlik
 
Ssl https
Andrada Boldis
 
API Security : Patterns and Practices
Prabath Siriwardena
 
OAuth2 and Spring Security
Orest Ivasiv
 
Kong API Gateway
Chris Mague
 
The Rise of Secrets Management
Akeyless
 
Ceph and Openstack in a Nutshell
Karan Singh
 
Ad

Viewers also liked (13)

PDF
Chickens & Eggs: Managing secrets in AWS with Hashicorp Vault
Jeff Horwitz
 
PDF
ContainerDays Boston 2016: "Hiding in Plain Sight: Managing Secrets in a Cont...
DynamicInfraDays
 
ODP
Security its-more-than-just-your-database-you-should-worry-about
David Busby, CISSP
 
PPTX
The 5 Stages of Secrets Management Grief, And How to Prevail
Bryan Sterling
 
PDF
Cumulonimbus fortification-secure-your-data-in-the-cloud
David Busby, CISSP
 
ODP
Plmce mysql-101-security-basics
David Busby, CISSP
 
PDF
Vault: Beyond secret storage - Using Vault to harden your infrastructure
OpenCredo
 
PDF
Using Terraform.io (Human Talks Montpellier, Epitech, 2014/09/09)
Stephane Jourdan
 
PDF
CloudFormation vs Terraform vs Ansible
Mattias Gees
 
PDF
Secrets in Kubernetes
Jerry Jalava
 
PDF
Building infrastructure with Terraform (Google)
Radek Simko
 
PPTX
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...
Nati Shalom
 
PPTX
dome and vault
kaiwan1996
 
Chickens & Eggs: Managing secrets in AWS with Hashicorp Vault
Jeff Horwitz
 
ContainerDays Boston 2016: "Hiding in Plain Sight: Managing Secrets in a Cont...
DynamicInfraDays
 
Security its-more-than-just-your-database-you-should-worry-about
David Busby, CISSP
 
The 5 Stages of Secrets Management Grief, And How to Prevail
Bryan Sterling
 
Cumulonimbus fortification-secure-your-data-in-the-cloud
David Busby, CISSP
 
Plmce mysql-101-security-basics
David Busby, CISSP
 
Vault: Beyond secret storage - Using Vault to harden your infrastructure
OpenCredo
 
Using Terraform.io (Human Talks Montpellier, Epitech, 2014/09/09)
Stephane Jourdan
 
CloudFormation vs Terraform vs Ansible
Mattias Gees
 
Secrets in Kubernetes
Jerry Jalava
 
Building infrastructure with Terraform (Google)
Radek Simko
 
Orchestration tool roundup kubernetes vs. docker vs. heat vs. terra form vs...
Nati Shalom
 
dome and vault
kaiwan1996
 
Ad

Similar to Managing secrets at scale (20)

PDF
Secure Secret Management on a Budget: Reasoning about Scalable SM with Vault ...
Mary Racter
 
PDF
XP Days 2019: First secret delivery for modern cloud-native applications
Vlad Fedosov
 
PDF
Secure Your Encryption with HSM
Narudom Roongsiriwong, CISSP
 
PDF
Industry Best Practices for SSH Access
DevOps.com
 
PDF
Industry Best Practices For SSH - DevOps.com Webinar
Teleport
 
PPTX
Mastering Secrets Management in Rundeck
Rundeck
 
PDF
Automation Patterns for Scalable Secret Management
Mary Racter
 
PPTX
Protecting Sensitive Data (and be PCI Compliant too!)
Security Innovation
 
PDF
ContainerDays NYC 2016: "The Secure Introduction Problem: Getting Secrets Int...
DynamicInfraDays
 
PDF
Securing Sensitive IBM i Data At-Rest and In-Motion
Precisely
 
PPTX
How to Implement Snowflake Security Best Practices with Panther
Panther Labs
 
PDF
Eliminating Secret Sprawl in the Cloud with HashiCorp Vault - 07.11.2018
HashiCorp
 
PDF
Security 101: Protecting Data with Encryption, Tokenization & Anonymization
Precisely
 
PDF
cloud security lecture abcedfghigklmnopqrstucvbnm,
arfaouisalim
 
PDF
Kubernetes Clusters At Scale: Managing Hundreds Apache Pinot Kubernetes Clust...
Xiaoman DONG
 
PDF
MariaDB Security Best Practices
Federico Razzoli
 
PDF
Security practices with CFEngine: Config Management Camp 2016
Michael Clelland
 
PDF
Security_Practices_with_CFEngine-cfgcamp_2016
Nick Anderson
 
PPTX
MuleSoft_Meetup_#6_Chandigarh_April_2021
Suresh Rathore
 
PDF
Mike Allen's AWS + OWASP talk "AWS secret manager for protecting and rotating...
AWS Chicago
 
Secure Secret Management on a Budget: Reasoning about Scalable SM with Vault ...
Mary Racter
 
XP Days 2019: First secret delivery for modern cloud-native applications
Vlad Fedosov
 
Secure Your Encryption with HSM
Narudom Roongsiriwong, CISSP
 
Industry Best Practices for SSH Access
DevOps.com
 
Industry Best Practices For SSH - DevOps.com Webinar
Teleport
 
Mastering Secrets Management in Rundeck
Rundeck
 
Automation Patterns for Scalable Secret Management
Mary Racter
 
Protecting Sensitive Data (and be PCI Compliant too!)
Security Innovation
 
ContainerDays NYC 2016: "The Secure Introduction Problem: Getting Secrets Int...
DynamicInfraDays
 
Securing Sensitive IBM i Data At-Rest and In-Motion
Precisely
 
How to Implement Snowflake Security Best Practices with Panther
Panther Labs
 
Eliminating Secret Sprawl in the Cloud with HashiCorp Vault - 07.11.2018
HashiCorp
 
Security 101: Protecting Data with Encryption, Tokenization & Anonymization
Precisely
 
cloud security lecture abcedfghigklmnopqrstucvbnm,
arfaouisalim
 
Kubernetes Clusters At Scale: Managing Hundreds Apache Pinot Kubernetes Clust...
Xiaoman DONG
 
MariaDB Security Best Practices
Federico Razzoli
 
Security practices with CFEngine: Config Management Camp 2016
Michael Clelland
 
Security_Practices_with_CFEngine-cfgcamp_2016
Nick Anderson
 
MuleSoft_Meetup_#6_Chandigarh_April_2021
Suresh Rathore
 
Mike Allen's AWS + OWASP talk "AWS secret manager for protecting and rotating...
AWS Chicago
 

Recently uploaded (20)

PPTX
Presentation about variables and constant.pptx
safalsingh810
 
PDF
WatchTraderHub - Watch Dealer software with inventory management and multi-ch...
WatchDealer Pavel
 
PDF
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 
PPTX
Presentation about Database and Database Administrator
abhishekchauhan86963
 
PDF
advancepresentationskillshdhdhhdhdhdhhfhf
jasmenrojas249
 
PPTX
Visualising Data with Scatterplots in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PPTX
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
PPTX
Maximizing Revenue with Marketo Measure: A Deep Dive into Multi-Touch Attribu...
bbedford2
 
PDF
What to consider before purchasing Microsoft 365 Business Premium_PDF.pdf
Q-Advise
 
PPTX
ASSIGNMENT_1[1][1][1][1][1] (1) variables.pptx
kr2589474
 
PDF
Key Features to Look for in Arizona App Development Services
Net-Craft.com
 
PPTX
Presentation about variables and constant.pptx
kr2589474
 
PDF
Applitools Platform Pulse: What's New and What's Coming - July 2025
Applitools
 
PDF
New Download MiniTool Partition Wizard Crack Latest Version 2025
imang66g
 
PPT
Activate_Methodology_Summary presentatio
annapureddyn
 
PDF
Generating Union types w/ Static Analysis
K. Matthew Dupree
 
PPTX
TRAVEL APIs | WHITE LABEL TRAVEL API | TOP TRAVEL APIs
philipnathen82
 
PDF
MiniTool Power Data Recovery Crack New Pre Activated Version Latest 2025
imang66g
 
PDF
Adobe Illustrator Crack Full Download (Latest Version 2025) Pre-Activated
imang66g
 
PPTX
Contractor Management Platform and Software Solution for Compliance
SHEQ Network Limited
 
Presentation about variables and constant.pptx
safalsingh810
 
WatchTraderHub - Watch Dealer software with inventory management and multi-ch...
WatchDealer Pavel
 
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 
Presentation about Database and Database Administrator
abhishekchauhan86963
 
advancepresentationskillshdhdhhdhdhdhhfhf
jasmenrojas249
 
Visualising Data with Scatterplots in IBM SPSS Statistics.pptx
Version 1 Analytics
 
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
Maximizing Revenue with Marketo Measure: A Deep Dive into Multi-Touch Attribu...
bbedford2
 
What to consider before purchasing Microsoft 365 Business Premium_PDF.pdf
Q-Advise
 
ASSIGNMENT_1[1][1][1][1][1] (1) variables.pptx
kr2589474
 
Key Features to Look for in Arizona App Development Services
Net-Craft.com
 
Presentation about variables and constant.pptx
kr2589474
 
Applitools Platform Pulse: What's New and What's Coming - July 2025
Applitools
 
New Download MiniTool Partition Wizard Crack Latest Version 2025
imang66g
 
Activate_Methodology_Summary presentatio
annapureddyn
 
Generating Union types w/ Static Analysis
K. Matthew Dupree
 
TRAVEL APIs | WHITE LABEL TRAVEL API | TOP TRAVEL APIs
philipnathen82
 
MiniTool Power Data Recovery Crack New Pre Activated Version Latest 2025
imang66g
 
Adobe Illustrator Crack Full Download (Latest Version 2025) Pre-Activated
imang66g
 
Contractor Management Platform and Software Solution for Compliance
SHEQ Network Limited
 

Managing secrets at scale

  • 1. Managing Secrets at Scale Alex Schoof, Fugue - Velocity EU 2015
  • 4. We’re really bad at managing secrets
  • 5. We tend to manage secrets the same way we tell people not to manage software
  • 6. Secret management should be core infrastructure
  • 7. Lots of new secret management systems have been released in 2015
  • 8. There is no one-size-fits-all solution
  • 9. You have to understand your Threat Model and Trust Boundaries
  • 10. What are we going to talk about? ● Core principles of modern secret management ● How a modern secret management system works ● Some existing open source secret management systems
  • 12. Principle Minimal Privilege The set of principals (actors) able to perform an action on a secret should be the smallest set required.
  • 13. Implications ● We have authentication and authorization on usage of secrets ● We have enforceable access control policy for operations on secrets ● We have an audit trail to make sure we are doing it right
  • 14. Principle Secrets Expire Secrets expire for a variety of reasons: built-in expiration in protocols, third party policy, internal policy, compromise, etc.
  • 15. Implications ● Deployment of any given secret is not a one-time event ● We must be able to easily rotate secrets ● A deployment artifact should not be the authoritative source of a secret
  • 16. Secrets should never be in source control
  • 17. Corollary: Changing a secret should not require a full deployment
  • 18. Principle It should be easier to do the right thing than the wrong thing If operations on secrets require human intervention, long waits, or complex ceremony, people will do other things, like hardcode secrets
  • 19. Implications ● We need to provide easy-to-use programmatic operations on secrets ○ CRUD operations (Create, Read, Update, Delete) ○ List ○ Audit
  • 20. Principle The Weakest Link The security of a secret is only as strong as the weakest access control mechanism on the storage, transmission, or use of that secret
  • 21. Implications ● We need strong controls on every secret operation ● Secrets should NEVER be persisted in plain text ● Proper root secret storage is very important ○ Operator laptops are now part of your trust boundary for secrets they can access
  • 22. Principle Secrets must be highly available For many applications, access to secrets is a requirement for basic functionality
  • 23. Implications ● Tier-0 service ● Need good operational and deployment practices ● Be aware of circular dependencies and bootstrapping problems
  • 24. Principles of Secret Management ● Minimal Privilege ● Secrets Expire ● It should be easier to do the right thing than the wrong thing ● Weakest Link ● Secrets must be highly available
  • 25. So, we need a system that: ● Supports easy-to-use programmatic CRUD operations on secrets ● Provides an audit trail ● Protects secrets at every stage of their lifecycle ● Permits access control to be defined by policy ● Is highly available
  • 26. Building a Secret Management System
  • 27. Quick Caveat ● DON’T invent your own crypto ● DON’T implement someone else’s crypto ● Use standard libraries and battle-tested algorithms
  • 30. ID NAME VALUE 1 prod.db.password pass123$ 2 dev.db.password qC$qwf#$FQ3f44q#$ 3 prod.some-api.key foobar
  • 31. ID NAME VALUE 1 prod.db.password Ek (pass123$) 2 dev.db.password Ek (qC$qwf#$FQ3f44q#$) 3 prod.some-api.key Ek (foobar)
  • 32. How do we store the key?
  • 34. Hardware ● Hardware Security Module (HSM) ● Trusted Platform Module ● Smartcard Provide hardware key storage and usually have hardware-accelerated cryptography All use PKCS#11-style interface Can generate or import keys, can use keys, cannot export keys Generally requires a certificate or password to use
  • 35. Key Management Services ● Presents an HSM-like interface, typically over the network ● available in public cloud environments (i.e. AWS KMS) ● much less expensive than dedicated HSMs Still need some credential to access the KMS
  • 36. Or, we could not store the key...
  • 37. Quorum Systems ● Shamir’s Secret Sharing ○ Make a k-1-degree polynomial with a y-intercept of the secret value ○ Take n points from the polynomial ○ Any k of the n points can recreate the original polynomial via interpolation ● Can keep shares on smartcards, in safes, etc. ● Introduces a collusion requirement
  • 38. ● Other secret servers that are up verify that the new server is trusted, and then transfer the secret to it, directly or via secret sharing ● Need secure boot/remote attestation to do safely ● Completely hands-off, but very hard to do right Peer-to-peer induction of secret servers
  • 40. Key Wrapping ● Secure key storage is expensive ● We might want arbitrary-sized secrets ● Have one (or more) master key(s) on an HSM, or in a KMS ● For each secret in the secret-store, generate a unique data-encryption key ● encrypt the secret with the data encryption key ● encrypt the data-encryption key with the master key ● store the encrypted (wrapped) data-encryption key next to the encrypted data ● Add message authentication code (MAC) or use AES-GCM to prevent tampering and chosen-ciphertext attacks
  • 41. ID NAME VALUE DATA_KEY 1 prod.db.password Ek1 (pass123$) Em (k1) 2 dev.db.password Ek2 (qC$..Q3f44q#$) Em (k2) 3 prod.some-api.key Ek3 (foobar) Em (k3)
  • 44. Secure logging ● Append-only ● Signed logs to detect tampering ○ Signed logs are really, REALLY hard to get right ○ Use an existing secure logging implementation
  • 50. Client Authentication ● Either API key to sign requests to the secret service, or SSL client certificate ● Created at provision or launch of the instance ○ Can use this token as a root of trust for giving other tokens to the client ● Should try to use some out-of-band mechanism to verify the host ● Examples: ○ IAM Roles for EC2 ○ Chef client certificates ○ Generate CSR at boot and send to CA that can list running instances for verification ○ Keys generated in hardware
  • 51. Protecting the authentication token ● Agent-based systems ○ Can let you do cool things like FUSE drivers that use POSIX auth ● Control access to certificate or API keys using standard access control mechanisms ○ Filesystem permissions ○ Mandatory Access Control systems (SELinux, AppArmor, etc) ○ Kernel Key Retention Service
  • 54. CREATE(name, value) ● Access control check ● Log the request ● Wrap value and store in secret store ● Set any initial access control policy (i.e. set owner)
  • 55. READ(name) ● Perform access control check for name ● Log the request ● Unwrap value for name and send it back
  • 56. UPDATE(name, value) ● Access control check ● Log the request ● Wrap value, overwrite old value
  • 57. UPDATE(name, value) ● Access control check ● Log the request ● Wrap value, overwrite old value ● Generate new version of value
  • 58. In general, secrets should be versioned and immutable
  • 59. Operations with versions ● CREATE(name, value) = UPDATE(name, value, 1) ● READ(name, version=`latest`) ● UPDATE(name, value, version)
  • 60. ID NAME VERSION VALUE DATA_KEY 1 prod.db.password 1 Ek1 (pass123$) Em (k1) 2 dev.db.password 1 Ek2 (qC$..Q3f44q#$) Em (k2) 3 prod.some-api.key 1 Ek3 (foobar) Em (k3) 4 prod.db.password 2 Ek4 (b3tterPassword!) Em (k4) 5 prod.db.password 3 Ek5 (ce8hq7fq9&^Ae$) Em (k5)
  • 61. DELETE(name, value, version) ● Access control check ● Log the request ● Distinguish between actual delete and logical delete ○ Will you need to decrypt old data encrypted with a deleted key? ● Revoke asynchronous public keys
  • 62. LIST(name?, version?) ● Access control check ● Log the request ● Do a scan or prefix search
  • 63. PUT_POLICY(name, value, policy) ● This is a privilege escalation avenue ● Need to require higher-level interface ● Makes sense to use separate channel or interface ● Policy can range from complex documents to a set of flags ○ IAM policy ○ POSIX-style ACL ○ Booleans for each user
  • 65. Considerations for Interfaces and Libraries ● Make sure you don’t leak secrets outside your trust boundary ○ Logs ○ Core dumps ○ Swap ● Easy-to-use verbs help usability ○ `get_secret(“prod-password”, version=3)`
  • 67. High-Availability Secret Services ● Run in multiple Availability Zones or Data Centers ● Want secret service to be close to clients (physically and topologically) ● Data store needs to be highly available ● Need to be able to boot/induct new instances of the secret service ● Spend time hardening your secret servers!
  • 68. Secret management is Tier-0 ● Operational metrics ● Canaries ● Integration tests ● Code reviews ● ACL on commits/deployment
  • 69. Client-side caching ● Publish/Subscribe can be a useful semantic here ● Helps with network partition from the secret service ● Can also reduce read-load on the secret service ● Make sure the cache never writes plaintext to disk ○ Or swap, or core dump, etc. ● May need to perform access control check on the client ○ Unless security boundary ~= instance boundary
  • 72. Vault ● Client/Server system for secret management ● Pluggable backend for secret storage (disk or Consul) ● Uses secret splitting (quorum system) to protect master key(s) ● Symmetric tokens or TLS certs for authentication ● HCL (Hashicorp Config Language -- JSON-like language) used for writing authorization policy ● Secret management operations available via CLI or HTTP API ● Nifty “dynamic secret” system https://www.vaultproject.io/
  • 73. Keywhiz ● Client/Server secret management system ● Uses relational DB for secret storage ● Derivation key(s) stored in memory or an HSM, data keys derived from derivation keys using HKDF (HMAC-based key derivation -- see RFC5869) ● Client TLS certificates used to authenticate for CRUD operations ● LDAP or passwords used to authenticate for admin operations (like ACL management) ● Group-based ACLs ● CLI, API, or sweet FUSE driver https://square.github.io/keywhiz/
  • 74. CredStash ● Lightweight Python utility for managing secrets on AWS ● Uses DynamoDB for secret store ● Uses KMS to hold master key(s) ● Uses IAM policies for access control ● Uses IAM Roles for EC2 for instance identity ● Secret management operations available via CLI, Python library, or Puppet/Ansible modules https://github.com/fugue/credstash
  • 75. Sneaker ● Golang utility for managing secrets on AWS ● Uses S3 for secret store ● Uses KMS to hold master key(s) ● IAM and S3 ACLs for access control policy ● Operates on files, rather than values ● Secret management operations available via CLI https://github.com/codahale/sneaker
  • 76. Most of this is very new
  • 77. You have to understand your Threat Model and Trust Boundaries
  • 78. Secret management should be core infrastructure
  • 79. Q & A
  • 81. Further reading ● Threat modeling: https://msdn.microsoft.com/en-us/library/ff648644.aspx ● Remote attestation: https://courses.cs.washington. edu/courses/csep590/06wi/finalprojects/bare.pdf ● KMS: https://docs.aws.amazon.com/kms/latest/developerguide/overview.html ● Signed syslog: https://tools.ietf.org/html/rfc5848 ● Kernel Key Retention service: https://www.kernel. org/doc/Documentation/security/keys.txt ● Shamir’s Secret Sharing: https://en.wikipedia.org/wiki/Shamir's_Secret_Sharing ● PKCS#11: http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2. 40-os.html