前言:
本文还是去年年初写的,当时出于安全考虑没放出来。现在部分网上银行已大幅度降低了无高级别安全措施情况下的转账限额,并建议用户使用动态口令卡或者USBKey,总体安全系数有所提高。
随着子商务的普及,网上银行以及在线电子支付等方式逐渐被网民所接受和喜爱。但是网上银行以及电子商务支付平台的安全性不容乐观。尽管各网上银行采取SSL加密防止通过嗅探网络封包的方式截取密码;对于防止WEB登陆时密码被窃取,网上银行采取了安全控件或者动态软键盘的方法,但考虑的仍不全面,我们还是能采取相应的方法截获用户输入的密码。
下面就以具有代表性的四大银行:中国工商银行(601398,股吧)、中国农业银行、中国建设银行(601939,股吧)、中国银行(601988,股吧);商业银行:招商银行(600036,股吧);电子支付平台:阿里巴巴支付宝等为例,分别就客户端密码方面进行脆弱性分析。网上银行以及其他电子商务支付平台的WEB登陆安全性直接与用户的经济利益相关,所以有必要不遗余力的加强WEB登陆安全性的建设。另外由于不是所有的用户都使用数字证书和U盾之类安全认证产品,所以“黑客”只要截取到用户的登陆密码以及支付密码就能随心所欲的转帐/支付,危害甚大。
本文谈的是采用纯技术截取密码,而不是用假页面假接口等钓鱼方式骗取密码的方法。
网上银行对于防止密码被盗分别采用了安全控件和动态软键盘的方法:
1、采取安全控件的,典型代表有:中国工商银行、招商银行、阿里巴巴支付宝等
这类安全控件考虑还算全面,防止了键盘/消息钩子,而且使通过IE的COM接口获取密码的方法也无能为力。但是这类安全控件做得不够底层,考虑得欠深入。
我们采用键盘过滤驱动的方法就可以突破安全控件的保护记录密码了。除了键盘过滤驱动方法外还可以挂接IDT(中断描述符表)的键盘入口,或者挂钩键盘驱动Dispatch例程以及Inlinehook相应IRP分发函数。当然,更深入点的话还可以挂钩i8042prt.sys。
不过由于编写驱动程序不同与开发普通的应用程序,难度稍大,所以目前还未见公开的采用此技术截取这些网上银行密码的木马。但是开发起来也并不是太困难,相对而言采取键盘过滤驱动的方法较通用稳定。
基本原理是我们的驱动创建一个设备附加到键盘驱动Kbdclass下的设备,这样所有的IRP(输入输出请求包)包都将先发给我们的驱动程序,然后再转发给系统中的键盘驱动,我们的驱动程序获取IRP后就可以从中获得键盘的scancode扫描码,这样就能在系统内核的层面获得键盘输入信息。键盘过滤驱动的部分代码如下:
NTSTATUS HookKeyboard(IN PDRIVER_T pDrivert) PDEVICE_T pKeyboardDevicet; NTSTATUS status=IoCreateDevice(pDrivert,sizeof(DEVICE_EXTENSION), NULL,FILE_DEVICE_KEYBOARD, 0, true, &pKeyboardDevicet); pKeyboardDevicet->Flags =pKeyboardDevicet->Flags(DO_BufferED_IO DO_POWER_PAGABLE); pKeyboardDevicet->Flags=pKeyboardDevicet->Flags&~DO_DEVICE_INITIALIZING; RtlZeroMemory(pKeyboardDevicet->DeviceExtension,sizeof(DEVICE_EXTENSION)); PDEVICE_EXTENSIONpKeyboardDeviceExtension=(PDEVICE_EXTENSION)pKeyboardDevicet->DeviceExtension; CCHAR ntNameBuffer[64] = "\\Device\\KeyboardClass0"; STRING ntNameString; UNICODE_STRING uKeyboardDeviceName; RtlInitAnsiString( &ntNameString, ntNameBuffer ); RtlAnsiStringToUnicodeString(&uKeyboardDeviceName,&ntNameString, TRUE ); IoAttachDevice(pKeyboardDevicet,&uKeyboardDeviceName,&pKeyboardDeviceExtension->pKeyboardDevice); RtlFreeUnicodeString(&uKeyboardDeviceName); return STATUS_SUCCESS; |
下面以工商银行的网上银行为例,演示我们的程序。为了演示,我们的驱动程序将实时打印出获得的键盘记录的信息,并且把完整的信息记录到磁盘文件上。招商银行、阿里巴巴支付宝等效果等同,支付密码用此法同样能截取。截取时实时打印的信息如图1:,记录到文件里的完整信息:如图2:。合发送邮件或者ASP/php留言的方式我们就能远程的得到密码。
2、采取动态软键盘的,典型代表有:中国建设银行、中国银行、中国农业银行
采用动态软键盘技术初看确实能使攻击者无法截获密码,但是截取密码的方法不仅仅是接截获键盘记录一种方法。我们可以通过IE的COM获取的密码。
对于中国建设银行,通过IE的COM接口获取的密码框里的内容就是密码,其他大部分采用软键盘技术的网站大都也是这样。但是中国农业银行WEB程序中做了一点处理,通过鼠标点击软键盘传入密框的内容不是实际密码而是按钮序号,所以我们只要枚举当前窗口,发现是中国农业银行的网上银行页面时,我们的程序就自动截图发给我们,我们根据所截获得的图象和通过IE的COM接口所获得的序号伪密码之间的关系进行转换(抽象为一个简单的函数映射),很容易的。这样便获得了农行网上银行的密码。下面是截取中国建设银行网上银行密码的演示截图,利用动态软键盘的其他网站效果相同。如图3:(衍生:对付应用程序的部分软键盘可以运用HookTextOutW/A的类似屏幕取词的方法来截取。)
后记:
尽管网上银行等电子支付平台在密码防盗方面做了安全考虑,但是还是不够安全。不过大家也大可不必因此不使用网上银行,采取数字证书以及USBKey(比如U盾)等安全措施相对而言还是比较安全的。
【编辑推荐】
在网吧使网上银行业务安全吗
网上银行安全吗? 一般来说,只要采取了足够的安全措施,网上银行就是安全的。 安全措施是多层次全方位的。 例如,为了抵御黑客入侵,可以在网络系统中安装高性能的防火墙和入侵检测系统(IDS)。 为了防止不法分子诈骗可以采用强身份鉴别技术。 现在使用最多、最普遍的密码或口令措施是一种简单易用的身份识别手段,但是安全性比较低,容易泄露或被攻破。 更有效的方法是采用PKI技术设施,其核心就是使用数字证书认证机制。 可以这样讲,如果网上银行系统中采用了数字证书认证技术,不法分子即使窃取了卡号和密码,也无法在网上银行交易中实现诈骗。 近期一些不法分子盗用银行公开信箱骗取用户网上银行密码的事件引起了人们的广泛关注。
网上银行使用安全吗??
网民在支付宝支付时选择任一银行卡支付通道后立即进入银行网关,银行卡资料全部在银行网关加密页面上填写,无论是支付平台(包含支付宝)还是网站都无法看到或了解到任何银行卡资料。 网民输入卡资料提交过程全部采用国际通用的SSL或SET及数字证书进行加密传输,安全性由银行全面提供支持和保护,各银行网上支付系统对网上支付的安全提供保障。 银行和支付宝以及商家之间是通过数字签名和加密验证传送信息的,提供层层安全保护。
农行网银浏览器证安全性大吗
农行、交行网上银行采用UKey+密码方式用浏览器进行登录的,登录时不需要账户或别名,最大的安全隐患在于退出网银后,如果不全部关闭浏览器,只要再次进入网银,什么都不用输入就可以进入系统,进行转帐等操作。 经过测试发现主要原因在于证书的SSL状态保存在缓存中。 解决方法:在IE工具-〉InterNET选项-〉内容:将证书标签中的“清除 SSL 状态”按钮点击。 安全性差,建议决不能在除本机外其他地方如网吧使用农行、交行的网上银行。
如果感兴趣的话,可以做以下试验:先用UKey+密码方式用浏览器正常登录农行、交行的网上银行,再退出,拔掉UKey也可以不拔出,重新登录,原来需要登陆的对话框没有了,直接进入系统,可进行转帐等操作。切记:必须保留其他网页开着,不要全部关闭!
根据交行网上银行提示,在安装补丁后,情况有所改善。 安全起见,建议退出交行网上银行后,全部关闭浏览器,清空缓存。 农行没有改善。

安全性上招行好,工行、建行一般,交行较差,农行差。
结论:虽然各行有不同的安全机制保护用户帐户资金安全,但存在系统漏洞,银行应当及时搜集这些信息,不给非法分子可乘之机。
发表评论