PostgreSQL 安全警钟长鸣

less than 1 minute read

背景

PostgreSQL 安全指南请参考,内附今年PG大会的安全分享。

http://blog.163.com/digoal@126/blog/static/16387704020155131217736/

赶紧检查一下你的数据库是否安全吧。

在赠送一个PostgreSQL的巡检脚本,

https://github.com/digoal/pgsql_admin_script/blob/master/generate_report.sh

今天看到有人利用PostgreSQL的大对象导出功能,将写好的.so文件导出到/tmp目录,然后在PostgreSQL中创建一个C函数,调用这个.so文件中的C函数,以此来将PostgreSQL变成肉鸡。

要完成这个攻击需要具备几个条件,

1. 攻击者必须要能连到你的数据库。这点postgresql可以通过pg_hba.conf来控制,这是postgresql的守门员哦,一定要用好它。

2. 导出大对象需要超级用户权限,如果攻击者只有普通用户权限是无法将数据导出到文件的。这一点postgresql非常靠谱,所有涉及写文件或者读文件的数据库函数,都需要超级用户的权限。所以保护好你的超级用户是非常重要的哦。

3. 创建C函数,需要超级用户权限,因为language C在postgresql中是untrusted的。

4. 攻击者可以使用触发器和规则给DBA下陷阱,如果DBA使用超级用户访问了普通用户布下的陷阱表,视图或函数,有可能成为帮凶,帮助攻击者从普通用户提升为超级用户,或者帮助攻击者攻陷数据库。这个还是需要DBA提高警惕,当然通过hack postgresql源码,是可以解决这个问题的,阿里云RDS PG已经解决了这个问题。

5. 攻击者必须要能破解你的数据库密码,postgresql可以通过passwordcheck和cracklib来强制用户使用复杂密码,提高暴力破解的难度到N个数量级。

6. 攻击者如果要暴力破解你的密码怎么办?postgresql提供了auth_delay插件,防止暴力破解。

7. 万一以前没有使用passwordcheck要求用户创建复杂密码怎么办?如何找出现在数据库中的简单密码呢?我在巡检脚本中提供了方法。大家可以参照做一下。

8. 还有一点非常重要,pg_hba.conf中千万不要用trust认证,这是不需要密码的,你打算裸奔吗?

最后,作为DBA,养成良好的安全习惯很重要,不要掉以轻心。

祝福大家的PostgreSQL安全,稳定,性能好。

关于这次攻击的方法:

http://www.freebuf.com/articles/network/87479.html

pic

Flag Counter

digoal’s 大量PostgreSQL文章入口