关于绿盟扫描ORACLE漏洞的问题 说几点看法

之前看了这篇文章 “坑爹”的绿盟数据库漏扫,求你专业一点 ,讲几点个人的看法。

因为近期国内勒索病毒问题频发,可以观测到QQ群内大量甲方人员提问关于绿盟扫描的问题。

文章的主旨是说 绿盟的ORACLE 数据库漏洞扫描的结果比较不靠谱,已经装了的补丁,扫描的结果仍是存在漏洞,让甲方的人员很苦恼。

 

绿盟号称是在企业安全市场占有率最高的公司,拥有自己的产品和服务,涉猎企业IT环境中的几乎所有的服务器、软件的安全问题,这几年由于安全问题越来越被重视,这类安全公司确实也跟着火了。

我曾经2013年在某省移动驻场负责维护几十套Oracle数据库,每季度都会收到绿盟发来的漏洞列表,第一次发来几千项,企信部领导“高度重视”,让我连夜排查并给出解决方案。当时大多数数据库版本是11203,且安装了较新的PSU,我发现漏洞里面居然还存在2009年的CVE高危漏洞,当时就纳闷Oracle自己在2009年公布的漏洞到现在咋还没修复呢?

通过原厂确认,首先Oracle不认可任何第三方软件的漏洞扫描结果,其次绿盟的漏洞扫描机制简单粗暴,基本上没有可信度,后来和甲方DBA达成共识:1、安装最新的PSU,2、通过技术手段屏蔽绿盟的扫描。

没想到现在都2019年了,这个问题依然存在,不知道产品经理是不是去岘港度假被抓了,看看苦逼DBA们被坑害的反馈吧:

首先说说绿盟漏扫的”业余“机制吧,通过数据库版本号直接去匹配Oracle官方的CVE漏洞列表,不会检测PSU。拜托,现在大多数科技公司都在应用AI、机器学习了,您还在通过几个数字匹配表格来定义企业的信息安全分数,真是太“LOW”,哪还有安全可言。

给出了一大堆漏洞,高危的红色,让领导瑟瑟发抖,我想绿盟可能还会觉得自己很牛X吧。然而却没有给出解决方案,最多丢一个Oracle 的CVE链接给你,自己去找补丁,各个补丁之间还可能冲突,对了这里是CPU,-_-||

无力吐槽!

给乙方DBA的建议:

1、不要浪费时间尝试根据不可信的漏洞列表一一去找单个的补丁,直接安装最新的PSU即可(不过最佳实践是次新,另外12.2改为RU)。

2、觉得不好交差,或者强迫症,可以通过防火墙、端口、数据库IP限制等方式限制绿盟机器的访问;

3、把“皮球”抛给现场的绿盟GG,让他们去跟甲方解释,承认这是绿盟漏扫软件的缺陷;

4、使用专业的数据库巡检平台检查数据库,从数据库的角度去排查安全问题。

给绿盟的建议:

1、希望绿盟专业一点,牢记“专功术业”的愿景,真正做到“成就所托”,不要学早期的360通过报大量高危漏洞吓唬用户来体现自身卑微的价值;

2、学习了解Oracle的补丁策略,弄清楚One of Patch、CPU、PSU、RU的区别以及大版本小版本的关系,分别修复了哪些CVE漏洞,如果真的存在漏洞,那么给出专家的方案,不要给个CVE链接草草了事,我相信这些需求相对来说比较容易,如果需要我们可以免费支持;

3、多听听业界的声音和用户的反馈,快速迭代改进产品,不然没有核心竞争力,分分钟被替代被超越。

最后还是诚恳的呼吁绿盟团队,尽快把自己产品的缺陷修复,完善各项功能,真正为国内企业信息安全建设贡献更多的力量,“专功术业,成就所托”。

 

 

结论是让绿盟在扫描上专业一点,改进产品。

评论里又绿盟的相关人员驳斥了文章观点,认为绿盟扫描结果不准确是因为 没有做登陆扫描。

 

@楼主,看你的描述,13年就接触数据库漏洞处理并接触了漏洞扫描器,不过看起来这么多年你也没有潜心研究漏洞扫描器原理、没有思考为啥这么多年误报问题一直无法解决、也没有尝试去找厂家研究扫描功能、也没有思考国内安全厂商的技术瓶颈与困境,给出可供参考的意见和建议,通篇只有闹骚满腹,无尽抱怨,看来你这么多年也没有进步,也没有看到别人的进步,希望你还是摆正心态,踏实做事。

完全站在dba的角度去考虑安全,实话说挺无知的
1.先搞清楚基于网络的漏洞扫描原理,存活判别,应用识别,发包探测和回应到底能获取目标对象多少信息?
2.登录扫描原理,登录目标对象后到底能获取多少信息,是否会执行命令?什么情况下执行poc
3.想问问lz,哪个大厂的漏扫可以精准判断oracle漏洞?如果都不行,自己有思考过原因何在吗?光在这里瞎bb

楼主难道不知道登录扫描么?给建议,据说绿盟登录扫描很早就实现了,楼主没用过么?怪不得不知道,发文章

首先,远程扫描返回的banner不带patch,其次,还有登陆扫描的功能。
但,更多的情况是甲方不愿意把数据库的登陆方式交给除了数据库厂家外的其他乙方。吃得咸鱼抵得渴,不提供密码,扫描结果不准确那就自己受着。所以,涉密的东西还是甲方或者相关厂家自己做吧,别什么都赖给别人,自己不作为还怪别人呢。

太可怕了,lz 6年还没搞懂什么是登录扫描

 

 

上面陈述了一些问题,这里讲讲我的看法,一家之言

 

  1. 没有做登陆扫描,主要原因一般是甲方人员并不放心把账户密码给来做扫描的技术人员;以人之常情而论,我相信90%的甲方同学并不愿意做登陆扫描
  2. 因为 第一点的这个情况,导致绿盟的扫描结果,大多数情况下不准确和无价值
  3. 打一个不恰当的比方,用户去医院看病,医生让验血/拍片,但用户都不愿意验血/拍片;因为不愿意验血/拍片,所以医生几乎没有可参考的信息
  4. 在这种情况下,医生罗列了所有病人可能患的病症,列可能性嘛,多列一些总不会错
  5. 用户面对医生罗列的一大堆病症可能性,无所适从

 

这里划分一下责任:

  1. 这里可以看到,甲方的责任在于虽然有配合扫描漏洞的义务,但并不乐意真的提供账号密码来做登陆扫描。
  2. 绿盟方面可能没有强调登陆扫描的重要性, 实际上 不做登陆扫描的话 , 报告可以认为是没意义的,但这件事也就不用做了
  3. 绿盟方面因为要在没有可能获得完整信息的情况下,给出报告。强行罗列了其可以确定的可能性,这导致维护方最后要么不处理,要么很吃瘪

 

最后说几点建议:

 

  1. 如果甲方同意做漏洞扫描,就该开放账户密码给绿盟。绿盟在做扫描前应该确认这一点,如果甲方不愿意提供,那么强行去做这些事,可以说是走过场的形式主义
  2. 国内大部分非外企或上市企业使用的要么是盗版ORACLE,要么从来不购买ORACLE标准服务;这种情况下做漏洞扫描,即便出了准确结果,甲方也并没有合法途径去获得相关的安全性补丁,从网上的非官方渠道下载一些补丁,岂不是更不安全? 所以对于使用盗版ORACLE或者从不购买ORACLE标准服务的甲方,从法理上不建议去做这些漏洞扫描。这类甲方应当适当提高内网安全系数,避免ORACLE有暴露在外的可能性
  3. ORACLE每季度都会出新的PSU/SPU(以前叫CPU 即安全补丁),虽然重要度可能并不均匀(例如一年中只有一个季度发布了适应面很广,影响很大的漏洞);但可以说永远可能会发现新的安全漏洞;如果是顶级的企业,无所谓人力成本,当然可能每年升级个几次,但一般来说是不可能的,成本不可控
  4. 就Maclean的经验来看,中国和美国的顶级银行或企业都并不会如第三条这样做,打SPU的情况都是少数,除非特别需要
  5. 目前阶段,国内的主要安全趋势还是做好内网安全,能把弱密码和低版本的Windows/Linux全干掉,把无密码的MongoDB/Redis干掉,已经功德无量了
  6. 如果还有同学被绿盟的问题难住,可以耐心看下网上的许多评论,耐心和领导说明;毕竟我们纯技术人员,能做的事,或者说能做到的事并不多啊!

 

 

 

oracle中的xs$null账号

本文连接:https://www.askmaclean.com/archives/oracle中的xsnull账号.html

oracle中的xs$null账号在当XML DB安装时被创建,其作为一个内部账号存在,被一些轻量级框架使用(例如APEX和XDB),该用户的名字XS$NULL被硬编码在oracle代码中,注意XS$NULL不是一个真实的用户,仅仅可以被oracle数据库实例使用。XS$NULL没有说明权限,也没有普通用户可以以XS$NULL来认证登陆,当XDB 被删除时其会被移除。

根据note < Removal Of XDB Schema In 11.2.0.4 Does NOT Drop The XS$NULL User (Doc ID 1926066.1)>来看从11.2.0.4/12c开始catnoqm.sql(XDB deinstall script) fail to drop the user XS$NULL.,即删除XDB组建也无法drop user XS$NULL账号。

 

在我的实际测试用startup upgrade,后执行

@?/rdbms/admin/catnoqm.sql

仍可以删除XS$NULL用户:

SYS @ dbDao.com SQL> drop user XS$NULL cascade;

User dropped.

In 11.2 development explicitly added a check in the code to make sure that nobody (not even user SYS) can alter user XS$NULL. This is the expected behaviour. In release 12c this was formalized by raising the new error ORA-28222 “may not modify reserved user”.

11.2中一班也无法alter user该XS$NULL账号。 如果你确实不使用XDB组建,那么直接像我这样把XDB移除就好了。

Oracle 12c 数据库安全核心技术讨论

本文永久地址:https://www.askmaclean.com/archives/oracle-12c-security.html

Oracle Advanced Security新功能 =>Oracle Data Redaction

Oracle Data Redaction

对应用户权限的实时访问控制

  • 根据用户的权限以及客户端信息,Redaction实时数据
  • 修正应用代码代表在不必要的数据库中完成列访问的控制
  • 根据客服中心以及技术支持的职责不同,对访问客户信息进行控制,以及控制表示对应PCIDSS的信用卡编号、控制应用开发者的直接访问等

 

oracle_data_redaction1

 

受支持的Redaction的种类

根据用途定义数据的参考范围

 

oracle_data_redaction2

 

Oracle Database的访问控制的特徴

Data Redaction Virtual Private Database Database Vault
功能概要 列的访问控制 &Redaction 行・列的访问控制 表的访问控制
特权用户管理
必要许可证 Advanced Security Option Enterprise Edition Database Vault Option
版本 12c~ 8i~(列在10gR1) 10gR2~
对象访问 列(SELECT) 列・行(DML) 对象・SQL命令
説明 根据表中定义的Redaction对策的条件,不在列中展示,或者Redaction到任意值 根据表中定义的VPD对策的条件,自动追加WHERE语句,不表示出行。

这时还可以将特定的列表示为NULL

