安全攻击及防范手册.docx
- 文档编号:14779507
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:39
- 大小:523.74KB
安全攻击及防范手册.docx
《安全攻击及防范手册.docx》由会员分享,可在线阅读,更多相关《安全攻击及防范手册.docx(39页珍藏版)》请在冰点文库上搜索。
安全攻击及防范手册
安全攻击及防范手册
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
版本1.0
2010年8月
1概述
1.1简介
当今世界,Internet(因特网)已经成为一个非常重要的基础平台,很多企业都将应用架设在该平台上,为客户提供更为方便、快捷的服务支持。
这些应用在功能和性能上,都在不断的完善和提高,然而在非常重要的安全性上,却没有得到足够的重视。
随着WEB技术应用的范围越来越广泛,WEB技术相关的安全漏洞越来越多的被挖掘出来,而针对WEB站点的攻击已经成为了最流行的攻击途径。
不久前项目管理部对公司内外重点系统进行了一次安全隐患分析测试,并总结出了《公司安全测试问题分类及描述》的报告文档。
本文针对此报告中提到的一些重大安全隐患问题逐一分析,并给出相应的解决方案。
1.2参考资料
《Java安全性编程实例》
《网站系统安全开发手册》
《企业级Java安全性(构建安全的J2EE应用)》
2WEB安全隐患及预防措施
2.1会话标识未更新
2.1.1描述
登陆过程前后会话标识的比较,显示它们并未更新,这表示有可能伪装用户。
初步得知会话标识值后,远程攻击者有可能得以充当已登录的合法用户。
2.1.2安全级别
高。
2.1.3安全风险
可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。
2.1.4解决方案
◆不要接受外部创建的会话标识。
◆始终生成新的会话,供用户成功认证时登录。
◆防止用户操纵会话标识。
◆请勿接受用户浏览器登录时所提供的会话标识。
◆如果有验证码的。
验证码改用application存储。
同时记得释放资源
2.1.5技术实现
◆登陆界面和登陆成功的界面一致时
修改后台逻辑,在验证登陆逻辑的时候,先强制让当前session过期,然后用新的session存储信息。
◆登陆界面和登陆成功的界面不一致时
在登陆界面后增加下面一段代码,强制让系统session过期。
request.getSession().invalidate();//清空session
Cookiecookie=request.getCookies()[0];//获取cookie
cookie.setMaxAge(0);//让cookie过期
注意:
框架2.0已经修改了登陆验证类,登陆成功后会清理掉当前session,重新创建一个新的session。
凡是使用框架2.0的项目均可统一增加此功能。
2.2不充分帐户封锁
2.2.1描述
程序没有使用锁定功能,可以穷举密码,可以造成蛮力攻击,恶意用户发送大量可能的密码和/或用户名以访问应用程序的尝试。
由于该技术包含大量登录尝试,未限制允许的错误登录请求次数的应用程序很容易遭到这类攻击。
2.2.2安全级别
高。
2.2.3安全风险
可能会升级用户特权并通过Web应用程序获取管理许可权。
2.2.4解决方案
请确定允许的登录尝试次数(通常是3-5次),确保超出允许的尝试次数之后,便锁定帐户。
为了避免真正的用户因帐户被锁定而致电支持人员的麻烦,可以仅临时性暂挂帐户活动,并在特定时间段之后启用帐户。
帐户锁定大约10分钟,通常用这样的方法阻止蛮力攻击。
2.2.5技术实现
◆提供锁定信息配置类,可根据项目特定需求修改此配置信息。
◆修改登陆验证逻辑,根据上面的配置信息提供帐户锁定功能。
注意:
框架2.0已经实现了此功能,凡是使用框架2.0的项目均可统一增加此功能。
2.3可预测的登录凭证
2.3.1描述
发现应用程序会使用可预期的认证凭证(例如:
admin+admin、guest+guest)。
攻击者很容易预测用户名和密码,登录应用程序,从而获取未获授权的特权。
2.3.2安全级别
高。
2.3.3安全风险
可能会升级用户特权并通过Web应用程序获取管理许可权。
2.3.4解决方案
不应使用易于预测的凭证(例如:
admin+admin、guest+guest、test+test等),因为它们可能很容易预测,可让用户不当进入应用程序。
2.3.5技术实现
只要养成良好的习惯,坚决不使用容易预测的名和密码,即可彻底杜绝此类问题。
2.4登录错误消息凭证枚举
2.4.1描述
当试图利用不正确的凭证来登录时,当用户输入无效的用户名和无效的密码时,应用程序会分别生成不同的错误消息。
通过利用该行为,攻击者可以通过反复试验(蛮力攻击技术)来发现应用程序的有效用户名,再继续尝试发现相关联的密码。
2.4.2安全级别
高。
2.4.3安全风险
可能会升级用户特权并通过Web应用程序获取管理许可权。
2.4.4解决方案
不论名和密码哪个错误,都提示同样的消息。
且同时加上登陆失败次数达到规定的帐户锁定功能。
2.4.5技术实现
不论名和密码哪个错误,都提示如下所示同样的消息:
一旦某个帐户连续登陆失败次数达到了规定的数值,就会按配置的时间被锁定,如下提示:
如此一来,攻击者就没机会穷举帐户和密码了,此类攻击也就不可能发生了!
注意:
框架2.0已经实现了此功能,凡是使用框架2.0的项目均可统一增加此功能。
2.5已解密的登录请求
2.5.1描述
通过HTTPPOST发送表单数据,这些数据将在HTTP报文中以明文的形式传输。
对于一些敏感的数据(如用户名/密码、信用卡密码)以传统的HTTP报文传输存在巨大的风险。
2.5.2安全级别
中。
2.5.3安全风险
可能会窃取诸如用户名和密码等未经加密即发送了的用户登录信息。
2.5.4解决方案
(1)饶过AppScan软件扫描
(2)对提交的敏感信息,一律以加密方式传给服务器。
(3)采用基于SSL的HTTPS传输协议,对提交的敏感信息在传输过程中加密。
敏感信息包括:
用户名、密码、社会保险号码、信用卡号码、驾照号码、电子邮件地址、电话号码、邮政编码等。
注意:
如果不是基于SSL的HTTPS传输协议的话。
对于提交的敏感信息即使加密后,AppScan软件同样认为该漏洞存在。
所以避免这一漏洞的有效方案是饶过扫描或者采用基于SSL的HTTPS传输协议。
虽然采取HTTPS传输数据有很高的安全性,但是也有以下几个显著的缺点:
◆需要申请一个合法组织颁发的用来加/解密的证书。
◆部署、配置繁琐。
◆同样的硬件环境,效率比HTTP慢很多。
通过上述分析,采取基于SSL的HTTPS传输协议,付出的代价有点大,是否有必要这样做,值得深入讨论。
:
把text="password"这个用其他的代替,就可以解决已解密的登录请求
146px;height: 18px;" onkeypress="javascript: hiddenPass(event)"onkeyup="this.value=this.value.replace(/./g,'*');"/>
js代码
functionhiddenPass(e){
e=e?
e:
window.event;
varkcode=e.which?
e.which:
e.keyCode;
varpass=document.getElementById("password1");
varj_pass=document.getElementById("password");
if(kcode!
=8)
{
varkeychar=String.fromCharCode(kcode);
j_pass.value=j_pass.value+keychar;
j_pass.value=j_pass.value.substring(0,pass.length);
}
2.5.5技术实现
(1)饶过AppScan软件扫描
绕过软件扫描有两种方式,如下:
◆修改密码输入框名字和类型
经过不断扫描测试分析,如果密码输入框的名字不包含password、pwd等关键字的话,大部分页面就不会扫描出漏洞。
如果还能扫描出漏洞的话,那就在修改密码输入框名字的基础上,把输入框的type的属性值为password的值改为text,然后用Javascript函数来模拟实现星号代替输入值的密码输入效果即可饶过该扫描。
示例步骤如下:
Ø在原来的密码输入框前添加一个新的输入控件:
如:
100px"/> 注: 其中document.getElementById('cipher').focus()中cipher为原来密码输入框的ID值,这个是为了Tab键能起作用而设置的。 Ø修改原来密码框的type属性为text,并添加onkeyup函数如下: 100px"size="15"onkeyup="document.getElementById('code').value=this.value.replace(/./g,'*');"/> 其中的code为新添加的输入控件ID。 Ø在页面的head标签中间添加如下样式: -- #code{position: absolute;font-size: 13px;font-family: 宋体;} #cipher{position: relative;left: 0;top: 0;font-size: 13px;font-family: 宋体;-moz-opacity: 0;opacity: 0;filter: alpha(opacity=0);} --> 其中code代表新添加的输入控件ID,cipher代表原来密码输入框的ID。 样式表的ID必须和控件的ID一致。 ◆采用AJAX登录 把登陆界面的Form标签去掉,采用AJAX登录。 示例代码如下: DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http: //www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> //www.w3.org/1999/xhtml">
13px;">用户: 100px"id="j_username"value=""size="15"/> pointer"/>
13px;">密码: 100px"size="15""value=""/> pointer"onclick="caLogin()"/>
记住密码
pointer"onclick="getCustomerInfo()"/> pointer"onclick="returnfalse;"/>
varrequest=false;
try{
request=newXMLHttpRequest();
}catch(trymicrosoft){
try{
request=newActiveXObject("Msxml2.XMLHTTP");
}catch(othermicrosoft){
try{
request=newActiveXObject("Microsoft.XMLHTTP");
}catch(failed){
request=false;
}
}
}
functiongetCustomerInfo(){
varurl="j_acegi_security_check?
j_username="+document.getElementById("j_username").value+"&j_cipher="+document.getElementById("j_password").value;
alert("url"+url);
request.open("GET",url,true);
//调用回调函数
request.onreadystatechange=updatePage;
request.send(null);
}
functionupdatePage(){
if(request.readyState==4){
if(request.status==200){
varresponse=request.responseText;
document.write(response);
}elseif(request.status==404){
alert("RequestedURLisnotfound.");
}elseif(request.status==403){
alert("Accessdenied.");
}else
alert("statusis"+request.status);
}
}