可以使用 Snort 等工具检测文件系统入侵,但检测数据库入侵(例如删除行、修改表等)则更加困难。监控此类入侵以检测数据库中不必要的更改的最佳方法是什么?
我正在使用 MySQL,因此任何与数据库无关的东西理想情况下都应该针对 MySQL。
答案1
这取决于您如何连接到数据库。如果您使用的是 Web 应用程序,Snort(和其他 NIDS)将能够检测到通过 HTTP 发生的 SQL 注入和其他攻击。
问题是,如果您使用 SSL 或加密连接连接到您的数据库,您的 NIDS 将无法看到流量。
这就是为什么日志分析非常重要。数据库与您沟通的唯一方式是通过日志,而许多 DBA 并不熟悉它。我真的不明白为什么每个人都认为 Web 日志很熟悉,却忽略了数据库日志(下次我会更详细地谈论它)。
要启用 mysql 日志: http://www.ossec.net/wiki/index.php/SQL_Logging#MySQL_Logging
我还使用开源 OSSEC 来监控我的 MySQL 日志,效果很好。
答案2
我不使用 MySQL,所以我无法谈论该平台的任何具体功能。
听起来你想要某种审计跟踪。从一般的 RDBMS 意义上讲,你可能能够使用触发器来获得你正在寻找的一些功能。我认为你不会获得模式修改的审计跟踪,除非 MySQL 将模式表示为表,而这些表又可以放置触发器。
当然,如果有人获得了数据库的“根”级访问权限,并且在开始篡改数据之前解除触发器的挂钩,那么所有这些触发器的废话都是没有意义的。到那时,一切都将失去意义。(……这甚至还没有开始处理某人获得托管数据库的操作系统的“根”级访问权限……对数据库文件进行字节级操作,将它们安装在安全功能已被“黑客”破坏的数据库实例上,等等……微笑)
答案3
如果您真的想跟踪表的每一个更改,您必须做一些疯狂的事情,例如启用 MySQL 查询日志并使用简单事件相关器之类的工具扫描不良内容。但是不要这样做,因为它会降低服务器的性能。
老实说,最好的办法是首先使用 MySQL 权限来防止不必要的更改。
答案4
有专门为此设计的商业产品。我想我们研究过 DbProtect (www.appsecinc.com),实施起来花费很大,但我们最终没有使用它。我还见过 Guardium (www.guardium.com)。两者都声称支持某些版本的 MySQL。