使用Realm、规则、命令规则等各种要素,访问对象(表、视图以及PL/SQL等),可以控制,并强制访问AQL命令自身的执行
特权用户 对策不适用 对策不适用 对任何用户都适用对策
设定 DBMS_REDACTpackage

或者、Oracle Enterprise Manager

DBMS_RLSpackage

或者、Oracle Enterprise Manager

DVSYS.DBMS_MACADMpackage

或者、Oracle Enterprise Manager

 

Oracle Data Masking 差异

Oracle Data Masking Oracle Data Redaction
安装方法 Oracle Enterprise Manager DBMS_REDACTpackage

或者、Oracle Enterprise Manager

目的 直接对表masking,正式制成相近的测试数据 根据用户权限不同Redaction表以及视图的访问控制
执行时机 online

制成表、数据库的拷贝后,执行masking

online

实时理解查询结果
执行mask处理

存储数据的影响 永久变更数据 没有影响

 

Oracle Data Redaction的架构

  • 对于表以及视图的Redaction对策,通过DBMS_REDACT procedure进行定义
  • 对象中可以做到的列为CHAR/VARCHAR2、 NUMBER、 DATE、 BLOB/CLOB型
  • 根据Redaction对策的条件将列Redaction到任意值

oracle_data_redaction3

 

Redaction对策的制成

DBMS_REDACT.ADD_POLICY procedure

DBMS_REDACT.ADD_POLICY
object_schema 应用Redaction对策的schema名
object_name 应用Redaction对策的表或者视图名
policy_name 想制成的Redaction对策名
column_name 应用Redaction对策的列名
※想指定多个的话,请另外追加DBMS_REDACT.ADD_POLICY
function_type DBMS_REDACT.FULL
DBMS_REDACT.RANDOMDBMS_REDACT.PARTIAL
DBMS_REDACT.REGEXP
expression 基于SYS_CONTEXT的值,定义Boolean型的条件式。
仅限条件的结果值为“True”时可以执行Redaction
function_parameters 使用DBMS_REDACT.PARTIAL时数据的IN与OUT的定义
regexp……. function_type为DBMS_REDACT.REGEXP时的选项群

 

Expression(条件式)的制成方法

  • DB用户名为SCOTT的情况

SYS_CONTEXT(‘USERENV’,’SESSION_USER’) = ‘SCOTT’

  • IP地址为NULL的情况

SYS_CONTEXT(’SERENV’,’IP_ADRESS’)  IS NULL

  • 客户端信息中不包含MGR的用户名的情况

SYS_CONTEXT(’USERENV’, CLIENT_IDENTIFIER’) not like ‘MGR%’

  • 用户没有MGR 角色的情况

SYS_CONTEXT(‘SYS_SESSION_ROLES’,’MGR’) = FALSE

本文永久地址:https://www.askmaclean.com/archives/oracle-12c-security.html

Full Redaction (fullRedaction)

  • 除HR用户之外在访问EMPLOYEES表的SALARY列时执行Redaction
BEGIN
  DBMS_REDACT.ADD_POLICY(
    object_schema  => ‘HR',
    object_name  => ‘EMPLOYEES',
    policy_name  => ‘EMPLOYEE _POLICY_SAL’,
    expression  => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ‘’HR''',
    column_name  => ‘SALARY',
    function_type  => DBMS_REDACT.FULL);
END;

执行结果

SELECT SALARY  FROM EMPOYEES;

SALARY
--------------
              0




根据数据型,用固定值来执行Redaction 以下为初始值。可以变更为任意值
文字列: 单一空间
数值: 零(0)
日期: 01-JAN-01
LOB: [redacted]

 

 

Random Redaction (随机Redaction)

  • 除HR用户之外在访问EMPLOYEES表的SALARY列时执行Redaction

 

 

BEGIN
  DBMS_REDACT.ADD_POLICY(
    object_schema	=> ‘HR',
    object_name	=> ‘EMPLOYEES',
    policy_name	=> ‘EMPLOYEE _ POLICY_EMPID’,
    expression	=> 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ‘’HR''',
    column_name	=> ‘EMPLOYEE_ID ', 
    function_type	=> DBMS_REDACT.RANDOM);
END;


执行结果

SELECT EMPLOYEE_ID FROM EMPOYEES;

EMPLOYEE_ID
-----------------------
                    167


根据不同数据型,根据各自的形式来Redaction
文字列: 随机文字
数值: 随机数值
日期: 随机日期
LOB: 无法使用

 

Partial Redaction (部分Redaction)

  • 通过SQL*PLUS访问EMPLOYEES表的PHONE_NUMBER列时使其Redaction

 

BEGIN
  DBMS_REDACT.ADD_POLICY (
    object_schema	=> ‘HR',
    object_name   	=> ‘EMPLOYEE ',
    policy_name 	=> ‘EMPLOYEE _ POLICY_PHONE',
    expression         => 'UPPER(SYS_CONTEXT(''USERENV'',''MODULE'')) like ''%SQL*PLUS%''',
    column_name 	=> ' PHONE_NUMBER ', 
    function_type 	=>  DBMS_REDACT.PARTIAL,
    function_parameters => ‘VVVFVVVFVVVV,VVV-VVV-VVVV,*,1,6 ');
END;


执行结果

SELECT PHONE_NUMBER FROM EMPOYEES;

PHONE_NUMBER
----------------------------
 ***-***-8080


根据数据型以及各自的不同形式来Redaction
文字列: Redaction为一部分任意字符串
数值: 将一部分Redaction为任意值
日期: 将一份Redaction为任意日期
LOB : 无法使用

 

 

Function_parameters的设定方法

3528 3589 1231 0001=》****-****-****-0001

部分Redaction字符串的情况

function_parameters => ‘VVVVFVVVVFVVVVFVVVV,VVVV-VVVV-VVVV-VVVV,*,1,12’,

– Input format  –> 定义现在的格式。V是Redaction可能、F为固定格式

– Output format –> Redaction后的格式定义。 V为可以Redaction hyphen等固定化的字符

-Mask Character  –> 表示Redaction结果的字符

— Starting digit position –> Redaction的开始位置

– Ending digit position –> Redaction终止位置。Input中包含F的话无法计数

 

部分Redaction数字情况

0123456789 =》9999456789

function_parameters => ‘9,1,4’

-Mask Character  –> 表示Redaction结果的字符

— Starting digit position –> Redaction的开始位置

– Ending digit position –> Redaction终止位置。 Input中包含F的话无法计数

 

 

Regular Expression-based Redaction正式表现 Redaction)

 

BEGIN
  DBMS_REDACT.ADD_POLICY(
    object_schema	=> ‘HR',
    object_name   	=> ‘'EMPLOYEES',
    policy_name 	=> ‘'EMPLOYEE _POLICY_REG',
    expression   	=> 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ‘HR''',
    column_name 	=> ‘'PHONE_NUMBER', 
    function_type 	=> DBMS_REDACT.REGEXP,
    regexp_pattern 	=> '([0-3][0-3][0-3])',
    regexp_replace_string	=> ‘***',
    regexp_position 	=> 1,
    regexp_occurrence  	=> DBMS_REDACT.RE_ALL,
    regexp_match_parameter => 'i');
END;


执行结果


SELECT  PHONE_NUMBER FROM EMPOYEES

PHONE_NUMBER 
------------------------
650.###.5234
650.124.###4



EMPLOYEES表的PHONE_NUMBER列的值中如果存在0-3,3行连续数字的话,就会对那个值进行Redaction

 

正则表现的指定方法

  • 仅仅Redaction特定数值的情况

603.123.6666=》603.###.6666

 

– regexp_pattern    => ‘([0-3][0-3][0-3])’

定义合适数据的搜索模式。意味着0-3的数字是连续排列的

– regexp_replace_string     => ‘#’

定义适合情况的Redaction字符

– regexp_position  => 1

指定搜索开始位置

– regexp_occurrence    => 0

Redaction次数。如果是0的话就将适合的部分全部转换

– regexp_match_parameter    => ‘i‘

指定合适的方法。比如i可以识别大小写

 

Redaction对策的列追加

DBMS_REDACT.ALTER_POLICY procedure

DBMS_REDACT.ADD_POLICY
object_schema Redaction对策中追加的schema名
object_name 追加Redaction对策的表或者视图名
policy_name 追加的Redaction对策名
action DBMS_REDACT.ADD_COLUMN
column_name 追加Redaction对策的列名
function_type DBMS_REDACT.FULL
DBMS_REDACT.RANDOMDBMS_REDACT.PARTIAL
DBMS_REDACT.REGEXP
function_parameters 所有DBMS_REDACT.PARTIAL时,数据的IN与OUT的定义
regexp……. function_type DBMS_REDACT.REGEXP的情况的选项群

※条件为使用通过DBMS_REDACT.ADD_POLICY制成的项目

 

 

追加Redaction对策列

EMPLOYEES表的EMPLOYEE_ID中制成Redaction对策

 

BEGIN
  DBMS_REDACT.ADD_POLICY(
    object_schema    =>'HR ',
    object_name       =>'EMPLOYEES',
    policy_name       =>'EMPLOYEE _POLICY_EMPID',
    expression	          =>'SYS_CONTEXT(''USERENV'',''SESSION_USER'') !=''HR''',
    column_name     => 'EMPLOYEE_ID', 
    function_type     => DBMS_REDACT.RANDOM);
END;

PL/SQL procedure正常完成。


追加PHONE_NUMBER列



BEGIN
  DBMS_REDACT.ALTER_POLICY (
    object_schema         =>'HR ',
    object_name             =>'EMPLOYEES',
    policy_name             =>'EMPLOYEE _POLICY_EMPID',
    action                        => DBMS_REDACT.ADD_COLUMN,
    column_name           => 'PHONE_NUMBER', 
    function_type            => DBMS_REDACT.PARTIAL,
    function_parameters => 'VVVFVVVFVVVV,VVV-VVV-VVVV,*,1,6');
END;
PL/SQL procedure正常完成。




删除Redaction对策

DBMS_REDACT.DROP_POLICY procedure

DBMS_REDACT.DROP_POLICY
object_schema 删除Redaction对策的schema名
object_name 删除Redaction对策的表、或者视图名
policy_name 想删除的Redaction对策名

 

BEGIN
  DBMS_REDACT.DROP_POLICY (
    object_schema  => 'HR',
    object_name    => 'EMPLOYEES',
    policy_name    => 'EMPLOYEE _POLICY_SAL');
END;
PL/SQL procedure正常完成。

 

 

Oracle Data Redaction限制

  • 仅限表中可以定义的一个Redaction对策
  • 表中设定了Redaction对策的话,就会对那个表派生的视图进行Redaction
  • 对以下的数据库的操作不执行Redaction
  • Backup, Restore
  • Export, Import
  • Upgrade, Patch
  • Dataguard, Replication
  • 拥有SYSDBA权限的用户不会被Redaction
  • 拥有系统权限 EXEMPT REDACTION POLICY的用户不会被Redaction
  • 制成物化视图,刷新时不会被Redaction

前提是适当管理数据库的权限

想控制SYSDBA的强制访问的话需要通过同时使用Oracle Database Vault来实现

 

Oracle Data Redaction的负载

