基于等保3.0MySQL数据库审计日志插件实践

文摘   2024-08-27 07:20   云南  

 


点击上方蓝字关注我们


 

背景


 

网络安全等级保护制度3.0

等保3.0(即网络安全等级保护制度3.0版本)信息安全技术等级保护基本要求(GB/T 22239-2019),作为信息安全等级保护的最新标准,对数据审计日志的要求是出于多方面的考虑。对MySQL数据库审计日志的要求主要体现在以下几个方面:

1.审计日志的完整性
全面记录:要求MySQL数据库审计日志能够全面记录所有对数据库的访问和操作行为,包括但不限于登录、查询、修改、删除等关键操作。这有助于在发生安全事件时进行追溯和分析。
关键信息:审计日志应包含足够的关键信息,如操作时间、操作类型、操作对象、操作结果以及执行操作的用户等,以便后续的安全审计和合规性检查。

2.审计日志的保密性
访问控制:对审计日志的访问应进行严格的控制,确保只有授权用户才能查看和操作审计日志,防止敏感信息泄露。
加密存储:对于敏感信息或高安全要求的审计日志,应采用加密方式进行存储,以提高数据的保密性。

3.审计日志的可用性
存储要求:根据《网络安全法》和相关等级保护要求,审计日志应至少保存六个月以上,以便在需要时进行回溯和调查。
易于查询:审计日志应具备良好的查询功能,支持按时间、操作类型、用户等多种维度进行快速检索,提高审计效率。

4.审计日志的合规性
符合标准:MySQL数据库审计日志的生成、存储和管理应符合国家相关法律法规以及行业标准的要求,如《网络安全法》、《网络安全等级保护基本要求》等。
定期审查:应定期对审计日志进行审查,确保审计日志的完整性和准确性,及时发现并处理潜在的安全威胁。

MySQL默认审计日志general存在的问题

等保3.0需要MySQL启用审计日志,MySQL数据审计日志general.log的缺点,有以下几点:

1)日志量庞大,筛选难度大

全量记录:general.log会记录所有到达MySQL Server的SQL语句,包括数据库连接信息、数据库和表的打开信息、连接线程、CRUD操作等。这意味着,无论SQL语句是否正确执行,都会被记录下来,导致日志量非常庞大。
筛选困难:由于记录的是全量信息,当需要从中筛选出特定的操作或错误时,难度会大大增加,尤其是在并发量高的情况下,筛选工作几乎不可行。

1)对性能有较大影响

IO压力:大量的日志记录会对磁盘IO造成较大压力,尤其是在高并发场景下,这种压力会进一步加剧,从而影响到数据库的整体性能。
性能测试数据:有研究表明,启用审计日志后,数据库性能可能会下降约22.9%,事务处理速度也会明显减缓。

3)安全性与隐私风险

敏感信息泄露:general.log记录的是明文SQL语句,如果其中包含敏感信息(如用户密码、隐私数据等),则存在泄露的风险。
控制不足:无法精细控制需要记录的SQL类型(如只记录查询语句,不记录更新语句等),这进一步增加了信息泄露的风险。

4)管理与维护成本

日志文件快速膨胀:由于日志量庞大,general.log文件会迅速膨胀,占用大量磁盘空间。如果不及时处理,可能会影响到数据库的正常运行。
定期清理与备份:为了避免日志文件过大带来的问题,需要定期清理旧的日志文件并进行备份。这增加了运维人员的工作量和维护成本。

 

实践


 

实施MySQL安全审计配置,我们在这儿可以使用社区版的AWS MariaDB Audit Plugin, MySQL 8.0以上版本从这儿下载。

audit-plugin-for-mysql

这个插件基于MariaDB审计插件。在MySQL 5.6中,插件API与MariaDB审计插件兼容。但在MySQL 5.7和8.0中,插件API却有了显著的差异。因此,针对MariaDB的Amazon RDS创建了一个修改版,使其与MySQL 5.7和8.0兼容。此版本在可能的情况下保留了原始审计插件的功能,但使插件适应了MySQL 8.0的插件API。

MariaDB Audit Plugin是一个用于记录数据库操作的日志插件。它可以记录各种数据库事件,如用户登录、查询操作、表结构变更等。这些信息会被写入到一个文件中(例如:server_audit.log )。

