MYSQL8安全之审计管理
-
审计概念
-
一、MYSQL8开源审计mysql-audit
-
* mysql-audit安装配置
-
0、下载解压插件
-
1、查看mysql的插件位置
-
2、上传库文件到插件目录
-
3. 修改my.cnf
-
4、安装插件
-
5、查看mysql-audit日志
-
安装插件报错
-
* 解决办法:
- 1、计算偏移量
- 2、将偏移量添加到my.cnf中
- 3、添加偏移量依然报错
-
-
二、MYSQL自带的init-connect+binlog实现mysql审计
-
* 1、创建一份存放连接信息的表
- 2、配置权限
- 3、配置init-connect
- 4、记录和跟踪测试
审计概念
审计:记录用户的操作,方便以后查证,但生产环境
数据库本身不建议
开启,会影响性能,可以使用第三方
实现审计。
一、MYSQL8开源审计mysql-audit
mysql5.7企业版
自带审计功能,需要付费
。
社区版
可以使用McAfee
提供的开源软件mysql Audit Pluging
项目地址:https://github.com/trellix-enterprise/mysql-audit
mysql-audit安装配置
0、下载解压插件
# 下载插件压缩包
wget -c https://github.com/trellix-enterprise/mysql-audit/releases/download/v1.1.13/audit-plugin-mysql-8.0-1.1.13-1008-linux-x86_64.zip
# 解压
unzip audit-plugin-mysql-8.0-1.1.13-1008-linux-x86_64.zip
# 进入lib目录
cd audit-plugin-mysql-8.0-1.1.13-1008/lib
# 赋予可执行权限
chmod +x libaudit_plugin.so
# 修改属主和属组为msyql:mysql
chown mysql:mysql libaudit_plugin.so
1、查看mysql的插件位置
-- 查看插件的位置
SHOW global variables LIKE '%plugin_dir%';
![image.png](https://img-
blog.csdnimg.cn/img_convert/7bc68325bc32f0195815a72cea6b0bd3.png#averageHue=#282727&clientId=u5aa656e8-85f0-4&from=paste&height=110&id=u5356bdf9&originHeight=220&originWidth=1060&originalType=binary&ratio=2&rotation=0&showTitle=false&size=89136&status=done&style=none&taskId=u9eea1748-f6c2-4536-890e-1e972abf951&title=&width=530)
2、上传库文件到插件目录
# 复制到插件目录
cp audit-plugin-mysql-8.0-1.1.13-1008/lib/libaudit_plugin.so /usr/lib64/mysql/plugin/
3. 修改my.cnf
# 停止mysqld服务
systemctl stop mysqld
修改my.cnf
配置文件
[mysqld]
# 加载名为 libaudit_plugin.so 的AUDIT审计插件
plugin-load=AUDIT=libaudit_plugin.so
# 启用审计日志以JSON格式记录
audit_json_file=on
# 指定事件审计文件路径
audit_json_log_file=/var/log/mysql-audit.json
# 指定审计事件类型
## 如果不指定audit_record_cmds,所有DDL,DML全记录
audit_record_cmds='insert,delete,update,create,drop,alter,grant,truncate'
![image.png](https://img-
blog.csdnimg.cn/img_convert/84aaeb091434bcd9d992c210893254c9.png#averageHue=#f2f2f2&clientId=u5aa656e8-85f0-4&from=paste&height=105&id=uda096acd&originHeight=210&originWidth=1012&originalType=binary&ratio=2&rotation=0&showTitle=false&size=114576&status=done&style=none&taskId=ueb745846-9ff8-4f61-a67b-f86763901cd&title=&width=506)
启动mysqld服务
-- 启动mysqld服务
systemctl start mysqld
4、安装插件
-- root登录mysql
mysql -uroot
-- 安装audit插件
install plugin audit soname 'libaudit_plugin.so';
-- 查看audit插件版本
SHOW global status LIKE 'audit_version';
![image.png](https://img-
blog.csdnimg.cn/img_convert/194ca1f1faacab72f8aba575eabb344b.png#averageHue=#073008&clientId=u5aa656e8-85f0-4&from=paste&height=68&id=DIz1R&originHeight=136&originWidth=1392&originalType=binary&ratio=2&rotation=0&showTitle=false&size=183209&status=done&style=none&taskId=u4daec061-4e38-4b4b-8418-56d0a56f62e&title=&width=696)
5、查看mysql-audit日志
json查看工具:https://blog.csdn.net/omaidb/article/details/125581170
# 查安装json查看工具jq
dnf install jq -y
# 查看最后100条日志
tail -100 /var/log/mysql-audit.json
# 用jq查看json格式日志
tail -100 /var/log/mysql-audit.json |jq
安装插件报错
安装libaudit_plugin.so
插件报错。
![image.png](https://img-
blog.csdnimg.cn/img_convert/4ec1f3c441cd33068bf23bf19d6f19e5.png#averageHue=#ebecea&clientId=u5aa656e8-85f0-4&from=paste&height=278&id=qjvEt&originHeight=556&originWidth=1460&originalType=binary&ratio=2&rotation=0&showTitle=false&size=810076&status=done&style=none&taskId=ubf9f6a0b-bba7-4b87-bdb4-6a214f8fc91&title=&width=730)
解决办法:
计算mysqld
的偏移量
,重新指定mysqld
偏移量。
1、计算偏移量
# 安装gdb包
dnf install -y gdb
# 找到offset-extract.sh脚本
![image.png](https://img-
blog.csdnimg.cn/img_convert/555912f7d8d7c4bc54a270484d5ae82a.png#averageHue=#2d2d2d&clientId=u5aa656e8-85f0-4&from=paste&height=108&id=SUkcT&originHeight=216&originWidth=880&originalType=binary&ratio=2&rotation=0&showTitle=false&size=87247&status=done&style=none&taskId=ued6112d3-3179-4743-8ed6-7b2664bfc3a&title=&width=440)
# 使用offset-extract.sh脚本计算偏移量
offset-extract.sh /usr/sbin/mysqld
2、将偏移量添加到my.cnf中
![image.png](https://img-
blog.csdnimg.cn/img_convert/3249e486a8faab1ba8ff948700ed3f4b.png#averageHue=#f4f3f3&clientId=u5aa656e8-85f0-4&from=paste&height=118&id=A5g6h&originHeight=236&originWidth=2088&originalType=binary&ratio=2&rotation=0&showTitle=false&size=273187&status=done&style=none&taskId=u8b8010b2-9dd8-4c92-81ac-0d8c2fe8011&title=&width=1044)
[mysqld]
audit_offsets=计算出的偏移量
![image.png](https://img-
blog.csdnimg.cn/img_convert/e3c98787b6045bc32d70543bbe68af6e.png#averageHue=#062006&clientId=u5aa656e8-85f0-4&from=paste&height=83&id=XtFAB&originHeight=166&originWidth=2868&originalType=binary&ratio=2&rotation=0&showTitle=false&size=420566&status=done&style=none&taskId=u1b8ed817-8cf1-4c80-9f0d-a98ead20d2f&title=&width=1434)
3、添加偏移量依然报错
![image.png](https://img-
blog.csdnimg.cn/img_convert/bfd324420ca73b1379bd3a411581a723.png#averageHue=#dad5ce&clientId=u5aa656e8-85f0-4&from=paste&height=107&id=q8zM6&originHeight=214&originWidth=1284&originalType=binary&ratio=2&rotation=0&showTitle=false&size=222679&status=done&style=none&taskId=uf66decf6-ccf0-4641-b199-1abdc7d280e&title=&width=642)
二、MYSQL自带的init-connect+binlog实现mysql审计
1、创建一份存放连接信息的表
-- 创建一份存放连接信息的表
CREATE database auditdb DEFAULT CHARSET utf8mb4;
-- 进入auditdb库
use auditdb;
-- 创建auditdb.accesslog(访问日志)表
CREATE TABLE auditdb.accesslog(
ID INT PRIMARY KEY auto_increment,
ConnectionID INT,
ConnUserName VARCHAR(30),
PrivMatchName VARCHAR(30),
LoginTime timestamp
);
2、配置权限
-- 配置权限
-- 向mysql.db表中插入一条记录,授权所有用户在任意主机上访问auditdb数据库,并具有select和insert的操作权限。
-- host、db、user、select_priv和insert_priv是该表中的字段名;
-- %代表通配符,表示任何IP地址都可以使用此记录匹配;
-- 'auditdb'表示要授权的数据库名称,这里为auditdb;
-- ''表示要授权的用户名称,这里为空字符串,表示所有用户都能匹配上此记录;
-- YY表示该用户对auditdb数据库有select和insert操作的权限。
INSERT into mysql.db(host, db, user, select_priv, insert_priv)
values('%', 'auditdb', '', 'Y', 'Y');
-- 提交事务
cmomit;
-- 应用权限配置
FLUSH PRIVILEGES;
3、配置init-connect
![image.png](https://img-
blog.csdnimg.cn/img_convert/431d1e9bfeb21e1a9958b59d65824f98.png#averageHue=#2c2c2c&clientId=u5aa656e8-85f0-4&from=paste&height=163&id=u034daa12&originHeight=326&originWidth=980&originalType=binary&ratio=2&rotation=0&showTitle=false&size=172949&status=done&style=none&taskId=uf7c38e80-73b2-49b3-9bb4-a83b0789839&title=&width=490)
# 此项配置可以用于记录所有数据库连接的基本信息,以方便审计和监控。
# init-connect:在每个新客户端连接成功后,将执行SQL语句
# 往名为"auditdb.accesslog"的表中插入一条记录,该记录包含连接ID(ConnectionID)、连接用户名(ConnUserName)、权限匹配名(PrivMatchName)和登录时间(LoginTime)等信息。
## connection_id()函数用于获取当前连接的ID,
## user()函数用于获取当前连接的用户名,
## current_use()函数用于获取当前连接所使用的权限匹配名
## now()函数则用于获取当前的系统时间。
init-connect='INSERT into auditdb.accesslog(ConnectionID,ConnUserName,PrivMatchName,LoginTime) values(connection_id(),user(),current_use(),now());'
# 指定binlog的存储路径和文件名前缀
## binlog记录所有对数据库的修改操作,包括插入、更新和删除
log_bin=/var/lib/mysql/binlog
# 指定binlog索引文件的存储路径和文件名
log_bin_index=/var/lib/mysql/binlog.index
重启mysqld服务
# 重启msyql服务
systemctl restart mysqld
4、记录和跟踪测试
如果是root
登录,不会记录
信息。
# 使用 mysqlbinlog 工具读取名为 binlog.000001 的二进制日志文件
## --start-datetime 和 --stop-datetime 参数分别指定了要搜索的时间范围,即从 2018 年 4 月 12 日 16:53:00 开始,到 2018 年 4 月 12 日 16:55:00 结束
## -i 参数表示忽略大小写
## grep -B 20 显示匹配的前20行
mysqlbinlog --start-datetime='2018-04-12 16:53:00' --stop-datetime='2018-04-12 16:55:00' binlog.000001 |grep -i '关键字' -B 20
![image.png](https://img-
blog.csdnimg.cn/img_convert/ef50d18f9c60f38648e232746cd39c7a.png#averageHue=#0a300b&clientId=u5aa656e8-85f0-4&from=paste&height=82&id=u6d4ea650&originHeight=164&originWidth=1946&originalType=binary&ratio=2&rotation=0&showTitle=false&size=306655&status=done&style=none&taskId=u051ba6cb-2cff-4732-bf82-3b074d329f8&title=&width=973)
![image.png](https://img-
blog.csdnimg.cn/img_convert/fe2b1e6edfebb146efeab65526bb60af.png#averageHue=#084e09&clientId=u5aa656e8-85f0-4&from=paste&height=107&id=uf9857b9a&originHeight=214&originWidth=1036&originalType=binary&ratio=2&rotation=0&showTitle=false&size=293496&status=done&style=none&taskId=u1c7cf043-4b9b-4b1b-8ba9-6a442d3bfbb&title=&width=518)
![image.png](https://img-
blog.csdnimg.cn/img_convert/c482bc58ab6b3f426548069a55c2cf7c.png#averageHue=#050502&clientId=u5aa656e8-85f0-4&from=paste&height=284&id=u7dc1b2aa&originHeight=568&originWidth=2616&originalType=binary&ratio=2&rotation=0&showTitle=false&size=967270&status=done&style=none&taskId=u74745688-0e71-49b3-96ac-6f31b95605a&title=&width=1308)
-- 查看访问日志表
slect * from auditdb.accesslog;
![image.png](https://img-
blog.csdnimg.cn/img_convert/727efc9df31f66f3c069b1d42be0878d.png#averageHue=#072907&clientId=u5aa656e8-85f0-4&from=paste&height=202&id=uf78277d5&originHeight=404&originWidth=1920&originalType=binary&ratio=2&rotation=0&showTitle=false&size=608519&status=done&style=none&taskId=ue7aa3fb6-c7d1-41a1-b9d3-22c033ca434&title=&width=960)
学习网络安全技术的方法无非三种:
第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、
计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。
第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-
些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉[网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!](https://mp.weixin.qq.com/s/BWb9OzaB-
gVGVpkm161PMw)
第三种就是去找培训。
![image.png](https://img-
blog.csdnimg.cn/img_convert/58bec76876e81d23709a090231e9e0bf.png)
接下来,我会教你零基础入门快速入门上手网络安全。
网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。
第一阶段:基础准备 4周~6周
这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
![image.png](https://img-
blog.csdnimg.cn/img_convert/44dd65e103a3ce90b8500717e19b108d.png)
第二阶段:web渗透
学习基础 时间:1周 ~ 2周:
① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
![image.png](https://img-
blog.csdnimg.cn/img_convert/442b7a338582713846cc447ecff221bd.png)
配置渗透环境 时间:3周 ~ 4周:
① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。
渗透实战操作 时间:约6周:
① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
![image.png](https://img-
blog.csdnimg.cn/img_convert/820f500673a4a0a2432e6c3d7e2ba80e.png)
以上就是入门阶段
第三阶段:进阶
已经入门并且找到工作之后又该怎么进阶?详情看下图
![image.png](https://img-
blog.csdnimg.cn/img_convert/b28d31c9a3414e91ec46eb307d360eab.png)
给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉[网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!](https://mp.weixin.qq.com/s/BWb9OzaB-
gVGVpkm161PMw)
![](https://img-
blog.csdnimg.cn/img_convert/f51d8a539d747b63714eda08e3454f59.jpeg)
接下来我将给各位同学划分一张学习计划表!
学习计划
那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:
阶段一:初级网络安全工程师
接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。
综合薪资区间6k~15k
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?
阶段二:中级or高级网络安全工程师(看自己能力)
综合薪资区间15k~30k
7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。
零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;
Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完
用Python编写漏洞的exp,然后写一个简单的网络爬虫
PHP基本语法学习并书写一个简单的博客系统
熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)
了解Bootstrap的布局或者CSS。
阶段三:顶级网络安全工程师
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
学习资料分享
当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。
![](https://img-blog.csdnimg.cn/img_convert/9ecf7d2161c8198a776b0d37bd11fc31.jpeg)