catalog

. 数据库日志审计产品
. Mysql日志审计
. SQLServer日志审计

1. 数据库日志审计产品

Relevant Link:

http://enterprise.huawei.com/cn/products/security/security-management/security-management-system/hw-143212.htm
http://www.dbappsecurity.com.cn/products/products03.html
http://www.nsfocus.com.cn/upload/contents/2015/04/2015_04021455110.pdf
http://baike.baidu.com/view/3993625.htm

2. Mysql日志审计

0x1: audit插件方式

在MySQL数据库中(5.5版本),增加了一个新的插件:Audit plugin,用于对数据库连接和数据库操作进行审计。该插件在mysql5.6.20企业版及其后续版本才比较完善

1. 安装

可通过两种方式加载

. 配置my.cnf文件
[mysqld]
plugin-load=audit_log.so
如果想要在运行过程中该插件不被移除,配置如下
[mysqld]
plugin-load=audit_log.so
audit-log=FORCE_PLUS_PERMANENT
该加载方式不会被注册到mysql.plugins表中,如果在my.cnf中移除配置选项将会导致审计失败 . 在mysql中动态加载
进入mysql数据库执行如下sql语句
mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
该选项会被注册到mysql.plugins表中,数据库后续的重启,该插件都会被加载 . 查看所有加载的插件
可通过如下两个命令查看所有已经加载的插件
) SHOW PLUGINS;
) select * from INFORMATION_SCHEMA.PLUGINS;

0x2: general_log

mysql中监控的主要原理是开启mysql的general_log来记录mysql的历史执行语句,它有两种记录方式

. 默认是通过记录到文件方式
. 另外一种是通过直接记录到mysql库的general_log表中

直接用mysql的sql语句开启,sql语句如下

set global general_log=on;
SET GLOBAL log_output='table';

查看log日志磁盘位置

show global variables like "%genera%";

Relevant Link:

http://blog.csdn.net/jesseyoung/article/details/41116867
http://itindex.net/detail/51728-sql-mysql-mssql

3. SQLServer日志审计

Mssql执行监控,在sqlserver 上自带有一个性能监控的工具SQL Server Profiler,在开始菜单里可以找到它,使用SQL Server Profiler可以将SQL执行过程保存到文件和数据库表,同时它还支持实时查看和搜索

0x1: 监控事件

一个事件表现SQL Server中执行的各种活动。这些活动可以简单地分类为

. 事件类
. 游标事件
. 锁事件
. 存储过程事件
. T-SQL事件

对于性能分析,主要关注SQL Server上执行的各种活动的资源压力水平的事件。资源压力主要包含如下内容

. SQL活动涉及哪一类的CPU使用
. 使用了多少内存
. 涉及多少I/0操作
. SQL活动执行了多长时间
. 特定的查询执行的频率有多高
. 查询面对哪类错误和警告

跟踪查询结束的事件

. Security Audit(安全审计): 记录用户连接到SQL Server或断开连接时数据库的连接
) Audit Login(登录审计)
) Audit Logout(注销审计)
. Sessions(会话)
) ExistingConnection(现有连接): 表示所有在跟踪开始之间连接到SQL Server的用户
. Cursors(游标)
) CursorImplicitConversion(游标隐含转换): 表明创建的游标类型与所请求的类型个不同
. Errors and Warnings(错误和警告)
) Attention(注意): 表示由于客户端撤销查询或者数据库连接破坏引起请求中断
) Exception(异常): 表明SQL Server发生了异常
) Execution Warning(执行警告): 表明在查询或存储过程执行期间出现了警告
) Hash Warning(哈希警告): 表明hash操作发生了错误
) Missing Column Statistics(列统计丢失): 表明优化器要求的确定处理策略用的类统计丢失
) Missing Join Predicate(连接断言丢失) 表明查询在两个表没有连接断言情况下执行
) Sort Warning(排序警告): 表明像SELECT这样的查询中执行排序操作没有合适的内存
. Locks(锁)
) Lock:Deadlock(死锁): 标志着死锁的出现
) Lock:Deadlock Chain(死锁链): 显示产生死锁的查询链条
) lock:Timeout(锁超时): 表示锁已经超过其超时参数,该参数由SETLOCK_TIMEOUT timeout_perious(ms)命令设置
. Stored Procedures(存储过程)
) SP:Recompile(重编译): 表明用于一个存储过程的执行计划必须重编译,原因是执行计划不存在,强制的重编译,或者现有的执行计划不能重用
) SP:Starting(开始): 表示一个SP:StmtStarting存储过程的开始
) SP:StmtStarting(语句开始): 表示一个SP:StmtStarting存储过程中的一条SQL语句的开始
) RPC:Completed: RPC完成事件,RPC事件表示存储过程使用远程过程调用(RPC)机制通过OLEDB命令执行。如果一个数据库应用程序使用T-SQL EXECUTE语句执行一个存储过程,那么存储过程将被转化为一个SQL批而不是一个RPC。RPC请求通常比EXECUTE请求快,因为它绕过了SQL Server中的许多语句解析和参数处理
) SP:Completed: 存储过程完成事件
) SP:StmtCompleted: 在存储过程中一条SQL语句完成事件
. Transactions(事物)
) SQLTransaction(SQL事务): 提供数据库事务的信息,包括事务开始/结束的时间、事务持续事件等信息
. T-SQL
) SQL:BatchCompleted: T-SQL批完成事件,T-SQL由一条或多条T-SQL语句组成。语句或T-SQL语句在存储过程中也是单独和离散的。用SP:StmtCompleted或SQL:StmtCompleted事件捕捉单独的语句可能是代价很高的操作,这取决于单独语句的数量
) SQL:StmtCompleted: 一条T-SQL语句完成事件