验证环境

  • 纯粹作为数据库的过载的处理时间=> Elapsed Time
  • 作为应用的总计过载所花费的处理时间=>响应时间

oracle_data_redaction4

 

Redaction的种类差异

oracle_data_redaction5

 

Redaction的对象列数造成的差异

oracle_data_redaction6

 

实际应用情况

  • 通过连接的用户所拥有的角色来控制,不需要对应用进行修改,通过
    expression => ‘SYS_CONTEXT(’‘SYS_SESSION_ROLES’‘,’‘MGR’‘) = ’‘FALSE’‘‘来控制

 

数据库审计新功能 Unified Auditing

传统的数据库审计功能的课题 audit_trail架构

  • 需要通过Audit命令来进行细致设置
  • 无法获得指定的会话信息中限制的日志
  • 担心由于Audit对性能造成的影响
  • 由于数据库的功能以及utility输出地址也不同

不仅是传统的AUDIT功能扩展,还需要

使用便利性高速 新架构

 

Unified Auditing 简答&高速, 新设计的数据库审计功能

oracle_unified_auditing1

 

与传统的审计功能的比较

传统 Unified Auditing(12c)
1. 审计的定义 用每个审计对象进行定义 用对策定义

可以使用一个对策中审计DB中的所有内容

2. 审计条件 无法指定 可以指定条件与以及审计频率
3. 审计用户的指定 可以通过BY指定审计用户 可以通过BY指定审计用户

可以通过EXCEPT排除审计用户

4.初始化参数 必须设定 不需要设定
5.审计记录 ・SYS.AUD$与SYS.FGA_LOG$

・OS审计记录文件

・DB审计记录文件

・XML形式的OS审计记录文件

・作为AUDSYS schema,在SYSAUX表区域中存储

 

在审计记录文件中存储、可以输入到UNIFIED_AUDIT_TRAIL中

 

Unified Auditing的新架构 2个的SGA队列造成的并列处理非同步写入

oracle_unified_auditing2

 

无法刷新时的架构

防止遗漏日志

  • 无法刷新SYSAUX时,就会作为二进制文件写入到$ORACLE_BASE/audit /$ORACLE_SID中
  • 被输出的审计文件可以通过UNIFIED_AUDIT_TRAILDBMS_AUDIT_MGMT.
    LOAD_UNIFIED_AUDIT_FILES输入
  • 输入完成后,删除审计文件

oracle_unified_auditing3

 

审计日志的写入方法

同步・非同步模式

 

写入方法 特性
Queued-write mode

队列写入

•通过SGA队列的非同步写入方法

•默认

•通过UNIFIED_AUDIT_SGA_QUEUE_SIZE参数,可以将SGA队列的尺寸从1MB扩展到30MB。默认值为1MB

•实例故障以及SHUTDOWN ABORT等等
数据库没有正常关闭时,SGA队列中可能失去审计日志

Immediate-write mode

即时写入

•传统的同步写入方法

•可以获得所有日志,但可能对性能造成影响

 

 

审计日志的写入方法的设定

DBMS_AUDIT_MGMTpackage

  • Queued-write mode的设定

BEGIN

DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY( DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE, DBMS_AUDIT_MGMT.AUDIT_TRAIL_IMMEDIATE_WRITE);

END;

 

  • Immediate-write mode的设定

BEGIN

DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY( DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE, DBMS_AUDIT_MGMT.AUDIT_TRAIL_QUEUED_WRITE);

END;

 

审计对策的制成~有效化

  • 审计对策的制成
CREATE AUDIT POLICY 对策名
 ROLES   角色名,・・
 PRIVILEGES  系统权限,・・
 ACTIONS 对象权限 ON 对象名,・・
 ACTIONS COMPONENT = DATAPUMP, DV, DIRECT_LOAD, OLS
 WHEN  执行审计的条件
 EVALUATE PER [STATEMENT, SESSION, INSTANCE]
 CONTAINER = [CURRENT, ALL]

 

  • 审计对策的有效化

AUDIT POLICY 对策名  [ BY,EXCEPT ] 用户

 

条件式的制成例   通过WHEN句指定审计条件

  • 以前只能通过Fine-grained审计指定的审计条件,现在可以也通过Unified Auditing完成
审计条件
仅限本地连接 SYS_CONTEXT(‘USERENV’,’IP_ADDRESS’) IS NULL
应用为SQL*Plus SYS_CONTEXT(‘USERENV’,’MODULE’) =‘SQL*Plus’
连接客户端在Client001之外 SYS_CONTEXT(‘’USERENV’,HOST’)  <> ‘Client001’
OS用户在Oracle之外 SYS_CONTEXT(‘’USERENV’,OS_USER’)  <> ‘oracle’
客户端识别码格式为ID_XXXX SYS_CONTEXT(’USERENV’, CLIENT_IDENTIFIER’)
like  ‘ID_%’
没有ADMIN的角色 SYS_CONTEXT(‘SYS_SESSION_ROLES’,’ADMIN’)  =FALSE

※ 列単位中的审计条件、执行审计后的操作仅限(例发送邮件等) Fine-grained审计

 

审计对策制成例

  • 以数据库的所有的操作为对象

CREATE AUDIT POLICY all_actions ACTIONS ALL;

AUDIT POLICY all_actions ;

 

  • 以对HR用户的EMPPLOYEES表的所有的操作为对象

CREATE AUDIT POLICY all_actions_emp ACTIONS ALL ON HR.EMPLOYEES;

AUDIT POLICY all_actions_emp;

  • (条件)本地连接的情况中以特定的系统权限、以表的访问为对象

CREATE AUDIT POLICY custom_audit

PRIVILEGES  SELECT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE

ACTIONS ALL ON SCOTT.EMP, ALL ON SCOTT.DEPT

WHEN ‘SYS_CONTEXT(”USERENV”,”IP_ADDRESS”) IS NULL’

EVALUATE PER STATEMENT;

AUDIT POLICY custom_audit;

 

 

通过一个视图访问所有的审计日志

UNIFIED_AUDIT_TRAIL

oracle_unified_auditing4

 

UNIFIED_AUDIT_TRAIL 的主要項目

说明
AUDIT_TYPE 审计类型 Standard,

Fine Grained Audit

Database Vault

RMAN AUDIT

Data Pump

SESSIONID 审计会话中被分配的识别ID 650971863
OS_USERNAME OS用户名 (连接客户端) oracle
USERHOST 主机名 (连接客户端) client001.jp.oracle.com
TERMINAL 端末的识别码 (连接客户端) pts/1
INSTANCE_ID 实例编号 1
DBID Database的识别ID 1417811312
AUTHENTICATION_TYPE 会话用户的认证类型 (TYPE=(DATABASE));(CLIENT ADDRESS=((ADDRESS=(PROTOCOL=tcp)(HOST=10.185.146.20)(PORT=50713))));
DBUSERNAME 数据库用户名 SCOTT

 

説明
CLIENT_PROGRAM_NAME 客户端程序名 sqlplus@secvm3.jp.oracle.com (TNS V1-V3)
DBLINK_INFO 数据库链接信息 SOURCE_GLOBAL_NAME=dblink_src_global_name…..
EVENT_TIMESTAMP event时间(UTC) 13-04-25 15:16:45.513780000
ACTION_NAME action名 SELECT,INSERT, UPDATE,EXECUTE….
CREATE USER, LOGOFF,LOGON…..
RETURN_CODE 错误编号 (ORA-XXXXX) 1031
OS_PROCESS OS的进程编号 30422
SCN System Change Number 5742707
OBJECT_SCHEMA 受到action影响的schema名 HR
OBJECT_NAME 受到action影响的对象名 EMPLOYEES
SQL_TEXT 被执行的SQL select count(*) from emp where empno=:v1
SQL_BINDS SQL_TEXT中包含的bind变量的值  #1(7):1001
APPLICATION_CONTEXTS 应用context值 custno_ctx
CLIENT_IDENTIFIER 会话中被设定的客户端识别码 app001

 

説明
UNIFIED_AUDIT_POLICIES 审计日志的出力对策名 ORA_SECURECONFIG
FGA_POLICY_NAME 审计日志的出力FGA名 FGA_EMP_POLICY
DV_XXXXX (略) Database Vault相关的日志信息
RMAN_XXXX  (略) Recovery Manager相关的日志信息
DP_XXXX  (略) Data Pump相关的日志信息
DIRECT_PATH_NUM_COLUMNS_LOADED SQL*Loader Direct Path Load 相关的日志信息
OLS_XXXX  (略) Oracle Lable Security相关的日志信息
XS_XXXX  (略) Oracle Real Application Security相关的日志信息

 

审计对策的无效化~删除

  • 审计对策的无效化

NOAUDIT POLICY 对策名 

  • 审计对策的删除

DROP AUDIT POLICY 对策名 

NOAUDIT POLICY all_actions_emp;

审计取消成功。

drop audit policy all_actions_emp;

审计对策已删除。

 

完成定义的默认对策

ORA_SECURECONFIG

PRIVILEGES ALTER  ANY TABLE

CREATE ANY TABLE

DROP ANY TABLE

CREATE ANY PROCEDURE

DROP ANY PROCEDURE

ALTER ANY PROCEDURE,

GRANT ANY PRIVILEGE

GRANT ANY OBJECT PRIVILEGEGRANT ANY ROLE

AUDIT SYSTEM CREATE EXTERNAL JOB

CREATE ANY JOB

CREATE ANY LIBRARY
EXEMPT ACCESS POLICY CREATE USER

DROP USER

ALTER DATABASE

ALTER SYSTEM

CREATE PUBLIC SYNONYM

DROP PUBLIC SYNONYM

CREATE ANY SQL TRANSLATION PROFILE

ALTER ANY SQL TRANSLATION PROFILE

DROP ANY SQL TRANSLATION PROFILE

TRANSLATE ANY SQL
EXEMPT REDACTION POLICY

ADMINISTER KEY MANAGEMENT

PURGE DBA_RECYCLEBIN LOGMINING
ACTIONS ALTER USER CREATE ROLE

ALTER ROLE

DROP ROLE

SET ROLE

CREATE PROFILE

ALTER PROFILE

DROP PROFILE

CREATE DATABASE LINK

ALTER DATABASE LINK

DROP DATABASE LINK

LOGON

LOGOFF

CREATE DIRECTORY

DROP DIRECTORY

 

 

強制的审计用户、命令 

管理者的访问、审计设定的变更历史为默认审计

  • 用户
  • SYS, SYSDBA, SYSOPER
  • SYSASM, SYSBACKUP, SYSDG, SYSKM
  • 命令
  • CREATE AUDIT POLICY
  • ALTER AUDIT POLICY
  • DROP AUDIT POLICY
  • AUDIT, NOAUDIT
  • EXECUTE DBMS_FGA, DBMS_AUDIT_MGMT
  • ALTER TABLE (AUDSYS用户拥有的表)

 

RMAN event的审计

  • 执行RMAN命令

$ rman target /

RMAN> backup tablespace users;

RMAN> restore tablespace users;

RMAN> recover tablespace users;

 

  • 参考UNIFIED_AUDIT_TRAIL的RMAN列

