IBM AppScan 各种测试问题修改方案

1. SQL注入文件写入(需要用户验证)


解决办法:通过建立过滤器方法,对所有用户输入信息进行清理过滤。通过清理过滤用户输入所包含的危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意 SQL 查询、嵌入将在客户端执行的Javascript代码、运行各种操作系统命令等。


建议过滤出所有以下字符:

[1] |(竖线符号)
[2] &(&符号)
[3];(分号)
[4] $(美元符号)
[5] %(百分比符号)
[6] @(at 符号)
[7] '(单引号)
[8] "(引号)
[9] \'(反斜杠转义单引号)
[10] \"(反斜杠转义引号)
[11] <>(尖括号)
[12] ()(括号)
[13] +(加号)
[14] CR(回车符,ASCII 0x0d)
[15] LF(换行,ASCII 0x0a)
[16] ,(逗号)
[17] \(反斜杠)

注意Rational AppScan Standard一旦开启,将始终会报告此问题。所以此问题是需要用户验证。具体可参考http://www-01.ibm.com/support/docview.wss?uid=swg21472385


2. 会话未更新


解决办法:在登录页面加入以下代码

//解决安全性问题,会话未更新
request.getSession().invalidate();//清空session
Cookie[] cookies = request.getCookies();//获取cookie
if(null != cookies &&cookies.length> 0){
for(Cookie cookie : cookies){
cookie.setMaxAge(0);//让cookie过期
}
}

3. 跨站点请求伪造


解决办法:在过滤器中增加对请求响应信息来源进行判断过滤;

//解决安全性问题:跨站点请求伪造
   String referer = req.getHeader("Referer");   //REFRESH  
   String serverName = request.getServerName();
if(null != referer&&referer.indexOf(serverName) < 0){            
req.getRequestDispatcher(req.getRequestURI()).forward(req, response);  
   }


4. 跨站点脚本编制


解决办法:通过建立过滤器方法,增加对请求响应信息来源进行判断过滤及对所有用户输入信息进行清理过滤。通过清理过滤用户输入所包含的危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意 SQL 查询、嵌入将在客户端执行的Javascript代码、运行各种操作系统命令等。具体实现可参考结合1.SQL注入文件写入 与3.跨站点请求伪造 的解决方法;


5. 已解密的登录请求


解决办法:

1.对用户所输入的密码在页面进行MD5加密并反馈至密码输入框。

2. 手动生成SSL安全访问证书;在此不做介绍,相关方法可通过网上查找;

3. 将产品HTTP访问方式改为SSL安全访问方式;在Apache-Tomcat应用服务器的conf文件夹下的server.xml增加以下代码:

<!--设置SSL(Https)安全访问方式;访问端口为:8443 ->
<Connectorport="8443"minSpareThreads="5"maxSpareThreads="75"
enableLookups="true"disableUploadTimeout="true"
acceptCount="100"maxThreads="200"
scheme="https" secure="true"SSLEnabled="true"
ciphers="SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA"
keystoreFile="keystore/server.keystore"keystorePass="123456"
clientAuth="false"sslProtocol="TLS"/>

(注:keystore/server.keystore为证书存储路径;123456为证书密码;)

4. 在产品WEB.XML文件中加上以下代码:

<!--解决安全性问题:已解密登录请求;将改为SSL安全访问方式 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>


6. 启用了不安全的 HTTP 方法


解决办法:修改web工程中或者服务器web.xml,增加安全配置信息,禁用不必要HTTP方法

<!--解决安全性问题:启用不安全HTTP方法 -->
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint></auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>


7. 会话 cookie 中缺少HttpOnly属性


解决办法:在过滤器中增加对请求响应信息头的设定

//解决用户的cookie可能被盗用的问题,减少跨站脚本攻击

resp.setHeader("Set-Cookie", "name="+newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(new Date())+"; Secure; HttpOnly");  


8. 发现 Web 应用程序源代码泄露模式


解决办法:针对代码注释中出现的部分源代码进行清除;


9. 自动填写未对密码字段禁用的 HTML 属性


解决办法:在密码输入框中增加autocomplete="off" 属性


10. 发现内部 IP 泄露模式


解决办法:针对代码中出现的IP地址进行清除;


11. 检测到应用程序测试脚本


解决办法:针对代码中出现的测试脚本文件进行清除;脚本文件主要包括以test.php、test.asp、test.cgi、test.html 等;并对一些包含相关的敏感字符文件名称进行修改;敏感字符包括:test、old等;


12. Unix 文件参数变更


解决办法:通过建立过滤器方法,增加对所有用户输入信息中是否包含“..”(两个点)字符串进行清理过滤。具体实现可参考结合1.SQL注入文件写入的解决方法;


13. Windows 文件参数变更


解决办法:通过建立过滤器方法,增加对所有用户输入信息中是否包含“..”(两个点)字符串进行清理过滤。具体实现可参考结合1.SQL注入文件写入的解决方法;


14. 链接注入(便于跨站请求伪造)


解决办法:通过建立过滤器方法,增加对请求响应信息来源进行判断过滤及对所有用户输入信息进行清理过滤。通过清理过滤用户输入所包含的危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意 SQL 查询、嵌入将在客户端执行的Javascript代码、运行各种操作系统命令等。具体实现可参考结合1.SQL注入文件写入 与3.跨站点请求伪造 的解决方法;


15. 通过框架钓鱼


解决办法:通过建立过滤器方法,增加对请求响应信息来源进行判断过滤及对所有用户输入信息进行清理过滤。通过清理过滤用户输入所包含的危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意 SQL 查询、嵌入将在客户端执行的Javascript代码、运行各种操作系统命令等。具体实现可参考结合1.SQL注入文件写入 与3.跨站点请求伪造 的解决方法;


