使用AUDIT_SYSLOG_LEVEL進行Sys使用者行為監控
對生產環境執行的系統而言,使用者行為審計是一個非常重要的部分。當發生安全事故、非法侵入的時候,穩妥、全面的審計資訊是我們發現安全漏洞和修復故障的重要依據。所以,所有的完善資料庫產品中,都有專門的審計功能模組。
Oracle從大規模商用化到今天,一直在不斷的推進審計功能模組,以適應靈活多變的使用者需求。目前的Oracle審計功能,主要分為Traditional Audit和Fine Grained Audit(FGA)兩種技術主線。這兩條主線主要提供的是對於使用者行為和資料兩個主要層面的審計內容。
1、Sys使用者審計
Sys使用者是Oracle系統中很特殊的一個使用者,類似於Linux/Unix中的root,具有絕對的超級許可權。除了允許訪問、操作大多數資料之外,Sys使用者是具有對Oracle內部後設資料基礎表進行刪除的許可權。
鑑於Sys使用者的巨大許可權和潛在危險性,我們通常在使用資料庫的時候,都不會直接使用sys使用者,而是建立普通使用者帳號進行管理。
從安全的層面上,Oracle也對於Sys的基本操作行為,如登陸、退出動作,都提供了預設審計策略。
但是,這個過程中,是存在一個問題的。預設情況下,Sys的審計資訊是記錄在dba_audit_trail檢視中進行查詢,也就是記錄在基表aud$下面。而Sys恰恰是擁有該表資料刪除許可權的使用者。這樣,Sys使用者是可以刪除掉關於自己“不利”的資訊的。
解決這個問題,單純從DB層面是不可解的。完全解決要藉助作業系統,嘗試將日誌輸出到作業系統。在作業系統層面,資料庫的安裝使用者(dba,oinstall)就會受到限制。
在Oracle 10g,推出了引數AUDIT_SYSLOG_LEVEL,幫助我們實現了這個功能。
2、作業系統層面審計記錄
預設情況下,aduit_syslog_level引數是關閉的。我們本篇使用11g進行實驗。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
SQL> show parameter audit_sys
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_sys_operations boolean FALSE
audit_syslog_level string
該引數的作用原理是利用作業系統的審計記錄方法,在作業系統中,均有記錄日誌的功能元件。以Linux/Unix為例,就有syslog命令。
[root@bspdev ~]# man syslog
NAME
syslog, klogctl - read and/or clear kernel message ring buffer; set
console_loglevel
SYNOPSIS
int syslog(int type, char *bufp, int len);
/* No wrapper provided in glibc */
/* The glibc interface */
#include
int klogctl(int type, char *bufp, int len);
DESCRIPTION
If you need the libc function syslog() (which talks to syslogd(8)),
then look at syslog(3). The system call of this name is about control-
(篇幅原因,略。。。)
具體配置上,syslog的配置檔案在/etc/syslog.conf,其中配置了各種型別的日誌輸出位置和訊息源。
[root@bspdev ~]# cat /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
我們只需要將Oracle日誌輸出的配置資訊新增在該檔案中,就可以指定輸出位置。
--新增資訊
[root@bspdev ~]# vi /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# About Oracle SysLog
user.notice /var/log/oracle_dbms
指定一個user.notice的輸出位置是/var/log/oracle_dbms檔案。
此外,我們要讓syslog.conf引數生效,還要提醒一下後臺程式syslogd重新載入一下配置資訊。
[root@bspdev ~]# ps -ef | grep syslogd
root 2517 1 0 07:04 ? 00:00:00 syslogd -m 0
root 3825 3670 0 07:21 pts/0 00:00:00 grep syslogd
[root@bspdev ~]# kill -HUP 2517
作業系統層面的配置到此為止,接下來就要配置Oracle資料庫層面的審計內容。主要是針對audit_syslog_level的修改。
--Spfile Level修改引數
SQL> alter system set audit_syslog_level='user.notice' scope=spfile;
System altered
--重啟資料庫生效;
SQL> conn / as sysdba
Connected.
SQL> startup force
ORACLE instance started.
Total System Global Area 849530880 bytes
Fixed Size 1339824 bytes
Variable Size 515903056 bytes
Database Buffers 327155712 bytes
Redo Buffers 5132288 bytes
Database mounted.
Database opened.
SQL>
此時,sys使用者實際上已經進行了操作。我們檢視作業系統層面的日誌資訊。
--oracle_dbms檔案被root擁有,不能進行修改檢視。
[oracle@bspdev ~]$ cd ..
[oracle@bspdev home]$ cd /var/log/
[oracle@bspdev log]$ ls -l | grep oracle
-rw------- 1 root root 1083 Jul 2 07:27 oracle_dbms
[oracle@bspdev log]$ cat oracle_dbms
cat: oracle_dbms: Permission denied
oracle_dbms的owner為root,其許可權配置就決定了oracle使用者不能進行修改。
[oracle@bspdev log]$ su - root
Password:
[root@bspdev ~]# cat /var/log/oracle_dbms
Jul 2 07:25:31 bspdev Oracle Audit[3901]: LENGTH : '155' ACTION :[7] 'STARTUP' DATABASE USER:[1] '/' PRIVILEGE :[4] 'NONE' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[13] 'Not Available' STATUS:[1] '0' DBID:[0] ''
Jul 2 07:25:31 bspdev Oracle Audit[4025]: LENGTH : '148' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/0' STATUS:[1] '0' DBID:[0] ''
Jul 2 07:25:35 bspdev Oracle Audit[4106]: LENGTH : '159' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/0' STATUS:[1] '0' DBID:[10] '3906514064'
Jul 2 07:27:05 bspdev Oracle Audit[4172]: LENGTH : '163' ACTION :[7] 'CONNECT' DATABASE USER:[3] 'sys' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[5] '51ibm' CLIENT TERMINAL:[8] '51IBM-PC' STATUS:[1] '0' DBID:[10] '3906514064'
Jul 2 07:27:05 bspdev Oracle Audit[4176]: LENGTH : '163' ACTION :[7] 'CONNECT' DATABASE USER:[3] 'sys' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[5] '51ibm' CLIENT TERMINAL:[8] '51IBM-PC' STATUS:[1] '0' DBID:[10] '3906514064'
在oracle_dbms中,記錄了sys使用者的關鍵操作,如startup、shutdown和connect等。但是,並不是所有的sys使用者資訊都可以被記錄下來。
SQL> show user;
User is "SYS"
SQL> drop table t purge;
Table dropped
SQL> create table t as select * from dba_objects;
Table created
這部分的資訊是不會記錄在日誌的。如果我們需要確實將sys所有的SQL操作記錄,則需要audit_sys_operations引數進行配合。
3、Sys使用者的SQL審計
在上面的部分中,我們已經可以成功的對SYS使用者活動行為進行作業系統層面的審計。一些如啟動伺服器、關閉伺服器、登陸等操作可以完整的記錄在作業系統日誌下,只能由root使用者進行檢視。
那麼,我們可否對其操作審計粒度變得更細,也就是將sys使用者的SQL語句行為記錄下來呢?我們說,藉助引數audit_sys_operations,是可以做到這點的。
該引數的含義是是否對SYS使用者的操作進行日誌記錄。預設情況下,該引數取值為false。
SQL> show parameter audit_sys
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_sys_operations boolean FALSE
audit_syslog_level string USER.NOTICE
在spfile層面進行修改之後,重新啟動伺服器。
SQL> alter system set audit_sys_operations=true scope=spfile;
System altered
[oracle@bspdev ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 2 07:39:09 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected.
SQL> startup force
ORACLE instance started.
Total System Global Area 849530880 bytes
Fixed Size 1339824 bytes
Variable Size 515903056 bytes
Database Buffers 327155712 bytes
Redo Buffers 5132288 bytes
Database mounted.
Database opened.
SQL>
此時,如果SYS使用者進行一些操作,就會被記錄在日誌上。
SQL> drop table t purge;
Table dropped
SQL> create table t as select * from dba_objects;
Table created
--檢視日誌
[root@bspdev ~]# tail -n 10 /var/log/oracle_dbms
Jul 2 07:41:29 bspdev Oracle Audit[4677]: LENGTH : '259' ACTION :[101] 'select length(chr(2000000000)) l4, length(chr(2000000)) l3, length(chr(20000)) l2, 'c' c1 from dual ' DATABASE USER:[3] 'sys' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[5] '51ibm' CLIENT TERMINAL:[8] '51IBM-PC' STATUS:[1] '0' DBID:[10] '3906514064'
Jul 2 07:41:29 bspdev Oracle Audit[4677]: LENGTH : '202' ACTION :[45] 'select lengthb(nchr(20)), nchr(20) from dual ' DATABASE USER:[3] 'sys' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[5] '51ibm' CLIENT TERMINAL:[8] '51IBM-PC' STATUS:[1] '0' DBID:[10] '3906514064'
Jul 2 07:41:29 bspdev Oracle Audit[4677]: LENGTH : '235' ACTION :[78] 'begin sys.dbms_application_info.set_module('PL/SQL Developer', :action); end; ' DATABASE USER:[3] 'sys' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[5] '51ibm' CLIENT TERMINAL:[8] '51IBM-PC' STATUS:[1] '0' DBID:[10] '3906514064'
Jul 2 07:41:29 bspdev Oracle Audit[4677]: LENGTH : '218' ACTION :[61] 'begin :id := sys.dbms_transaction.local_transaction_id; end; ' DATABASE USER:[3] 'sys' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[5] '51ibm' CLIENT TERMINAL:[8] '51IBM-PC' STATUS:[1] '0' DBID:[10] '3906514064'
Jul 2 07:41:29 bspdev Oracle Audit[4677]: LENGTH : '177' ACTION :[20] 'drop table t purge ' DATABASE USER:[3] 'sys' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[5] '51ibm' CLIENT TERMINAL:[8] '51IBM-PC' STATUS:[1] '0' DBID:[10] '3906514064'
(篇幅原因,省略部分內容……)
4、結論
隨著資訊保安觀念的深入,安全漏洞和審計要求越來越成為DBA工作的一個重要部分。限制許可權、管制監控行為,粗看是對我們運維人員的限制,實際上也是對運維人員責任的保護和證明。用好審計,可以提高資料庫安全級別,消除系統安全漏洞,完善運維制度。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-734433/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Linux中,如何進行使用者行為監控?Linux
- 如何進行網站的真實使用者監控(RUM)?怎麼進入監控網站網站
- 【Zabbix】如何使用Zabbix進行IPMI監控?
- 如何進行監控設計?
- 使用Powershell對目標進行螢幕監控
- Android監聽使用者行為操作(AccessibilityService)Android
- Vue搭建前端監控,採集使用者行為的 N 種姿勢Vue前端
- SpringBoot整合Actuator進行健康監控Spring Boot
- 使用aop來監控方法進行增強處理
- 使用 iotop 監控哪些程式在進行I/O操作
- centos7使用ntopng進行流量監控和分析CentOS
- MySQL sys效能監控MySql
- 監控影片行為分析系統
- 使用 Sentry 對應用進行監控,少 bug 少加班
- 如何使用表格儲存控制檯進行資料監控
- ai行為識別技術監控AI
- 淺析前端資料埋點監控:使用者行為與效能分析的橋樑前端
- 一種對雲主機進行效能監控的監控系統及其監控方法
- 使用Prometheus和Grafana進行系統監控和預測 - flightawarePrometheusGrafana
- 進行Linux效能監控的命令介紹Linux
- 在Linux中,如何進行磁碟效能監控?Linux
- Node效能如何進行監控以及優化?優化
- springboot中加入druid對sql進行監控Spring BootUISQL
- 基於flink的電商使用者行為資料分析【4】| 惡意登入監控
- 使用Flink SQL進行實時效能監控:AdTech廣告用例SQL
- Linux 中CPU 和 GPU 的行為監控LinuxGPU
- 在Linux中,如何進行硬體效能監控?Linux
- Node效能如何進行監控以及最佳化?
- 在Linux中,如何進行系統效能監控?Linux
- Zabbix監控使用進階
- 使用 Skywalking 對 Kubernetes(K8s)中的微服務進行監控K8S微服務
- 編碼:執行緒執行監控執行緒
- Oracle“並行執行”——監控檢視Oracle並行
- 聊聊如何利用p6spy進行sql監控SQL
- 想在 KubeSphere 中進行自定義監控?來瞧瞧這
- 監控 redis 執行命令Redis
- idou老師教你學Istio 26:如何使用Grafana進行視覺化監控Grafana視覺化
- 【譯】Google - 使用 webpack 進行 web 效能優化(三):監控和分析應用GoWeb優化
- 使用 Prometheus 監控 eKuiper 規則執行狀態PrometheusUI