Windows Sqlserver Automatic Log Audit Via C/C++
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++的更多相关文章
- windows 下 nginx log 分割
默认 nginx 不支持 log自动分割 windows下 解决方案: 1.首先创建bat脚本 split_log.bat , 并保存在nginx 目录下: @echo off rem ...
- windows 清理 cbs.log 文件
请参考以下步骤 1.win+r输入 services.msc进入服务,找到并双击Windows Modules Installer点击停止, 2.然后就可以手动删除 3.按一的步骤开启TrustedI ...
- DBA_Oracle日志文件 - altert / trace /audit / redo / archive log(概念)
2014-07-26 Created By BaoXinjian
- 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 ...
- SqlServer 版本号
RTM (no SP) SP1 SP2 SP3 SP4 SQL Server 2014 codename Hekaton 12.00.2000.8 SQL Server 2012 ...
- Windows Server 2016 桌面环境的自动配置脚本
除非学习要求,还是建议使用Windows 10 LTSB 2016或其他桌面系统. github:https://github.com/m2nlight/WindowsServerToWindowsD ...
- Windows下apache php wordpress配置
2. Use notepad to open httpd.conf config file. Make use the line "LoadModule rewrite_module mod ...
- Understanding postgresql.conf : log*
After loooong pause, adding next (well, second) post to the “series“. This time, I'd like to describ ...
- 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 ...
随机推荐
- C#——Marshal.StructureToPtr方法简介
目录 MarshalStructureToPtr方法简介 功能及位置 语法 参数说明 异常 备注 举例 本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三 ...
- ReactNative运行提示缺少文件xxxRootView.h解决方法
我们经常在github获取源码后运行会出现缺少 "RCTRootView.h" notfound" 文件的错误,对于这种错误我们怎么解决了. 1.cd到项目根目录 删除项 ...
- ROS系统python代码测试之rostest
ROS系统中提供了测试框架,可以实现python/c++代码的单元测试,python和C++通过不同的方式实现, 之后的两篇文档分别详细介绍各自的实现步骤,以及测试结果和覆盖率的获取. ROS系统中p ...
- Openwrt dnsmasq 设置要点
之前设置dnsmasq,一直没有奏效,后来摸索了一下,初步发现它的原理: 正常的流程应该是像这样的,先由client来发送DNS请求到网关,然后网关的dnsmasq处理这个请求, 再根据设置决定如何处 ...
- 工作随笔——pre-commit钩子限制日志长度和提交的文件类型
2014-09-18:解决Subversion edge 的hook中文乱码问题 近期检查SVN时发现备份好的文件体积异常庞大.才跑2个月备份出来的大小就有4G多.仔细查询发现很多很多IDE自动生成的 ...
- xmind 使用备忘
快捷键: shift+enter 编辑文字时回车换行 enter 快速建立同级主题(纵向) tab 快速建立子主题(横向) F4 插入注释 alt+左键+移动 拖动 shift+左键+移动 将元素脱离 ...
- CoordinatorLayout自定义Bahavior特效及其源码分析
@[CoordinatorLayout, Bahavior] CoordinatorLayout是android support design包中可以算是最重要的一个东西,运用它可以做出一些不错的特效 ...
- Python 一些总结和比较
数据类型
- python学习笔记整理——dictView [未整理]
Dictionary view objects简介 The objects returned by dict.viewkeys(), dict.viewvalues() and dict.viewit ...
- c# Winform 开发分屏显示应用程序
分屏显示即可把一台主机内运行的多个程序分别显示在不同的两个(或多个)屏幕上.目前市面上主流的显卡都支持分屏显示(显示双屏幕),如果需要显示2个以上的屏幕,则应使用“拖机卡”类的硬件. 设置分屏显示的两 ...