特点:

  • 细粒度审计: 可以配置插件来记录不同类型的数据库事件。

  • 灵活配置: 支持配置哪些事件需要被记录,以及记录的详细程度。

  • 高性能: 对数据库性能的影响较小。

具体使用参考

  • system variables

  • status variables

  • logging settings

安装过程

进入服务器审计插件位置

cd /home/devops/

将插件拷贝到数据容器

sudo docker cp /home/devops/server_audit.so c2mysql:/tmp/

进入数据库容器

docker exec -it c2mysql /bin/bash
mysql -u root -p
密码

查看插件安装目录

show variables like '%plugin%';

Plugin_dir 就是插件的目录 一般为/usr/lib/mysql/plugin

将刚才tmp目录下的so文件放到对应插件目录

mv /tmp/server_audit.so /usr/lib/mysql/plugin/

执行安装命令

install plugin server_audit SONAME 'server_audit.so'

查看插件配置信息

show variables like '%audit%'

默认审计日志是关闭状态

开启日志记录

set global server_audit_logging=on

设置日志文件大小和个数

set global server_audit_file_rotate_size = 100000000
set global server_audit_file_rotations = 100;

验证是否成功

进入/data/docker/mysqldata/data/目录

cd /data/docker/mysqldata/data/
ls

查看是否有server_audit.log 日志文件产生

示例配置参数

100个审计日志文件,每个100MB,最大10GB

server_audit_eventsvalue
server_audit_excl_users
server_audit_file_pathserver_audit.log
server_audit_file_rotate_nowOFF
server_audit_file_rotate_size100000000
server_audit_file_rotations100
server_audit_incl_users
server_audit_loc_info
server_audit_loggingON
server_audit_output_typefile
server_audit_query_log_limit1024
server_audit_syslog_facilityLOG_USER
server_audit_syslog_identmysql-server_auditing
server_audit_syslog_info
server_audit_syslog_priorityLOG_INFO

示例我们MySQL数据库审计日志 路径

/data/docker/mysqldata/data

