检测数据库入侵的最佳策略是什么?

文件系统入侵可以使用Snort等工具进行检测,但检测入侵数据库比较困难,比如删除行,修改表等。监视这个以检测数据库中不需要的更改的最佳方法是什么?

我正在使用MySQL,所以任何不是与数据库无关的东西都应该是针对MySQL的。

这取决于你如何连接到你的数据库。 如果您正在使用Web应用程序,Snort(和其他NIDS)将能够检测SQL注入以及通过HTTP发生的其他攻击。

问题是,如果你使用SSL或encryption连接到你的数据库,你的NIDS将是盲目的stream量。

这就是为什么日志分析非常重要。 您的数据库只能通过日志与您交谈,而许多DBA并不熟悉它。 我真的不明白为什么每个人都接受Web日志熟悉,但忽略数据库日志logging(我会再次咆哮更多)。

启用mysql日志: http : //www.ossec.net/wiki/index.php/SQL_Logging#MySQL_Logging

我也使用开源的OSSEC来监视我的MySQL日志,并且工作得很好。

我不使用MySQL,所以我不能说任何具体的平台function。

这听起来像你想要某种审计线索。 从一般的RDBMS意义上讲,您可以使用触发器来获得您所需要的一些function。 我不认为你会得到一个模式修改的审计线索,除非MySQL将模式表示为可以反过来触发器的表。

当然,如果有人获得对数据库的“根”级访问权限,并且在数据开始歪斜之前就解除触发器,所有触发废话的事情都是没有意义的。 在那个时候,所有的投注都closures了。 (…而且甚至没有开始处理某人获得托pipe数据库的操作系统的“根级别”访问权限……对数据库文件进行字节级别的操作,将它们安装在具有安全性的数据库实例上function“砍死”,等等… 微笑

如果你真的想跟踪你的表的每一个变化,你必须做一些疯狂的事情,如启用MySQL查询日志,并使用像简单事件关联器一样的坏东西扫描。 不要这样做,因为它会杀死你的服务器的性能。

老实说,你最好的select是通过使用MySQL权限来防止不必要的改变。

Snort仍然有帮助。 赶上是知道你的数据库stream量应该来自哪里。 如果它来自非批准来源,那么显然可以在MySQL中阻止它。 但是,您也可以在IDS中设置警报来查看此类事件。

对于来自授权IP地址的攻击,这是一个挑战。 关键问题是应该允许一个连接做什么,什么不该做? 这又回到正确设置权限。 如果合法用户从合法的IP连接并且需要DELETE权限并且想要恶意,那么在实际修改期间,您可以做的事情并不多。 审计提出了一个build议,但它伤害了你的performance。 如果用户可以直接访问数据库并进行更改,我不确定您是否拥有有效的控制权。 所有的数据库平台,不仅仅是MySQL,都与此相关。 您有可信的用户进行授权更改。 只有这么多你可以做。

有为此devise的商业产品。 我认为我们看了DbProtect(www.appsecinc.com),这是实施的主要资金,但是我们最终没有这样做。 我也见过Guardium(www.guardium.com)。 两个都声称支持一些版本的MySQL。

SQL Server 2005引入了DDL触发器,只要有人运行数据定义语言代码(如更改表,添加索引或删除视图),就可以触发这些触发器。

我不相信在MySQL中有任何合适的方法来做到这一点。 您应该确保使用某种安全密钥对所有合法的修改应用了各种安全校验和,所以如果行数据与校验和不同,则会发生未经授权的修改。

至于你如何校验和如何保持关键的秘密,这是一个其他的故事,你可以随时给我发电子邮件,如果你从这个网站或通过这个网站(我在这里是新的,而不是build立正确的)。

实际上,只有非现场备份将有助于防止删除行,并注意使用mysqldump是唯一“正式”支持的方法。

虽然复制底层(MyISAM)文件在绝大多数情况下都适用于该表types,但它确实会崩溃,所以我不会相信它是针对任何关键任务的。

我们在SQL Server数据库上实现了DbProtect。 这不是太难,它允许一些非常细化的审计政策。 然而正如bobwood所说,这并不便宜。