设为首页 - 加入收藏 - 网站地图 SecYe安全 Www.SecYe.Com - 国内网络信息安全IT技术门户网
当前位置:首页 > 网络安全 > 数据库安全 > 正文

数据库攻防与加固

时间:2017-03-21 10:08 来源:本站整理 作者:SecYe安全 阅读:

某比赛样题。

题目1

进入xserver-mysql,加固MySQL服务器,使所有的访问能被审计,要求通过对mysqld的启动项进行加固。

本题考点是“所有的访问能被审计”。

针对于mysql,基于init-connect+binlog可以完成审计功能。
 

init-connect+binlog建立过程

  1. 建立数据表,用来存储相关信息。

1
2
3
4
5
6
7
8
create database AuditDB default charset utf8;
use AuditDB;
create table accesslog (
ID int primary key auto_increment,
ConnectionID int,
ConnUserName varchar(30),
PrivMatchName varchar(30),
LoginTIme timestamp);

注意,以后每添加一个用户都必须授权此表的插入权限,否则会连接不上mysql。

  1. 赋予所有用户对AuditDB数据库的写权限。

1
2
insert into db (Host,Db,User,Insert_priv) values ('%','AuditDB','','Y');
flush privileges;

  1. 设置init_connect、log-bin并重启mysql服务

编辑MySQL的配置文件,/etc/mysql/my.conf,在[mysqld]下面添加:

1
2
3
init-connect='insert into AuditDB.accesslog (ConnectionID,ConnUserName,PrivMatchName,LoginTime) values(connection_id(),user(),current_user(),now());'
 
log-bin=mysqlbin-log

最后重启mysql服务: service mysql restart

log-bin 参数设置的是MySQL生成的日志前缀,目录为:

每一次登陆,会生成一个二进制文件,需要用mysqlbinlog去查看,如图:

至此设置完成。

审计过程

比如想查看谁插入了一条带有world关键词的记录。
mysqlbinlog mysqlbin-log.000005

获得thread_id。
查询数据库审计表中的记录:

可知是zeal用户添加了一条带有关键词world的数据。

*注意,此方法只能审计非super权限用户的操作

题目2

配置Linux防火墙,允许MySQL服务能够被访问,要求规则中只包含端口项。

本题考查Linux下防火墙的使用。

MySQL的服务端口默认为3306端口,在防火墙上对3306端口启用ACCEPT规则即可。

1
2
3
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables status

题目3

进入xserver-mysql,查看所有用户及权限,找到可以从任何IP的值访问的用户。

本题考查mysql用户相关信息的查询。

在MySQL中,用户的信息存储在mysql数据库的user表中。host列为用户可登陆的地址。%为任意地址。

select user,host from mysql.user

题目4

对题号3中的漏洞进行加固,核定该用户只能从公司PC-1使用,用grant命令进行管理。

本题考查MySQL中,用grant管理用户的知识。

登陆root用户。

grant all privileges on *.* to sdust@xxx.xxx.xxx.xxx identified by 'passowrd';

xxx.xxx.xxx.xxx 为PC-1的IP地址。

题目5

检查xserver-mysql中是否存在数据库匿名用户,如果存在数据库匿名用户,则删除该用户。

本题考查MySQL数据库中匿名用户相关知识。

匿名用户:

安装完MySQL以后会自动创建一个root用户和一个匿名用户,对于root大家都非常注意,而这个匿名用户很多人都会忽略,大概是因为匿名用户默认设定为只能在本地使用的缘故吧。

但匿名用户几乎拥有与root一样的权限,当网站被入侵,黑客找不到root的密码,可以通过匿名用户,实现与root权限相同的功能,进行提权。

删除方法

delete from mysql.user where user='';

题目6

改变MySQL管理员的名称,将系统的默认管理员root改为admin。

update mysql.user set user='admin' where user='root';

题目7

禁止MySQL对本地文件进行存取,对mysqld的启动项进行加固。

本题考查利用MySQL数据库对服务器当中的文件进行存取的知识。

一般,黑客可通过root权限的注入点,去写shell(into outfile),或者读取服务器中的文件内容(load data)。

利用local-infile=0可以禁止对本地文件的存取。
将local-infile=0加入MySQL配置文件,mysqld下即可。

题目8

限制一般用户浏览其他用户数据库,对mysqld的启动项进行加固。

本文来源:SecYe安全网[http://www.secye.com] (责任编辑:SecYe安全)

点击复制链接 与好友分享!

顶一下
(0)
0%
踩一下
(0)
0%