p5走势图:Oracle密碼存儲和驗證過程剖析及防御建議

來源:互聯網
更新時間:2018/2/9 3:28:55
責任編輯:魯能
字體:

福建体彩走势图 www.uyduz.icu

Oracle作為目前市場占有率第一的數據庫產品,相比其他數據庫產品,自身存在的漏洞數量也是同類產品之中最多的,而且還在增長。由此,我們可以預見,數據庫安全問題也將長期存在。

談到數據庫安全問題,備受用戶關注的有數據庫密碼安全,專業的說法是數據庫身份驗證過程安全。數據庫密碼是?;た餑諍誦氖蕕墓丶?,一旦數據庫密碼被竊取,會導致攻擊者對數據庫乃至整個網絡更深入的入侵。

攻擊者針對數據庫的身份驗證過程主要采取兩種策略:一種是繞過數據庫身份驗證過程,一種是是攻破數據庫身份驗證過程。本文主要針對后者主動攻破方式進行探討。安華金和數據庫攻防實驗室結合Oracle數據庫的特點論述攻擊Oracle身份驗證過程的辦法,以及針對這些攻擊行為提出防御建議。

Oracle數據庫身份驗證繞過手段

利用Oracle的默認密碼和Oracle密碼特點破解密碼

獲取Oracle密碼的暴力破解方法,除去通用的排列組、字典破解等方式外,Oracle 自身存在一些默認用戶名密碼,例如智能代理賬戶DBSNMP/DBSNMP。這是Oracle 中最可能被忘記修改的默認用戶名和密碼。造成這一現象的原因是智能代理的密碼需要在兩個不同的地方進行修改,首先要在數據庫中對DBSNMP用戶密碼進行修改,其次需要在snmp_rw.ora這個文件中再次進行密碼修改。

還有Oracle登陸包中會帶有數據庫密碼位數的信息,這是由于數據庫服務器和客戶端之間加密協議造成的。在數據庫的登錄信息包中存在一個關鍵字段AUTH_PASSWORD,這個字段是客戶端對密碼進行加密后傳出的,這個參數的長度和原密碼的長度密切相關。我們以Oracle 11g為例這個AUTH_PASSWORD的長度是96位預示著密碼明文的長度應該是16-30位之間(Oracle密碼長度最大不超過30位)。

Oracle密碼存儲和驗證過程剖析及防御建議

下圖中AUTH_PASSWORD的長度是64位預示著密碼明文的長度應該是1-15位之間。

Oracle密碼存儲和驗證過程剖析及防御建議

這一特點不是11g版本獨有的,oracle所有版本都有類似的特點。通過包中AUTH_PASSWORD位數確定密碼的位數,此舉將有效的降低暴力破解的成本。

從Oracle本地文件獲取密碼

雖然可以進行一定的優化,但暴力破解本質還是靠大量的訪問鏈接進行測試。除了暴力破解外還存在著更為簡便的獲得密碼的方法。假設已經可以訪問數據庫所在主機的文件系統,那么可以通過Oracle的一些本該刪除的文件獲得數據庫密碼信息。例如在數據庫四大用戶中SYSMAN的密碼會以密文的形式被寫入到文件中,但是同時也會把密鑰寫入到同一個文檔中。例如C:\app\lsc\product\11.2.0\dbhome_1\sysman\config下的emoms.properties 中存儲了 SYSMAN的密碼和密鑰。打開emoms.propeties

Oracle密碼存儲和驗證過程剖析及防御建議

圖中畫紅線的位置:

oracle.sysman.eml.mntr.emdRepPwd記錄的是sysman的密碼,oracle.sysman.eml.mntr.emdRepPwdSeed記錄的是對應密碼的密鑰。

同時得到了密文與密鑰用DES解密器可以獲得密碼原文

Oracle密碼存儲和驗證過程剖析及防御建議

如果數據庫管理中多個賬號采用統一密碼,就會導致直接外泄SYS/SYSTEM密碼。

在Oracle主目錄的cfgtoologs文件夾中還存在一些會暴露密碼信息的文件。

