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. C#——Marshal.StructureToPtr方法简介

    目录 MarshalStructureToPtr方法简介 功能及位置 语法 参数说明 异常 备注 举例 本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三 ...

  2. ReactNative运行提示缺少文件xxxRootView.h解决方法

    我们经常在github获取源码后运行会出现缺少 "RCTRootView.h" notfound" 文件的错误,对于这种错误我们怎么解决了. 1.cd到项目根目录 删除项 ...

  3. ROS系统python代码测试之rostest

    ROS系统中提供了测试框架,可以实现python/c++代码的单元测试,python和C++通过不同的方式实现, 之后的两篇文档分别详细介绍各自的实现步骤,以及测试结果和覆盖率的获取. ROS系统中p ...

  4. Openwrt dnsmasq 设置要点

    之前设置dnsmasq,一直没有奏效,后来摸索了一下,初步发现它的原理: 正常的流程应该是像这样的,先由client来发送DNS请求到网关,然后网关的dnsmasq处理这个请求, 再根据设置决定如何处 ...

  5. 工作随笔——pre-commit钩子限制日志长度和提交的文件类型

    2014-09-18:解决Subversion edge 的hook中文乱码问题 近期检查SVN时发现备份好的文件体积异常庞大.才跑2个月备份出来的大小就有4G多.仔细查询发现很多很多IDE自动生成的 ...

  6. xmind 使用备忘

    快捷键: shift+enter 编辑文字时回车换行 enter 快速建立同级主题(纵向) tab 快速建立子主题(横向) F4 插入注释 alt+左键+移动 拖动 shift+左键+移动 将元素脱离 ...

  7. CoordinatorLayout自定义Bahavior特效及其源码分析

    @[CoordinatorLayout, Bahavior] CoordinatorLayout是android support design包中可以算是最重要的一个东西,运用它可以做出一些不错的特效 ...

  8. Python 一些总结和比较

    数据类型

  9. python学习笔记整理——dictView [未整理]

    Dictionary view objects简介 The objects returned by dict.viewkeys(), dict.viewvalues() and dict.viewit ...

  10. c# Winform 开发分屏显示应用程序

    分屏显示即可把一台主机内运行的多个程序分别显示在不同的两个(或多个)屏幕上.目前市面上主流的显卡都支持分屏显示(显示双屏幕),如果需要显示2个以上的屏幕,则应使用“拖机卡”类的硬件. 设置分屏显示的两 ...