如何扫描 MySQL 数据库中的恶意软件?

信息安全 恶意软件 mysql 扫描
2021-09-02 14:02:50

我有很多方法可以在文件系统中搜索恶意代码、监控流量、扫描日志文件、检查可疑/屏蔽进程等。

但是,扫描 MySQL 等关系数据库并非易事。一些漏洞利用,例如 2015 年的 Magento Shoplift,旨在在数据库中注入恶意代码,同时了解其结构以及它如何与服务器端应用程序协作。转储数据库然后运行基于签名的搜索将是完全低效的,因为某些数据存储在 BLOB 和其他类型的数据中。此外,它不一定看起来很可疑,并且与 PHP webshel​​l 的样子相去甚远。

我的问题是:在 MySQL 数据库中检测异常和发现恶意代码的最实用和最有效的方法是什么

以下可以被认为是一种体面的方法吗?

  1. 转储数据库;
  2. 与备份存档中的同一数据库相比,逐行检查;
    • 比如说使用类似于 diffchecker.com 的功能;
  3. 分析新插入/更新的数据;
    • 这可能涉及跳过大量显然不是任何恶意行为的数据;

谢谢你。

1个回答

有趣的问题。首先,您必须定义要查找的恶意软件类型。在这种情况下,这可能是:

  • 恶意数据:丢失完整性的修改数据。
  • 恶意代码:能够运行的已建立、嵌入或修改的数据(例如可执行二进制文件、存储的 XSS)。

如果您尝试检测恶意数据,您可以选择以下选项之一:

  • 使用正则表达式分析数据的完整性。这可能需要花费大量时间来准备,因为您必须知道您的数据结构究竟应该是什么样子。
  • 将合法数据与当前数据集进行比较以检测差异。您可以创建字段、记录或表的哈希值,并偶尔比较它们。可能不建议将它们存储在同一个数据库中。为此使用另一个数据库甚至另一种介质(例如基于文件的方法)。如果攻击者能够破坏数据库并影响完整性,他可能无法在文件系统上做同样的事情。

这种方法也可能能够检测到恶意代码。但是您也许可以使用其他技术来正确检测它:

  • 使用基于签名的方法来确定恶意代码片段。最简单的方法是筛选字段。但这要求数据采用扫描引擎可以理解的格式。如果您正在对数据进行序列化或编码,这可能会损害检测的可能性。
  • 您可能希望为您的扫描需求创建一个专用的 API 访问可能性。您的数据库必须像在攻击中一样提供数据。例如,如果您在邮件附件中使用您的数据,您的 API 将创建这样的附件,以便扫描它最终的状态。其他示例是基于文件和基于 Web 的输出。

基于签名的扫描方法容易出错、效率低且速度慢。如果您有机会在数据写入后立即建立完整性检查,这可能会更加可靠。