54
Copyright©2017 NTT Corp. All Rights Reserved. PostgreSQL Security. How Do We Think? Masanori Oyama @ooyamams1987 NTT OSS Center

PostgreSQL Security. How Do We Think?

Embed Size (px)

Citation preview

Page 1: PostgreSQL Security. How Do We Think?

Copyright©2017 NTT Corp. All Rights Reserved.

PostgreSQL Security. How Do We Think?Masanori Oyama @ooyamams1987NTT OSS Center

 

Page 2: PostgreSQL Security. How Do We Think?

2Copyright©2017 NTT Corp. All Rights Reserved.

Who am I?

Masanori Oyama / 大山 真実twitter @ooyamams1987

Work– PostgreSQL engineering support and consultation.

Recently focus to database security.– Extensive quality verification of PostgreSQL releases.

Latest work: Parallel query evaluation.pgconf.asia “What’s new in 9.6, by PostgreSQL contributor” by Masahiko Sawadahttps://www.slideshare.net/masahikosawada98/whats-new-in-96-by-postgresql-contributor

Prev work– Hadoop engineering support and consultation at NTT DATA Inc.

I had managed a big Hadoop cluster (1000 node, 200PB!).

Page 3: PostgreSQL Security. How Do We Think?

3Copyright©2017 NTT Corp. All Rights Reserved.

About NTT• Who we are?

– NTT ( Nippon Telegraph and Telephone Corporation)– National flagship carrier in Japan

• What NTT OSS Center is doing ?– Promotes the adoption of OSS by the group companies

• Total support – support desk, Introduction support, Product maintenance

• R&D– developing OSS and related tools with the communities

– Deals with about 60 OSS products.

NTT groupsubsidiary

about 900 companies

NTTNTT OSS Center

Page 4: PostgreSQL Security. How Do We Think?

4Copyright©2017 NTT Corp. All Rights Reserved.

Agenda1. Introduction2. Database Security Requirements3. How to Apply to PostgreSQL

Page 5: PostgreSQL Security. How Do We Think?

5Copyright©2017 NTT Corp. All Rights Reserved.

1. Introduction

Page 6: PostgreSQL Security. How Do We Think?

6Copyright©2017 NTT Corp. All Rights Reserved.

The circumstances in Japan• Japanese government aims to implement an action plan

for strengthening the security of credit card transactions by 2020. Make business operators holding such information conform to

the PCI DSS. Multi-layered measures are introduced by retailers dealing with

EC transactions.

• Some our projects try to conform to PCI DSS.

ref: http://www.meti.go.jp/english/press/2016/0223_02.html

Page 7: PostgreSQL Security. How Do We Think?

7Copyright©2017 NTT Corp. All Rights Reserved.

What is PCI DSS?• PCI DSS (Payment Card Industry Data Security Standard)

is credit card industry security standard.

ref: https://www.pcisecuritystandards.org/pci_security/

Page 8: PostgreSQL Security. How Do We Think?

8Copyright©2017 NTT Corp. All Rights Reserved.

What is PCI DSS?• PCI DSS (Payment Card Industry Data Security Standard)

is credit card industry security standard.

ref: https://www.pcisecuritystandards.org/documents/PCI_DSS_v3-2.pdf

Page 9: PostgreSQL Security. How Do We Think?

9Copyright©2017 NTT Corp. All Rights Reserved.

2. Database Security Requirements

Page 10: PostgreSQL Security. How Do We Think?

10Copyright©2017 NTT Corp. All Rights Reserved.

The requirements of PCI DSS related to database

Keep your Database Secure.Data Encryption and Key Management.

User Identification, Authentication, Authorization, Identity management.

Audit.

Page 11: PostgreSQL Security. How Do We Think?

11Copyright©2017 NTT Corp. All Rights Reserved.

The requirements of PCI DSS related to database

Keep your Database Secure.Data Encryption and Key Management.

User Identification, Authentication, Authorization, Identity management.

Audit.

Keep your Database Secure.

Page 12: PostgreSQL Security. How Do We Think?

12Copyright©2017 NTT Corp. All Rights Reserved.

i. Keep your Database SecurePCI DSS Requirements 2 & 6 say

• Don’t use a default user account and password.• Don’t use unnecessary modules, functions, protocols.• Admin control accesses have to be encrypted.• Use a latest software version.

These are not difficult. Traditional (or basic) security practices are important!

