數(shù)據(jù)安全治理關(guān)鍵技術(shù)之?dāng)?shù)據(jù)庫(kù)脫敏技術(shù)詳解
數(shù)據(jù)安全治理之API監(jiān)測(cè)系統(tǒng) ,解決API接口安全問(wèn)題【安華金和】
新一代數(shù)據(jù)庫(kù)脫敏技術(shù),為敏感數(shù)據(jù)建立保護(hù)盾!
數(shù)據(jù)庫(kù)脫敏系統(tǒng)與金融行業(yè)案例解讀
數(shù)據(jù)安全治理建設(shè)思路的著力點(diǎn)——數(shù)據(jù)安全咨詢(xún)服務(wù)【安華金和】
數(shù)據(jù)庫(kù)防火墻功能有哪些?-數(shù)據(jù)安全-安華金和
數(shù)據(jù)安全關(guān)鍵技術(shù)之?dāng)?shù)據(jù)庫(kù)脫敏技術(shù)詳解【安華金和】
中國(guó)數(shù)據(jù)安全治理落地指導(dǎo)書(shū)籍《數(shù)據(jù)安全治理白皮書(shū)5.0》正式發(fā)布(附下載)
從三月開(kāi)始,安華金和安全實(shí)驗(yàn)室會(huì)陸續(xù)推出系列文章,專(zhuān)門(mén)以O(shè)racle數(shù)據(jù)庫(kù)為研究對(duì)象,展開(kāi)安全隱患的分析研究,為大家?guī)?lái)安全防范建議,幫助大家做好數(shù)據(jù)庫(kù)安全防護(hù)。本期推出ORACLE 12C 安全隱患系列(一),如果您或您的團(tuán)隊(duì)正在使用Oracle12C,或打算使用Oracle12C,請(qǐng)一定按照本文思路對(duì)用戶(hù)的inherit privileges權(quán)限進(jìn)行合理分配,杜絕安全隱患。
在12.1之后的Oracle版本中引入了一個(gè)和安全相關(guān)的權(quán)限—INHERIT PRIVILEGES。這個(gè)權(quán)限可以賦予用戶(hù)或角色。喜的是,Oracle引入這個(gè)權(quán)限的目標(biāo)是解決調(diào)用者權(quán)限可能造成的安全隱患。然而悲的是,在12.1的默認(rèn)配置下,INHERIT PRIVILEGES并不會(huì)起到提高安全性的作用。只有用戶(hù)重新配置INHERIT PRIVILEGES才能真正達(dá)到Oracle設(shè)計(jì)INHERIT PRIVILEGES提高安全性目的。
要弄清楚如何正確配置INHERIT PRIVILEGES,首先要搞清楚三個(gè)問(wèn)題:1.調(diào)用者方式的安全隱患。2. INHERIT PRIVILEGES是如何工作的?3. INHERIT PRIVILEGES應(yīng)該如何配置?
Oracle函數(shù)、存儲(chǔ)過(guò)程的創(chuàng)建不同于其他數(shù)據(jù)庫(kù),可以采取兩種截然不同的方式建立。一種是定義者權(quán)限(Definer’s right),一種是調(diào)用者權(quán)限(Invoker’s right)。調(diào)用者權(quán)限創(chuàng)建的函數(shù)或存儲(chǔ)過(guò)程,在創(chuàng)建過(guò)程中不會(huì)判斷創(chuàng)建者是否擁有對(duì)存儲(chǔ)過(guò)程或函數(shù)中調(diào)用的表、視圖和對(duì)象的執(zhí)行權(quán)限。簡(jiǎn)單地說(shuō),就是調(diào)用者方式允許低權(quán)限用戶(hù)在函數(shù)或存儲(chǔ)過(guò)程中使用超越自身的權(quán)限。允許超越自身權(quán)限帶來(lái)了便利,也同時(shí)給數(shù)據(jù)庫(kù)帶來(lái)非法提權(quán)、非法操作、非法獲取敏感信息等一系列安全隱患。
為了講清楚隱患,這里舉一個(gè)例子:有一個(gè)低權(quán)限用戶(hù)hacker_user,他只有創(chuàng)建存儲(chǔ)過(guò)程和會(huì)話(huà)權(quán)限。
hacker_user使用調(diào)用者權(quán)限創(chuàng)建了函數(shù) add_number。并把a(bǔ)dd_number的執(zhí)行權(quán)限賦予全體,讓所有用戶(hù)都可以通過(guò)hacker_user. add_number的方式調(diào)用該函數(shù)。
至此無(wú)論是有DBA權(quán)限的dba_user還是只有會(huì)話(huà)權(quán)限的normal_user都可以使用hacker_user. add_number完成運(yùn)算任務(wù)。
當(dāng)hacker_user. add_number得到其他用戶(hù)充分信任后,hacker_user動(dòng)了提升自己權(quán)限的心思。于是hacker_user首先使用調(diào)用者方式創(chuàng)建一個(gè)用于提權(quán)的存儲(chǔ)過(guò)程(change_me_dba)。由于使用的是調(diào)用者方式,即使“GRANT DBA TO hacker_user這種高危語(yǔ)句被嵌入其中,存儲(chǔ)過(guò)程也能順利創(chuàng)建。
接著hacker_user再偷偷對(duì)add_number進(jìn)行修改,在add_number中調(diào)用change_me_dba.
hacker_user整個(gè)布局完成后,就靜靜等著其他用戶(hù)像以往一樣調(diào)用hacker_user. add_number。這種攻擊的方式不僅難以防護(hù),還難以被察覺(jué)。低權(quán)限用戶(hù)使用hacker_user. add_number,依然會(huì)正常運(yùn)算,同時(shí)也不會(huì)出現(xiàn)任何報(bào)錯(cuò)信息。例如用normal_user調(diào)用hacker_user. add_number 正確運(yùn)算,且無(wú)報(bào)錯(cuò),如果不去檢查hacker_user. add_number的源碼會(huì)很難發(fā)現(xiàn),實(shí)際上hacker_user在私下已經(jīng)偷偷對(duì)hacker_user. add_number動(dòng)了手腳。
由于無(wú)異常、不報(bào)錯(cuò),被hacker_user修改后的add_number能安全地潛伏在數(shù)據(jù)庫(kù)中。等到類(lèi)似dba_user這樣的DBA用戶(hù)調(diào)用hacker_user. add_number后,它會(huì)神不知鬼不覺(jué)地進(jìn)行提權(quán)。
同樣地,即便是有DBA權(quán)限的dba_user調(diào)用也不會(huì)有任何異常。除非查詢(xún)dba_role_privs,才會(huì)抓到hacker_user的“狐貍尾巴”。
但分析如何提權(quán),必須對(duì)所有hacker_user中的內(nèi)容進(jìn)行分析,因?yàn)榘l(fā)現(xiàn)問(wèn)題的時(shí)候hacker_user很可能早就把a(bǔ)dd_number改了回去,把change_me_dba做了刪除,做到毀尸滅跡,以防止安全人員找到提權(quán)手法后,進(jìn)行針對(duì)性封堵。
Oracle12.1為了解決上述問(wèn)題,引入了inherit privileges和inherit any privileges 這兩組權(quán)限,用以限制用戶(hù)訪問(wèn)其他用戶(hù),使用調(diào)用者權(quán)限創(chuàng)建的函數(shù)或存儲(chǔ)過(guò)程。在12.1上正確配置權(quán)限后用dba_user調(diào)用add_number,不僅不會(huì)執(zhí)行,且會(huì)出現(xiàn)ORA-06598錯(cuò)誤,用以防止低權(quán)限用戶(hù)借用高權(quán)限進(jìn)行非法操作。
inherit privileges通過(guò)GRANT和REVOKE進(jìn)行賦權(quán)或取消賦權(quán)。invoking_user(dba_user)只把自己的inherit privileges賦予自己信任的procedure_owner(hacker_user)中,防止調(diào)用不安全的存儲(chǔ)過(guò)程或函數(shù)。
GRANT INHERIT PRIVILEGES ON USER invoking_user TO procedure_owner;
REVOKE INHERIT PRIVILEGES ON USER invoking_user FROM procedure_owner;
引入inherit privileges原本可以很好地解決低權(quán)限用戶(hù)利用調(diào)用者方式,騙取高權(quán)限的問(wèn)題。但Oracle12.1默認(rèn)對(duì)inherit privileges權(quán)限的賦予存在一定的問(wèn)題。12.1在創(chuàng)建新用戶(hù)或升級(jí)到12.1后對(duì)老用戶(hù)都自動(dòng)做了GRANT INHERIT PRIVILEGES ON USER USERNAME TO PUBLIC 的操作,使得inherit privileges的限制直接作廢。默認(rèn)狀態(tài)下hacker_user依然可以用上述手段完成提權(quán)操作。
好的解決方法也需要合理的配置。如果配置不當(dāng),安全將成為一句空話(huà)。inherit privileges權(quán)限的辦法是好的,但不科學(xué)的默認(rèn)配置毀了這一切。
默認(rèn)任何用戶(hù)都把inherit privileges賦予PUBLIC的行為,很大程度是從兼容性的角度考慮的。雖然達(dá)到了兼容的目的,但卻破壞了安全的效果,而且很可能給后來(lái)者留下錯(cuò)誤使用inherit privileges的范例。總結(jié)下來(lái),inherit privileges合理配置應(yīng)該遵循兩點(diǎn):1.用戶(hù)只給可信且必要的存儲(chǔ)過(guò)程和函數(shù)的用戶(hù)賦予inherit privileges;2.DBA用戶(hù)不要給任何用戶(hù)inherit privileges 權(quán)限,防止出現(xiàn)低權(quán)限用戶(hù)被破解后利用調(diào)用者權(quán)限竊取DBA權(quán)限,實(shí)施非法行為。
針對(duì)上述兩個(gè)要點(diǎn),我們首先檢查當(dāng)前數(shù)據(jù)庫(kù)DBA用戶(hù)有SYSTEM、SYS和DBA_USER.
下一步再檢查這些DBA用戶(hù)是否已經(jīng)給其他用戶(hù)inherit privileges,如果存在請(qǐng)進(jìn)行回收,否則可能造成安全隱患。
dba_user用戶(hù)inherit privileges權(quán)限賦予public,回收該權(quán)限。否則,還可能出現(xiàn)DBA用戶(hù)誤使用有風(fēng)險(xiǎn)的函數(shù)或存儲(chǔ)過(guò)程的現(xiàn)象。
對(duì)每一個(gè)DBA使用類(lèi)似檢查,修改DBA默認(rèn)的賦權(quán)對(duì)象,再按照實(shí)際需求把用戶(hù)的inherit privileges權(quán)限賦予必要用戶(hù)。如此,既不影響用戶(hù)使用,又在一定程度上避免安全隱患。
當(dāng)然如果您不愿意手動(dòng)進(jìn)行上述檢查和部署,可以通過(guò)安華金和的漏掃產(chǎn)品DBScan,進(jìn)行針對(duì)性的專(zhuān)項(xiàng)檢查,并根據(jù)您的配置方案進(jìn)行權(quán)限的自動(dòng)部署。
Inherit privileges的出現(xiàn)說(shuō)明Oracle對(duì)于安全問(wèn)題已經(jīng)越來(lái)越重視。但百密終有一疏,在默認(rèn)情況下,新功能Inherit privileges形同虛設(shè),并不能起到加強(qiáng)數(shù)據(jù)庫(kù)安全的效果。如果您或您的團(tuán)隊(duì)正在使用Oracle12C,或打算使用Oracle12C,請(qǐng)一定按照本文思路對(duì)用戶(hù)的inherit privileges權(quán)限進(jìn)行合理分配,杜絕安全隱患。
試用申請(qǐng)
在線(xiàn)咨詢(xún)
咨詢(xún)電話(huà)
TOP