如果我的服务器被盗,PostgreSQL数据库的安全性如何?

时间:2010-05-12 16:32:36

标签: database security cracking database-security

如果我在PostgreSQL中有一个带有绝密数据数据库的服务器,我的密码实际上是不可能猜到的(手工生成的各种奇怪字符的128个字符串)。服务器密码实际上也是不可知的。

除了密码猜测之外,从这个数据库中获取数据有多容易?

假设:

  1. 服务器上只存在数据库。 PHP脚本中没有密码或类似的任何密码
  2. 窃取服务器的人是服务器/数据库/硬盘驱动器恢复专家
  3. 我没有使用任何硬盘加密或任何超出常规保护的内容
  4. 我正在使用Ubuntu Hardy(最新稳定版)
  5. 我正在尝试了解某人获得对我服务器硬盘的物理访问所涉及的风险。

7 个答案:

答案 0 :(得分:4)

“标准的想法是,有人坐在服务器上,它受到了损害,故事结束。如果他们抓住硬盘驱动器并将其带到实验室进行开放和分析,事情就会变得更糟。” / em>的

同上。

一旦攻击者拥有永久的物理访问权限(即,他带着你的公文包中的硬盘驱动器走出大楼),夹具就会启动 - 假设数据会及时泄露。从那里开始,情景是延迟战术的成本与减缓攻击者的能力。

如果攻击者是内部人员,或者只是临时访问,则会有所不同。在这些情况下,你可能会使他放慢脚步,或者强制追究责任,使攻击变得不可行。

硬盘加密是一种延迟策略 - 它将提供与算法强度,密钥强度以及密码锁定访问密钥强度相匹配的保护(或插入硬件与密钥存储的能力) )。即使加密,假设它是一种拖延战术。迟早,攻击者将通过密钥空间并找出解密系统的密钥。

防篡改是另一种选择 - 找到一种在某些条件下以电子方式擦除硬盘驱动器的方法(例如将其从机箱中物理移除)。

图一旦授予物理访问权限,攻击者就可以解决您的密码 - 无论它们是多么强大 - 而无需使用暴力破解。首先想到的是使用大多数系统内置的“修复密码”技术来帮助已经锁定的系统管理员。丢失了密码。

任何和所有保护都需要付出代价 - 防篡改费用昂贵,因为您需要专业硬件。加密可能更便宜,但它会影响启动时间。此外,我已经看到了加密如何与应用程序一起发生的一些令人讨厌的惊喜 - 在你尝试使用它之前,你永远不会知道。

答案 1 :(得分:3)

标准的想法是,有人坐在服务器上,它受到了损害,故事结束。如果他们抓住硬盘并将其带到实验室进行开放和分析,事情就会变得更糟。

我将使用全驱动器加密开始,以及数据库中的每字段加密。您可以环顾四周,看看是否有办法对服务器上安装的硬盘驱动器硬件进行基于生物识别的访问。此外,您想挖掘物理安全承包商并获得他们的配置建议;也雇佣警卫。

我的意思是,如果这是一个可能合理发生的情景......

编辑:

如果我有一个Postgres数据库文件,我想进入并拥有资源(即为一些便宜的戴尔花费4K),我会使用Beowulf配置并执行并行暴力破解。如果我开始有更多的钱,并且可以配置,例如,插入的那些可爱的NVidia超级计算机上的几台机器真的开始暴力破解密码,情况会变得更糟。

如果小偷认真考虑进入它并且你从第0天开始就没有安全计划,那么你的数据库文件将像沙丁鱼一样打开。

答案 2 :(得分:2)

如果你没有加密硬盘/文件系统,那么你很不幸,因为Postgres不提供本机加密。加密硬盘是保护被盗服务器的唯一真正方法。

基本上,您需要做的是加密硬盘驱动器或文件系统,并且每次机器启动时,在Postgres启动之前,您必须手动安装驱动器时输入密码。

答案 3 :(得分:1)

这篇文章似乎与您的问题特别相关:

PostgreSQL数据库中的总安全性
http://www.ibm.com/developerworks/opensource/library/os-postgresecurity/

答案 4 :(得分:1)

我不认为这是PostgreSQL或任何其他数据库地址的问题。即使数据库本身受密码保护,所有数据都是纯文本的,这才是真正重要的。什么都没有阻止攻击者捕获原始数据库文件并通过字符串管道它。此类攻击的最佳解决方案是使用加密文件系统。这将要求您输入密码来安装分区。这也增加了开销。

答案 5 :(得分:1)

对于发布的特定问题(以及我搜索的答案),Postgresql默认存储未加密的表格数据。查看... / pgsql / 9.2 / data / base / *中的文件我猜这些存储表是1.1千兆字节块,我可以用grep在这些文件中成功找到ASCII字符串。从检查文件看,数据存储在列中。

根据这些信息,我相信我可以尝试并编写代码来对表进行反向工程,以便在我没有密码的服务器上创建副本。

因此,如果您需要防止物理媒体被盗的风险,仅依靠强大的数据库密码不符合您的注意义务。

PostgreSQL online docs为各种级别的数据加密提供了一些选项,对于这个问题似乎仅限于一个模块,用于加密特定列或以某种方式加密底层媒体,如其他受访者所建议的那样。

答案 6 :(得分:1)

一个好的开始是启用全盘加密。 您还可以在应用程序层加密。 (例如,在将数据发送到数据库之前加密数据,存储无法从数据库服务器访问的密钥)