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:\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, 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. "(\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)" 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|\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