zoukankan      html  css  js  c++  java
  • 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:MyFolderMyTrace. 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. "(sha1s{0,5}(|passwords{0,5}(|encodes{0,5}(|schemas{0,5}(|converts{0,5}(|host_names{0,5}(|opendatasources{0,5}(|openrowsets{0,5}(|sysauxs{0,5}(|is_members{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|hex|bin|ord|conv|substring|substr|instr|strcmp|mid|cast|length|benchmark|sleep|pg_sleep|version|user|(current|system)_user|datadir|load_file|concat|concat_ws|group_concat|md5)(||USER_AGENT^^[r](updatexml|extractvalue|ascii|hex|bin|ord|conv|substring|substr|instr|strcmp|mid|cast|length|benchmark|sleep|pg_sleep|version|user|(current|system)_user|datadir|load_file|concat|concat_ws|group_concat|md5)(||REFERER^^[r](updatexml|extractvalue|ascii|hex|bin|ord|conv|substring|substr|instr|strcmp|mid|cast|length|benchmark|sleep|pg_sleep|version|user|(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

  • 相关阅读:
    湖湘杯2020misc
    BUUOJ(Misc)
    BUUOJ(Web)
    网络信息安全攻防学习平台
    CTFHub web部分题解
    BugkuCTF 部分WP(搬运了很多WP)
    Web安全之机器学习入门 第2章-第5章学习笔记
    结构体
    排序的使用
    字符串和日期
  • 原文地址:https://www.cnblogs.com/LittleHann/p/5087727.html
Copyright © 2011-2022 走看看