55
Secure PostgreSQL Deployment PGDay'14 Russia St Petersburg, Russia Magnus Hagander [email protected] PRODUCTS CONSULTING APPLICATION MANAGEMENT IT OPERATIONS SUPPORT TRAINING

PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Embed Size (px)

DESCRIPTION

Доклад был представлен на официальной российской конференции PG Day'14 Russia, посвященной вопросам разработки и эксплуатации PostgreSQL. PostgreSQL supports several options for securing communications when deployed outside of the typical webserver/database combination, or in a high security environments. This talk will go into some details about the features that make this possible. The main areas discussed are: Securing the PostgreSQL infrastructure and runtime environment. Securing the channel between client and server using SSL, including an overview of the threats and how to secure against them. Securing the login process with methods including LDAP, Kerberos or SSL certificates.

Citation preview

Page 1: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Secure PostgreSQL Deployment

PGDay'14 RussiaSt Petersburg, Russia

Magnus [email protected]

PRODUCTS • CONSULTING • APPLICATION MANAGEMENT • IT OPERATIONS • SUPPORT • TRAINING

Page 2: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Magnus Hagander•PostgreSQL

•Core Team member•Committer•PostgreSQL Europe

•Redpill Linpro•Infrastructure services•Principal database consultant

Page 3: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Security

Page 4: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Security•It's hard

Page 5: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Security•It's hard

•No, really!

Page 6: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Security•There is no one solution

Page 7: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Security•There is no one requirement

Page 8: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Security•PostgreSQL provides a toolbox•You don't need everything•Maybe you don't need anything...

Page 9: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Secure PostgreSQLDeployment

•Environment•Communication•Authentication

Page 10: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Secure PostgreSQLApplications

•Authorization/Permissions•Roles•Security barrier views•Security definer functions•RLS•etc...

Page 11: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Secure PostgreSQLEnvironment

•Only as secure as the environment•If someone owns the OS, they own the db

•Owns the server -> owns the OS•Owns the datacenter -> owns the server

•Defined trust levels!•e.g. outsourcing/cloud vendors

Page 12: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Operating system•Pick your operating system

•Something you know•Regardless of PostgreSQL

•Secure "reasonably"•No other local users!

Page 13: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Operating system•Use standard installers

•Don't roll your own•Usually adapted for OS•Consistent security!

Page 14: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Operating system•Keep updated•Both operating system and PostgreSQL•yum/apt makes it easier

•But you have to use it!•Monitor!

Page 15: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Operating system•Encrypted disks?

•Performance/reliability implications•Key management?

•What happens on restart?

Page 16: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Multi instance•Different security domains?•Different OS user

•Sometimes not well packaged•Virtualization/containers?

Page 17: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Securing communications

Page 18: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Securing communications•Do you need it?

•Attack vectors?•Overhead!

Page 19: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Securing communications•(physical)•VPN•ipsec•SSL

Page 20: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

SSL in PostgreSQL•OpenSSL only (sorry)•Certificate/key

•Like any other service•Disabled by default on server

•Enabled on client!!

Page 21: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Certificates•Server certificate mandatory•Does not need public ca

•Probably should not use public ca•"Snakeoil" works

•But no MITM protection!•Use custom (dedicated?) CA!

Page 22: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Server-side SSL•Set ssl=on•server.key/server.crt in data directory

•Check permissions!•Restart, done.

Page 23: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

SSL negotiation•SSL negotiated between client and server•Server provides•Client decides•Controlled by sslmode parameter

Page 24: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

SSL negotiation•sslmode default is prefer

•This is stupid....•No guarantees

Page 25: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

SSL negotiation

Page 26: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

SSL enforcement•Client decides??!!?!?!

•Huh??•Client decides, but server can reject•Using hostssl in pg_hba.conf

Page 27: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

SSL enforcement..hostssl xxx yyy .....

•Always use!

Page 28: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Client certificates•Not required by default•Can be requested by server

•clientcert=1 in pg_hba.conf..hostssl xxx yyy zzz abc clientcert=1..

Page 29: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Client certificates•Provide in PEM format file

•Or through OpenSSL compatible engine•Validated against root CA on server

•PostgreSQL specific root•By default just needs to exist

Page 30: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Authentication

Page 31: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Authentication•Make sure it's the correct user•And that they can prove it

Page 32: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

A step back•Authorization and roles•I know I said I wouldn't...

Page 33: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Superuser•Never use superuser•Disables all security

•Allows arbitrary code execution!•Allows replacement of configuration!

Page 34: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Authentication•PostgreSQL supports many methods

•Host Based Authentication•Combined in the same installation!•Don't just "dumb down"

Page 35: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

pg_hba.conf•Top-bottom file•Filter by:

•Connection type•User•Database•Connection source

•"Firewall" and authentication choice

Page 36: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

pg_hba.conf•Order by most specificlocal all all peerhost all all 127.0.0.1/32 md5hostnossl webdb webuser 10.1.1.0/30 md5hostssl all +admin 192.168.0.0/24 gss

•Implicit reject at end

Page 37: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Authentication methods•Many choices

•Internal•OS integrated•Fully external

•And some really bad ones...

Page 38: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

trust•Trust everybody everywhere

•Why would anybody claim they're someone else?•"Turn off all security"•Any use case? Maybe one...

Page 39: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

trust•Use it? Change it!

Page 40: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

peer•Only over Unix sockets

•Sorry Windows, sorry Java•Local connections only•Asks OS kernel

•Trustworthy!

Page 41: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

md5•Simplest one?•Username/password•Double MD5-hash•Do not use "password"

Page 42: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

ldap•Looks like password to client

•Regular prompt•Passed over to LDAP server•No special support needed

•Construct URLs different ways•Prefix+suffix•Search+bind

Page 43: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

ldap•Cleartext!

•Use with ldaptls=1•Use with hostssl

•Password policies from LDAP server•Only authentication!

Page 44: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

gss/sspi•Kerberos based

•Including Active Directory•Single Sign-On

•No password prompt!•All Kerberos supported auth methods

•Secure tickets•"krb5" deprecated/removed

Page 45: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

radius•Looks like password to client

•Use with hostssl!•Shared-secret encryption to Radius server•Common for OTP solutions

Page 46: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

cert•Map client certificate to login

•Uses CN attribute•Any certificate "engine" supported by OpenSSL

•Normally uses PEM encoded files

Page 47: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

User name mapping•External systems with different usernames

•Peer•gss/sspi•cert

•Allow static or pattern mapping

Page 48: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

User name mapping•pg_hba.conflocal all all peer map=localhostssl all all 0.0.0.0/0 cert map=cert

•pg_ident.conflocal root postgres..cert /^cn=(.*)$/ \1

Page 49: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Secure PostgreSQLDeployment

Page 50: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Secure PostgreSQLDeployment

•Determine your requirements•Determine your trust levels•Determine your attach surface•Determine your threat vectors

Page 51: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Secure PostgreSQLDeployment

•Deploy correct countermeasures•"Checkbox featuring" is useless

•Lock all doors•E.g. why encrypt if disks are insecure•Why require smartcards if data is cleartext

Page 52: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Layered security•A firewall alone doesn't protect you•Doesn't mean you shouldn't have one

Page 53: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Too simple to mention•Never use trust

•(not even in testing)•Use pg_hba.conf

•Mix auth methods•Restrict IP addresses

•Go SSL if you have to

Page 54: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Iterative process•Re-evaluate•Requirements and landscape are dynamic!

Page 55: PG Day'14 Russia, Secure PostgreSQL Deployment, Magnus Hagander

Thank you!Magnus Hagander

[email protected]@magnushagander