防止审计表篡改

时间:2011-01-21 10:12:40

标签: c# sql-server audit tampering

我们的数据库中有审计表。 使用触发器完成对此表的记录。

目前,没有任何东西阻止用户登录数据库服务器,从管理工作室打开表并更改审计表中的数据。

哪些可能的机制可以阻止(或至少检测)审计数据篡改的情况?

我正在考虑在审计表中添加一列,该列应包含根据在该行中输入的值计算的一些哈希值。但是,由于审计是使用触发器完成的,恶意用户可以打开任何触发器并查看计算此哈希值的逻辑。

编辑:

我不太清楚。应用程序用户无权访问数据库。我指的是像DB管理员这样的用户,对数据库有适当的权限。尽管如此,如果这个数据库管理员登录并有权使用审计表进行调节,我希望至少有一些机制来检测这种篡改。

5 个答案:

答案 0 :(得分:7)

没有什么能阻止有人通过SQL管理器访问您的数据库来更改内容。你可以让它明显篡改。

基本上你需要使用键控哈希值HMACs。不幸的是,这导致您需要密钥管理以确保密钥保持秘密,这在触发器中可能是不可能的。我们使用加密服务来提供密钥管理,但可以从代码中访问。

您还需要考虑用户删除记录的能力,而不是更改其内容。我们最终得到了两个HMAC,一个是使用记录的内容计算的(用于更改记录的明显),第二个使用当前记录HMAC和前一行的HMAC来使任何行删除篡改明显。

然后您需要担心删除第一个或最后一个x记录。为此,我们使用一个始终具有相同内容的预告片和标题记录,如果这些内容不存在则表格的顶部或底部已被删除。标题的组合HMAC使用之后的记录而不是之前的记录(因为之前没有记录)。

当然,如果您要删除旧记录来管理存储的数据量,您需要一种机制来在删除后添加新的标题记录。

答案 1 :(得分:2)

以下是一些可能性:

  • 您无法阻止或检测具有 sysadmin (sa)权限的人的篡改。如果您不信任您的系统管理员,那么您可能遇到的问题比这个问题更严重。
  • 本地管理员很难预防或检测到篡改行为。这样的人可以在单用户模式下重新启动SQL Server,并使用SQL作为系统管理员获得访问权。
  • 要检测数据库所有者(dbo)的篡改,您可以在SQL Server 2008中使用Server Audit,或在早期版本的SQL Server中使用服务器端SQL Trace
  • 您可以通过限制其对相关触发器和审核表的权限来防止其他用户的篡改。

答案 2 :(得分:1)

您可以启用更改跟踪,因此您可以使用“审核表审核”。

如果您的基础架构管理得当,我猜用户没有sa权限,他们使用Management Studio查看数据库使用他们的Windows帐户登录,在这种情况下,您可以在该审计表上设置安全性,只有sa和其他管理帐户将能够更改内容,但不能更改普通用户/开发者帐户。

希望这有帮助。

答案 3 :(得分:0)

您所描述的问题可能表明系统架构中存在更严重的问题。 通常,用户甚至不应该直接访问运行数据库的计算机。

您可能需要考虑一种架构,其中数据库机器与业务逻辑机器分离,并且只能由它们访问。

如果您的用户决定尝试不通过您的客户端访问您的服务器,那么他们应该做的就是获得您决定公开的定义良好的Web服务。

没有理由用户应该能够访问数据库计算机,或者拥有允许写入数据库的帐户的凭据。您似乎担心篡改审计信息。什么阻止恶意用户删除表或篡改功能数据?

答案 4 :(得分:0)

  1. 将审核数据分离到自己的架构中,然后设置权限,使您关注的用户无权访问该架构。

  2. 使用完全独立的数据库,甚至可以在不同的机器上。

    我经常看到某种类型的发布/订阅模型用于从关系数据库发布审计数据,然后异步将审计数据写入审计存储。

    也许你可以让你的触发器将审计数据写入队列。然后,您可以拥有一个每隔几分钟运行一次的计划作业,从队列中获取审计数据并将其写入审计存储。