-rw-r----- 1 polkitd input  97951700 Jun 28 11:09 server_audit.log
-rw-r----- 1 polkitd input 98070901 Jun 28 11:13 server_audit.log
-rw-r----- 1 polkitd input 100000062 Jun 26 11:30 server_audit.log.001
-rw-r----- 1 polkitd input 100000056 Jun 24 10:49 server_audit.log.002
-rw-r----- 1 polkitd input 100000094 Jun 22 06:45 server_audit.log.003
-rw-r----- 1 polkitd input 100000094 Jun 20 01:46 server_audit.log.004
-rw-r----- 1 polkitd input 100000323 Jun 17 21:32 server_audit.log.005
-rw-r----- 1 polkitd input 100000304 Jun 15 19:35 server_audit.log.006
-rw-r----- 1 polkitd input 100000566 Jun 13 17:05 server_audit.log.007
-rw-r----- 1 polkitd input 100000710 Jun 11 14:34 server_audit.log.008
-rw-r----- 1 polkitd input 100000485 Jun 9 12:04 server_audit.log.009
-rw-r----- 1 polkitd input 100000147 Jun 7 10:07 server_audit.log.010
-rw-r----- 1 polkitd input 100000090 Jun 5 07:37 server_audit.log.011
-rw-r----- 1 polkitd input 100000143 Jun 3 06:06 server_audit.log.012
-rw-r----- 1 polkitd input 100000444 Jun 1 04:09 server_audit.log.013
-rw-r----- 1 polkitd input 100000860 May 30 01:40 server_audit.log.014
-rw-r----- 1 polkitd input 100000106 May 28 00:14 server_audit.log.015
-rw-r----- 1 polkitd input 100000427 May 25 22:19 server_audit.log.016
-rw-r----- 1 polkitd input 100000007 May 23 20:16 server_audit.log.017
-rw-r----- 1 polkitd input 100000081 May 21 17:46 server_audit.log.018
-rw-r----- 1 polkitd input 100000789 May 19 15:20 server_audit.log.019
-rw-r----- 1 polkitd input 100000683 May 17 13:47 server_audit.log.020
-rw-r----- 1 polkitd input 100000908 May 15 11:52 server_audit.log.021
-rw-r----- 1 polkitd input 100000346 May 13 10:30 server_audit.log.022
-rw-r----- 1 polkitd input 100000098 May 11 08:32 server_audit.log.023
-rw-r----- 1 polkitd input 100000060 May 9 06:02 server_audit.log.024
-rw-r----- 1 polkitd input 100000027 May 7 03:32 server_audit.log.025
-rw-r----- 1 polkitd input 100000856 May 5 01:02 server_audit.log.026
-rw-r----- 1 polkitd input 100000110 May 2 23:05 server_audit.log.027
-rw-r----- 1 polkitd input 100000894 Apr 30 20:34 server_audit.log.028
-rw-r----- 1 polkitd input 100000102 Apr 28 18:04 server_audit.log.029
-rw-r----- 1 polkitd input 100000071 Apr 26 16:18 server_audit.log.030
-rw-r----- 1 polkitd input 100000331 Apr 24 13:48 server_audit.log.031
-rw-r----- 1 polkitd input 100000041 Apr 22 11:18 server_audit.log.032
-rw-r----- 1 polkitd input 100000725 Apr 20 09:21 server_audit.log.033
-rw-r----- 1 polkitd input 100000029 Apr 18 06:51 server_audit.log.034
-rw-r----- 1 polkitd input 100000068 Apr 16 05:33 server_audit.log.035
-rw-r----- 1 polkitd input 100000079 Apr 14 05:09 server_audit.log.036
-rw-r----- 1 polkitd input 100000027 Apr 12 03:12 server_audit.log.037
-rw-r----- 1 polkitd input 100000100 Apr 10 01:29 server_audit.log.038
-rw-r----- 1 polkitd input 100000066 Apr 7 22:59 server_audit.log.039
-rw-r----- 1 polkitd input 100000192 Apr 5 21:01 server_audit.log.040
-rw-r----- 1 polkitd input 100000903 Apr 3 18:31 server_audit.log.041
-rw-r----- 1 polkitd input 100000826 Apr 1 16:01 server_audit.log.042
-rw-r----- 1 polkitd input 100000544 Mar 30 14:04 server_audit.log.043
-rw-r----- 1 polkitd input 100000140 Mar 28 11:33 server_audit.log.044
-rw-r----- 1 polkitd input 100000162 Mar 26 09:03 server_audit.log.045
-rw-r----- 1 polkitd input 100000296 Mar 24 06:33 server_audit.log.046
-rw-r----- 1 polkitd input 100000520 Mar 22 04:36 server_audit.log.047
-rw-r----- 1 polkitd input 100000027 Mar 20 02:08 server_audit.log.048
-rw-r----- 1 polkitd input 100000058 Mar 18 01:04 server_audit.log.049
-rw-r----- 1 polkitd input 100000675 Mar 15 23:07 server_audit.log.050
-rw-r----- 1 polkitd input 100000743 Mar 13 20:37 server_audit.log.051
-rw-r----- 1 polkitd input 100000049 Mar 11 18:06 server_audit.log.052
-rw-r----- 1 polkitd input 100000262 Mar 9 16:09 server_audit.log.053
-rw-r----- 1 polkitd input 100000764 Mar 7 13:39 server_audit.log.054
-rw-r----- 1 polkitd input 100000031 Mar 5 12:41 server_audit.log.055
-rw-r----- 1 polkitd input 100000089 Mar 3 10:11 server_audit.log.056
-rw-r----- 1 polkitd input 100000054 Mar 1 08:13 server_audit.log.057
-rw-r----- 1 polkitd input 100000736 Feb 28 06:19 server_audit.log.058
-rw-r----- 1 polkitd input 100000407 Feb 26 06:09 server_audit.log.059
-rw-r----- 1 polkitd input 100000574 Feb 24 04:11 server_audit.log.060
-rw-r----- 1 polkitd input 100000230 Feb 22 03:36 server_audit.log.061
-rw-r----- 1 polkitd input 100000564 Feb 20 05:33 server_audit.log.062
-rw-r----- 1 polkitd input 100000686 Feb 18 08:31 server_audit.log.063
-rw-r----- 1 polkitd input 100000049 Feb 16 06:34 server_audit.log.064
-rw-r----- 1 polkitd input 100000016 Feb 14 04:03 server_audit.log.065
-rw-r----- 1 polkitd input 100000483 Feb 12 01:34 server_audit.log.066
-rw-r----- 1 polkitd input 100000088 Feb 9 23:37 server_audit.log.067
-rw-r----- 1 polkitd input 100000230 Feb 7 21:06 server_audit.log.068
-rw-r----- 1 polkitd input 100000083 Feb 5 19:53 server_audit.log.069
-rw-r----- 1 polkitd input 100000030 Feb 3 22:01 server_audit.log.070
-rw-r----- 1 polkitd input 100000196 Feb 1 20:24 server_audit.log.071
-rw-r----- 1 polkitd input 100000048 Jan 31 02:38 server_audit.log.072
-rw-r----- 1 polkitd input 100000541 Jan 29 21:02 server_audit.log.073
-rw-r----- 1 polkitd input 100000424 Jan 27 20:57 server_audit.log.074
-rw-r----- 1 polkitd input 100000092 Jan 25 19:34 server_audit.log.075
-rw-r----- 1 polkitd input 100000079 Jan 23 18:26 server_audit.log.076
-rw-r----- 1 polkitd input 100000569 Jan 21 17:51 server_audit.log.077
-rw-r----- 1 polkitd input 100000034 Jan 19 15:53 server_audit.log.078
-rw-r----- 1 polkitd input 100000455 Jan 17 13:40 server_audit.log.079
-rw-r----- 1 polkitd input 100000512 Jan 15 11:09 server_audit.log.080
-rw-r----- 1 polkitd input 100000028 Jan 13 10:55 server_audit.log.081
-rw-r----- 1 polkitd input 100000584 Jan 11 10:02 server_audit.log.082
-rw-r----- 1 polkitd input 100000045 Jan 9 08:22 server_audit.log.083
-rw-r----- 1 polkitd input 100000389 Jan 7 13:16 server_audit.log.084
-rw-r----- 1 polkitd input 100000022 Jan 5 13:07 server_audit.log.085
-rw-r----- 1 polkitd input 100000001 Jan 3 10:37 server_audit.log.086
-rw-r----- 1 polkitd input 100000094 Jan 1 08:08 server_audit.log.087
-rw-r----- 1 polkitd input 100000014 Dec 30 06:10 server_audit.log.088
-rw-r----- 1 polkitd input 100000763 Dec 28 2023 server_audit.log.089
-rw-r----- 1 polkitd input 100000033 Dec 26 2023 server_audit.log.090
-rw-r----- 1 polkitd input 100000015 Dec 23 2023 server_audit.log.091
-rw-r----- 1 polkitd input 100000049 Dec 21 2023 server_audit.log.092
-rw-r----- 1 polkitd input 100000049 Dec 19 2023 server_audit.log.093
-rw-r----- 1 polkitd input 100000156 Dec 17 2023 server_audit.log.094
-rw-r----- 1 polkitd input 100000119 Dec 15 2023 server_audit.log.095
-rw-r----- 1 polkitd input 100000080 Dec 13 2023 server_audit.log.096
-rw-r----- 1 polkitd input 100000757 Dec 11 2023 server_audit.log.097
-rw-r----- 1 polkitd input 100000316 Dec 9 2023 server_audit.log.098
-rw-r----- 1 polkitd input 100000220 Dec 7 2023 server_audit.log.099
-rw-r----- 1 polkitd input 100000009 Dec 5 2023 server_audit.log.100

 