SELECT event_timestamp,action_name,rman_operation,rman_object_type FROM unified_audit_trail
WHERE rman_operation IS NOT NULL;

EVENT_TIMESTAMP  ACTION_NAME  RMAN_OPERATION  RMAN_OBJECT_TYPE

———————————————————————————————————————————————-

13-02-14 02:19:26  RMAN ACTION  Backup  DF Full

13-02-14 02:19:26  RMAN ACTION  Restore  DF Full

13-02-14 02:19:26  RMAN ACTION  Recover  DF Full

 

Data pump  event的审计

  • 设定Datapump的对策
SQL> CREATE AUDIT POLICY audit_dp_all_pol ACTIONS COMPONENT=DATAPUMP ALL;
SQL> AUDIT POLICY audit_dp_all_pol;
  • EXPORT的执行
$ expdp scott/tiger dumpfile=scott_tables tables=emp,dept directory=dp_dir

Export: Release 12.1.0.1.0 - Production on 木 2月 14 11:44:52 2013
Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.
连接地址: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics, Real Application Testing and Unified Auditing options
启动"SCOTT"."SYS_EXPORT_TABLE_01": 
 scott/******** dumpfile=scott_tables tables=emp,dept directory=dp_dir
・・
. . “SCOTT”.“DEPT”                                  6 KB       4行被输出
. . “SCOTT”.“EMP”                               8.671 KB      12被输出
主表“SCOTT”.“SYS_EXPORT_TABLE_01”正常加载/卸载完成
******************************************************************************

本文永久地址:https://www.askmaclean.com/archives/oracle-12c-security.html

  • 参考UNIFIED_AUDIT_TRAIL 的DP列

 

SELECT event_timestamp,dp_text_parameters1,dp_boolean_parameters1 
 FROM unified_audit_trail WHERE dp_text_parameters1 is not null

EVENT_TIMESTAMP

--------------------------------

13-02-14 11:44:56 

DP_TEXT_PARAMETERS1

------------------------------------------------------------------------------------------------------------------------------------------------

MASTER TABLE:  "SCOTT"."SYS_EXPORT_TABLE_01" , JOB_TYPE: EXPORT, METADATA_JOB_MODE: TABLE_EXPORT,JOB VERSION: 12.0.0.0.0, ACCESS METHOD: AUTOMATIC,

DATA OPTIONS: 0, DUMPER DIRECTORY: NULL  REMOTE LINK: NULL, TABLE EXISTS: NULL,

PARTITION OPTIONS: NONE

DP_BOOLEAN_PARAMETERS1

------------------------------------------------------------------------------------------------------------------------------------------------

MASTER_ONLY: FALSE, DATA_ONLY: FALSE, METADATA_ONLY: FALSE, 
 DUMPFILE_PRESENT: TRUE, JOB_RESTARTED: FALSE



SQL*Loader Direct Path Load event的审计
  • 设定SQL*Loader Direct Path Load的对策

SQL> CREATE AUDIT POLICY audit_sqlldr_load_pol ACTIONS COMPONENT=DIRECT_LOAD LOAD;

SQL> AUDIT POLICY audit_sqlldr_load_pol ;

 

  • 执行SQL*Loader Direct Path Load

$ sqlldr userid=hr/hr control=emp.ctl data=emp.csv direct=y

 

  • 参考UNIFIED_AUDIT_TRAIL

 

select event_timestamp,audit_type,dbusername,action_name,object_schema,object_name,sql_text,
 direct_path_num_columns_loaded from unified_audit_trail where audit_type='Direct path API‘

EVENT_TIMESTAMP    AUDIT_TYPE       ACTION_NAME  OBJECT_SCHEMA      OBJECT_NAME 

----------------------------------------------------------------------------------------------------------------------------------------------

13-02-14 13:05:31         Direct path API      LOAD                  HR                                EMP

SQL_TEXT

----------------------------------------------------------------------------------------------------------------------------------------------

INSERT /*+ SYS_DL_CURSOR */ INTO "HR"."EMP" ("EMP_ID","EMP_NAME") VALUES (NULL,NULL)

DIRECT_PATH_NUM_COLUMNS_LOADED

--------------------------------------------------------------

2



审计Database Vault event
  • 设定Database Vault的对策
  • 对象: Realm, the rule set, factor
  • 访问失败/成功等

SQL> CREATE AUDIT POLICY audit_dv  ACTIONS COMPONENT=DV Realm Violation
ON “HR Application”;

SQL> AUDIT POLICY audit_dv;

 

  • 参考UNIFIED_AUDIT_TRAIL 的DV列
SELECT dbusername,object_name,sql_text,dv_action_name FROM unified_audit_trail
  WHERE db_return_code <> 0;

DBUSERNAME  OBJECT_NAME  SQL_TEXT  DV_ACTION_NAME

-----------------------------------------------------------------------------------------------------------------------------------------------

HR  EMPLOYEE  select * from hr.employee  Realm Violation Audit

 

 

Mixed Mode Auditing

下位兼容性support

  • 12c的数据库可以使用传统的Audit或者Unified Auditing
  • 安装时都是以可以使用的Mixed 模式来运行
  • Mixed 模式的情况下,AUDIT_SYS_OPERATION的SYSDBA的日志文件在
    传统OS的目录中被输出
  • 另外,RMAN以及Datapump等的utility的日志无法在Unified Auditing中整合

确认审计模式

SELECT VALUE FROM V$OPTION WHERE PARAMETER = ‘Unified Auditing’;

——————————————-

TRUE   –>  Unified Auditing

FALSE –>  Mixed Mode

 

  • Mixed模式因为Unified Auditing的对象范围被Audit Policy限制了,所以推荐以以下顺序完成
  1. 关闭数据库、终止listener
  2. cd $ORACLE_HOME/rdbms/lib
  3. make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
  4. 启动listener、数据库的起動

只想使用传统的Audit时,以Mixed模式使得所有的Unified Audit对策无效化,通过audit_trail参数与Audit命令来设定

 

追加AUDIT专用角色

数据库利用者与审计的权限分离

oracle_unified_auditing5

 

对跨越间隔的审计日志进行清理

DBMS_AUDIT_MGMT package

  • 指定基准日期时间
BEGIN
  DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
   AUDIT_TRAIL_TYPE       =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
   LAST_ARCHIVE_TIME   =>  '2013-02-15 10:00:00.00');
END;

 

  • 制成对超过了两周(336H)的审计日志进行清理的job
BEGIN
  DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (
   AUDIT_TRAIL_TYPE              => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
   AUDIT_TRAIL_PURGE_INTERVAL    => 336,
   AUDIT_TRAIL_PURGE_NAME        => 'Audit_Trail_Purge_Job’,
   USE_LAST_ARCH_TIMESTAMP       => TRUE);
END;

 

审计日志的归档

清理之前,对审计日志进行备份的方法

  • 在UNIFIED_AUDIT_TRAIL视图中作为其他表来抽出,取出EXPDP
  • 归档到Oracle Audit Vault and Database Firewall (12.1.1)

oracle_unified_auditing6

 

Unified Auditing的负载

oracle_unified_auditing7

查看・更新SQL造成的差异

 

oracle_unified_auditing8

 

OTLP应用的情况

oracle_unified_auditing9

 

Unified Auditing生成日志尺寸  SYSAUX表区域的尺寸

oracle_unified_auditing10

 

权限管理 新功能 Privilege Analysis

Privilege Analysis

不正常访问的原因一般都是检测到过度的权限赋予

  • 清理出赋予用户以及角色的系统权限、对象权限,确认是否使用,进行报告
  • 赋予应用以及开发者・管理者真正需要的权限
  • 原则上以最小权限来实现。防止不正常访问

oracle_unified_auditing11

权限分析的对象

找出被执行的系统/对象权限

  • 角色
    • 分析指定角色权限的使用状況 (可以指定多个)
  • 条件指定
    • 分析适合指定条件的情况,分析权限的使用状況
      (特定的用户以及应用等)
  • 角色+条件指定
    • 适合指定角色以及条件的情况,分析权限的使用状況
  • 数据库
    • 分析数据库内的所有的权限的使用状況
      (除去SYS用户)

权限分析的顺序

通过DBMS_PRIVILEGE_CAPTURE开始捕获

  • 制成分析对策
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE
name 对策名
description 说明(任意)
type 选择任意一个

DBMS_PRIVILEGE_CAPTURE.G_DATABASE

DBMS_PRIVILEGE_CAPTURE.G_ROLE

DBMS_PRIVILEGE_CAPTURE.G_CONTEXT

DBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXT

roles Ex)  role_name_list(‘role1’, ‘role2’)
condition Ex)  SYS_CONTEXT(”USERENV”, ”SESSION_USER”)=‘SCOTT’

 

  • 分析对策的有效化

DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE (‘对策名‘)

 

 

权限分析的顺序  捕获终止~报告

oracle_unified_auditing12

  • 分析对策的无效化

EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE (‘对策名)

  • 分析报告的制成 (执行后,可以在专用的视图中查看分析结果)

EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT (‘对策名‘)

  • 分析报告的删除 (会删除已制成的报告的信息)

EXEC DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE (‘对策名‘)

 

Privilege Analysis的专用视图

结果表 説明
DBA_USED_PRIVS

DBA_UNUSED_PRIVS

所有的使用/未使用的权限。

(包含系统权限、用户权限、对象权限与PUBLIC权限)

DBA_USED_OBJPRIVS

DBA_UNUSED_OBJPRIVS

DBA_USED_OBJPRIVS_PATH

DBA_UNUSED_OBJPRIVS_PATH

所有的使用/未使用的对象权限。

对有「PATH」的表赋予权限。

DBA_USED_SYSPRIVS

DBA_UNUSED_SYSPRIVS

DBA_USED_SYSPRIVS_PATH

DBA_UNUSED_SYSPRIVS_PATH

所有的使用/未使用的系统权限。

对有「PATH」的表赋予权限

DBA_USED_PUBPRIVS 所有的使用过的PUBLIC权限。
DBA_USED_USERPRIVS

DBA_UNUSED_USERPRIVS

DBA_USED_USERPRIVS_PATH

DBA_UNUSED_USERPRIVS_PATH

所有的使用/未使用的用户权限。

「对有「PATH」的表赋予权限

 

) 用户没有Any权限调査