Page 13: PostgreSQL Security. How Do We Think?

13Copyright©2017 NTT Corp. All Rights Reserved.

The requirements of PCI DSS related to database

Keep your Database Secure.Data Encryption and Key Management.

User Identification, Authentication, Authorization, Identity management.

Audit.

Data Encryption and Key Management.

Page 14: PostgreSQL Security. How Do We Think?

14Copyright©2017 NTT Corp. All Rights Reserved.

ii. Encryption and Key ManagementPCI DSS Requirement 3 says

• PAN (Primary account number) must be unreadable or encrypted.

unreadable

strong encryption

• One-way hashesaf1bcec2664906a9f587fb

• TruncationXXXX XXXX XXXX 1234

• AES, TDES/TDEA, RSA(see PCI DSS Glossary “Strong Cryptography”)

• With key-management• Only valid user can decrypt

reversible

irreversible

PAN

Page 15: PostgreSQL Security. How Do We Think?

15Copyright©2017 NTT Corp. All Rights Reserved.

ii. Encryption and Key ManagementEncryption key-management Outline• Two-tier encryption

Data-encrypting key Key-encrypting keys

… … …… … …… … …

encryptdecrypt

encryptdecrypt

Database Server

Key-Store Server

• Replace in a certain period

• Store separately • Restricted access• Stored in the fewest locations • Accesses to key are Audited

see Requirements 3.5, 3.6

Page 16: PostgreSQL Security. How Do We Think?

16Copyright©2017 NTT Corp. All Rights Reserved.

The requirements of PCI DSS related to database

Keep your Database Secure.Data Encryption and Key Management.

User Identification, Authentication, Authorization, Identity management.

User Identification, Authentication, Authorization, Identity management.

Page 17: PostgreSQL Security. How Do We Think?

17Copyright©2017 NTT Corp. All Rights Reserved.

iii. Identification, Authentication, Authorization, Identity management

PCI DSS requirements 7 & 8 say

AuthorizationProvide just the minimum

necessary authority for application user,

database administrators,database operators and so on.

AuthenticationPassword

(some password policy. See Requirement 8.2)Token deviceBiometrics

IdentificationAll users are identified

by user ID.Identity management

(User ID life cycle control) Delete, Lock out user ID, Disconnect idle connection

(some management policy. See Requirement 8.1)

Page 18: PostgreSQL Security. How Do We Think?

18Copyright©2017 NTT Corp. All Rights Reserved.

The requirements of PCI DSS related to database

Keep your Database Secure.Data Encryption and Key Management.

User Identification, Authentication, Authorization, Identity management.

Audit.

Page 19: PostgreSQL Security. How Do We Think?

19Copyright©2017 NTT Corp. All Rights Reserved.

iv. AuditPCI DSS Requirement 10 says• These events must be audited.

# Requirement 10.2.1 Access to PANs 10.2.2 All operations of administrators10.2.3 Access to audit logs10.2.4 Invalid access10.2.5 Operation about Identification, Authentication (DCL)10.2.6 Change audit log setting and Stop to audit10.2.7 DDL

Page 20: PostgreSQL Security. How Do We Think?

20Copyright©2017 NTT Corp. All Rights Reserved.

iv. AuditPCI DSS Requirement 10 says• Audit logs must output following information.

# Requirement 10.3.1 User ID10.3.2 Event category (ex. READ, WRITE)10.3.3 Date and time10.3.4 Success or Failure10.3.5 Client information (ex. IP address)10.3.6 Object name, Object id (ex. Table name, Column name)

• 10.5 Audit logs also must be protected.

Page 21: PostgreSQL Security. How Do We Think?

21Copyright©2017 NTT Corp. All Rights Reserved.

3. How to Apply to PostgreSQLi. Keep your Database Secure.ii. Data Encryption and Key Management.iii. User Identification, Authentication,

Authorization, Identity management.iv. Audit.

Page 22: PostgreSQL Security. How Do We Think?

22Copyright©2017 NTT Corp. All Rights Reserved.

i. Keep your Database Secure

• Don’t use postgres(default) account.• Change 5432(default) port.• Use openSSL connection with psql.

See manual.https://www.postgresql.org/docs/current/static/runtime-config-connection.html

See Bruce Momjian’s Blog.http://momjian.us/main/blogs/pgblog/2017.html#January_9_2017

• Restrict unnecessary access by pg_hba.conf See manual.

https://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html• Update binaries to latest minor version.