利用Oracle加密原理破解密碼

除了以上兩種獲取密碼的方法外還有更加直接的辦法,這種方法就是通過理解Oracle的密鑰傳輸過程破解Oracle通訊協議中的密文。(下面以Oracle 9i為例說明這一方法,10、11原理類似,只是更加復雜)

首先拿一個Oracle登錄包來說明整個過程。首先客戶端給服務器發送SERVICE_NAME。

Oracle密碼存儲和驗證過程剖析及防御建議

這一發送過程如果沒有向Listener登記該服務,那么Listener會生成一個錯誤,則終止所有過程。如果成功則進入身份驗證過程,首先客戶端向服務器發送一個含有用戶名的數據包,服務器判斷用戶名存在后從數據庫中提取出該用戶名的散列值,服務器使用這個散列值生成一個密碼。

這個密碼的生成過程是服務器調用orageneric庫中的函數slgdt()過程。slgdt()函數是用來重新獲得系統時間的,將分鐘、小時、秒、毫秒結合起來形成一個用來加密的8個字節的“文本”。文本的前四位是由分鐘和小時與用戶名對應的散列的后四位進行異或運算得出,文本的后四位是由秒和毫秒與用戶名對應的散列的前四位進行異或運算得出。

加密過程通過調用oracommon庫中的函數kzsrenc(),使用該密鑰對文本進行加密。通過使用函數lncgks(),函數kzsrenc()基本完成了DES密鑰的生成,最后利用函數incecb()輸出ecb模式下的DES密文,這里生成的密文就是密碼。接著再次調用函數kzsrenc(),利用用戶的密碼散列值對該密碼加密,這樣調用的結果就是AUTH_SESSKEY然后發送給客戶端。

Oracle密碼存儲和驗證過程剖析及防御建議

收到AUTH_SESSKEY后,客戶端將其重新解密并重新獲得該密碼。用戶利用oracore庫中的函數lncupw()創建自己密碼散列值的一個副本,然后通過調用函數kzsrdec(),將該散列值用作對AUTH_SESSKEY進行解密的密鑰。這一過程順利完成后就會生成密碼。

這個密碼通過調用函數kzsrenp()作為密鑰對其中的明文、大小寫敏感字符進行加密。kzsrenp()函數完成了DES密鑰的生成以及在CBC模式下用戶密碼的加密。接下來,密文以AUTH_PASSWORD的形式被送回服務器。

Oracle密碼存儲和驗證過程剖析及防御建議

服務器調用oracommon庫中的函數kzsrdep(),利用密鑰密碼對AUTH_PASSWORD進行解密,這個時候服務器就擁有了明文密碼的一個副本,然后服務器創建密碼的散列值并將它與數據庫中的散列值進行比較,如果匹配成功,那么用戶就完成了整個身份驗證。

清楚這里面的原理就可以按照Oracle的思路在網絡上嗅探到AUTH_SESSKEY和AUTH_PASSWORD,然后利用暴力破解破解出散列值,最終利用散列值解密AUTH_SESSKEY獲得密碼。

知道了攻擊者獲取數據庫密碼的辦法,就可以有針對性的對其進行防御。從攻擊方法上看,第一種方法主要是依賴默認口令或弱口令;第二種方法是配置文件泄漏;第三種方法是通過破解散列值獲取。

根據安華金和攻防實驗室專家多年經驗以下3點有助于加固Oracle密碼安全,解決攻擊者對Oracle驗證繞過的威脅。

Oracle身份認證加固建議

定期修改賬戶的密碼

在數據庫創建之后會存在一些默認用戶,例如文中提到的智能代理賬號DBSNMP。要定期對這些使用的賬號進行修改密碼。密鑰要遵循Oracle的建議,并且理論上密碼越復雜越有利于安全。

鎖死一些不需要的用戶,對系統文件進行加鎖處理

例如文中的文件系統中暴露的是SYSMAN的密碼,這個賬號是用于管理EM的賬號,如果你的環境不需要EM,請鎖死這個賬號,并對一些可能泄露密碼的配置文件進行文件加鎖,防止本地文件系統被入侵牽連到數據庫。

