网上银行安全分析

来源:互联网 发布:淘宝b类违规指的什么 编辑:程序博客网 时间:2024/04/28 20:03

如今的网上银行交易已经成为许多人生活中不可缺少的一部分,但是网上银行的安全性如何呢?

用户登陆网上银行的过程如下:
    用户                 银行
      ---- 申请连接-------》
      《----发送登陆界面---
     
     ------发送用户登陆信息---》
                    判断用户信息是否正确
     
     《----网上银行服务---》

    高强度加密算法和数字签名的使用已经能够保证用户与银行系统之间数据通联的安全性(如果设计的当的话,银行系统应该没问题),如果我们假设银行系统是安全的(如果这个假设不成立,我们就应该立刻把钱全取出来),那么网上银行的短板就是用户的计算机。
正是基于这个原因,许多网上银行交易系统采用数字证书+用户口令的方式来保护用户的交易安全,并且推出了令牌,即将用户的证书保存在令牌内。令牌的使用无疑大大提高了用户操作的安全性。
但是我相信还是有许多用户没有购买银行的令牌,这种情况下,整个交易的安全性就在用户的口令保护上了。

    假设一个黑客入侵了用户的计算机,他想要获取用户网上银行的登陆信息,他会怎么做呢
1.键盘记录。最简单同时也是使用最多的办法,效果也还是不错的,根据笔者的试验,许多银行的交易过程都可以被记录下来
2.本地交易平台劫持。黑客在用户计算机内注入一个病毒,当用户登陆交易平台时,该病毒强行关闭正常的交易平台,弹出虚假的交易平台,诱使用户输入口令。
3.中间人攻击。该方法难以实现,不过威力强大。攻击方式如下:
  
     用户                           中间人                     银行
      ---------------------------- 申请连接---------------------》
                                          《----发送登陆界面---
        《------发送虚假登陆界面----
     
        ------发送用户登陆信息---》
                                  
                                记录用户登陆信息
                                          
                                          -------发送登陆信息---》

                                                           判断用户信息是否正确
     
     《--------------------------网上银行服务-------------------》


那么这三种攻击方式又有什么方法来保护呢?

1。键盘记录。

   当用户点击键盘时,计算机内部发生了什么呢?
   当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机。如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘扫描码。当你按下一个键时,这个键的扫描码就被传给系统。扫描码是跟具体的硬件相关的,同一个键,在不同键盘上的扫描码有可能不同。键盘控制器就是将这个扫描码传给计算机,然后交给键盘驱动程序。键盘驱动程序会完成相关的工作,并把这个扫描码转换为键盘虚拟码。什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上所有键的编码,于是就提出了虚拟码概念。无论什么键盘,同一个按键的虚拟码总是相同的,这样程序就可以识别了。简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16进制来表示虚拟码。当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描码和虚拟码还有其它信息一起传递给操作系统。然后操作系统则会把这些信息封装在一个消息中,并把这个键盘消息插入到消息列队。最后,要是不出意外的话,这个键盘消息最终会被送到当前的活动窗口那里,活动窗口所在的应用程序接收到这个消息后,就知道键盘上哪个键被按下,也就可以决定该作出什么响应给用户了。这个过程可以简单的如下表示:

    用户按下按键-----键盘驱动程序将此事件传递给操作系统-----操作系统将键盘事件插入消息队列-----键盘消息被发送到当前活动窗口
                            (用winio可以截获)                      (使用hook可以截获)  
    
    目前银行防止键盘记录的方式主要有:
     

    1)不采取任何保护措施。这是不负责任的做法,虽然从法律上来说,用户有责任保护自己计算机的安全。但是银行作为服务机构有必要给用户提供一个安全的环境,如果某个网上银行频繁发生用户帐户被盗事件,这也将导致用户流失,对银行来所也不是好事。
    2)在操作系统中插入自己的钩子,并保证它在最前面,当检测到网上银行登陆界面为当前窗口时,该程序将截获的键盘输入写入登陆界面,最后将该键盘纪录从消息队列中删除。  不过这也可以通过使用winio写成的截获程序来接获用户输入。
    3)使用winio来劫持键盘端口,确保用户输入不被截获。 这样做的缺点是: winio只能在管理员权限下运行,且winio有独占性,若其他程序也使用了winio将会导致登陆界面无法打开。招商银行曾经使用过这种方法,但是用户反映不好,现在的版本就放弃这种方式了
    4)强制使用软键盘,每次打开软键盘时,通过随机数发生器来产生键盘序,笔者最认同这种方式,成本低,实现方便,安全性高。目前花旗银行和深圳发展银行采用这种方式