集成日志审计系统


 

在大型或复杂的网络环境中,可以将MySQL数据库的审计日志集成到统一的日志审计系统中,实现对多种设备和系统的集中审计和管理。

开源方案FEK

数据流

方案优势

端到端解决方案: 从数据生成、收集、存储到可视化,提供了一站式的解决方案。
高可扩展性: 各个组件都支持分布式架构,可以轻松扩展以应对大规模数据。
易于维护: 各个组件都是独立运行的,方便进行维护和升级。
丰富的功能: 支持细粒度的数据审计、实时数据收集、高效数据存储和强大的数据可视化。

FileBeat是一个轻量级的日志收集工具,主要用于将日志文件中的数据发送到ElasticSearch或其他数据收集平台。它能够实时监控日志文件的变化,并将新的日志内容发送出去。

特点:

  • 实时监控: 可以实时监控日志文件的变化,确保数据的及时性。

  • 稳定可靠: 具有高可靠性,支持日志数据的持久化。

  • 易于配置: 配置简单,支持多种输出方式。

ElasticSearch是一个分布式搜索引擎和数据分析平台,用于存储、搜索和分析大规模数据。它能够对收集到的日志数据进行索引,以便于快速检索和分析。

特点:

  • 高性能搜索: 支持全文搜索和复杂的查询语法。

  • 分布式架构: 支持大规模数据的分布式存储和处理。

  • 丰富的分析功能: 提供聚合分析、机器学习等功能。