Again,Traditional security practices are important!

To Do

Page 23: PostgreSQL Security. How Do We Think?

23Copyright©2017 NTT Corp. All Rights Reserved.

ii. Data Encryption and Key Management

pgcrypto is a good encryption module. see manual. https://www.postgresql.org/docs/current/static/pgcrypto.html

• Manage two-tier encryption key by yourself An application development is hard!

To Do• Use pgcrypto

Difficulty to apply PCI DSS to PostgreSQL.

PostgreSQL needs TDE (Transparent Data Encryption) with KMS (Key Management Service). Should we start discussion in PostgreSQL community?

It seems to me that ...You should consult the PostgreSQL vendors.

Page 24: PostgreSQL Security. How Do We Think?

24Copyright©2017 NTT Corp. All Rights Reserved.

iii. User Identification, Authentication, Authorization, Identity management

• Don’t use superuser!• Apply PCI DSS password policies.• Manage each user id.

For details, next slides!

To Do

Page 25: PostgreSQL Security. How Do We Think?

25Copyright©2017 NTT Corp. All Rights Reserved.

• Don’t use superuser!Superuser can do everything!All user id must be restricted to least privileges necessary to perform job responsibilities. see manual https://www.postgresql.org/docs/current/static/ddl-priv.html https://www.postgresql.org/docs/current/static/ddl-rowsecurity.html

Superuser must be audited fully.

iii. User Identification, Authentication, Authorization, Identity management

To Do

Difficulties to apply PCI DSS to PostgreSQL.Some useful SQLs and functions need superuser privilege.For example,

CREATE/ALTER EVENT TRIGGER CREATE FOREIGN DATA WRAPPER CREATE TABLESPACE pg_reload_conf(), pg_rotate_logfile(), pg_switch_xlog()

It seems to me that ...

Page 26: PostgreSQL Security. How Do We Think?

26Copyright©2017 NTT Corp. All Rights Reserved.

• Apply password policy Use contrib/passwordchk.

A minimum length of 8 characters. Not contain user/role name. Mix of letter and non-letter.

see https://www.postgresql.org/docs/current/static/passwordcheck.html Use “CREATE ROLE ... WITH VALID UNTIL ...;”

The password is valid until the end of a specific date.see https://www.postgresql.org/docs/current/static/sql-createrole.html

We should use a directory service.

iii. User Identification, Authentication, Authorization, Identity management

To Do

Difficulties to apply PCI DSS to PostgreSQL.• These password policies cannot be implemented in PostgreSQL.

• 8.2.5 Do not allow a new password that is the same as any of the last 4 passwords used.• 8.2.6 Set passwords for first-time use and change immediately after the first use.

It seems to me that ...

Page 27: PostgreSQL Security. How Do We Think?

27Copyright©2017 NTT Corp. All Rights Reserved.

• Manage each user id. Delete or Lockout user id according to PCI DSS requirements.

Delete: DROP ROLE ...; see manual https://www.postgresql.org/docs/current/static/sql-droprole.html

Lockout: ALTER ROLE ... WITH NOLOGIN; see manual https://www.postgresql.org/docs/current/static/sql-droprole.html

iii. User Identification, Authentication, Authorization, Identity management

To Do

• Use LDAP authentication.see https://www.postgresql.org/docs/current/static/auth-methods.html

Difficulties to apply PCI DSS to PostgreSQL.• To perform the following requirement is hard only in PostgreSQL.

8.1.4 Inactive user accounts within 90 days. 8.1.6 Repeated access attempts after not more than six attempts. 8.1.8 Require the user to re-authenticate If a session has been idle

for more than 15 minutes.

We should use a directory service. It seems to me that ...

Page 28: PostgreSQL Security. How Do We Think?

28Copyright©2017 NTT Corp. All Rights Reserved.

Apache DS and Apache Directory studio• Apache DS is directory service software.• Apache Directory studio is GUI console of directory service.

https://directory.apache.org/studio/

http://directory.apache.org/apacheds/

iii. User Identification, Authentication, Authorization, Identity management

Page 29: PostgreSQL Security. How Do We Think?

29Copyright©2017 NTT Corp. All Rights Reserved.

Apache DS and Apache Directory studio• Rich password policy configuration.• Rich lock out policy configuration.• Authentication Log

see official document.http://directory.apache.org/apacheds/https://directory.apache.org/studio/

iii. User Identification, Authentication, Authorization, Identity management

