怎样应对被地下的Oracle口令加密算法(2)
作者: 刘志斌 出处:上钩在线
防备加密口令走漏
1.运用“最少权限”绳尺,尽管限制可存取加密口令用户的人数
在数据库中查抄具有存取SYS.USER$或DBA_USERS权限的用户,并从不需求的用户中收回权限。可是操纵并不巨大,这也是数据库治理义务的特点。每一厂商的软件中都完成了SQL规范之外的扩展,而且每一版本都有差别。限于篇幅,不能够对一切本文中创议的程序停止细致的解释说明,仅以此处查抄权限为例展现DBA义务的巨大性。本文中如未说明,则默许版本为11g。运用于11g曩昔版本时,请读者确认可否需求修正。
查抄权限紧张的东西是数据字典视图(也可以直接存取SYS用户的基表,但基表的界说没有颁布宣布,官方不供给手艺支撑)。视图DBA_TAB_PRIVS寄存了数据库中数据东西上的授权信息。假定用户A1和A2可以存取SYS.USER$表,查抄在SYS用户USER$上有存取权限的用户,可实施如下语句:
SELECT GRANTEE FROM DBA_TAB_PRIVS WHERE TABLE_NAME=‘USER$’;
我们曾经晓得用户A1和A2,都可以存取SYS.USER$表,但为什么鄙人面查询效果中没有出现呢?这是因为在Oracle的权限治理中,对一个表的存取权限还可以经由体系权限或脚色授予,而DBA_TAB_PRIVS中仅列出了直接的东西权限的授予信息。搪塞SYS.USER$表而言,体系权限SELECT ANY DICTIONARY和脚色DBA都包罗了这一表的存取权限。所以齐备列出一切可存取这一表的用户应添加下面两条查询语句的效果:
SELECT GRANTEE FROM DBA_SYS_PRIVS WHERE PRIVILEGE=‘SELECT ANY DICTIONARY’;
SELECT GRANTEE FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE=‘DBA’;
经由下面的查询语句,仍是会脱漏某些用户。若是把DBA脚色授权给另一脚色Admin,然后又将Admin脚色授权给另一用户NEWU,则此用户可存取SYS.USER$表,但在上述三个查询中并没有直接列出NEWU的名字(脚色Admin会出目下当今第三个查询语句的效果中)。
显然,Oracle的授权构成了一棵树,齐备的信息需求一段PL/SQL按次来完成。(搪塞11g曩昔版本,还需求查抄对DBA_USERS视图有存取权限的用户和脚色。SELECT_CATALOG_ROLE脚色如被授权,则可以存取所稀有据字典视图,但不克不及存取SYS的基表。)
2.设定对加密口令存取的审计
若是此后体系中只需SYSDBA可以存取USER$,则一个变通措施是审计SYSDBA的一切操纵,个中也包罗对USER$的存取。设置初始化参数audit_sys_operations =TRUE,重新启动数据库后激活对SYSDBA操纵的审计。
审计文件的寄存地位为:
11g版本中为:$ORACLE_BASE/admin/SID/ adump/ *.aud
11g曩昔版本为: $ORACLE_HOME/rdbms/audit/ *.aud。
严厉限制和监视SYSDBA用户运动的最好措施是运用Oracle Database Vault组件。
3.在操纵体系级限制对数据库数据文件的存取
SYSDBA用户的加密口令寄存在$ORACLE_HOME/dbs下的口令文件orapw〈SID〉中。SYS.USER$表异样需求在数据文件中寄存,多半为SYSTEM表空间的第一个数据文件中。其它,EXPORT文件、REDOLOG文件以及TRACE文件中都能够出现加密口令。需求严厉限制上述文件的存取权限。
4.防备网络窃听
在创建连接时,客户端需求向效力器端传送用户名和口令,而且效力器端与客户端需求相互发送这次会话运用的SESSION KEY。Oracle给与Diffie-Hellman KEY交换算法和本身斥地的O3LOGON协议完成上述义务。算法的细节异样已在互联网上被地下。创建连接时上述信息若是被截获,异样可以被用来破解口令。更为紧张的是,若是黑客事前曾经取得加密口令,连系SESSION KEY的信息,则不需求任何破解,实施巨大复原运算就可算出口令明文。
其余,筹划SID时不要运用如ORCL、TEST、PROD等常用名字,设定PORT号为远远大于1521的数,都可以添加黑客SID扫描的难度和时间。
5. 删除旧版的加密口令
寄存在Oracle 11g数据库中的曩昔版本的加密口令是口令破解东西的一个打破口。在没有兼容性限制的体系中,可以思虑从体系中删除旧版口令,从而添加破解难度。
具体操纵如下:
在SQLNET.ORA中添加一行:SQLNET.ALLOWED_LOGON_VERSION=11(Oracle手册中技俩引见有错误,不克不及加括号:…=(11)),指定最低版本。
以SYSDBA登录后,实施以下语句,删除旧版口令。
update sys.user$ set password=NULL;
delete from user_history$;
commit;
设置修正后,基于OCI的东西如SQLPLUS、10gR1和10gR2版本都可以正常登录,而JDBC type-4 则只需11g版本才许可登录。
版权声明:
原创作品,许可转载,转载时请务必以超链接情势标明文章 原始出处 、作者信息和本声明。否则将追究执法责任。