zoukankan      html  css  js  c++  java
  • AppScan安全问题解决方案


    一、 环境准备

    测试通常给的是PDF文档,动辄几百页,看起来很费劲,看文档的时间可能比解决问题的时间还长。。。所以作为需要解决问题的我们来说,最好安装AppScan,请测试人员提供类型为AppScan Scan File的文件。(图片模糊掉了URL,不影响问题分析)

    二、 如何分析AppScan扫描出的安全性问题
    AppScan扫描出的问题会一般按照严重程度分高,危,参三种类型,高危属于必须要解决的问题;低危一般属于config配置,或IIS配置问题;低的问题,一般也可能是高,低的衍生问题,高危问题造成的衍生问题特别多,故解决问题时,建议从高至低看,并且先易后难,最常见的就是SQL盲注,以SQL盲注为例分析:
    当收到测试的测试文件后,双击打开,以疫苗资审为例:

    打开之后,分析和定位问题的话,就是看红框框出的几个地方,SQL盲注这个问题就是AppScan向测试网址发送了一个地址:
    /Admin/Agent/PackInfo.aspx?id=61+having+1%3D1--+,此时是将id的值由61改成了61+having+1%3D1--+,就是注入了+having+1%3D1--+,程式只要能在这个地址请求的时候,提示User,并终止当前的操作,AppScan即视为这个这个问题解决,下次扫描的时候就扫描不到了。

    三、 高危常见问题解决方案
    1. SQL盲注:
    主要就是通过注入SQL的关键字,来破坏原有的查询,导致页面报错
    a. 看看几种常见的盲注方式:





    b. 解决方案
    思路:过滤关键字,在global.asax文件中的Application_BeginRequest方法中校验敏感字符/字母组合,具体参考网址http://www.jb51.net/article/34671.htm,
    具体文件在链接地址的SqlChecker.cs中,项目具有共性,也有特性,所以,SqlChecker.cs中的StrKeyWord,StrRegex视实际情况而定。
    实际解决:从上面的几种注入分析看,都含有+字符,最简单最暴力的方法就是过滤掉+字符,如果这样与代码冲突的话,可以按照攻击的方式过滤:如过滤掉+and+,+or+,’+and+’ 等等。。。
    2. SQL注入
    a. 看看几种常用的SQL注入方式

    b. 解决方案
    思路:SQL注入与SQL盲注实际的攻入方式不同,但是解决思路都是通过过滤特殊字符,只是过滤的字符稍有差异。
    实际解决:从以上几种注入可以看出都含有%27%3B,开始解析%27%3B是什么字符,发现注入sql的是 这个字符,在vs里面过滤掉 这个字符即可。
    备注:SQL注入的方式很多,这只是其中的一种,还有其它的种类,比如下图,要具体问题具体分析:


    3. 基于跨站点的编制
    思路与1,2相同,解决方法也是根据测试的结果过滤掉特殊字符。


    4. 已解密的登录请求

    解决方案:安装SSL协议,或其它安全加密协议。


    5. ASP.NET表单认证旁路
    思路:这个问题看起来很高大上,高大上到上网查都没查到解决方案,看着这个报错也是想了很久。。。。现在我们看下这个问题的相关信息
    a. 首先是问题信息:原始响应与测试响应对比,测试响应的Cookie中少了ASP.NET_SessionId,就是测试响应除去了cookie”ASP.NET_SessionId”(变体标识675),故猜测可能禁止修改客户端修改此cookie就可以了,在global文件中加了句代码,开始测试。



    b. a的方法测试结果是问题仍然存在,于是看了下修订建议,判断此建议并不可行,因为四川九个系统都部署在一个服务器上,如果是环境问题造成的漏洞,那应该是九个报告都有。。。但是,这个问题仅仅出现在两份报告里面。

    c. 最后看”请求/响应”页(第一幅图),将GET 后面的地址放到浏览器中测试,地址如下:

    这个地址路径在项目中并不存在,所以理论上应该报404的错误,但是打开F12查看,发现实际的状态是200,这说明有可能是StatusCode错误造成的问题,如果是这个问题的话,只需要在跳转的界面中将状态修改成404即可。基于这样的写法,我们开始找跳转的地方,发现是在Application_Error方法中(第二幅图),于是去设定跳转界面的StatusCode:HttpContext.Current.Response.StatusCode = 404;(第三幅图),再次测试,问题解决。



    实际解决:在跳转的最终页面设定StatusCode。
    四、 低危常见问题
    1. 检测到隐藏目录
    这个问题是AppScan直接请求项目中存在的文件夹名称,观察项目反馈。反馈分为几种,不作说明,只要配置IIS,并且代码做管控就可以了。方法如下:
    a.1首先是IIS配置:



    a.2 相应页面代码设定,请注意这里的无权限设定,StatusCode也是404,不要设定成403。

    2. 启用了Mircrsoft Asp.Net调试
    设定webconfig中节点:compilation debug=”false”

    3. 已解密的_ViewStatus参数
    增加节点machineKey

    4. 自动填写未对密码字段禁用的HTML属性
    对密码栏位增加属性:autocomplete="off"

    5. 发现电子邮件地址模式
    删除项目所有注释中涉及到的邮件地址
    五、 如何问题归类
    项目中加了check SQL盲注的代码后,确实SQL盲注,SQL注入,SQL旁路注入,跨站点脚本编制都没有了,但是出现了这么多新的问题(图一),WHY????

    (图一)
    仔细分析每个错误,如下几个问题,报的错都是一样的,所以这些应该是一类的问题,只要解决一个地方,就可以消除这些错误。
    从四个红色框中的内容,尤其是最下面的一段script脚本(项目开发中自定义脚本)可以发现代码已经检测到这个请求是有问题的,也将当前页面跳转,但是StatusCode仍然是200,这显然是错误的,所以修改StatusCode状态为400,或404即可。


    (图二)

    (图三)

    (图四)

    (图五)
    修改之后测试结果如下:状态是404,问题消除。

    六、 处理问题注意点
    a. 首先看报告中的修订建议,如果没有明确的建议,则看请求/响应部分,目前看来,所有的问题在这里都能找到原因和答案。
    b. 设定跳转时,请设定StatusCode,不管是global中的跳转还是代码里面由于某种校验失败而执行的跳转(非常重要)
    c. 不要过分纠结某个问题和标题,AppScan同一个问题会造成很多的衍生问题,注意看请求/响应中的请求地址,响应状态和推理,属于同类问题的一种解决方法即可

  • 相关阅读:
    Linux之HugePages快速配置
    Bug 5323844-IMPDP无法导入远程数据库同义词的同义词
    Oracle之SQL优化专题02-稳固SQL执行计划的方法
    使用COE脚本绑定SQL Profile
    AIX挂载NFS写入效率低效解决
    javaWeb项目配置自定义404错误页
    eclipse Referenced file contains errors (http://www.springframework.org/schema/context/spring-context-3.0.xsd)
    tomcat Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    orcle not like不建议使用(not like所踩过的坑!)
    eclipse debug调试 class文件 Source not found.
  • 原文地址:https://www.cnblogs.com/llhl/p/9648682.html
Copyright © 2011-2022 走看看