BEGIN
 DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  name            => 'ANY_priv_analysis_pol',
  type              => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
  condition      => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'')=''APP_USER''');
END;/
EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('ANY_priv_analysis_pol');

     -----处理执行-----

EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE ('ANY_priv_analysis_pol');
EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT ('ANY_priv_analysis_pol');
SELECT USERNAME, SYS_PRIV, OBJECT_OWNER, OBJECT_NAME FROM DBA_USED_PRIVS;

USERNAME   SYS_PRIV                     OBJECT_OWNER  OBJECT_NAME

----------------    ----------------------------     -----------------------    -----------------------

APP_USER    SELECT ANY TABLE     HR                           EMPLOYEES

APP_USER    CREATE SESSION

APP_USER                                           SYS                         ORA$BASE

APP_USER                                           SYS                         DUAL

 

 

 

发现APP_USER以
SELECT ANY TABLE权限在

HR用户的EMPLYEES表中访问过

-> SELECT ANY TABLE是否不必要?

 

 

) 调查DBA角色的使用状況

 

BEGIN

 DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(

  name        => 'dba_role_analysis',

  type          => DBMS_PRIVILEGE_CAPTURE.G_ROLE,

  roles         => role_name_list('dba'));

END;/

EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('dba_role_analysis');

     -----处理执行-----

EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE ('dba_role_analysis');

EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT ('dba_role_analysis');



SELECT USERNAME, USED_ROLE,SYS_PRIV,PATH FROM DBA_USED_SYSPRIVS_PATH;

USER     USED_ROLE                   SYS_PRIV                    PATH

----------   ----------------------------        -----------------------          -----------------------

SCOTT   OLAP_DBA                      DROP ANY TABLE     SYS.GRANT_PATH(SCOTT,DBA,OLAP_DBA)

SELECT USERNAME, SYS_PRIV, OBJECT_OWNER, OBJECT_NAME FROM DBA_USED_PRIVS

USERNAME   SYS_PRIV                     OBJECT_OWNER  OBJECT_NAME

----------------    ----------------------------     -----------------------    -----------------------

SCOTT     SELECT ANY TABLE   HR                           TEST



SCOTT用户使用
 DROP ANY TABLE权限
 (DBA - >OLAP_DBA角色)
 删除了HR用户的TEST表

 

Database Vault 新功能

Oracle Database Vault  特权用户管理

  • 控制数据库内的特权用户(SYS用户、DBA角色等)的強制访问
    特权用户无法访问应用数据
  • 将应用进行bypass的访问,也可以在数据库中包含数据
  • 可以制成包含用户以及IP地址等等的客户端信息以及星期几・时间等详细信息的对策
  • 提供SAP以及SIEBEL等的应用的访问对策的提供

 

oracle_unified_auditing13

 

DV的起设定

默认已经安装好所有必须的部件

  • 制成DV的管理者用户与账户管理者 (提供SYS用户执行)
GRANT CREATE SESSION TO dbv_owner IDENTIFIED BY password;
GRANT CREATE SESSION TO dbv_acctmgr IDENTIFIED BY password;
BEGIN
 DVSYS.CONFIGURE_DV (
   dvowner_uname         => 'dbv_owner',
   dvacctmgr_uname       => 'dbv_acctmgr');
 END;
  • DV的有效化 (需要以DV管理者执行、重启)

EXEC DVSYS.DBMS_MACADM.ENABLE_DV;

  • DV的无效化 (需要以DV管理者执行、重启)

EXEC DVSYS.DBMS_MACADM.DISABLE_DV;

 

切断特权用户的访问

通过Realm理论地定义对象防御范围

  • 为了访问Realm中的对象,需要满足
    Realm的认可、规则的許可、对象的访问权等条件

database_vault_1

強制Realm

更严格的、不遗漏的默认隔断

  • 对于对象的所有者(制成者)、即使是有对象权限的用户,
    只要Realm不认可,就不能访问

database_vault_2

 

对应Multi-tenant 架构  更安全地管理集约数据库

database_vault_3

【转】卡巴斯基安全公告称甲骨文数据库存在加密漏洞

据卡巴斯基实验室发布的安全公告称,一名安全研究人员发现,甲骨文的数据库存在安全漏洞,黑客只需知道数据库名称和用户名,就可通过非法手段侵入到甲骨文Oracle数据库。

在阿根廷召开的一个安全会议上,安全公司AppSec的研究员Esteban Martinez Fayo演示了他的这一发现。该研究员称,在短短的5小时之内,通过一台普通PC并利用一个特殊工具,他就可以获取简易口令并访问用户数据。

Martinez Fayo称,“这非常简单,黑客者只需知道数据库的一个有效的用户名和名称就能够实施攻击。”

Martinez Fayo称他发现了甲骨文数据库密码验证机制上的一处加密漏洞高,而该漏洞的存在导致攻击者很容易实现对数据库的破解。Martinez Fayo同时表示,黑客实施攻击不需要使用“中间人攻击”模式来进行伪装,而使服务器直接会向黑客泄露重要信息。

Martinez Fayo称他的团队最初于2010年5月份将该漏洞通知了甲骨文公司,而且甲骨文在2011年对此进行了修复。但甲骨文并未修复当前的数据库版本——11.1和11.2版本,这些版本的数据库仍面临攻击威胁。但甲骨文最新发布的12版本修复了该问题。

其实这并非首次在甲骨文数据库中发现安全漏洞。今年1月份,在发现了一处可导致黑客远程入侵数据库的安全漏洞后,甲骨文一次性为其数据库软件发布了78款安全补丁。刚刚在上个月,在甲骨文的最近发布的Java 7升级中还发现了一处新的安全漏洞。

Martinez Fayo表示,目前要想解决这一问题的变通方法,“在11.1中选择禁用协议,或使用老版本,如V10g,这是防止数据库遭受攻击的有效途径,而对于部署甲骨文数据库的机构组织来说非常重要。”

 

本文转自: http://www.cnetnews.com.cn/2012/0924/2122216.shtml

Essential Oracle Security Internal For DBA

Essential Oracle Security Internal For DBA文档下载

 

 

Essential Oracle Security Internal For DBA(最新)

 

[转]著名安全专家Litchfield对Oracle开火

著名的数据库安全专家 Litchfield为自己赋予的使命就是告诉全世界数据库软件并不安全——特别是Oracle的数据库。Litchfield曾经公开批评Oracle,甚至要求Oracle首席安全官Mary Ann Davidson下台。

Litchfield认为,长期以来,Oracle及其用户在安全领域里一直象鸵鸟一样把头插在沙子中。 Oracle采用了错误的方式来解决安全问题。

英国下一代安全软件的合作创办人Litchfield正在进行一场圣战。今年一月,他出版了一本Oracle黑客手册。手册的封面上说为读者提供了完整的访问和防护Oracle系统的方法。

在批判Oracle的同时,Litchfield却对微软极力推崇。他曾经公开声称微软最新的数据库软件SQL Server 2005是安全的。这种声明一定严重的伤害到了微软的主要竞争对手Oracle。Oracle已经眼看着一大块数据库市场划归了华盛顿Redmond的软件巨人。

在上周召开的Black Hat DC大会上,Litchfield讨论到了一种新的袭击技术使Oracle数据软件的漏洞问题更加严重。他向ZDNet澳洲的姐妹网站CNET News.com解释了揭露漏洞的必要性。

问:为什么您对数据库安全如此关注?还有其他那么多软件。
Litchfield: 数据库安全对于任何组织机构来说就象是王冠上的珠宝。这个星球上的每家机构都有数据库,而这组织机构存在的活力之源。没有什么比从源头进行把握更有效的安全措施。我们能够在周边进行安全工作,但是如果软件本身带有SQL injection这样的漏洞,那么安全措施就前功尽弃了。

我与Oracle的关系已经有所缓和。

尽管有防火墙,尽管网络服务器已经被锁定,但是网络应用中的SQL injection缺陷就能让我们一路畅通的进入数据库服务器的后端。如果这个数据库没有采用最低权限,或者没有完全打好补丁,那么我们就能对数据库进行充分的访问并攫取全部数据。

数据库必须是安全的。问题是在最近以前,没有人真正的处理过数据库服务器的后端。也就是说过去人们采取的都不过是外围安全措施。

最近您对Oracle的数据库相当关注。是有什么特别的原因让您对Oracle倾注更多吗?
Litchfield:是的。SQL Server 2005是安全的。因为微软解决了问题。Oracle正在解决问题。对于IBM,我研究过DB2和Informix,并为他们指出了从缓存溢出到权限增加等大约50个bug,IBM安全部门的反应是成熟的。

最近,Oracle安全部门的反应就没那么成熟。他们气势汹汹的,与“这个家伙在让我们的产品更安全”的想法完全相反。不过他们的态度现在有所好转。Oracle正在开始理解我和他们站在同一条战线上,只是彼此的看法不同。

当Oracle这样的厂家态度强硬时,您就会变得更加强硬?
Litchfield:是的。很遗憾我正是这样行事的。但是如果你不得不保护自己,那么就保护自己吧。我更愿意去工作,就象我对微软和IBM那样,与他们的安全响应团队一起工作。我们与微软和IBM拥有良好的关系。有什么比良好的关系好的成事方法呢?我可不想站在浑水中互相指责。

我与Oracle的关系有所缓解,他们理解这并不是一场意志上的对决。我努力使他们了解他们数据库所存在的问题,因为这些问题对我造成了直接的对影响。如果有人闯入数据库服务器然后窃取了我的信息,付出代价的是我,而不是Oracle

有人可能会认为这有点象敲诈。
Litchfield:我可从来没有向Oracle索要过财物。如果人们这么想,那么他们得到的信息可能有误。

 

 

那么微软也没有雇用你来说SQL Server 2005是安全的?
Litchfield:我说微软的产品是安全的但是没有从微软那里得到什么报酬,如果任何人在SQL Server
2005中找到bug,那个人最好是我。如果别人找到什么bug,它会破坏我将来判断产品是否安全的能力。因此,如果在SQL Server 2005中的确存在bug,我希望是我首先发现。我很期待。

 

 

微软过去和现在是否是NGS软件的客户?
Litchfield:NGS的确在微软工作,但我们并不是受雇来说他们是安全的——我们被雇来使他们的产品更安全。对于微软和NGS来说,现在以及将来的独立性都很重要。否则我们工作的正确性以及微软为使产品更安全所进行的努力就会遭到怀疑。这就是NGS 依然在为微软的产品提出安全建议的原因。

 

 

我听说您曾经担任SQL Server 2005的安全审计工作,是这样吗?
Litchfield:我不能说具体的说到我们所做的项目。这样,如果有人对SQL Server是否比Oracle安全的问题存在疑问,他所要做的就是想想包括那么多顶级研究人员在内的很多人都曾经研究过两个产品,寻找过安全漏洞。而SQL Server已经很长时间没有被发现问题了。我再重复一遍,如果有人在SQL Server 2005中发现严重的漏洞,那么我希望那个人是我。

 

 

Oracle是否曾经是NGS软件的客户?
Litchfield:是的,过去我们与Oracle合作过几个项目。

 

 

NGS软件的主要业务是什么?
Litchfield:我们的业务分三个方面。我们销售评估安全状况和是否遵从萨班斯 – 奥克斯利法案的工具;我们为一些组织机构提供顾问服务;而且我们还进行漏洞调研并销售调研报告。

 

 

你们一般调研对象是什么样的机构?
Litchfield:负责和保护关键性国家基础设施的政府机构。我们试着对他们的安全问题提出事前警告。我们能够告诉他们某个产品存在缺陷,并且提供消除问题的策略。甚至没有厂家提供的补丁,系统也能得到保护。

靠无知来保证安全是行不通的,因为某个人的无知就是别人的生财之道。

 

 

NGS过去几年发展顺利,这些需求来自哪里?
Litchfield:主要是顾问工作。说起来惭愧,我最初要成立一家软件企业,但现在却更象一家顾问公司。尽管我没有放弃,但也算是我个人的一次失败。我们到某个阶段还会成为一家软件公司。
顾问一般怎么工作?
Litchfield:他可能会做渗透测试,审查代码或者模仿入侵。我们所做的不是安装防火墙那样的工作,我们所从事的是高端工作。

 

是什么每天推动您进行工作?
Litchfield:是因为我对次很擅长。如果你很擅长某件事情,您的动力就会更足。如果我是优秀的画家,我就会画很多作品。如果我对此一窍不通,我当然就不会费心劳力的去画画。我很享受我的工作。

 

是不是特别享受发现bug的工作?
Litchfield:是的。这是一个关于分析的问题。如果我尝试推翻某个系统,我该怎么做呢?另一个原因是它会影响每个人的生活。现在,不是在拿死马当活马医。我知道明天数据库服务器将会更加安全。打个比方说,到那一天,更多的信用卡用户会更安全。

 

如果Oracle的人说你暴露缺陷的的行为实际上伤害了安全,你会怎么说?

Litchfield:在他们假设的情况下这样做的确会提高了风险等级。好的,这的确是这类工作最主要的问题。不过,在风险度提高以后,人们会更倾向于保护自己的系统。
举例来说,我刚刚披露了一种能使没有特殊权限的入侵者利用只有具有更高权限用户才能使用的漏洞进行袭击的方法。现在我们知道这种担心是不对的,因为人们没道理知道这个缺陷以后不打补丁。

有人在我贴出新方法后的零时间内利用我的方法修改入侵手段,并进行公布。于是任何人都可以使用这种手段,所以这的确增加了风险。

回头看2002年8月,我发布的一些代码被用做SQL Slammer病毒的基础。这属于最初的风险增加,但是短痛之后,打过补丁的SQL Servers数量增加了。短期风险成为了长期的受益。这是我对此的看法。

 

有人可能会说我们不想知道都有什么安全隐患,也就不会有人进行利用。你认为这有道理吗?
Litchfield:我不这么认为。世界上总有坏人。如果没有好人来帮助厂家弥补这些漏洞,那么我们会自以为我们是安全的,但实际上我们并不安全。对安全问题视而不见是起不了作用的,因为一个人的无知就是另外一个人的生财之道。

 

什么使您觉得最烦恼?
Litchfield:当人们说我增加了风险或者我的行为出于自私目的时,实际上并不是那样。不过我不会总那么受欢迎,我只是希望诽谤能够少一些。

 

您最近出版了Oracle黑客手册。您的目的是什么?
Litchfield:Oracle的安全世界里充斥着自鸣得意。我希望能够揭掉他们自我蒙蔽的毯子。外面有太多人认为Oracle的产品是安全的,他们无需采取任何措施。这是不负责任的,而我对此很在意。

 

你希望人们怎么看待你?
Litchfield:我希望能够成为帮助人们认识到数据库安全的重要性的人。我希望能够通过我的工作,以及我对行业的了解来改造Oracle 和微软这样的企业处理安全问题的方式。

历数几款第三方的Oracle数据库安全及漏洞扫描软件

虽然oracle公司自有一套丰富的数据库产品线, 包括 oracle advanced security, VDP , Database vault , lable security , Database FireWall 等等。

但我们还是有必要关注一些第三方的 安全工具, 这些安全工具的主要用途 包括: 漏洞扫描,风险评估,安全建议,审计等。

 

Secure Oracle Auditor -  Secure Bytes 的产品 图形化的集中式审计工具, 可以自定义审计策略; 并分析数据库风险,
产品主页: http://www.secure-bytes.com/soa.php

软件截图:

 

 

Oracle Database Encryption Wizard For Oracle  – Relational Database Consultants, Inc (RDC)的产品  主要功能是 数据加密,  支持 AES256 and DES3 Encryption加密算法  , 在从版本7开始支持Oracle 11gR2 及HSM( Hardware Security Modules )。
产品主页:http://www.relationalwizards.com/html/ora_encyrption.html

软件截图:

 

 

DB  Protect  – AppSecInc  的产品 , 提供企业级 的数据安全方案, 功能包括 隔离敏感数据库, 发现及修正可能存在的数据风险, 控制企业员工的数据访问权限,  监控越权行为等。
产品主页: http://www.appsecinc.com/products/dbprotect/index.shtml

软件截图:

 

 

NGS SQuirreL for Oracle –  NGS secure 的产品 , 算是已经在国内比较知名的 oracle 风险评估漏洞扫描工具, 支持从oracle 7.3 到 11g的主要版本。
产品主页: http://www.ngssecure.com/services/information-security-software/ngs-squirrel-for-oracle.aspx

 

产品介绍:

 

Oracle数据库安全漏洞扫描工具——NGSSQuirreL for Oracle

NGSSQuirrel for Oracle是国际顶级的数据库安全漏洞扫描工具。深圳市九州安域科技有限公司是NGSSQuirrel for Oracle数据库安全漏洞扫描工具中国区授权代理。

NGSSQuirreL for Oracle支持Oracle 8i,9i和10g,并且可以检查几千个可能存在的安全威胁、补丁状况、对象和权限信息、登陆和密码机制、存储过程以及启动过程。NGSSQuirrel提供强大的密码审计功能,包括字典和暴力破解模式。

NGSSQuirrel

1.         专业数据库漏洞评估工具;

支持MSSQL Server,Oracle,Informix,DB2,MySQL ,Sybase ASE数据库

支持对数据库所有实例的特权、角色、表单、视图、存储过程等进行安全检测。

2.         用于保护基础数据库平台安全并确保数据库满足安全法规的要求;

3.         创建Lockdown脚本,用于自动修复数据库扫描中未发现的漏洞

4.         通过check selection功能,可实行具体扫描或针对目标客户的扫描。

可以为特定目标扫描存储某一定制模板

可根据具体合规性扫描选择合规性模板

5.     提供业界专业的数据库安全资讯以及安全教材。

NGS SQuirreL 数据库扫描检测内容:

1.  扫描数据库默认口令、弱口令

2.     检测触发器、存储程序、表单、包等的访问权限

3.     识别默认Object的漏洞

4.     利用密码哈希值运行密码审计

5.     审查密码策略

6.     审查数据库的版本以及补丁情况

7.     检查数据库所有安全配置以及安全审计配置

8.     针对所有发现的安全问题提供修复建议

9.     可针对单一数据库或单一实例进行扫描

NGS SQuirreL for Oracle, SQL Server, MySQL, DB2 & Informix 行业合规性审计

NGS扫描器其内置有如下所有的合规性模块:

PCI DSS(支付款行业数据安全标准V1.2或V2.2)

SOX

HIPAA

Gramm-Leach Bliley Act

FISMA

SANS Top 20

CIS Benchmark for Oracle 9i/10g Ver. 2.0

CIS Benchmark for SQL Server 2005 v1.0

CIS Benchmark for MySQL v1.0.2

Oracle 基准

NSA SQL Server 2000 V1.5 安全配置和管理指南

这些模板都会保持持续更新;NGS 审计客户将满足这些标准的要求

 

NGSSQuirrel for Oracle 目前在国内有 九州安域 和   XLSoft  2家代理。

 

软件截图:

 

 

DB Audit – SoftTree的产品    功能强大的数据库安全和审计产品, 支持Oracle, Sybase, DB2, MySQL, Microsoft SQL Server等主流数据库。  DB Audit Expert是一款专业的数据库安全评估,审计和提供解决方案的数据库管理系统。DB Audit Expert允许数据库及系统管理员,安全管理员,审计人员和操作人患跟踪和分析数据库的活动,包括对数据库的访问,使用,对象的建立,修改和删除等。 DB Audit真正独特的是它内置多个审计方式,让您灵活地选择最适合你的数据库安全性要求的审计方式。
产品主页:http://www.softtreetech.com/

 

 

产品介绍

 

   DB Audit Expert是一款专业的数据库安全评估,审计和提供解决方案的数据库管理系统。DB Audit Expert允许数据库及系统管理员,安全管理员,审计人员和操作人患跟踪和分析数据库的活动,包括对数据库的访问,使用,对象的建立,修改和删除等。DB Audit真正独特的是它内置多个审计方式,让您灵活地选择最适合你的数据库安全性要求的审计方式。

主要优势:

提高系统的安全性并确保系统问责制。
捕获常规和“后门”访问被审计的数据库系统。
从易于管理的单一位置,集中了安全和审计控制多个数据库系统的功能,
统一审计的图形界面功能,缩短了学习曲线,很容易使用。
提供分析报告,全面总结概括,减少审核大量数据从而使轻松地识别各种数据库的安全性侵犯。
提供分析报告,以确定哪些进程和用户占用系统资源。
提供本地数据库审计不可用的审计线索的细节。
当敏感数据发生变化时,提供能够生成对关键人员生成电子邮件警报。
解放了DBA,不再需要创建和管理用于数据更改审计目的精心调校的数据库触发器。
支持灵活的审计配置,使安全人员可以选择必须监督和审计跟踪记录的数据库操作和数据修改的特定类型。
对现有的应用程序提供完全透明的系统级和数据更改审计,无需任何修改这些应用。
完全兼容所有主机操作系统可以运行支持的数据库,包括但不限于Windows NT,UNIX和Linux,虚拟机,OS/390,z/OS。

DB Audit 在多种平台,多种数据库上都有完整的解决方案:
安全性预防管理
侦测和安全配置分析
审计与监控
弱点及渗入测试
校正

多种数据库统一管理,操作简便学习周期短,方便使用。通过左侧数据库树型目录可以方便管理各种数据库;右侧大块的工作区域中,将所有的审计按功能分类,可清晰地完成所有的配置。

DB Audit 可以出色的工作在多种平台,多数据库的复杂环境中,通过警告中心服务器收集、存储和分析各种数据库的审计警告,并按照管理中心所配置将审计报表或警告发送到不同的部门及用户。

DB Audit客户:
DB Audit拥有众多大客户,例如,M&T银行,道琼斯公司,富士银行(Fuji Bank),亨廷顿银行(Huntington Bank),Wells Fargo银行,北方信托公司, (The Reserve Funds)储备基金,第一资本金融公司(Capital One Financial Corp.),3M公司,AT&T公司,IBM公司,戴尔公司,JP摩根大通,惠普,壳牌,索尼,美国军队,美国航空航天局等。

 

软件截图:

 

DB Audit 目前在国内有一家授权代理  北京铸锐数码科技

 

 

Audit DB – LuMigent 公司的产品 , 功能包括 数据库活动监控、审计、 用户权限监控、变更复核、访问监控等。
产品主页: http://www.lumigent.com/products/audit-db

软件截图:

 

 

 

DBCoffer – 难得一见的国产数据库安全产品。 相关介绍: 国内首款主动预防型 数据库安全加固产品,存储层、数据访问层、应用访问层全方位防止数据泄密。

audittools

 

 

 

 

DBCoffer

 

xSecure系列致力于对数据库的全面安全防护,覆盖数据库安全的事前检查、事中控制和事后追踪,形成面向用户的全方位的数据库安全产品和解决方案。

漏洞扫描产品xSecure-DBScan,实现对国际国内主流数据库的安全检查、漏洞分析和模拟渗透攻击,提供数据库安全状况检测评估报告和数据库安全加固建议。

核心功能:

数据库漏洞检查

覆盖绝大多数主流数据库的漏洞检查,包括:缺省配置检查、弱口令检查、无用对象检查、弱安全策略检查、SQL注入检查、缓冲区溢出检查、拒绝服务检查、宽泛权限、数据库补丁检查。

模拟渗透攻击

模拟黑客使用的漏洞发现技术和攻击手段,在没有授权的情况下,对目标数据库的安全性作深入的探测分析,并实施无害攻击(不会导致停机或对数据库造成损害),如获得系统权限、执行系统命令,篡改数据等。

检查报告

对检查结果进行汇总,提供不同类别、不同风险等级等因素的对比分析、趋势分析。

漏洞修复建议

能够智能化的协助网络安全管理人员评估数据库系统的安全状况,可以自动化地修复部分漏洞。
产品主页: http://www.schina.cn/a/fangan/shujukubaoxianxiang/about.html

 

 

www.askmaclean.com Here

 

如何禁止特定用户使用sqlplus或PL/SQL Developer等工具登陆?

最早想要实现禁止某些特定用户使用SQLPLUS或PL/SQL Developer等工具登陆是在2010年的3月,当时发现用户的一套数据库中有大量的用户使用老版本的PL/SQL Developer登陆,具体的版本号记不清楚了,大约是PL/SQL Developer 5的版本,是否正版授权不得而知, 反正就是一个办公室里有大量的阿姨、大叔都靠这个图形化工具访问数据库,做一些必要的数据操作,主要是一些SQL查询语句,有时候他们还会用工具栏查一些对象(search object),正是因为他们使用了老版本的PL/SQL Developer,造成在使用一些widget的时候会引起Oracle出现一些非致命的ORA-00600错误,虽然这些600错误不会导致严重的问题,但是只要是出现在告警日志Alert.log中的600还是需要我们去分析。

当时我的想法是直接从Oracle的角度禁止普通用户以PL/SQL Developer工具登陆,虽然当时没有真的这样做。 题外话,要真的这么做了,估计那一办公室的阿姨、叔叔都要找我的麻烦,他们可不会用SQLPLUS来登数据库;让他们升级PL/SQL Developer到高版本的想法也基本可以打住,让阿姨、叔叔们升级可要比登天还难。

Google了一番,没有找到太多有用的信息。

闲来无事,我在著名的Oracle-l Freelist邮件列表中发了一封邮件,集思广益:

 

Hello every,

           Anyone can advise how to ban plsql developer  connect to oracle?
The plsql developer search widget may cause  some ora-600 warning in alert
log . So I want to ban any connection using plsql developer.

 

Oracle-l Free List不愧是卧虎藏龙,第二天就收到了十分有用的信息,感谢这位 Coskan Gundogar的网友。

 

Damir-Vadas 在他的博客上提供了一种有效的方式,通过建立LOGON DATABASE的Trigger触发器,实现了仅允许拥有特定角色(Role)的用户通过sqlplus登陆实例。

 

这和我们的需求大致相仿,值得借鉴。我们的实际需求是: 针对某些已知的数据库用户账号,限制其使用SQLPLUS、PL/SQL Developer、Toad等工具登陆实例; 因为这里所要限制的用户账号和工具模块名(module)都是已知的,所以不必要如Damir-Vadas那样做成白名的形式,而只需要定义blacklist即可。实际这样做的一大目的是尽可能限制人为的登录; 我们知道当应用程序登录数据库时,根据应用程序的构成不同,可能使用JDBC Thin Client、Pro*C、ODBC等多种模块名(Module),我们不想限制应用程序的正常登录, 而仅仅想禁止人为地使用这些应用程序所使用的账号来登录实例(应用程序的账号信息可能被写在应用层中,或者为开发人员所知晓),一般我们只要限制SQLPLUS、PL/SQL Developer、Toad这几种主流的客户端程序,就可以限制人为地登录数据库了;当然这其实是防君子不防小人,实际如果hacker真的掌握了应用程序的账号密码的话,完全可以通过自己编写程序来访问数据库。

 

建立示例的,禁止以SQLPLUS和PL/SQL DEVELOPER登陆的用户账号TRY_LOGON_BY_TOOLS:

 

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
www.askmaclean.com  & www.askmaclean.com

SQL> create user TRY_LOGON_BY_TOOLS IDENTIFIED BY abc;

User created.

SQL> grant connect,resource to TRY_LOGON_BY_TOOLS;

Grant succeeded.

 

创建以下LOGON DATABASE Trigger即可限制TRY_LOGON_BY_TOOLS用户以SQLPLUS、Toad、PL/SQL DEVELOPER 三种软件登陆数据库,  但是该用户仍能以其他的程序模块登录,如:JDBC、ODBC等;实际就是限制了该账号的人为登录,而应用程序如Java、.Net、Pro*C等语言编写的程序没有使用这里已经禁止的模块名(Module),所以不会被禁止登录。

 

记得修改TRY_LOGON_BY_TOOLS为你需要的用户名列表

-- NAME: BLOCK_TOOLS_LOGON.SQL
-- ------------------------------------------------------------------------
--   Copyright 2011, www.askmaclean.com
--   LAST UPDATED: 12/05/11
--   Written By Maclean.Liu
-- Usage: @BLOCK_TOOLS_LOGON
-- ------------------------------------------------------------------------
-- PURPOSE:
--    This script is to be used to help dba protect database
--    from uninvited logon action
-- ------------------------------------------------------------------------
-- DISCLAIMER:
--    This script is provided for educational purposes only. It is NOT
--    supported by Maclean Liu.
--    The script has been tested and appears to work as intended.
--    You should always run new scripts on a test instance initially.
-- ------------------------------------------------------------------------
-- Script output is as follows:

drop trigger BLOCK_TOOLS_LOGON;

CREATE OR REPLACE TRIGGER BLOCK_TOOLS_LOGON
  AFTER LOGON ON DATABASE
DECLARE

  my_forced_exception EXCEPTION;
  PRAGMA EXCEPTION_INIT(MY_FORCED_EXCEPTION, -20101);
BEGIN
  IF (sys_context('USERENV', 'SESSION_USER') IN ('TRY_LOGON_BY_TOOLS')) -- add your username here
   THEN
    IF (UPPER(sys_context('USERENV', 'MODULE')) LIKE '%SQLPLUS%' OR --SQL*PLUS
       UPPER(sys_context('USERENV', 'MODULE')) LIKE '%TOAD%' OR --TOAD
       UPPER(sys_context('USERENV', 'MODULE')) LIKE '%PLSQLDEV%') --PL/SQL DEVELOPER
     THEN
      RAISE my_forced_exception;
    END IF;
  END IF;
EXCEPTION
  WHEN my_forced_exception THEN
    RAISE_APPLICATION_ERROR(-20101,
                            'USER ' ||
                            sys_context('USERENV', 'SESSION_USER') || ' ' ||
                            'MODULE ' ||
                            UPPER(sys_context('USERENV', 'MODULE')) || ' ' || '
                              Logon Action via tool is not allowed.
                              Please contact Maclean Liu to help you!
                              https://www.askmaclean.com/');
  WHEN OTHERS THEN
    null;
END;
/

 

以DBA身份用户登录并创建以上Trigger:

 

[oracle@vrh8 ~]$ sqlplus system/oracle

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Dec 6 00:34:12 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

SQL> CREATE OR REPLACE TRIGGER BLOCK_TOOLS_LOGON
  2    AFTER LOGON ON DATABASE
  3  DECLARE
  4
  5    my_forced_exception EXCEPTION;
  6    PRAGMA EXCEPTION_INIT(MY_FORCED_EXCEPTION, -20101);
  7  BEGIN
  8    IF (sys_context('USERENV', 'SESSION_USER') IN ('TRY_LOGON_BY_TOOLS')) -- add your username here
  9     THEN
 10      IF (UPPER(sys_context('USERENV', 'MODULE')) LIKE '%SQLPLUS%' OR --SQL*PLUS
 11         UPPER(sys_context('USERENV', 'MODULE')) LIKE '%TOAD%' OR --TOAD
 12         UPPER(sys_context('USERENV', 'MODULE')) LIKE '%PLSQLDEV%') --PL/SQL DEVELOPER
 13       THEN
 14        RAISE my_forced_exception;
 15      END IF;
 16    END IF;
 17  EXCEPTION
 18    WHEN my_forced_exception THEN
 19      RAISE_APPLICATION_ERROR(-20101,
 20                              'USER ' ||
 21                              sys_context('USERENV', 'SESSION_USER') || ' ' ||
 22                              'MODULE ' ||
 23                              UPPER(sys_context('USERENV', 'MODULE')) || ' ' || '
 24                                Logon Action via tool is not allowed.
 25                                Please contact Maclean Liu to help you!
 26                                https://www.askmaclean.com/');
 27    WHEN OTHERS THEN
 28      null;
 29  END;
 30  /

Trigger created.

 

成功创建后 , 使用指定的TRY_LOGON_BY_TOOLS用户尝试SQLPLUS登录:

 

[oracle@vrh8 ~]$ sqlplus TRY_LOGON_BY_TOOLS/abc

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Dec 6 01:18:47 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-20101: USER TRY_LOGON_BY_TOOLS MODULE SQLPLUS@VRH8.ORACLE.COM (TNS V1-V3)
Logon Action via tool is not allowed.
Please contact Maclean Liu to help you!
了解 Maclean Liu 刘相兵 @诗檀软件
ORA-06512: at line 17

 

TRY_LOGON_BY_TOOLS用户以PL/SQL Developer登录:

 

 

 

以上我们通过建立LOGON触发器的形式达到了禁止特定用户以SQLPLUS、PL/SQL Developer登录实例的目的,但是请注意Trigger触发器会消耗额外的资源,对于登录频繁的系统,一个小小的登录触发器可能引发性能的瓶颈。  另外在一些容易hang住的场景中,Trigger可能会引起更多不良的反应,所以请谨慎地在产品数据库中部署这些小玩样。

Oracle 数据库管理权限

有两种 Oracle 用户权限:

  • 系统权限:具备该权限的用户可在数据库中执行特定
    操作
  • 对象权限:具备该权限的用户可访问并操纵特定对象

权限是指执行特定类型的 SQL 语句或访问另一个用户的对象的权利。包括以下权利:

  • 连接到数据库
  • 创建表
  • 从另一用户的表中选择行
  • 执行另一用户的已存储过程

系统权限:

每一系统权限都允许用户执行某一特定的数据库操作或某类数据库操作,例如,创建表空间的权限就是一种系统权限。

对象权限:

每一对象权限都允许用户对特定对象(如表、视图、序列、过程、函数或程序包)执行特定的操作。

DBA 的权限控制包括:

  • 为用户提供执行某种操作的权限
  • 授予和撤消执行系统功能的权限
  • 将权限直接授予用户或角色
  • 将权限授予所有用户 (PUBLIC)

 

系统权限

  • 有 100 多种不同的系统权限。
  • 权限中的关键字 ANY 表示用户在任何方案中都具备
    这种权限。
  • GRANT 命令为一个用户或一组用户添加一项权限。
  • REVOKE 命令则用来删除权限。

系统权限可分为以下几类:

  • 允许执行系统范围操作的权限;如 CREATE SESSION,CREATE TABLESPACE
  • 允许管理用户自己方案中的对象的权限;如 CREATE TABLE
  • 允许管理任何方案中的对象的权限;如 CREATE ANY TABLE

可使用 DDL 命令 GRANT 和 REVOKE 控制权限,这两个命令为用户或角色添加和撤消系统权限。

 

系统权限:示例

类别        示例    

索引(INDEX)   CREATE ANY INDEX
ALTER ANY INDEX
DROP ANY INDEX    

表(TABLE)   CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
DROP ANY TABLE
SELECT ANY TABLE
UPDATE ANY TABLE
DELETE ANY TABLE

会话  CREATE SESSION
(SESSION)   ALTER SESSION
RESTRICTED SESSION

表空间   CREATE TABLESPACE
(TABLESPACE)  ALTER TABLESPACE
DROP TABLESPACE
UNLIMITED TABLESPACE

  • 没有 CREATE INDEX 权限。
  • CREATE TABLE 包括 CREATE INDEX 和 ANALYZE 命令。用户必须有表空间的限
    额,或必须被授予 UNLIMITED TABLESPACE 权限。
  • 诸如 CREATE TABLE、CREATE PROCEDURE 或 CREATE CLUSTER 等权限包括删除这些对象的权限。
  • 无法将 UNLIMITED TABLESPACE 授予角色。
  • DROP ANY TABLE 权限是截断另一方案中的表所必需的。

授予系统权限

  • 使用 GRANT 命令可授予系统权限。
  • 被授予者可通过 ADMIN 选项进一步授予系统权限。

GRANT CREATE SESSION TO emi;

GRANT CREATE SESSION TO emi WITH ADMIN OPTION;

使用 SQL 语句 GRANT 为用户授予系统权限。

被授予者可通过 ADMIN 选项进一步为其他用户授予系统权限。使用 ADMIN 选项授予系统权限时应小心。这样的权限通常只限于安全管理员使用,很少授予其他用户。

GRANT {system_privilege|role}
[, {system_privilege|role} ]…
TO {user|role|PUBLIC}
[, {user|role|PUBLIC} ]…
[WITH ADMIN OPTION]

 

SYSDBA SYSOPER 权限

SYSDBA 和 SYSOPER 权限

 

只有数据库管理员可以使用管理员权限与数据库连接。以 SYSDBA 身份连接可以授予用户不受限制的权限,以便对数据库或数据库中的对象执行任何操作。

 

系统权限限制

  • O7_DICTIONARY_ACCESSIBILITY 参数
  • 控制有关 SYSTEM 权限的限制
  • 如果设置为 TRUE允许访问 SYS 方案中的对象
  • 缺省值为 FALSE可确保允许访问任何方案的系统权限不允许访问 SYS 方案

Oracle9i 中的字典保护机制可防止未经授权的用户访问字典对象。

只有角色 SYSDBA 和 SYSOPER 可以访问字典对象。允许访问其他方案中的对象的系统权限并不授予您对字典对象的访问权限。例如,SELECT ANY TABLE 权限允许您访问其它方案中的视图和表,但不允许您选择字典对象(基表、视图、程序包和同义词)。

如果该参数设置为 TRUE, 则允许访问 SYS 方案中的对象(Oracle7 行为)。如果该参数设置为 FALSE,则允许访问其它方案中的对象的 SYSTEM 权限不允许访问字典方案中的
对象。

例如,如果 O7_DICTIONARY_ACCESSIBILITY=FALSE,则 SELECT ANY TABLE 语句将允许访问除 SYS 方案外的任何方案中的视图或表(例如,不能访问字典)。系统权限 EXECUTE ANY PROCEDURE 将允许访问除 SYS 方案外的任何其它方案中的过程。

撤消系统权限

  • 使用 REVOKE 命令可撤消用户的系统权限。
  • 使用 ADMIN OPTION 授予系统权限的用户可以
    撤消系统权限。
  • 只能撤消使用 GRANT 命令授予的权限。

REVOKE CREATE TABLE FROM emi;

 

可以使用 REVOKE SQL 语句撤消系统权限。使用 ADMIN OPTION 授予系统权限的用户可以撤消任何其他数据库用户的权限。撤消者不必是原先授予该权限的那个用户。

REVOKE {system_privilege|role}

[, {system_privilege|role} ]…

FROM {user|role|PUBLIC}

[, {user|role|PUBLIC} ]…

注:

  • REVOKE 命令只能撤消使用 GRANT 命令直接授予的权限。
  • 撤消系统权限可能对一些相关对象有影响。例如,如果将 SELECT ANY TABLE 授予某用户,而该用户已创建了使用其它方案中的表的过程或视图,则撤消该权限将使这些过程或视图无效。

 

撤消通过 ADMIN OPTION 授予的系统权限

admin1

 

撤消系统权限时没有级联效果,这与该系统权限是否使用 ADMIN OPTION 授予无关。

请仔细阅读下列步骤,它们对这种特性进行了说明。

情况

  1. DBA 使用 ADMIN OPTION 将系统权限 CREATE TABLE 授予 Jeff。
  2. Jeff 创建一个表。
  3. Jeff 将系统权限 CREATE TABLE 授予 Emi。
  4. Emi 创建一个表。
  5. DBA 撤消 Jeff 的 CREATE TABLE 系统权限。

结果

Jeff 的表依然存在,但是,无法创建新表。

Emi 的表依然存在,并且她仍然拥有 CREATE TABLE 系统权限。

 

对象权限


admin3

 

 

对象权限是一种对于特定的表、视图、序列、过程、函数或程序包执行特定操作的一种权限或权利。上表列出了各种对象的权限。需要注意的是适用于序列的权限只有 SELECT 和 ALTER。通过指定可更新列的子集可以对 UPDATE、REFERENCES 和 INSERT 权限加以限制。通过用列的子集创建视图并授予对于该视图的 SELECT 权限,则可对 SELECT 权限加以限制。对于同义词的授权会转换为对于该同义词所引用的基表的授权。

注:该幻灯片未提供有关对象权限的完整列表。

 

 

授予对象权限

  • 使用 GRANT 命令授予对象权限。
  • 授权必须在授予者方案中,或者授予者必须具有 GRANT OPTION 权限。

GRANT EXECUTE ON dbms_output TO jeff;

GRANT UPDATE ON emi.customers TO jeff WITH GRANT OPTION;

GRANT { object_privilege [(column_list)]

[, object_privilege [(column_list)] ]…

|ALL [PRIVILEGES]}

ON  [schema.]object

TO  {user|role|PUBLIC}[, {user|role|PUBLIC} ]…

[WITH GRANT OPTION]

其中:

object_privilege:指定要授予的对象权限

column_list:指定表或视图列(只在授予 INSERT、REFERENCES 或 UPDATE 权限
时才指定。)

ALL:将所有权限授予已被授予 WITH GRANT OPTION 的对象

ON object:标识将要被授予权限的对象

WITH GRANT OPTION:使被授予者能够将对象权限授予其他用户或角色

 

使用 GRANT 语句授予对象权限。

  • 要授予权限,对象必须在您的方案中,或者您已通过 GRANT OPTION 被授予权限。
  • 缺省情况下,如果拥有某个对象,则自动获得对该对象的所有权限。
  • 若有安全方面的考虑,则将您的对象权限授予其他用户时应谨慎。

撤消对象权限

  • 使用 REVOKE 命令可撤消对象权限。
  • 撤消权限的用户必须是将被撤消的对象权限的原始
    授予者。

REVOKE SELECT ON emi.orders FROM jeff;

 

REVOKE 语句用来撤消对象权限。要撤消对象权限,撤消者必须是将被撤消的对象权限的原始授予者。

使用下列命令撤消对象权限:

REVOKE { object_privilege

[, object_privilege ]…

| ALL [PRIVILEGES] }

ON  [schema.]object

FROM {user|role|PUBLIC}

[, {user|role|PUBLIC} ]…

[CASCADE CONSTRAINTS]

 

 

其中:

object_privilege:指定将撤消的对象权限

ALL:撤消已授予用户的所有对象权限

ON:标识将撤消其对象权限的对象

FROM:标识将撤消其对象权限的用户或角色

CASCADE CONSTRAINTS:删除撤消使用 REFERENCES 或 ALL 权限定义的任何引用
完整性约束

限制:

授予者只能对其已经授予权限的用户撤消对象权限。

 

撤消对象权限 WITH GRANT OPTION

admin6

 

撤消与 DML 操作有关的系统权限时,可看到级联效果。例如,如果为某用户授予 SELECT ANY TABLE 权限,并且该用户已经创建了使用某个表的过程,则必须对该用户的方案中包含的所有过程进行重新编译之后,才能使用这些过程。

如果对象权限是用 WITH GRANT OPTION 授予的,则撤消对象权限也将导致级联效果。

请仔细阅读下列步骤,它们对这种特性进行了说明。

情况:

  • 通过 GRANT OPTION 授予 Jeff 对于 EMPLOYEES 的 SELECT 对象权限。
  • Jeff 将对于 EMPLOYEES 的 SELECT 权限授予 Emi。
  • 之后,撤消 Jeff 的 SELECT 权限。该撤消也对 Emi 产生级联影响。

 

获取权限信息

可以通过查询以下视图来获取有关权限的信息:

  • DBA_SYS_PRIVS
  • SESSION_PRIVS
  • DBA_TAB_PRIVS
  • DBA_COL_PRIVS

DBA_SYS_PRIVS:列出授予用户和角色的系统权限

SESSION_PRIVS:列出用户当前可用的权限

DBA_TAB_PRIVS:列出对于数据库中所有对象的所有授权

DBA_COL_PRIVS:描述数据库中的所有对象-列授权

 

 

 

Find password cracker in 11g

在11g中默认启用了对登录注销操作LOGON/LOGOFF的审计,详见<11g默认审计选项>。利用这一点我们可以很方便地从审计日志中找出数据库中的密码暴力破解者。如以下演示:

C:\Users\Maclean Liu>sqlplus system/try_password@G11R2

SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 4 21:37:44 2011

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied

select username,userhost,terminal,timestamp,action_name,os_process
  from dba_audit_trail
 where returncode = 1017
 order by timestamp desc;

USERNAME             USERHOST                                 TERMINAL             TIMESTAMP          ACTION_NAME       OS_PROCESS
-------------------- ---------------------------------------- -------------------- ------------------ ----------------  ------------
SYSTEM               WORKGROUP\MACLEANLIU-PC                  MACLEANLIU-PC        04-JUL-11          LOGON             4240:2700

Script:

set linesize 140 pagesize 1400
col os_username for a30
col userhost for a30
col terminal for a30

select os_username,userhost,terminal,username,count(*)
  from dba_audit_trail
 where returncode = 1017
 group by os_username,userhost,username,terminal
 having count(*)>10
 /

注意对于LOGON PER SECOND很高的数据库,如果应用程序配置文件中的数据库用户密码不正确,同时应用在短期内发起大量会话登录数据库的话可能引发频繁的dc_users字典缓存锁,用户登录无法成功,乃至整个实例hang住,该问题具体可见<Row Cache lock Problem>。针对该问题如果是在11g中的话,可以利用以上脚本快速找到因密码不正确登录失败的数据库用户名,从而减少排查时间。

沪ICP备14014813号

沪公网安备 31010802001379号