检测数据库篡改,是否可能?

Gle*_* T. 71 database tampering

长时间听众,第一次来电.

'假设您有一个负责记录用户活动的数据库表.此日志的完整性非常重要,因此您希望能够检测是否有人修改了表中的任何数据.为了使事情更有趣,还要考虑这样一个事实,即您的系统可能由一个完全控制这个可怜系统的邪恶SQL管理员操作.让人惊讶...

您将如何保护您的数据?

您如何检测是否有人篡改了您的数据?

您可以随意使用无限制的工具.(即散列,加密等)

小智 31

如果您确实必须检测到已发生篡改,则将校验和字段添加到表中.每个新行的校验和必须包含前一行的校验和.然后,为了验证内容,在向前移动时,遍历数据集计算校验和.如果计算的校验和与表中的值不匹配,则某些值已被篡改.

-麦克风

  • 对不起 - 但如果你真的*有一个邪恶的管理员,你有比这个更大的问题.试图过度复杂化篡改检测以阻止这个假设的邪恶管理员可能不如仅仅实施一个简单的篡改检测系统.我猜,这完全取决于你认为你将要捕获的世界卫生组织. (18认同)
  • 我喜欢这个答案,但如果邪恶的管理员知道散列函数,他可以随机删除一行并重新散列所有行.现在将这个行链式哈希与行内签名结合起来,以验证没有列被篡改过,我认为你有一个胜利者. (7认同)
  • @Adam,@ Ztranger:如果邪恶管理员的范围仅限于数据库服务器,则校验和代码和任何相关密钥可以驻留在应用程序中,安全地无法访问. (6认同)
  • 这并不妨碍"邪恶管理员"更改任何数据,然后重新计算所有行的校验和(除非您使用以某些私有数据(例如加密签名)保护的校验和). (4认同)
  • 除非校验和包含管理员不知道的盐,否则邪恶的管理员可以在进行更改后重新计算所有记录的校验和. (2认同)

Ada*_*ght 13

如果"邪恶的管理员"无法访问填充数据库的应用程序,则每个表上的额外列将包含其余列的加密签名.需要"无法访问"条件,以便他们不仅可以提取您的私钥并签署他们的虚假数据.

编辑:啊,正如评论者指出的那样,我没有考虑管理员只是删除一行.为此,您需要一个额外的行,其中包含您每次更新的加密签名行计数(或表内容其余部分的签名哈希,或上次访问时间,或您选择的任何指示).

  • 这没有考虑到邪恶的管理员只是删除一行. (2认同)

Byr*_*ock 5

创建一个影子表,只有你和应用程序知道密钥/盐的每个字段.如果要检查数据篡改,请重新扫描用户表并与影子表进行比较.


Dan*_*ani 5

如果你真的想要安全使用 - 为该表写一次Read Many Media.

  • 当我拿出纸质原木时,审核员弄湿了裤子.他们甚至没有真正看过他们,但纸盒SCREAM尽职尽责. (9认同)
  • 我实际上仍然支付拖拉机送料绿纸和点阵打印机的费用,用于登录我们的主要金融系统之一.显然我无法记录很多细节,但我可以记录写入事务,并且我可以记录用户访问权限.有时,低技术解决方案是最好的. (6认同)
  • 什么阻止你Dogbert管理员编辑文件并在绿色衬里的邮票上打印出来?(实际上看到这是由操作员完成的,以掩盖他的错误!). (2认同)

Pau*_*lan 1

设置您的系统以将日志数据写入邪恶的 SQL 管理员无法控制的远程系统。这不会阻止所述管理员删除或篡改您的日志记录程序,但会阻止他事后修改它们。