提高數據庫版本,使用非定值的散列值

10g之前的數據庫由于固定用戶名對應的散列值是固定的僅依靠時間函數做調整,這就給攻擊者對數據庫散列值做暴力破解帶來了可能。建議升級數據庫到11g版本,11g開始引入了AUTH_VFR_DATA這個隨機值,并對AUTH_SESSKEY的生成做了更復雜的調整有利于防止密碼通過泄露的傳輸信息被破譯。

相信只要做到以上三點,就可以有效的防止攻擊者獲取數據庫密碼。

根據您訪問的內容,您可能還對以下內容感興趣,希望對您有幫助:

oracle如何寫個驗證密碼是否可用的存儲過程?

答:如何可用 是否有個 用戶名 密碼表?

oracle 存儲過程 寫判斷用戶注冊驗證

答:CREATE OR REPLACE PROCEDURE YANZHENG ( NAME in VARCHAR2,--用戶名稱 PASSWORD in VARCHAR2,---用戶密碼 FLAG OUT NUMBER) --返回狀態0表示錯誤,1表示存在) IS C_NAME varchar2(20); C_PASSWORD varchar2(20); COUNTS NUMBER; PCOUNTS NUMBER...

oracle中如何取消密碼管理停止密碼驗證

答:ORA-20001: Password same as or similar to user 取消密碼管理: SQL>alter profile DEFAULT limit unlimited; 如: SQL>alter profile DEFAULT limit password_reuse_time unlimited; 停止密碼檢驗函數: SQL>alter profile DEFAULT limit pas...

oracle的用戶密碼存放在哪個文件或者哪個表中啊?

答:select username,password from dba_users;

oracle輸入用戶名口令后點擊確定一閃就沒了,什么...

答:1.請說明登錄使用的工具,比如sqlplus或者plsql dev。 2.以sqlplus為例,在win7下運行請點sqlplus右鍵用管理員運行,一般就能正常登錄。 3.提示一點,oracle如果出現錯誤,一定會給出提示,類似于ora-,如果沒有出現,很有可能不是oracle的問題...

oracle數據庫密碼文件

答:一、密碼文件: 作用:主要進行DBA權限的身份認證; DBA用戶:具有sysdba,sysoper權限的用戶被稱為dba用戶。默認情況下sysdba角色中存在sys用戶,sysoper角色中存在system用戶; 二、Oracle的兩種認證方式: 1.使用與操作系統集成的身份驗證; ...

如何在oracle 中能看到超級用戶和普通用戶的密碼信...

答:那是看不見滴,加密的密碼,就連 Oracle 自身也無法解密,因為數據庫存儲的是密碼加密之后的代碼,在密碼驗證時,用你輸入的密碼經過加密,然后與數據庫中存儲的代碼進行比對。

oracle 11g 的SQL的用戶名和口令是什么,而且用戶...