16. 不充分帐户封锁


解决办法:对用户登录错误次数进行限制,并在一定的时间内不请允许再登录;


17. 检测到文件替代版本


解决办法:针对产品中所有开头为“Copy of”、“_”、“.”、“~”和“Old”的文件进行清理;


18. 发现电子邮件地址模式


解决办法:针对代码中出现的电子邮件地址进行清除;


19. HTML 注释敏感信息泄露


解决办法:针对代码注释中出现的敏感信息进行清除;敏感信息包括:注释的源代码、电子邮件、IP地址等;


20、查询中接受的主体参数
测试类型:应用程序级别测试
威胁分类:信息泄露
原因:Web 应用程序编程或配置不安全
安全性风险:可能会收集有关 Web 应用程序的敏感信息,如用户名、密码、机器名和/或敏感文件位置
可能会劝说初级用户提供诸如用户名、密码、信用卡号、社会保险号等敏感信息
技术描述:GET 请求设计的目的在于查询服务器,而 POST 请求用于提交数据。但是,除了技术目的之外,攻击查询参数比攻击主体参数更容易,因为向原始站点发送链接或在博客或注释中发布链接更容易,而且得到的结果比另一种方法更好,为了攻击带有主体参数的请求,攻击者需要创建其中包含表单的页面,当受害者访问表单时就会提交表单。说服受害者访问他不了解的页面比让受害者访问原始站点要难很多。因此,不建议支持可到达查询字符串的主体参数。


21、临时文件下载
测试类型:基础结构测试
威胁分类:可预测资源位置
原因:在生产环境中留下临时文件
安全性风险:可能会下载临时脚本文件,这会泄露应用程序逻辑及其他诸如用户名和密码之类的敏感信息
技术描述:Web 服务器通常会使“公共网关接口(CGI)”文件扩展名(如 .pl)与 Perl 之类的某个处理程序相关联。 当 URL 路径结尾是 .pl 时,路径所指定的文件名会发送给 Perl 执行;文件内容不会返回给浏览器。 然而,当在适当的位置编辑脚本文件时,编辑器可以用新的文件扩展名来保存所编辑的脚本的备份副本,例如:.bak、.sav、.old、~ 等等。Web 服务器通常没有这些文件扩展名的特定处理程序。 如果攻击者请求这类文件,文件内容会直接发送到浏览器。
从虚拟目录下除去这些临时文件很重要,因为它们可能含有调试目的所用的敏感信息,也可能显露有并非当前逻辑,但仍可能受到利用的应用程序逻辑攻击。


22、应用程序错误
测试类型:应用程序级别测试
威胁分类:信息泄露
原因:未对入局参数值执行适当的边界检查
未执行验证以确保用户输入与预期的数据类型匹配
安全性风险:可能会收集敏感的调试信息
技术描述:如果攻击者通过伪造包含非应用程序预期的参数或参数值的请求,来探测应用程序(如以下示例所示),那么应用程序可能会进入易受攻击的未定义状态。 攻击者可以从应用程序对该请求的响应中获取有用的信息,且可利用该信息,以找出应用程序的弱点。
例如,如果参数字段是单引号括起来的字符串(如在 ASP 脚本或 SQL 查询中),那么注入的单引号将会提前终止字符串流,从而更改脚本的正常流程/语法。
错误消息中泄露重要信息的另一个原因,是脚本编制引擎、Web 服务器或数据库配置错误。
以下是一些不同的变体:
[1] 除去参数
[2] 除去参数值
[3] 将参数值设置为空值
[4] 将参数值设置为数字溢出(+/- 99999999)
[5] 将参数值设置为危险字符,如 ' " \' \" ) ;
[6] 将某字符串附加到数字参数值
[7] 在参数名称后追加“.”(点)或“[]”(尖括号)

23、整数溢出
测试类型:应用程序级别测试
威胁分类:整数溢出
原因:未对入局参数值执行适当的边界检查
未执行验证以确保用户输入与预期的数据类型匹配
安全性风险:可能会收集敏感的调试信息
技术描述:如果攻击者通过伪造包含非应用程序预期的参数或参数值的请求,来探测应用程序(如以下示例所示),那么应用程序可能会进入易受攻击的未定义状态。 攻击者可以从应用程序对该请求的响应中获取有用的信息,且可利用该信息,以找出应用程序的弱点。
例如,如果参数字段是单引号括起来的字符串(如在 ASP 脚本或 SQL 查询中),那么注入的单引号将会提前终止字符串流,从而更改脚本的正常流程/语法。
错误消息中泄露重要信息的另一个原因,是脚本编制引擎、Web 服务器或数据库配置错误。
以下是一些不同的变体:
[1] 除去参数
[2] 除去参数值
[3] 将参数值设置为空值
[4] 将参数值设置为数字溢出(+/- 99999999)
[5] 将参数值设置为危险字符,如 ' " \' \" ) ;
[6] 将某字符串附加到数字参数值
[7] 在参数名称后追加“.”(点)或“[]”(尖括号)


24、发现可能的服务器路径泄露模式
测试类型:应用程序级别测试
威胁分类:信息泄露
原因:未安装第三方产品的最新补丁或最新修订程序
安全性风险:可能会检索 Web 服务器安装的绝对路径,这可能会帮助攻击者开展进一步攻击和获取有关 Web 应用程序文件系统结构的信息
技术描述:AppScan 检测到含有文件绝对路径(例如:Windows 的 c:\dir\file,Unix 的 /dir/file)的响应。攻击者也许能够利用这项信息,从而访问到关于服务器机器目录结构的敏感信息,因而能够进一步攻击站点。



本文来自中部分来自:http://p.primeton.com/articles/53c64b6ee13823319f000048

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值