Windows Sqlserver Automatic Log Audit Via C/C++

catalog

1. 数据库日志审计产品
2. Mysql日志审计
3. 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. 安装

可通过两种方式加载

1. 配置my.cnf文件 
[mysqld]  
plugin-load=audit_log.so  
如果想要在运行过程中该插件不被移除,配置如下 
[mysqld]  
plugin-load=audit_log.so  
audit-log=FORCE_PLUS_PERMANENT  
该加载方式不会被注册到mysql.plugins表中,如果在my.cnf中移除配置选项将会导致审计失败 

2. 在mysql中动态加载
进入mysql数据库执行如下sql语句 
mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';  
该选项会被注册到mysql.plugins表中,数据库后续的重启,该插件都会被加载

3. 查看所有加载的插件
可通过如下两个命令查看所有已经加载的插件
    1) SHOW PLUGINS;  
    2) select * from INFORMATION_SCHEMA.PLUGINS;  

0x2: general_log

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

1. 默认是通过记录到文件方式
2. 另外一种是通过直接记录到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中执行的各种活动。这些活动可以简单地分类为

1. 事件类
2. 游标事件
3. 锁事件
4. 存储过程事件
5. T-SQL事件 

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

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

跟踪查询结束的事件

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

0x2: 事件列

1. EventClass(事件类): 事件类型,如SQL:StatementCompleted
2. TextData: 事件所用的SQL语句,如SELECT * FROM Person
3. CPU: 事件的CPU开销(以ms表示),如对一个SELECT语句,CPU=100表示该语句执行100ms
4. Reads: 为一个事件所执行的逻辑读操作数量。例如对一个SELECT语句,Reads=800表示该语句需要800次逻辑读操作
5. Writes: 为一个事件所执行的逻辑写操作数量
6. Duration: 事件的执行时间(ms)
7. SPID: 用于该事件的SQL Server进程标识符
8. StartTime: 事件开始的时间
9. BinaryData(二进制数据)
10. IntegerData(整数数据)
11. EventSubClass(事件子类)
12. DatabaseID(数据库标识符)
13. ObjectID(对象标识符)
14. IndexID(索引标识符)
15. TransactionID(事务标识符)
16. Error(错误)
17. 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 = 5 

-- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:MyFolderMyTrace. 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, 0, N'InsertFileNameHere', @maxfilesize, NULL 
if (@rc != 0) 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 = 1
exec sp_trace_setevent @TraceID, 14, 1, @on
exec sp_trace_setevent @TraceID, 14, 9, @on
exec sp_trace_setevent @TraceID, 14, 6, @on
exec sp_trace_setevent @TraceID, 14, 10, @on
exec sp_trace_setevent @TraceID, 14, 14, @on
exec sp_trace_setevent @TraceID, 14, 11, @on
exec sp_trace_setevent @TraceID, 14, 12, @on
exec sp_trace_setevent @TraceID, 15, 15, @on
exec sp_trace_setevent @TraceID, 15, 16, @on
exec sp_trace_setevent @TraceID, 15, 9, @on
exec sp_trace_setevent @TraceID, 15, 17, @on
exec sp_trace_setevent @TraceID, 15, 6, @on
exec sp_trace_setevent @TraceID, 15, 10, @on
exec sp_trace_setevent @TraceID, 15, 14, @on
exec sp_trace_setevent @TraceID, 15, 18, @on
exec sp_trace_setevent @TraceID, 15, 11, @on
exec sp_trace_setevent @TraceID, 15, 12, @on
exec sp_trace_setevent @TraceID, 15, 13, @on
exec sp_trace_setevent @TraceID, 17, 1, @on
exec sp_trace_setevent @TraceID, 17, 9, @on
exec sp_trace_setevent @TraceID, 17, 6, @on
exec sp_trace_setevent @TraceID, 17, 10, @on
exec sp_trace_setevent @TraceID, 17, 14, @on
exec sp_trace_setevent @TraceID, 17, 11, @on
exec sp_trace_setevent @TraceID, 17, 12, @on
exec sp_trace_setevent @TraceID, 10, 15, @on
exec sp_trace_setevent @TraceID, 10, 16, @on
exec sp_trace_setevent @TraceID, 10, 9, @on
exec sp_trace_setevent @TraceID, 10, 17, @on
exec sp_trace_setevent @TraceID, 10, 2, @on
exec sp_trace_setevent @TraceID, 10, 10, @on
exec sp_trace_setevent @TraceID, 10, 18, @on
exec sp_trace_setevent @TraceID, 10, 11, @on
exec sp_trace_setevent @TraceID, 10, 12, @on
exec sp_trace_setevent @TraceID, 10, 13, @on
exec sp_trace_setevent @TraceID, 10, 6, @on
exec sp_trace_setevent @TraceID, 10, 14, @on
exec sp_trace_setevent @TraceID, 12, 15, @on
exec sp_trace_setevent @TraceID, 12, 16, @on
exec sp_trace_setevent @TraceID, 12, 1, @on
exec sp_trace_setevent @TraceID, 12, 9, @on
exec sp_trace_setevent @TraceID, 12, 17, @on
exec sp_trace_setevent @TraceID, 12, 6, @on
exec sp_trace_setevent @TraceID, 12, 10, @on
exec sp_trace_setevent @TraceID, 12, 14, @on
exec sp_trace_setevent @TraceID, 12, 18, @on
exec sp_trace_setevent @TraceID, 12, 11, @on
exec sp_trace_setevent @TraceID, 12, 12, @on
exec sp_trace_setevent @TraceID, 12, 13, @on
exec sp_trace_setevent @TraceID, 13, 1, @on
exec sp_trace_setevent @TraceID, 13, 9, @on
exec sp_trace_setevent @TraceID, 13, 6, @on
exec sp_trace_setevent @TraceID, 13, 10, @on
exec sp_trace_setevent @TraceID, 13, 14, @on
exec sp_trace_setevent @TraceID, 13, 11, @on
exec sp_trace_setevent @TraceID, 13, 12, @on


