技术开发 频道

从黑客角度检验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的帐户 

0
相关文章