AppScan扫描建议.docx
- 文档编号:3639515
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:22
- 大小:81.78KB
AppScan扫描建议.docx
《AppScan扫描建议.docx》由会员分享,可在线阅读,更多相关《AppScan扫描建议.docx(22页珍藏版)》请在冰豆网上搜索。
AppScan扫描建议
∙登录 | 注册
∙
∙
沉底的石头
∙
目录视图
∙
摘要视图
∙
订阅
【免费公开课】AndroidAPP开发之真机调试环境实现 有奖试读—漫话程序员面试求职、升职加薪、创业与生活
AppScan扫描建议
2014-09-1014:
566270人阅读评论(0)收藏举报
分类:
系统安全(4)
目录(?
)[+]
1.1 AppScan扫描建议
若干问题的补救方法在于对用户输入进行清理。
通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:
启动任意SQL查询、嵌入将在客户端执行的Javascript代码、运行各种操作系统命令,等等。
建议过滤出所有以下字符:
[1]|(竖线符号)
[2]&(&符号)
[3];(分号)
[4]$(美元符号)
[5]%(百分比符号)
[6]@(at符号)
[7]'(单引号)
[8]"(引号)
[9]\'(反斜杠转义单引号)
[10]\"(反斜杠转义引号)
[11]<>(尖括号)
[12]()(括号)
[13]+(加号)
[14]CR(回车符,ASCII0x0d)
[15]LF(换行,ASCII0x0a)
[16],(逗号)
[17]\(反斜杠)
以下部分描述各种问题、问题的修订建议以及可能触发这些问题的危险字符:
SQL注入和SQL盲注:
A.确保用户输入的值和类型(如Integer、Date等)有效,且符合应用程序预期。
B.利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。
当使用存储过程时,请利用ADO命令对象来实施它们,以强化变量类型。
C.清理输入以排除上下文更改符号,例如:
[1]'(单引号)
[2]"(引号)
[3]\'(反斜线转义单引号)
[4]\"(反斜杠转义引号)
[5])(结束括号)
[6];(分号)
跨站点脚本编制:
A.清理用户输入,并过滤出JavaScript代码。
我们建议您过滤下列字符:
[1]<>(尖括号)
[2]"(引号)
[3]'(单引号)
[4]%(百分比符号)
[5];(分号)
[6]()(括号)
[7]&(&符号)
[8]+(加号)
B.如果要修订<%00script>变体,请参阅MS文章821349
C.对于UTF-7攻击:
[-]可能的话,建议您施行特定字符集编码(使用'Content-Type'头或标记)。
HTTP响应分割:
清理用户输入(至少是稍后嵌入在HTTP响应中的输入)。
请确保输入未包含恶意的字符,例如:
[1]CR(回车符,ASCII0x0d)
[2]LF(换行,ASCII0x0a)远程命令执行:
清理输入以排除对执行操作系统命令有意义的符号,例如:
[1]|(竖线符号)
[2]&(&符号)
[3];(分号)
执行shell命令:
A.绝不将未检查的用户输入传递给eval()、open()、sysopen()、system()之类的Perl命令。
B.确保输入未包含恶意的字符,例如:
[1]$(美元符号)
[2]%(百分比符号)
[3]@(at符号)
XPath注入:
清理输入以排除上下文更改符号,例如:
[1]'(单引号)
[2]"(引号)等
LDAP注入:
A.使用正面验证。
字母数字过滤(A..Z,a..z,0..9)适合大部分LDAP查询。
B.应该过滤出或进行转义的特殊LDAP字符:
[1]在字符串开头的空格或“#”字符
[2]在字符串结尾的空格字符
[3],(逗号)
[4]+(加号)
[5]"(引号)
[6]\(反斜杠)
[7]<>(尖括号)
[8];(分号)
[9]()(括号)
MX注入:
应该过滤出特殊MX字符:
[1]CR(回车符,ASCII0x0d)
[2]LF(换行,ASCII0x0a)记录伪造:
应该过滤出特殊记录字符:
[1]CR(回车符,ASCII0x0d)
[2]LF(换行,ASCII0x0a)
[3]BS(退格,ASCII0x08)
ORM注入:
A.确保用户输入的值和类型(如Integer、Date等)有效,且符合应用程序预期。
B.利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。
C.使用参数化查询API
D.清理输入以排除上下文更改符号,例如:
(*):
[1]'(单引号)
[2]"(引号)
[3]\'(反斜线转义单引号)
[4]\"(反斜杠转义引号)
[5])(结束括号)
[6];(分号)
1.2 应用程序解决方案
1、我们为了调试方便,在页面上会抛出数据库异常信息,如果入侵工具获取了这些信息,就可以获取系统的一些配置信息,如web系统框架、采用的数据库等,从而找出系统漏洞。
所以不要在页面上抛出异常的详细信息,这些信息对客户并没有用,只是方便技术人员调试罢了,处理方法是在异常处理页面把打印异常代码删除即可;
2、新建一个过滤器,通过过滤器过滤SQL注入特殊字符,配置成功后,重启服务,用Appsan工具扫描,漏洞得到解决,通过过滤器可以解决SQL注入、跨站点脚本编制及通过框架钓鱼等问题,具体实现方式如下:
1、在web.xml文件中配置过滤器
2、过滤器过滤代码
publicclassInjectFilterextendsIsmpServletFilter{
privateStringfailPage="/loginout.jsp";//发生注入时,跳转页面
publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
FilterChainfilterchain)throwsIOException,ServletException{
//判断是否有注入攻击字符
HttpServletRequestreq=(HttpServletRequest)request;
Stringinj=injectInput(req);
if(!
inj.equals("")){
request.getRequestDispatcher(failPage).forward(request,response);
return;
}else{
//传递控制到下一个过滤器
filterchain.doFilter(request,response);
}
}
/**
*判断request中是否含有注入攻击字符
*@paramrequest
*@return
*/
publicStringinjectInput(ServletRequestrequest){
Enumeratione=request.getParameterNames();
StringattributeName;
StringattributeValues[];
Stringinj="";
while(e.hasMoreElements()){
attributeName=(String)e.nextElement();
//不对密码信息进行过滤,一般密码中可以包含特殊字符
if(attributeName.equals("userPassword")||attributeName.equals("confirmPassword")||attributeName.equals("PASSWORD")
||attributeName.equals("password")||attributeName.equals("PASSWORD2")||attributeName.equals("valiPassword")){
continue;
}
attributeValues=request.getParameterValues(attributeName);
for(inti=0;i if(attributeValues[i]==null||attributeValues[i].equals("")) continue; inj=injectChar(attributeValues[i]); if(! inj.equals("")){ returninj; } } } returninj; } /** *判断字符串中是否含有注入攻击字符 *@paramstr *@return */ publicStringinjectChar(Stringstr){ Stringinj_str="\")\'*%"; Stringinj_stra[]=inj_str.split(""); for(inti=0;i { if(str.indexOf(inj_stra[i])>=0) { returninj_stra[i]; } } return""; } } 2 会话标识未更新 2.1 会话标识未更新概述 “会话固定”是一种攻击技术,会强制用户的会话标识变成显式值。 固定会话标识值的技术有许多种,会随着目标Web站点的功能而不同。 从利用“跨站点脚本编制”到向Web站点密集发出先前生成的HTTP请求,都在这些技术范围内。 用户的会话标识固定之后,攻击者会等待用户登录,然后利用预定义的会话标识值来假定用户的联机身份。 一般而言,对于标识值的会话管理系统有两种类型。 第一种类型是“宽容”系统,可让Web浏览器指定任何标识。 第二种类型是“严格”系统,只接受服务器端生成的值。 当使用宽容系统时,不需要联系Web站点,便可以维护任何会话标识。 在严格系统中,攻击者需要维护“陷阱会话”并且必须定期联系Web站点,才能防止闲置超时。 对于会话固定,倘若没有活动保护,使用会话来识别已认证的用户的任何Web站点都可能受到攻击。 使用会话标识的Web站点通常都是基于cookie的站点,但也会使用URL和隐藏的表单字段。 不幸的是,基于cookie的会话最容易受到攻击。 目前已识别的大多数攻击方法都是针对cookie的固定。 相对于在用户登录Web站点之后,再窃取用户的会话标识,会话固定提供的机会多得多。 在用户登录之前,攻击的活动部分便已启动。 会话固定攻击过程通常由三个步骤组成: 1)安装会话 攻击者针对目标Web站点设下“陷阱会话”,并获取这个会话的标识,攻击者也可以选择攻击中所用的任意会话标识。 在某些情况下,必须反复联系Web站点,才能维护确定好的陷阱会话值。 2)固定会话 攻击者将陷阱会话值引进用户的浏览器中,固定用户的会话标识。 3)进入会话 用户登录目标Web站点之后,当使用固定会话标识值时,攻击者便可加以接管。 ” 2.2 安全风险及原因分析 高风险漏洞,可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务 原因: Web应用程序编程或配置不安全 2.3 AppScan扫描建议 始终生成新的会话,供用户成功认证时登录。 防止用户操纵会话标识。 请勿接受用户浏览器登录时所提供的会话标识 2.4 应用程序解决方案 会话标识未更新,Appscan给出的描述是建议用户每次登录时需使用新的会话标识。 应用程序实现上就是在登录模块,添加以下代码,即用户登录后,重新生成会话。 HttpSessionsession=request.getSession(false); if(session! =null){//让cookie过期 session.invalidate(); Cookiecookie=request.getCookies()[0];//获取cookie cookie.setMaxAge(0);//让cookie过期 } request.getSession(true);//生成新会话 经过测试,这段代码只在weblogic和tomcat下才有效,在公司中间件webspeed及jboss6.0下问题都依然存在,但从扫描的结果信息分析看,漏洞已经解决,分析判断应该只是session处理机制不同,AppScan工具仍认为存在漏洞风险。 在与电信沟通中我们存在一个经验教训大家一定要吸取,不能过渡迷信流行的自动化测试工具,尤其是对于Appscan这种判断防御行为的复杂软件,仅靠有限的规则设置就当做是web安全的唯一标准这显然不太合理,这种情况一定要与测试方沟通解释。 另一方面,对于公司的产品webspeed,也想提点建议,商务项目采用公司的产品为公司节约了不少成本,但是我们产品后续升级维护也必须重视起来,当确认出是webspeed本身问题后,联系vasg相关人员进行协调解决,根本没有非常了解该产品技术人员支持,只是一个刚入职的同事在配合测试。 调试了一周时间仍不能解决,最后只能作为一个遗留问题搁置。 公司一直在向产品化转变,但是自身的产品维护、升级、管理仍然需要改进。 3 已解密登录请求 3.1 已解密登录请求概述 在应用程序测试过程中,检测到将未加密的登录请求发送到服务器。 由于登录过程所用的部分输入字段(例如: 用户名、密码、电子邮件地址、社会保险号码,等等)是个人敏感信息,建议通过加密连接(如SSL)将其发送到服务器。 任何以明文传给服务器的信息都可能被窃,稍后可用来电子欺骗身份或伪装用户。 此外,若干隐私权法规指出,用户凭证之类的敏感信息一律以加密方式传给网站。 3.2 安全风险及原因分析 安全风险中,可能会窃取诸如用户名和密码等未经加密即发送了的用户登录信息 原因: 诸如用户名、密码和信用卡号之类的敏感输入字段未经加密即进行了传 递 3.3 AppScan扫描建议 1.确保所有登录请求都以加密方式发送到服务器。 2.请确保敏感信息,例如: -用户名 -密码 -社会保险号码 -信用卡号码 -驾照号码 -电子邮件地址 -电话号码 -邮政编码 一律以加密方式传给服务器。 3.4 应用程序解决方案 已解密的登录请求,要求就是数据要加密传输。 最简单有效的解决方式采用SSL加密协议传输,但是由于EMA服务管理平台业务的特殊性,采用SSL加密方式对现有的业务影响太大,所以最终没有采用此种方式解决该问题,但个人在进行测试过程中也尝试在tomcat和jboss下SSL方式配置,写下来供参考。 Jboss内核也是tomcat,所以两者配置基本都是一样,都是在生成证书文件后,在service.xml进行配置: 1. 进入到cmd进入到jdkbin目录下执行keytool-genkey-aliastomcat-keyalgRSA-keystorewebspeed.keystore生成证书 2. 在service.xml配置SSL maxThreads="150"minSpareThreads="25"maxSpareThreads="75" enableLookups="false"disableUploadTimeout="true" acceptCount="100"scheme="https"secure="true" clientAuth="false"sslProtocol="TLS" keystoreFile="C: \tomcat-5.5.26\conf\webspeed.keystore" keystorePass="1111aaaa"/> 这样配置后虽然可以通过https访问,但仍然还可以通过8080使用普通的http访问,所以还必须禁止普通模式登录。 所以还得在web.xml添加配置。 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 --AuthorizationsettingforSSL--> --AuthorizationsettingforSSL--> 应注意,由于项目的一些组件无法通过https,因此url-pattern字段只对.jsp和.action进行了限制,如果不做特定限制,则系统默认是全部使用https传输。 而且上述设置一旦在某个工程中出现,那么当前tomcat将全局采用这一配置。 4 跨站点请求伪造 4.1 跨站点请求伪造概述 “跨站点伪造请求(CSRF)”攻击可让黑客以受害者的名义在易受攻击的站点上运行操作。 当易受攻击的站点未适当验证请求来源时,便可能出现这个攻击。 这个漏洞的严重性取决于受影响的应用程序的功能,例如,对搜索页面的CSRF攻击,严重性低于对转帐页面或概要更新页面的CSRF攻击。 这项攻击的执行方式,是强迫受害者的浏览器向易受攻击的站点发出HTTP请求。 如果用户目前已登录受害者站点,请求会自动使用用户的凭证(如会话Cookie、用户的IP地址,以及其他浏览器认证方法)。 攻击者利用这个方法来伪造受害者的身份,再代替他来提交操作。 换句话来说,易受攻击的站点未采取适当措施来验证用户实际是否想执行特定操作。 强迫受害者发送非预期的请求,方法有许多种: -通过电子邮件向受害者发送易受攻击应用程序的恶意链接。 -在黑客的Web页面上,放置一个易受攻击的Web站点的热链接(如图像或帧)。 -在公共论坛中,张贴易受攻击站点的链接。 -利用站点(或另一个站点)的“跨站点脚本编制”或“链接注入”漏洞,将浏览器自动重定向到易受攻击的站点。 如果攻击者利用易受攻击的站点本身的“链接注入”漏洞,可以增加用户通过站点认证的可能性,进而增加攻击成功的可能性。 例如,攻击者可以利用上述任何选项来诱惑受害者查看含有下列条目的页面: //bank/transfer? destination=John&money=1000"style='visibility: hidden'> 这会使受害者的浏览器自动请求URL及浏览器的当前凭证。 如果这个银行业站点易受到CSRF攻击,它会根据应用程序逻辑,从受害者的帐户中,将1000美元转账到John的银行帐户。 “跨站点伪造请求”攻击也称为CSRF(发音为C-Serf)、XSRF、“跨站点伪造引用”、“单键攻击”以及“会话骑乘”。 您可以利用下列方式来验证您的应用程序是否易受到CSRF攻击: [1]检查易受攻击的链接/请求是否未包括攻击者难以猜中的参数 [2]检查易受攻击的链接/请求是否会执行只应自愿执行的操作 含有用户在不知不觉中提交的请求所能直接访问的敏感操作的应用程序,被视为很容易遭受CSRF攻击。 CSRF也可能出现在登录页面和注销页面上。 由于攻击者可以伪造来自受害者的连续注销请求,因此CS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AppScan 扫描 建议