Page 30: PostgreSQL Security. How Do We Think?

30Copyright©2017 NTT Corp. All Rights Reserved.

• Apache DS can not create user accounts in PostgreSQL Create a PostgreSQL user accounts then register them to Apache

DS.

• Apache DS and Apache Directory studio can not control and edit authorization of PostgreSQL. You need to login to PostgreSQL to edit authorization of

PostgreSQL.

iii. User Identification, Authentication, Authorization, Identity management

Difficulties to apply PCI DSS to PostgreSQL with Apache DS.

Page 31: PostgreSQL Security. How Do We Think?

31Copyright©2017 NTT Corp. All Rights Reserved.

iv. Audit

• Use PostgreSQL server log. To Do

PostgreSQL server log can output the following events.see manual https://www.postgresql.org/docs/current/static/runtime-config-logging.html

# Requirement postgresql.conf parameters10.2.1 Access to PANs log_statement = all

10.2.2 All operations of administrators log_statement = all

10.2.3 Access to audit logs #Use OS module (ex. auditd) 10.2.4 Invalid access log_connection,

log_disconnection

10.2.5 Operation about Identification, Authentication (DCL)

log_statement = all

10.2.6 Change audit log setting and Stop to audit

log_statement = all#And use OS module

10.2.7 DDL log_statement = all

see https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/chap-system_auditing.html

Page 32: PostgreSQL Security. How Do We Think?

32Copyright©2017 NTT Corp. All Rights Reserved.

iv. Audit

# Requirement postgresql.conf parameters10.3.1 User ID log_line_prefix10.3.2 Event category (ex. READ, WRITE) log_line_prefix10.3.3 Date and time log_line_prefix10.3.4 Success or Failure log_line_prefix10.3.5 Client information (ex. IP address) log_line_prefix10.3.6 Object name, Object id (ex. Table

name)No such configuration params...

• Use Syslog to send another server and use auditd.

• Use PostgreSQL server log. To Do

PostgreSQL server log can output the following information.see manual https://www.postgresql.org/docs/current/static/runtime-config-logging.html

Page 33: PostgreSQL Security. How Do We Think?

33Copyright©2017 NTT Corp. All Rights Reserved.

iv. Audit

• Object name do not output. Some SQLs are difficult to audit.

For example, “DO” testdb=# DO $$BEGIN EXECUTE 'SELECT * FROM import' || 'ant_table';END $$;

server log output (log_statement=all)LOG: statement: DO $$ BEGIN EXECUTE 'SELECT * FROM import' || 'ant_table'; END $$;

To search SQL accessing to "important_table" is hard.

Difficulties to apply PCI DSS to PostgreSQL.

• Log size is big. It does not have useful log filters.

Page 34: PostgreSQL Security. How Do We Think?

34Copyright©2017 NTT Corp. All Rights Reserved.

iv. Audit Difficulties to apply PCI DSS to PostgreSQL.• Superuser can change server log settings easily.

Hard to confirm to Requirement 10.2.2Requirement 10.2.2All operations of administrators must be audited

• Can not divide a log for auditing into a log for operating. Hard to confirm to Requirement 10.5

Requirement 10.5Audit logs also must be protected.

server log

information for operating

information for auditing auditeroperator

Page 35: PostgreSQL Security. How Do We Think?

35Copyright©2017 NTT Corp. All Rights Reserved.

iv. Audit

pgaudit is developed by 2ndquadrant and Crunchy Data.

https://github.com/pgaudit/pgaudit

Install pgaudit andset shared_preload_libraries = ‘pgaudit‘ in postgresql.conf.

We should use pgaudit! It seems to me that ...

Page 36: PostgreSQL Security. How Do We Think?

36Copyright©2017 NTT Corp. All Rights Reserved.

iv. Audit• pgaudit can reduce audit log size.

Set class name to pgaudit.log parameter in postgresql.conf.pgaudit.log = class name, ...

class name outputted SQL READ SELECT, VALUES, COPY etc.WRITE INSERT, UPDATE, DELETE, TRUNCATE, COPY etc.FUNCTION DO etc.ROLE CREATE|ALTER|DROP USER|ROLE|GROUP, GRANT, REVOKE etc.DDL CREATE ... , ALTER ... , DROP ... , REINDEX, SELECT INTO etc.MISC VACUUM, ANALYZE, BEGIN, COMMIT, ROLLBACK, SET, LOCK etc.ALL ALL SQLs