答:第一個問題:用戶名和口令就是用戶登錄sql運行臺的“用戶名”和“密碼”。 第二步問題:因為用戶名是可見的,所以用戶輸入的時候可以看見。但是oracle中密碼是直接不顯示的(已經寫?;ぃ?,直接輸入“密碼”后直接回車即可。如果用戶名和密碼輸入的正...

Oracle密碼過期 怎么修改

答:打開cmd,輸入sqlplus /nolog,回車。(2)輸入“conn / as sysdba”;(3)輸入“alter user sys identified by 新密碼”,注意:新密碼最好以字母開頭,否則可能出現錯誤Ora-00988。有了這個方法后,只要自己對oracle服務器有管理員權限,不記得密碼的...

oracle 密碼忘了怎么辦

答:運行 cmd 按如下輸入命令 sqlplus / as sysdba ---------以sys登陸 alter user 用戶名 account unlock; --------- 解除鎖定 alter user 用戶名 identified 密碼 -------------修改密碼 然后用你改好的密碼登陸就行

oracle存儲過程中return和exit的區別分析

COUNT(*)到v_weektimes出租車從t_Trip 那里TO_CHAR(PDATE,'yyyyww')= TO_CHAR(tripdate,'yyyyww')和TO_CHAR(PDATE,'YYYY')= TO_CHAR(tripdate,'YYYY')和ptruckID =...

Oracle存儲過程循環語法實例分析

本文實例講述了Oracle存儲過程循環語法。分享給大家供大家參考,具體如下: 1、簡單循環 語法 loop statements; end loop; 例子: counter := 0; loop counter := counter + 1; exit wh...

Oracle存儲過程游標用法分析

本文實例講述了Oracle存儲過程游標用法。分享給大家供大家參考,具體如下: 使用游標的5個步驟 1、聲明一些變量用于保存select語句返回的指 2、聲明游標,并指定select 語句...

Oracle存儲過程驗證一個記錄是否存在怎么寫

select count(*) into ... from .. where ... 判斷一下就是了, 或者有游標打開并fetch一次,判斷 curXXX%found

oracle 存儲過程 寫判斷用戶注冊驗證

IS C_NAME varchar2(20); C_PASSWORD varchar2(20); COUNTS NUMBER; PCOUNTS NUMBER; BEGIN C_NAME:=NAME; C_PASSWORD:=PASSWORD; SELECT...

oracle存儲過程中return和exit的區別分析

return是從一個函數中返回 exit是結束存儲過程

oracle存儲過程循環執行SQL語句

declare sql_tem Varchar2(4000); a number; b number; i number; begin a := 1; for i in 1 .. 3 loop b := a + 4; sql_tem := 'insert into A2 (ID,NAME) (select ID,NAME from A1 W...

在oracle存儲過程中sql語句想分析該語句,卻看不見執行計劃,我...

分析下SELECT decode(count(1),1,'1','0') FROM uop_act1.tf_f_user_highvalue WHERE user_id = iv_user_id AND partition_id = mod(iv_user_id,1000...

有oracle存儲過程的語句解析例子嗎?還有語法大全

create or replace procedure P(a char, b int) is begin …… end; 基本語法就是這樣了 如果你要oracle和sql server比較的東西 留下郵箱 我給你發一份整理過的word

oracle存儲過程解析JSON

解析JSON,非常方便。JSON數據在數據庫中以VARCHAR2, CLOB或者BLOB進行存儲。Oracle建議用戶在插入JSON數據之前,使用is_json來驗證輸入JSON數據的正確性。另...


www.xue163.net true //www.xue163.net/exploit/184/1843331.html report 19606 Oracle密碼存儲和驗證過程剖析及防御建議,Oracle作為目前市場占有率第一的數據庫產品,相比其他數據庫產品,自身存在的漏洞數量也是同類產品之中最多的,而且還在增長。由此,我們可以預見,數據庫安全問題也將長期存在。談到數據庫安全問題,備受用戶關注的有數據庫密碼安全,專業的說法是數據庫身份驗證...
網友評論
最新添加資訊
    24小時熱門資訊
    娛樂時尚
      科技資訊
      歷史文化
        真視界
        旅游美食
        精彩圖文
        我愛我車
        母嬰健康
        關于本站 | 廣告服務 | 手機版 | 商務合作 | 免責申明 | 招聘信息 | 聯系我們
        Copyright © 2004-2018 xue163.net All Rights Reserved. 學網 版權所有
        京ICP備10044368號-1 京公網安備11010802011102號
        教育考試: 學歷財經建筑 醫藥公考資格外語電腦作文招聘中小學留學 文檔 移民 文庫專欄23問答中心問答圖書館知識IT編程數碼信息解決方案信息中心IT科技topzttophottopsctopnew問答新聞中心軟件教室設計大全網絡相關英語學習開發編程考試中心參考范文管理文庫營銷中心站長之家IT信息中心商學院數碼大全硬件DIY企業服務網吧在線百科硬件知識手機平板汽車游戲家電精彩攝影現代家居IT女人經驗健康養生獵奇創業攻略教育學習歷史時尚潮流福建体彩走势图漲知識