0x2: 事件列

. EventClass(事件类): 事件类型,如SQL:StatementCompleted
. TextData: 事件所用的SQL语句,如SELECT * FROM Person
. CPU: 事件的CPU开销(以ms表示),如对一个SELECT语句,CPU=100表示该语句执行100ms
. Reads: 为一个事件所执行的逻辑读操作数量。例如对一个SELECT语句,Reads=800表示该语句需要800次逻辑读操作
. Writes: 为一个事件所执行的逻辑写操作数量
. Duration: 事件的执行时间(ms)
. SPID: 用于该事件的SQL Server进程标识符
. StartTime: 事件开始的时间
. BinaryData(二进制数据)
. IntegerData(整数数据)
. EventSubClass(事件子类)
. DatabaseID(数据库标识符)
. ObjectID(对象标识符)
. IndexID(索引标识符)
. TransactionID(事务标识符)
. Error(错误)
. EndTime(结束时间)

0x3: 启动日志审计

/****************************************************/
/* Created by: SQL Server 2008 R2 Profiler */
/* Date: 2015/12/31 16:54:56 */
/****************************************************/ -- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
set @maxfilesize = -- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:\MyFolder\MyTrace. The .trc extension
-- will be appended to the filename automatically. If you are writing from
-- remote server to local drive, please use UNC path and make sure server has
-- write access to your network share exec @rc = sp_trace_create @TraceID output, , N'InsertFileNameHere', @maxfilesize, NULL
if (@rc != ) goto error -- Client side File and Table cannot be scripted -- Writing to a table is not supported through the SP's -- Set the events
declare @on bit
set @on =
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on
exec sp_trace_setevent @TraceID, , , @on -- Set the Filters
declare @intfilter int
declare @bigintfilter bigint exec sp_trace_setfilter @TraceID, , , , N'SQL Server Profiler - 196ba3b9-dbd4-496e-b163-fa1ff7667592'
-- Set the trace status to start
exec sp_trace_setstatus @TraceID, -- display trace id for future references
select TraceID=@TraceID
goto finish error:
select ErrorCode=@rc finish:
go

0x4: 提取SQL执行日志

SELECT
[EventClass]
,[TextData]
,[ApplicationName]
,[NTUserName]
,[LoginName]
,[SPID]
,[StartTime]
,[BinaryData]
FROM
[master].[dbo].[sqllog]
WHERE
ApplicationName != 'Report Server'
GO

0x5: 恶意分析

. 异常登录、登出:
. 异常指令执行
. 可疑SQL注入

2. 异常指令执行

. EXEC
. master..xp_cmdshell
. sp_configure
. master.dbo.sp_addlogin
. master.dbo.sp_addsrvrolemember
. master.dbo.xp_servicecontrol
. sp_oacreate
. wscript.shell
. sp_oamethod
. sp_add_jobstep
. sp_add_jobserver
. sp_start_job
. xp_regenumvalues
. addextendedproc
. master..xp_regwrite
. master.dbo.xp_regread
. ias.mdb
. Microsoft.Jet.OLEDB
. sp_addlinkedserver
. sp_makewebtask
. master..xp_availablemedia
. master..xp_dirtree
. master..xp_enumdsn
. master..xp_loginconfig
. master..xp_makecab
. master..xp_ntsec_enumdomains
. master..xp_terminate_process
. sp_add_job
. sp_OACreate
. sp_OASetProperty
. sp_OAMethod