pgaudit output only SQLs belonging to the class.

Page 37: PostgreSQL Security. How Do We Think?

37Copyright©2017 NTT Corp. All Rights Reserved.

iv. AuditFor example,postgresql.conf shared_preload_libraries = pgaudit pgaudit.log = 'WRITE, DDL, MISC’

testdb=# BEGIN; testdb=# SELECT * FROM pgbench_accounts LIMIT 1; testdb=# UPDATE pgbench_accounts SET bid = '4' WHERE aid = '1'; testdb=# COMMIT;

LOG: AUDIT: SESSION,1,1,MISC,BEGIN,,,BEGIN;,<not logged> LOG: AUDIT: SESSION,2,1,WRITE,UPDATE,,, UPDATE pgbench_accounts SET bid = '4' WHERE aid = '1';,<not logged> LOG: AUDIT: SESSION,3,1,MISC,COMMIT,,,COMMIT;,<not logged>

SQL

Audit log

-> “SELECT” does not output. The log size is suppressed to a minimum.

Page 38: PostgreSQL Security. How Do We Think?

38Copyright©2017 NTT Corp. All Rights Reserved.

iv. Audit• pgaudit can output object name.

postgresql.conf shared_preload_libraries = pgaudit pgaudit.log = 'READ'

testdb=# DO $$ BEGIN EXECUTE 'SELECT * FROM import' || 'ant_table'; END $$;

LOG: AUDIT: SESSION,2,1,READ,SELECT,TABLE, public.important_table, SELECT * FROM important_table,<none>

SQL

Audit log

-> Table name is outputted with schema name.To search SQL accessing to "important_table" is easy!

Page 39: PostgreSQL Security. How Do We Think?

39Copyright©2017 NTT Corp. All Rights Reserved.

iv. Auditpgaudit is good tool!

However,pgaudit can not cover the following two PCI DSS requirements yet.

• Superuser can change pgaudit settings easily. Hard to confirm to Requirement 10.2.2

• Can not divide a server log into a pgaudit log. Hard to confirm to Requirement 10.5

Difficulties to apply PCI DSS to PostgreSQL with pgaudit.

• Superuser must not be able to change pgaudit settings easily!• Divide a server log into a pgaudit log.

It seems to me that ...

Page 40: PostgreSQL Security. How Do We Think?

40Copyright©2017 NTT Corp. All Rights Reserved.

NTT pgaudit! Why not?So we forked the pgaudit and add some new features.

NTT OSS Center pgaudit (called NTT pgaudit today)https://github.com/ossc-db/pgaudit/tree/refactored

NTT pgaudit enhancement points. • Restarting PostgreSQL is needed to change audit settings.

NTT pgaudit config file is divided from postgresql.conf

• Divide a server log into an audit log. Audit logs is sent to log management server by Syslog.

• Rich Log filter. Minimum log size.

↑refactored branch is latest.

Page 41: PostgreSQL Security. How Do We Think?

41Copyright©2017 NTT Corp. All Rights Reserved.

NTT pgauditNTT pgaudit configuration file consists of three sections.

[output]Logger settings you use server log or syslog.

[option]Some misc. configurations.

[rule]Filter rules.

For description, please read the README!

Page 42: PostgreSQL Security. How Do We Think?

42Copyright©2017 NTT Corp. All Rights Reserved.

NTT pgaudit• Restarting PostgreSQL is needed to change

audit settings.

$ vi $PGDATA/postgresql.confshared_preload_libraries = 'pgaudit'pgaudit.config_file = '/path/to/pgaudit.conf'

NTT pgaudit has only two parameters in postgresql.conf

Other pgaduit parameters are in pgaudit.conf.

# login by auditor$ vim /audit_conf/pgaudit.conf

# some settings...[output]logger= 'serverlog‘...$ chmod +r /path/to/pgaudit.conf$ ll /path/to/pgaudit.conf-rw-rw-r--. 1 auditer auditer 384 11 月 25 23:33 /path/to/pgaudit.conf

Only the auditor had better be able to edit pgaudit.conf

-> Superuser can not edit pgaudit.conf!

Page 43: PostgreSQL Security. How Do We Think?

43Copyright©2017 NTT Corp. All Rights Reserved.

NTT pgaudit• Divide a server log into an audit log.

NTT pgaudit can export to serverlog or syslog.Parameters in [output] section

Parameter Description Remarks

