国内的一些银行的网上银行系统为了用户信息的安全,在登录页面上使用了名为“安全登录控件”的东西,取代了传统的 HTML 的输入控件(Input),下面就对用户量较大的招商银行和工商银行的登录界面及“安全登录控件”做一下对比。
1、招商银行
招商银行的网上银行系统做的比较早,用户也很大,深受大部分用户欢迎,其在安全控制手段上也一直比较严格。
在进入正题之前,先来一点题外话:招商银行的有些安全控制办法很值得我们学习,例如专业版证书,据我猜想,可能是在标准的 X.509 证书上又做了一些安全保护,即对标准的证书又进行加密(加密方式不是公开的),这样在计算机中保存/备份的证书是不能通过 Windows 提供的程序去打开的,只有在专业版软件中输入正确的密码后才能导入,这样即遵循了标准,保证了扩展性,又在安全措施上大大加强了。
招商银行的大众版不象专业版那样版本更新很快(可见招商银行的专业版用户量很大,而大众版并不是其发展的重点),大众版自诞生之日起,界面一直比较简单朴素,但基本功能都具备。通过对大众版登录界面的的分析,得到了一下信息:
1) 在登录界面上有数字验证码来防止暴力攻击
2) 安全登录控件中包含两个控件:帐户和密码输入控件
3) 用户输入登录信息后,提交时 javascript 从安全登录控件中取出的帐户和密码是经过加密的,即在 SSL 加密的基础上,又做了自定义的加密,完全做到了端到端的保密通讯(这一点可以通过 ieHTTPHeaders 查看出来)
4) 在登录 Form 中还有一个 ClienNo 和 SerialNo 等字段,这些值被设置为安全登录控件的 Option,估计是做为加密所用 Key 的一部分
5) 登录 Form 的提交地址是一个 DLL(ISAPI?),Web Server IIS 5.0 (招商银行的主页似乎运用了 Content Management Server ,从其页面源码中可以看出来)
6) 安全登录控件的 CAB 包(CMBEdit.CAB),大小有 117 KB,包含控件 CMBEdit.DLL ,应该是使用 VC 编写的,版本 1.1,经过 VeriSign 代码签名
7)最关键的是,不管是 blog.joycode.com/mvm">MVM 的blog.joycode.com/mvm/archive/2004/10/18/35790.aspx">基于 .NET 的键盘 Hook 程序,还是另外一个基于 VB 的键盘 Hook 程序,都无法捕捉用户在安全登录控件里输入的键值,这也许是最重要的一点
8) 由于在页面中使用 ActiveX ,可能给一些用户带来登录问题(如安全设置不同或安装 XPSP2 都可能阻止 ActiveX 的安装),招商银行的页面上明确给出了解决登录的链接文档。
总之,招商银行的网上银行登录界面在安全上的确做的不错。
2、中国工商银行
工商银行网上银行近两年发展很快,成了其不可或缺的一个重要渠道,且被国外一些媒体评为中国非常好的网上银行。
1) 工商银行的个人网上银行系统登录界面中没有使用验证码来防止暴力攻击,这种成本非常低,但安全性回报很高的做法竟然都不用(扣1分)
2) 登录界面中,只有密码域使用了安全控件,难道帐号信息就不重要(扣1分)
3) 在 ieHTTPHeaders 捕捉到的登录 Form 提交的信息中,帐号和密码是未加密的明文,且没有任何其它的信息来防止安全攻击(扣3分)
4) 有意思的是,在登录界面的 HTTP Response 信息中,不但有 IIS 5.0 的信息,还有 WebSphere Application Server 4.0 的信息,看来其 Web Server 是 IIS,而 Application Server 又是 WebSphere ,这一对组合 ...
5) 登录安全控件的 CAB 包(AxSafeControls.CAB) 大小约为 174 K,经过 VeriSign 代码签名,里面有三个 DLL :InputControl.dll 似乎就是界面控件,msvcp60.dll 应该是Microsoft C++ Runtime Library,SubmitControl.dll 应该是与提交有关的控件,在 SubmitControl.dll 中发现有 addPair 方法,应该与加密有关,在页面提交的 javascript 中,也确实发现是SubmitControl 发挥了作用,但为什么就是明文的呢? (扣2分)
6) 在登录页面的源码中,发现了一段被注释的 javascript 代码,仔细一看,原来是以前登录界面未使用安全登录控件时,使用 Html Input 控件时的处理代码,界面改了之后,处理代码没有删除,只被注释,这些源代码中暴露系统的一些信息,很不专业,也很危险,因为通过分析就可以发现,其界面更改前后的服务器端代码没有任何变化(扣2分)
7) 最关键的是,虽然 VB 的键盘 Hook 程序不能 Hook 密码域中输入的值,但是blog.joycode.com/mvm/archive/2004/10/18/35790.aspx">基于.NET 的键盘 Hook 程序竟然完全可以捕捉到用户输入的任何键值,这难道就是大家前几天讨论的捕捉的作用域问题?这样的话,安全控件几乎就成了摆设(扣10分)
8) 没有在登录页面中给出如何解决登录问题的链接文档,可能使得很多用户由于 ActiveX 不能正确安装而不能正确登录系统. http://netadmin.77169.com/HTML/20041120012000.html