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:\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, 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. "(\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)" 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|\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