什么是Oracle中的EXTPROC?

时间:2015-05-14 13:12:46

标签: oracle security database-security

出于安全考虑,我要求DB团队添加EXTPROC_DLLS:ONLY;但是他们这样说:

  

"请注意,KEY = EXTPROC1526未引用任何内容   外部过程。这只是任何流程需求所使用的密钥   通过IPC协议调用Oraxxx。密钥可以是任何值,也可以是相同的   键值应通过tnsnames.ora"

传递
对我来说,这似乎不对。你能帮帮我吗? EXTPROC的确切用途是什么?如果我们不添加EXTPROC_DLLS,会发生什么?

2 个答案:

答案 0 :(得分:3)

对于连接oracle数据库的任何程序,您需要Extproc代理。

PLS/SQL例如需要Extproc才能使用oracle

您可以找到有关证券here的更多信息
我经过一些链接

Description
***********
The Oracle database server supports PL/SQL, a programming language. PL/SQ can execute external procedures via extproc. Over the past few years there has been a number of vulnerabilities in this area.

Extproc is intended only to accept requests from the Oracle database server but local users can still execute commands bypassing this restriction.

Details
*******
No authentication takes place when extproc is asked to load a library and execute a function. This allows local users to run commands as the Oracle user (Oracle on unix and system on Windows). If configured properly, under 10g, extproc runs as nobody on *nix systems so the risk posed here is minimal but still present. 

example here

答案 1 :(得分:2)

与其他数据库相反,Oracle不允许插件访问自己的内存地址空间。在MySQL / PostgreSQL的情况下,主数据库进程加载.dll插件(C存储过程)。

Oracle允许侦听器通过调用extproc(或extproc32)来生成新进程。此过程通过IPC将共享库和数据库的其余部分加载到此过程。

这种方法更安全,因为外部库不会崩溃数据库也不会损坏数据。另一方面,有时C存储过程可能比Java存储过程慢。

此选项可以限制extproc加载的.dll的路径。即由CREATE LIBRARY声明创建的那些。

PS:使用C存储过程非常罕见,如果不使用它们,可以从listener.ora中自由删除整个extproc节。

PS1:有可能利用extproc功能。

  • 用户必须拥有CREATE LIBRARY,通常不会授予
  • extproc未配置为与nobody的privs一起运行 - 但以oracle:dba
  • 运行
  • 用户创建恶意的.so库,它会在初始化过程中执行“邪恶”。
  • 用户将此lib放入/ tmp目录
  • 用户使用CREATE LIBRARY语句
  • 创建指向/ tmp的Oracle LIBRARY
  • 用户强制extprocdlopen此库
  • exproc将使用操作系统权限oracle:dba
  • 执行恶意代码

使用此EXTPROC_DLLS:ONLY限制时,开发人员必须与DBA合作,并且只能使用和加载列入白名单的库。