从黑客角度检验oracle数据库
五 Database Vulnerabilities
1 数据库安全问题
sqlnet.log
普遍的oracle安全问题
PL/SQL 的脆弱性。
主机操作系统
– Known Issues Installing Oracle
-Lockdown Protection Procedures
2 sqlnet.log
当来自一个机器的连接失败后会在目录下建立一个文件,记录失败的连接。
得到一些信息: username, IP,address, date, etc…
3 普遍的oracle安全问题
默认的passwords:
– SYS, SYSTEM, DBSNMP, OUTLN,MDSYS,SCOTT
Password的管理特性没有激活,通过pfiles文件执行复用参数。
– No password lockout by default
– No password expiration by default
Public角色有对ALL_USERS视图的允许权限。
4 PL/SQL的脆弱性
动态SQL的问题
– EXECUTE IMMEDIATE
– DBMS_SQL
允许用户传递sql语句中的参数危险性
这些问题和sql 注入问题几乎一样。
There are two ways to create SQL Statements on the fly in PL/SQL code – Execute
immediate and through the package DBMS_SQL.
5 动态sql语句的例子
CREATE PROCEDURE BAD_CODING_EXAMPLE ( NEW_PASSWORD
VARCHAR2 ) AS
TEST VARCHAR2;
BEGIN
-- DO SOME WORK HERE
EXECUTE IMMEDIATE 'UPDATE ' || TABLE_NAME || ' SET ' ||
COLUMN_NAME || ' = ''' || NEW_PASSWORD || '''‘ WHERE USERNAME=
= ''' || CURRENT_USER_NAME || ''';
END BAD_CODING_EXAMPLE;
有效的输入 from any OCI connection, ODBC connection, SQL*Plus, etc…
– EXEC BAD_CODING_EXAMPLE( ‘testabc’ );
• SQL Created
– UPDATE APPLICATION_USERS SET PASSWORD = ‘testabc’
WHERE USERNAME = ‘aaron’
这个要求有一个有效的帐户,和对过程的可执行。
黑客的输入
– EXEC BAD_CODING_EXAMPLE( ‘testabc’’, ADMIN=1,
FULL_NAME=‘’TEST’ );
SQL Created
– UPDATE APPLICATION_USERS SET PASSWORD = ‘testabc‘,
ADMIN=1, FULL_NAME=‘TEST’ WHERE USERNAME =
‘aaron’
通过在输入中附加一条语句,使得ADMIN列更新,使得用户成为应用程序的管理员。
注意我们应该附近另一列在末尾来出来最后的单一请求。
6 Getting to the operating system
在NT中oracle以localSystem身份,作为系统权限的一部分。
在Unix为oracle user来运行,对oralce的所用文件有权限。
进程:– UTL_FILE, UTL_HTTP
系统权利类似于create library
一但用于了对数据库的权限,就可以进入操作系统,可以使用很多进程– UTL_FILE是最致命的,给你对文件的读写权。不过UTL_FILE_DIR参数可以进行限制,管理员可以修改这个参数。Oracle运行你加载libraries到一个独立的进程空间使用EXTOROC可执行文件。一些共享libraries和DLL也是可行的。
7 操作系统
• Oracle 有许多tUID文件
• Oratclsh was setUID root
– TCL debugger
– Allowed you to run a script as root
– Change setuid immediately, even if you are not using
Setuid有很多问题,以前oracle捆绑了15setuid文件。最大的问题是TCL debugger,为应用程序设计在他们用于DBSNMP引擎前。这个debugger是steuid的而且由root拥有。所以很容易获得root权限,虽然有patch,不过还是有很多文件可以被利用的,这个问题即使是dbsnmp agent 不使用也会有。
Other SetUID files
• Were many until Oracle8i release 2
– Cmctl, tnslsnr, etc…
• Very important one – oracle
– Main database engine
• Relies on ORACLE_HOME directory
– To load the pwdSID.ora file
– Allows you to load a rogue database
8.1.6已经取消了许多SetUIDbits. Dbsnmp和oracle files然后保留,这两个都需要SetUID才能恰当的工作。推荐使用不同策略,可以是任何人不可以可执行权限除了所有者。Oracle是主要的可执行程序,如果你设置为可执行的话,任何在server有帐户的人可以开启一个实例,通过UTL_FILE package去写一些文件。这些依赖于$ORACLE_HOME的环境变量的设置。
8 安装Oracle
oracle在安装的时候会在/tmp目录下建立一些文件,虽然umask是022,不过有人可以在安装之前生产一些目录和文件,一些保留的旧文件使得黑客可以注入一些代码在安装的时候。而且有很多脚本使得代码注入很简单,黑客可以很轻松的创建root toolkit。
9 锁定操作系统
在安装之前对其他的os用户进行锁定
TMP_DIR为一个安全的目录
锁定ORACLE_HOME许可权限
删除setUID从所有的文件
重新命令UNIXoracle的帐户