Oracle中的EXTPROC是什么?

oo7oh9g9  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(289)

出于安全原因,我要求DB团队添加EXTPROC_DLLS:ONLY;但他们说:
“请注意,KEY = EXTINGS 1526根本没有引用任何外部进程。这只是任何进程需要通过IPC协议调用Oraxxx所使用的密钥。该密钥可以是任何值,并且应通过tnsnames.ora传递相同的密钥值”
对我来说,这似乎是错误的。你能帮助我吗?EXTPROC的确切用途是什么?如果我们不添加EXTPROC_DLLS:ONLY会发生什么?

vtwuwzda

vtwuwzda1#

与其他数据库相反,Oracle不允许插件访问它自己的内存地址空间。在MySQL/PostgreSQL的情况下,.dll插件(C存储过程)由主数据库进程加载。
Oracle允许侦听器通过调用extproc(或extproc32)来生成一个新进程。该进程加载共享库,数据库的其余部分通过IPC与该进程进行对话。
这种方法更安全,因为外部库不会使数据库崩溃,也不会损坏数据。另一方面,有时C存储过程可能比Java存储过程慢。
此选项可以限制extproc加载的. dll的路径。即那些由CREATE LIBRARY语句创建的. dll。
PS:C存储过程的使用是非常罕见的,如果你不使用它们,你可以自由地删除整个extproc stanza从Corner. ora。
PS1:有可能利用extproc功能的场景。

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

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

rkue9o1l

rkue9o1l2#

对于任何连接Oracle数据库的程序,您都需要Extproc代理。
例如,PLS/SQL需要Extproc才能与Oracle一起工作
您可以找到有关securit 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

相关问题