PostgreSQL中的安全威胁

现代数据库存储着各种各样的信息。数据是非常有价值的,因为像地图位置、身份证、银行账号等信息都会存放在数据库中。因此数据库中数据的安全性至关重要。

但是不幸的是,目前恶意软件,病毒和漏洞的规模巨大,数据库会面临巨大的安全威胁。PostgreSQL与其他软件一样容易受到误用,盗窃,未经授权的访问/控制等攻击。

本文主要讨论几种PostgreSQL中的安全威胁以及可以采取哪些措施来防范这些安全威胁。

1.CVE详细信息,报告和漏洞

有这样一个网站,该站点在每个供应商的基础上发布了最新的安全威胁。

PostgreSQL安全信息页面中也列出了它们,所以请随时查询这个网站以获取最新的安全威胁报告。

这个网站上大多数问题都已得到解决,但是提高对已知威胁的认识和对未知威胁的警觉性是降低PostgreSQL风险的重要方式,所以这些问题值得一看,特别是这有助于发现各种漏洞的不同表现形式。

列举几个例子,来说明CVE报告和漏洞的形式:

I. CVE-2018-2928 Publish Date : 2018-07-18 Last Update Date : 2018-07-29

Oracle Sun Systems产品套件(子组件:RAD)的Solaris组件中的漏洞。受影响的支持版本是11.3。易于开发利用的漏洞允许未经身份验证的攻击者通过多种协议进行网络访问以破坏Solaris。成功的攻击需要来自攻击者以外的人的人工交互。成功攻击此漏洞可能导致对关键数据或所有Solaris可访问数据的未授权创建,删除或修改访问,以及对关键数据的未授权访问或对所有Solaris可访问数据的完全访问。CVSS 3.0基本分数8.1(机密性和完整性影响)。CVSS载体:(CVSS:3.0 / AV:N / AC:L / PR:N / UI:R / S:U / C:H / I:H / A:N)。

II. CVE-2014-0593 Publish Date : 2018-06-08 Last Update Date : 2018-07-31

obs-service-set_version附带的set_version脚本是Open Build Service(OBS)的源验证器。 在0.5.3-1.1之前的版本中,此脚本未正确清理用户提供的输入,从而允许在执行服务器上执行代码。

III. CVE-2016-10532 Publish Date : 2018-05-31 Last Update Date : 2018-07-20

console-io是一个允许用户在其应用程序中实现Web控制台的模块。恶意用户可以绕过身份验证并执行任何运行console-io应用程序2.2.13及更早版本的用户能够运行的命令。这意味着如果console-io从root运行,则攻击者有访问系统的完整权限。此漏洞的存在是因为console-io应用程序未将socket.io配置为需要身份验证,这允许恶意用户通过websocket连接以发送命令并接收响应。

2.SQL注入

在各种与数据库安全性相关的文章中都包含SQL注入这种安全威胁。这种攻击方式是一种长期存在的安全威胁,特别是在Web应用程序领域。任何SQL数据库(包括PostgreSQL)都可能很容易受到这种攻击。

我们需要了解SQL注入是如何影响PostgreSQL服务器的,这有助于帮助我们降低被这种安全威胁感染的几率。简单总结如下:

几种不同类型的SQL注入,它们都有共同的目标,即将攻击性SQL插入查询中以便在数据库中执行,但这不是最初设计时的打算而且也不是由开发人员设计的。未经授权的用户输入,设计不良或不存在的类型检查(AKA验证)以及未转义的用户输入都可能为潜在的攻击者敞开大门。许多Web编程API提供了一些针对SQLi的保护,例如ORM(对象关系映射器),参数化查询,类型检查等等。

以下是OWASP SQL注入预防备忘单中降低SQL注入风险的几点建议:

I.主要防御措施:

方法1:使用预处理语句(带参数化查询)。

方法2:使用存储过程。

方法3:白名单输入验证。

方法4:转义所有用户提供的输入。

II.额外防御:

方法5:强制执行最低权限。

方法6:执行白名单输入验证作为辅助防御。

3.Postgres角色权限

有一个影响数据库安全的因素是经常被我们忽视的,那就是操作数据库的人员自身的原因。比如进行数据库操作时,由于自身的疏忽、误解或缺乏经验导致的操作不规范,这种情况与之前提到的攻击和未经授权的使用一样,都是造成PostgreSQL安全威胁的原因。例如,我们可能无意中允许违规方更容易进入数据库,或者提供给了攻击者操作数据库的路线和渠道。

有一个总是需要不时重估或重新评估的问题,那就是未经授权的或无关的角色权限的问题。针对这个问题,我们给出以下几点建议:

I.权限的合并是值得关注和了解的。SUPERUSER和CREATROLE是非常强大的命令,所以最好让DBA拥有相关权限,而不是分析师或开发人员。

II.某些角色可能并不是真的需要CREATEDB和GRANT,所以这两种属性有被攻击者利用的潜在威胁。

III.在您的环境中允许角色拥有上述这些权限之前,请对所有选项进行权衡。

4.降低Postgres安装风险

我们可以采取以下几种措施来减轻PostgreSQL安装时可能产生的风险:

I.注意对lo_export的直接PostgreSQL调用或通过pg_proc中的条目进行的间接调用。

II.注意调用C语言二进制文件的PostgreSQL函数。

III.使用防火墙阻止从数据库到Internet的输出网络流量。

IV.确保您的数据库未分配公共IP地址。如果已经分配了,则限制它只能访问与其交互的主机(应用程序服务器或DBA拥有的客户端)。

你可能感兴趣的:(postgresql,安全,数据库)