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. [转]考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传

    FROM : https://segmentfault.com/a/1190000000725185 最近做的一个需求,要通过PHP调用cURL,以multipart/form-data格式上传文件. ...

  2. java:集合的自定义多重排序

    问题: 有一个乱序的对象集合,要求先按对象的属性A排序(排序规则由业务确定,非A-Z或0-9的常规顺序),相同A属性的记录,按根据属性B排序(排序规则,同样由业务确定,非常规顺序) -前提:业务规则是 ...

  3. UML:类图复习-鸡生蛋,蛋生鸡

    这是前一阵<高级软件工程>课堂上,老师随堂出的一道讨论题,随手贴在这里: ps: 今天是520,正好聊一些OoXx,关于爱的扯淡话题:) 题目:“鸡生蛋,蛋孵鸡”,世间万物生生不息,如何用 ...

  4. eclipse: workspace出错导致无法启用的解决

    通常我们会在eclipse中创建多个workspace,比如一个用于学习,一个用于工作... ,因为种种原因,时不时会发现eclipse切换workspace后启动失败,提示让你去看workspace ...

  5. Struts2 默认Action和模块包含

    在我们定义Action的时候会希望有一个默认的action在写错action时或者不写action时不至于报错 这里我只写一个简单的strut.xml例子 <?xml version=" ...

  6. <实训|第十二天>用LVM对linux分区进行动态扩容

    [root@localhost~]#序言在linux中,我们安装软件的途径一般有那些,你们知道吗?在linux中,如果你的磁盘空间不够用了,你知道如何来扩展磁盘吗?动态扩容不仅在工作中还是在其他方面都 ...

  7. Oracle中修改表名遇到“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效”

    Oracle 11g中想修改表名: rename ASSETPORJECT to ASSETPROJECT; 结果提示:ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超 ...

  8. [BZOJ1924][Sdoi2010]所托门王的宝藏(缩点+DP)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1924 分析: 首先把传送门作为点建图 这个数据很弱的,没有那种卡你的. 把每行的情况存 ...

  9. [POJ2104]K-th Number

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 34048   Accepted: 10810 Ca ...

  10. DIV+CSS 星号*

    常常我们在DIV+CSS布局的时候会遇到2处使用星号“*”,一个为以星号*没有命名名称的CSS选择器:另外一个是在CSS选择器里以*开头的CSS属性单词样式-CSS星号-CSS *知识介绍.接下来DI ...