Kibana是一个数据可视化和探索工具,用于展示和分析ElasticSearch中的数据。它提供了丰富的图表和仪表板功能,帮助用户更好地理解和利用数据。

特点:

  • 强大的可视化能力: 支持多种图表类型,如折线图、柱状图、饼图等。

  • 直观的用户界面: 操作简单,用户可以轻松创建和管理仪表板。

  • 实时更新: 支持实时更新数据,确保用户看到的是最新的信息。

IBM Security QRadar Community Edition日志审计

IBM Security QRadar包含日志审计功能:

IBM Security QRadar套件是一个全面的威胁检测和响应解决方案,旨在提高安全分析师在整个事件生命周期中的响应速度。该套件配备了企业级AI和自动化技术,可以显著提高分析师的工作效率,帮助资源紧张的安全团队更有效地开展工作。

IBM Security QRadar在日志审计方面的特点:

统一化分析师体验:通过直观的用户界面、各产品的共享洞察和自动化操作,分析师能够在整个调查和响应过程中更快更高效地工作。使用独特的企业级AI功能,分析师可以自动将威胁情境化,并确定各项威胁的优先级。
云交付、速度和规模:IBM Security QRadar Suite产品是在AWS上提供的一项服务,支持跨云环境简化部署,以及与公有云和SaaS日志数据摄取。这使得大规模的数据获取、亚秒级搜索和快速分析成为可能。
开放平台和预构建集成:该套件集成了当今安全运营中心所需的各种核心技术,包括日志管理。基于开放平台和广泛的合作伙伴生态系统,IBM Security QRadar拥有900多项预构建集成,可灵活选择IBM各款产品和第三方产品。
定制日志源类型:用户还可以使用IBM QRadar的DSM(设备支持模块)编辑器来创建和定制日志源类型,以适应特定的日志审计需求。这包括将集群审计事件映射到QRadar事件模型,添加定制属性来解析定制字段等。
综上所述,IBM Security QRadar不仅包含日志审计功能,而且通过其强大的功能集和灵活的定制选项,能够为企业提供全面的日志管理和审计解决方案。

IBM Security QRadar 三级等保
等保三级指国家标准《计算机信息系统安全保护等级保护三级》,QRadar 是一款由 IBM 提供的安全信息和事件管理(SIEM)产品,可以帮助监控和分析安全事件。要将 QRadar 与等保三级保护需求相结合,需要确保 QRadar 部署满足等保要求。具体操作可能包括物理安全、网络安全、主机安全和应用安全等方面的配置和监控。

使用QRadar的Syslog协议

    • MariaDB Audit Plugin可以配置为将日志以Syslog格式发送到QRadar,这是一种常见的集成方法。

 

总结


 

由于篇幅有限,暂没有编写其他日志审计平台。等保3.0的推出是响应国家关于网络安全和信息安全相关法律法规的要求,如《网络安全法》等。这些法律法规明确规定了网络运营者应采取技术措施记录并保存网络日志,以应对可能的安全事件和调查取证。数据审计日志记录了系统的所有操作行为和事件,包括正常操作和异常行为。通过对这些日志的实时监测和分析,可以及时发现潜在的安全威胁,并采取相应的响应措施,防止安全事件的发生或扩大。在发生安全事件后,数据审计日志是进行事后追溯和调查的重要依据。通过审查日志记录,可以还原事件发生的整个过程,确定事件的原因、责任人和影响范围,为事件的处理和整改提供有力支持。数据审计日志也是运维监控的重要手段之一。通过对日志的定期审查和分析,可以了解系统的运行状况和性能瓶颈,为运维团队提供优化和改进的依据。通过对数据访问和操作行为的审计记录,可以及时发现并阻止数据泄露等安全事件。同时,在发生数据泄露事件后,也可以快速定位泄露源和泄露路径,减少损失和影响。

在实践产品与架构选型设计中,我们应以实践为主,官方提供功能不一定适合我们实践情况,通常我们可以挖掘更优秀的技术方案。


 

 

Megadotnet
为您介绍各体系平台的新闻,系统研发相关框架,组件,方法,过程,运维,设计。企业IT与互联网信息系统或产品解决方案。开源项目,项目管理。
 最新文章