logger Logger you use; serverlog or syslog -

pathlog Specifies the socket to which syslog listens Parameter for syslog

facility See man 3 syslog for value Parameter for syslog

priority See man 3 syslog for value Parameter for syslog

ident See man 3 syslog for value Parameter for syslog

option See man 3 syslog for value Parameter for syslog

server loginformation for operating

information for auditing

auditeroperator

NTT pgaudit log

Page 44: PostgreSQL Security. How Do We Think?

44Copyright©2017 NTT Corp. All Rights Reserved.

NTT pgaudit• Rich Log filter.NTT pgaudit has these filters. Parameters in [rule] section.NTT pgaudit can have several [rule] sections. Field name Description Sample setting

timestamp Timestamp range timestamp = '09:00:00 - 10:00:00, 18:00:00 - 18:30:00

database Database name datebase = 'prodcut_db'audit_role Role name audit_role ='superuser1'

classType of operation. Possible values are, BACKUP, CONNECT, DDL, ERROR, FUNCTION, MISC, READ, ROLE, WRITE, SYSTEM

class = 'READ, WRITE'

command_tag command_tag = 'CREATE, SELECT'

object_typeType of object. Possible values are,TABLE, INDEX, SEQUENCE, TOAST_VALUE, VIEW, MATERIALIZED_VIEW, COMPOSITE_TYPE, FOREIGN_TABLE, FUNCTION

object_type = 'TABLE, INDEX'

object_name Qualified object name object_name = 'myschema.hoge_table'

application_name Connecting application name application_name = 'myapp'remote_host Host name remote_host = 'ap_server'

Page 45: PostgreSQL Security. How Do We Think?

45Copyright©2017 NTT Corp. All Rights Reserved.

Example use case

AP user

Auditor

OLTPAP

PostgreSQL primary

BI User

Analysis

APPostgreSQL secondary

Audit log managemen

t server

Administration Task

Audit task

Replication

Audit All SQL

DB admin

OperationTask

DB ops

pgauditsyslog

pgauditsyslog

Fluentd

Fluentd

• Each audit logs are also audited by auditd

Audit READ and WRITE SQL

to important table

Audit all READ SQL to ALL table

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/chap-system_auditing.html

Audit All SQL

Page 46: PostgreSQL Security. How Do We Think?

46Copyright©2017 NTT Corp. All Rights Reserved.

Wrap up.PostgreSQL can conform to PCI DSS by the following things.

• Set basic configurations.• Use pgcrypto.• Use a directory service.• Use NTT pgaudit.

Should be better.• TDE (Transparent Data Encryption).• KMS (Key Management Service).• Operation without superuser privilege.

Page 47: PostgreSQL Security. How Do We Think?

47Copyright©2017 NTT Corp. All Rights Reserved.

END

Page 48: PostgreSQL Security. How Do We Think?

48Copyright©2017 NTT Corp. All Rights Reserved.

log_statement=none log_statement=all (log size 14MB/s)

ntt_puaudit (no output)

0

10000

20000

30000

40000

50000

60000

70000

80000

90000

pgbench(read only, scale 100) TPS

NTT pgaudit

Performance evaluation.

13%down 6%down

TPS If you define targets of the audit event, the performance degradation is suppressed to a minimum.

Please try it! And provide us the feedback!

Page 49: PostgreSQL Security. How Do We Think?

49Copyright©2017 NTT Corp. All Rights Reserved.

Disk encryption• Disk encryption is allowed by PCI

DSS, But how to apply to PostgreSQL?

Requirement 3.4.1If disk encryption is used (rather than file- or column-level database encryption), logical access must be managed separately and independently of native operating system authentication and access control mechanisms (for example, by not using local user account databases or general network login credentials). Decryption keys must not be associated with user accounts.

Note: This requirement applies in addition to all other PCI DSS encryption and key-management requirements.

Page 50: PostgreSQL Security. How Do We Think?

50Copyright©2017 NTT Corp. All Rights Reserved.

NTT pgauditGet Started!

• Install PostgreSQL$ # sudo yum install readline readline-devel zlib zlib-devel bison bison-devel flex flex-devel$ git cloene https://github.com/postgres/postgres.git$ cd postgres$ ./configure --enable-debug --prefix=/usr/local/pgsql_latest/ --with-pgport=5555$ make -j 4$ sudo make install

