Snort 仍然很有帮助。关键是知道您的数据库流量应该来自哪里。如果它来自未经批准的来源,您显然可以在 MySQL 中阻止它。但是,您也可以在 IDS 中设置警报以查看此类内容。
对于来自授权 IP 地址的攻击,这是一个挑战。关键问题是应该允许连接做什么,不应该做什么?这可以追溯到正确设置权限。如果合法用户从合法 IP 连接并需要 DELETE 权限并且想要恶意,那么在实际修改期间您无能为力。有人提出了审计建议,但这会损害您的绩效。如果用户可以直接访问数据库并进行更改,我不确定您是否有有效的控制。所有数据库平台,不仅仅是 MySQL,都在为此苦苦挣扎。您有一个受信任的用户进行授权更改。你能做的只有这么多。
这取决于您如何连接到数据库。如果您使用的是 Web 应用程序,Snort(和其他 NIDS)将能够检测通过 HTTP 发生的 SQL 注入和其他攻击。
问题是如果您使用 SSL 或加密连接到您的数据库,您的 NIDS 将对流量视而不见。
这就是为什么日志分析非常重要的原因。您的数据库与您对话的唯一方式是通过日志,许多 DBA 并不熟悉它。我真的不明白为什么每个人都像熟悉的那样接受 Web 日志记录,而忽略了 db 日志记录(我将在另一次咆哮更多)。
要启用 mysql 日志: http ://www.ossec.net/wiki/index.php/SQL_Logging#MySQL_Logging
我还使用开源 OSSEC 来监控我的 MySQL 日志,它运行良好。
我不使用 MySQL,所以我无法谈论该平台的任何特定功能。
听起来您想要某种审计跟踪。从一般的 RDBMS 意义上讲,您可能能够使用触发器来获得您正在寻找的一些功能。我认为您不会获得模式修改的审计跟踪,除非 MySQL 将模式表示为表,而这些表又可以在其上放置触发器。
当然,如果有人获得对数据库的“root”级别访问权限,并且在他们开始对数据进行监视之前解开触发器,那么所有这些触发废话都是没有意义的。到那时,所有赌注都取消了。(......这甚至还没有开始处理某人获得“root”级别访问托管数据库的操作系统......数据库文件的字节级操作,将它们安装在具有安全性的数据库实例上特征“被黑”出来,等等......微笑)
如果你真的想跟踪你的表的每一个变化,你将不得不做一些疯狂的事情,比如启用 MySQL 查询日志并使用像 Simple Event Correlator 这样的东西来扫描坏东西。但是不要这样做,因为它会降低服务器的性能。
老实说,您最好的选择是首先通过使用 MySQL 权限来防止不必要的更改。
Snort 仍然很有帮助。关键是知道您的数据库流量应该来自哪里。如果它来自未经批准的来源,您显然可以在 MySQL 中阻止它。但是,您也可以在 IDS 中设置警报以查看此类内容。
对于来自授权 IP 地址的攻击,这是一个挑战。关键问题是应该允许连接做什么,不应该做什么?这可以追溯到正确设置权限。如果合法用户从合法 IP 连接并需要 DELETE 权限并且想要恶意,那么在实际修改期间您无能为力。有人提出了审计建议,但这会损害您的绩效。如果用户可以直接访问数据库并进行更改,我不确定您是否有有效的控制。所有数据库平台,不仅仅是 MySQL,都在为此苦苦挣扎。您有一个受信任的用户进行授权更改。你能做的只有这么多。
有为此设计的商业产品。我认为我们查看了 DbProtect (www.appsecinc.com) 并实施了大笔资金,但我们最终没有这样做。我也看过 Guardium (www.guardium.com)。两者都声称支持某些版本的 MySQL。
SQL Server 2005 引入了 DDL 触发器,只要有人运行数据定义语言代码(如更改表、添加索引或删除视图),就可以触发这些触发器。
我不相信在 MySQL 中有任何合适的方法可以做到这一点。您应该确保使用某种密钥对所有合法修改应用某种安全校验和,因此如果行数据与校验和不同,您就知道进行了未经授权的修改。
至于你如何校验和,以及你如何保持密钥的秘密,那就是另一回事了,如果你从这个网站或通过这个网站弄清楚,你可以随时给我发电子邮件(我是新来的,没有设置正确的)。
实际上,只有异地备份才能帮助您防止删除行,并注意使用 mysqldump 是唯一“官方”支持的方法。
尽管复制底层(MyISAM)文件在绝大多数情况下都适用于该表类型,但有时它确实会失败,所以我不会单独相信它来完成任何关键任务。
我们在 SQL Server 数据库上实现了 DbProtect。这并不太难,它允许一些非常精细的审计策略。然而,正如鲍伍德所说,它并不便宜。