测试安全扫描有关问题

测试安全扫描问题
首先简单描述一下系统情况:采用的技术struts1.2,EJB3.0,另外公司以前封装了一套jsp标签;应用服务器jboss4.0.2;数据库为SQL Server2005。
       目前我还有2类问题还没有解决—1:会话标识未更新
                                                   2:发现数据库错误模式
       希望有解决过此类问题的大虾们,能给予一点帮助!
       在此先行谢过!!

       系统将近验收的时候,对方发过来一份安全报告- -我们开发的系统有安全漏洞,让我们把漏洞级别为严重的全部解决,否者不予验收。对于这些问题,公司其它项目组包括我都没有人曾经做过(也就是说系统从开始打框架到后来的开发过程没有任何人注意这些问题)。此时脑海浮现一句较为经典的网语“内事问baidu,外事问google…”。经过几天的搜索,简单描述一下我对以下几个安全问题的理解:
      1 发现数据库错误模式:主要是一些数据连接错误信息,通过提交特殊构造的字符,程序会暴露一些数据库信息,也容易引起SQL注入攻击。
      2 会话标识未更新:是cookies过期时间未设置,可能会引发一些cookies欺骗攻击。
      3 跨站点请求伪造:这个是高级攻击技术,是黑客作为中间人攻击,这个漏洞是程序造成的,在不同的会话中两次发送同一请求并且收到相同的响应,也就是说客户端与服务端建立连接后,客户端向服务端提交数据,服务端只认客户端需要什么而返回什么内容给客户端,并没有对客户端的身份进行认证。
      4 不充分帐户*:程序没有使用锁定功能,可以穷举密码。
      5 跨站点脚本编制:实际翻译应该是跨站脚本攻击。也就是XSS,是服务端没有对客户端提交的参数进行过滤,例如:2009>%22%27><img%20src%3d%22javascript:alert(473443)%22>,这个就会弹出一个窗口,还可以弹出其他页面,或者做页面跳转等攻击,通常攻击者用来挂马。
      6 SQL 盲注也是要对参数进行过滤,包括危险字符,‘,;@,==,而且通过cookies提交的值也要进行过滤。


      以下内容是我解决这些问题的过程
      首先找了个IBM Rational AppScan 7.8的破解版装上
     (一) 既然http访问有问题安全,那么我换个安全点的https试了试,结果发现严重级别的没有减少,反而严重程度为一般的倒是增加了好几类,晕!(jboss4.0.2配置https服务的步骤在压缩文件里面)


     (二) 对于sql盲注有一下2种情况
1:http://172.16.200.219:9090/project/projectmemberaction.do (2)
       code
       name
2:http://172.16.200.219:9090/system/orgbaseinfoaction .do (3)
       TcnSystemOrgDto.code
       TcnSystemOrgDto.fullname
       TcnSystemOrgDto.addrss
[(2)(3)分别表示该链接下面漏洞注入的个数]
      我针对安全扫描的提示,逐个修改了对数据库列表及查询的操作,使其全部采用prepareStatement预编译的方式。因为系统涉及到的页面太多,对于用户输入框的过滤就不可能一个一个的去修改,因此我写了个filter(见附件)

       做完这些之后,再继续扫描,发现第1种注入问题已经解决,然而第2种问题依旧,而且每次扫描的链接还不一样,正在苦恼之际看到CSDN上有个如下的帖子
彻底杜绝SQL注入
     1.不要使用sa用户连接数据库
     2、新建一个public权限数据库用户,并用这个用户访问数据库
     3、[角色]去掉角色public对sysobjects与syscolumns对象的select访问权限
     4、[用户]用户名称-> 右键-属性-权限-在sysobjects与syscolumns上面打“×”
其原文见如下路径  http://topic.csdn.net/u/20091221/18/6693545C-A659-4E3B-9454-EBB77D6C8D1F.html
至此,SQl盲注问题就已经解决。(前面的那个过滤器是否多余?这个问题还没来得及验证)



     (三) 对于XSS问题,网上给的意见同样是过滤用户的输入。系统都在验收的阶段,哪有时间对输入框去做限制呢!同样写个filter(代码见附件)



     (四) 对于不充分的账户*
      我在登录页面加了一个验证码,在扫描的时候,发现appscan无法扫描,原来在这个工具有个地方设置为自动登录,我加上验证码后,Appscan无法流畅的运行,于是固定了登录action中关于验证的参数。这个问题就没有出现,奇怪???我屏蔽了验证参数的比较,因而页面验证码输入框只是一个摆设,这个问题怎么就没有了呢??

       至此,我遇到的安全问题还有2类没有解决
      一个是会话标识未更新,这个问题出现的地方是在登录的链接(附件有图片)
我试过在登录的login.jsp页面加上session="false"
       1:<%@ page contentType="text/html; charset=GBK" language="java" session="false"%>
在系统登录过程中也没有操作cookie,而且系统其他的地方也没有操作cookie,在登录的时候我设置了cookies[i].setMaxAge(1800);也没有任何作用。

       2:在jboss\server\default\deploy\jbossweb-tomcat55.sar\context.xml

修改其配置为<Context cookies="false">在登录的过程中确实没有创建名为JSEESION的cookie,但是“会话标识未更新”这个问题依然存在!!

是我的方法不对吗?还是我根本没有理解“会话标识未跟新”的意思?



        另外一个未解决的安全问题是发现数据库错误模式,这个问题出现在另外一个系统,该系统采用Struts2+ Hibernate3开发