$ cd postgres/contrib$ git clone https://github.com/ossc-db/pgaudit.git$ cd pgaudit/$ git checkout -b refactored remotes/origin/refactored$ make$ sudo make install

• Install NTT pgaudit

Page 51: PostgreSQL Security. How Do We Think?

51Copyright©2017 NTT Corp. All Rights Reserved.

NTT pgauditGet Started!

• Configuration postgresql.conf

$ vim /home/masanori/data/postgresql.confshared_preload_libraries = 'pgaudit'log_connections = onlog_disconnections = onlog_replication_commands = onpgaudit.config_file = '/audit_conf/pgaudit.conf'

DB admin creates and edits postgresql.conf

Page 52: PostgreSQL Security. How Do We Think?

52Copyright©2017 NTT Corp. All Rights Reserved.

NTT pgauditGet Started!

• Configuration pgaudit.conf$ vim /audit_conf/pgaudit.conf

# Where to log (e.g. log to serverlog).[output]logger= 'serverlog'

# Behavior of the PGAUDIT (e.g. setting log_catalog)[option]log_catalog = true

# Selection conditions of the Session-Audit-Logging.[rule]format = 'CONNECTION: %d,%u,"%connection_message"'class = 'CONNECT'[rule]format = 'DML: %d,%u,%class,%command_tag,"%object_name","%command_text"'class = 'READ,WRITE‘

$ chmod +r /audit_conf/pgaudit.conf$ ll /audit_conf/pgaudit.conf-rw-rw-r--. 1 auditer auditer 384 11 月 25 23:33 /audit_conf/pgaudit.conf

Auditor creates and edits pgaudit.conf

-> DB admin can not edit pgaudit.conf!

Page 53: PostgreSQL Security. How Do We Think?

53Copyright©2017 NTT Corp. All Rights Reserved.

NTT pgauditGet Started!

• Start PostgreSQL

$ /usr/local/pgsql_latest/bin/pg_ctl start -D /home/masanori/datawaiting for server to start....2016-11-25 23:36:53.469 JST [21880] LOG: log_catalog = 12016-11-25 23:36:53.469 JST [21880] LOG: log_level_string = (null)2016-11-25 23:36:53.469 JST [21880] LOG: log_level = 152016-11-25 23:36:53.469 JST [21880] LOG: log_parameter = 02016-11-25 23:36:53.469 JST [21880] LOG: log_statement_once = 02016-11-25 23:36:53.469 JST [21880] LOG: log_for_test = 02016-11-25 23:36:53.469 JST [21880] LOG: role =... skip ...2016-11-25 23:36:53.469 JST [21880] LOG: Rule 02016-11-25 23:36:53.469 JST [21880] LOG: BMP class = 22016-11-25 23:36:53.469 JST [21880] LOG: Rule 12016-11-25 23:36:53.469 JST [21880] LOG: BMP class = 3202016-11-25 23:36:53.469 JST [21880] LOG: pgaudit extension initialized2016-11-25 23:36:53.489 JST [21881] LOG: database system was shut down at 2016-11-25 23:11:15 JST2016-11-25 23:36:53.489 JST [21881] LOG: MultiXact member wraparound protections are now enabled2016-11-25 23:36:53.492 JST [21880] LOG: database system is ready to accept connections2016-11-25 23:36:53.493 JST [21887] LOG: logical replication launcher started2016-11-25 23:36:53.493 JST [21885] LOG: autovacuum launcher started

After starting PostgreSQL, the audit setting is logged.

Page 54: PostgreSQL Security. How Do We Think?

54Copyright©2017 NTT Corp. All Rights Reserved.

NTT pgauditGet Started!

• Access to PostgreSQL

$ /usr/local/pgsql_latest/bin/psql -p 5555 -d postgres2016-11-25 23:40:24.276 JST [21909] LOG: AUDIT: SESSION,,,CONNECT,2016-11-25 23:40:24 JST,,,[local],[unknown],,0,00000,connection received: host=[local],,,,,2016-11-25 23:40:24.276 JST [21909] LOG: connection received: host=[local]2016-11-25 23:40:24.277 JST [21909] LOG: AUDIT: SESSION,,,CONNECT,2016-11-25 23:40:24 JST,postgres,Masanori,[local],[unknown],3/10,0,00000,connection authorized: user=Masanori database=postgres,,,,,2016-11-25 23:40:24.277 JST [21909] LOG: connection authorized: user=Masanori database=postgres

connection logs is exported.