3. 可疑SQL注入

. "((e|\.|)\d|\\n)union.{1,10}select"
. "(\bsha1\s{0,5}\(|\bpassword\s{0,5}\(|\bencode\s{0,5}\(|\bschema\s{0,5}\(|\bconvert\s{0,5}\(|\bhost_name\s{0,5}\(|\bopendatasource\s{0,5}\(|\bopenrowset\s{0,5}\(|\bsysaux\s{0,5}\(|\bis_member\s{0,5}\(|\@\@spid|\@\@version)"
. "((substr|substring)\((concat|concat_ws|group_concat|lower|upper|left|right)\()|((ascii|hex|ord)\(substr)|(length\((trim|replace)\()|((cast|substr|substring|length)\((user|version|database)\()|((asc|locate)\((mid|substr))||COOKIE^^[r]((substr|substring)\((concat|concat_ws|group_concat|lower|upper|left|right)\()|((ascii|hex|ord)\(substr)|(length\((trim|replace)\()|((cast|substr|substring|length)\((user|version|database)\()|((asc|locate)\((mid|substr))"
. "(into.{1,10}(outfile|dumpfile)|load_file\()||COOKIE^^[r](into.{1,10}(outfile|dumpfile)|load_file\()"
. "(name_const|concat(_ws)?)\(.{1,100}from.{1,15}information_schema||COOKIE^^[r](name_const|concat(_ws)?)\(.{1,100}from.{1,15}information_schema"
. "/\*.{0,50}\*/"
. "(updatexml|extractvalue|ascii|\bhex|\bbin|\bord|\bconv|substring|substr|instr|strcmp|\bmid|\bcast|length|benchmark|sleep|pg_sleep|version|\buser|(current|system)_user|datadir|load_file|concat|concat_ws|group_concat|md5)\(||USER_AGENT^^[r](updatexml|extractvalue|ascii|\bhex|\bbin|\bord|\bconv|substring|substr|instr|strcmp|\bmid|\bcast|length|benchmark|sleep|pg_sleep|version|\buser|(current|system)_user|datadir|load_file|concat|concat_ws|group_concat|md5)\(||REFERER^^[r](updatexml|extractvalue|ascii|\bhex|\bbin|\bord|\bconv|substring|substr|instr|strcmp|\bmid|\bcast|length|benchmark|sleep|pg_sleep|version|\buser|(current|system)_user|datadir|load_file|concat|concat_ws|group_concat|md5)\("

Relevant Link:

http://itindex.net/detail/51728-sql-mysql-mssql

Copyright (c) 2015 LittleHann All rights reserved

最新文章

  1. django 实战 - eLeave Form
  2. Android BroadcastReceiver广播接受者
  3. ios 开发 收起键盘的小技巧
  4. VB 思维导图总结(二)
  5. IAR 1.3 for STM8 ST-Link无法调试 无法仿真 the debugging session could not be started
  6. Java中的属性与字段的区别
  7. Window10安装TestLink,以及登录mysql数据库的错误处理
  8. SQLServer查看和解决死锁的方法
  9. mvc中动态给一个Model类的属性设置验证
  10. 1094:零起点学算法01——第一个程序Hello World!
  11. .net随笔--不好归类的
  12. python3.4 UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position
  13. Hibernate最全面试题
  14. chrome 如何卸载干净
  15. Oracle 12导出、导入数据
  16. css3(display)
  17. linux下启动tomcat服务
  18. vagrant 虚拟机中安装 lnamp 环境
  19. WebSocket获取httpSession空指针异常的解决办法
  20. 使用Unified Auditing Policy审计数据泵导出操作

热门文章

  1. Android各种屏幕适配原理
  2. 清北学堂2017NOIP冬令营入学测试P4747 D’s problem(d)
  3. springmvc集成shiro登录失败处理
  4. C#微信公众号开发系列教程五(接收事件推送与消息排重)
  5. java文件cmd运行出现中文乱码
  6. Libliner 中的-s 参数选择:primal 和dual
  7. JavaScript学习笔记- 自定义滚动条插件
  8. spring配置属性的两种方式
  9. MVC 中的 ispostback
  10. Go语言interface详解