-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint

exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 196ba3b9-dbd4-496e-b163-fa1ff7667592'
-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1

-- 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: 恶意分析

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

2. 异常指令执行

1. EXEC
2. master..xp_cmdshell
3. sp_configure
4. master.dbo.sp_addlogin
5. master.dbo.sp_addsrvrolemember
6. master.dbo.xp_servicecontrol
7. sp_oacreate
8. wscript.shell
9. sp_oamethod
10. sp_add_jobstep
11. sp_add_jobserver
12. sp_start_job
13. xp_regenumvalues
14. addextendedproc
15. master..xp_regwrite
16. master.dbo.xp_regread
17. ias.mdb
18. Microsoft.Jet.OLEDB
19. sp_addlinkedserver
20. sp_makewebtask
21. master..xp_availablemedia
22. master..xp_dirtree
23. master..xp_enumdsn
24. master..xp_loginconfig
25. master..xp_makecab
26. master..xp_ntsec_enumdomains
27. master..xp_terminate_process
28. sp_add_job
29. sp_OACreate
30. sp_OASetProperty
31. sp_OAMethod

3. 可疑SQL注入

1. "((e|.|)d|\n)union.{1,10}select" 
2. "(sha1s{0,5}(|passwords{0,5}(|encodes{0,5}(|schemas{0,5}(|converts{0,5}(|host_names{0,5}(|opendatasources{0,5}(|openrowsets{0,5}(|sysauxs{0,5}(|is_members{0,5}(|@@spid|@@version)" 
3. "((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))"
4. "(into.{1,10}(outfile|dumpfile)|load_file()||COOKIE^^[r](into.{1,10}(outfile|dumpfile)|load_file()" 
5. "(name_const|concat(_ws)?)(.{1,100}from.{1,15}information_schema||COOKIE^^[r](name_const|concat(_ws)?)(.{1,100}from.{1,15}information_schema" 
6. "/*.{0,50}*/" 
7. "(updatexml|extractvalue|ascii|hex|bin|ord|conv|substring|substr|instr|strcmp|mid|cast|length|benchmark|sleep|pg_sleep|version|user|(current|system)_user|datadir|load_file|concat|concat_ws|group_concat|md5)(||USER_AGENT^^[r](updatexml|extractvalue|ascii|hex|bin|ord|conv|substring|substr|instr|strcmp|mid|cast|length|benchmark|sleep|pg_sleep|version|user|(current|system)_user|datadir|load_file|concat|concat_ws|group_concat|md5)(||REFERER^^[r](updatexml|extractvalue|ascii|hex|bin|ord|conv|substring|substr|instr|strcmp|mid|cast|length|benchmark|sleep|pg_sleep|version|user|(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

原文地址:https://www.cnblogs.com/LittleHann/p/5087727.html