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

Windows Sqlserver Automatic Log Audit Via C/C++的更多相关文章

  1. windows 下 nginx log 分割

    默认 nginx 不支持 log自动分割     windows下 解决方案:    1.首先创建bat脚本 split_log.bat , 并保存在nginx 目录下: @echo off rem ...

  2. windows 清理 cbs.log 文件

    请参考以下步骤 1.win+r输入 services.msc进入服务,找到并双击Windows Modules Installer点击停止, 2.然后就可以手动删除 3.按一的步骤开启TrustedI ...

  3. DBA_Oracle日志文件 - altert / trace /audit / redo / archive log(概念)

    2014-07-26 Created By BaoXinjian

  4. Microsoft SQL Server Version List [sqlserver 7.0-------sql server 2016]

    http://sqlserverbuilds.blogspot.jp/   What version of SQL Server do I have? This unofficial build ch ...

  5. SqlServer 版本号

    RTM (no SP) SP1 SP2 SP3 SP4 SQL Server 2014      codename Hekaton  12.00.2000.8 SQL Server 2012      ...

  6. Windows Server 2016 桌面环境的自动配置脚本

    除非学习要求,还是建议使用Windows 10 LTSB 2016或其他桌面系统. github:https://github.com/m2nlight/WindowsServerToWindowsD ...

  7. Windows下apache php wordpress配置

    2. Use notepad to open httpd.conf config file. Make use the line "LoadModule rewrite_module mod ...

  8. Understanding postgresql.conf : log*

    After loooong pause, adding next (well, second) post to the “series“. This time, I'd like to describ ...

  9. Common Linux log files name and usage--reference

    reference:http://www.coolcoder.in/2013/12/common-linux-log-files-name-and-usage.html if you spend lo ...

随机推荐

  1. Linux Linux下特殊的printf函数和fputs函数

    Linux下,printf函数必须以'\n'结尾才会立刻输出到屏幕,如果没有'\n'直到输出缓冲区满了以后才会打印到屏幕上(敲击换行也算),如果需要不换行的输出,一般可以使用write函数代替.'\n ...

  2. 建立mvc过程

    1.public class   dbContext:Dbcontext { private readonly static string CONNECTION_STRING="name=d ...

  3. echo使用说明,参数详解

    简介 echo [OPTION]... [STRING]... 描述 -n 末尾不加换行 -e 开启输出字串中对反斜杠的转译 -E 禁用反斜杠转译 只有开启-e参数的时候,下面的命令才能起作用: \0 ...

  4. JAVA CDI 学习(2) - Scope 生命周期

    在上一节中,我们已经知道了如何用@Inject实现基本注入,这一节研究Bean实例注入后的“生命周期”,web application中有几种基本的生命周期(不管哪种编程语言都类似) 1.Applic ...

  5. MATLAB读取和写入Excel文件

    1. 读取Excel文件 (a) 命令方式xlsread:  读取命令:[data,text]  = xlsread(FileName, SheetName, Range); data保存的是数据单元 ...

  6. Android回调

    当A页面跳往B页面做一些操作后,再从B页面回到A页面时,A页面想要回去一些B页面操作的数据时,我们一般会使用回调. 1 public class MainActivity extends Activi ...

  7. iOS 监听textfield的输入(转)

    1:首先 [textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEvent ...

  8. 39-tar 打包压缩

    将文件存储到归档文件中或者从归档文件中获取原始文件,以及为文件创建归档文件 tar [option] [modifiers] [file-list] 参数 file-list是tar进行归档和提取的文 ...

  9. display:block、display:inline与displayinline:block的概念和区别

    总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...

  10. webservice的常用注解

    定义说明书的显示方法1.@WebService(serviceName="PojoService", portName="PojoPort", name=&qu ...