前言:
本文還是去年年初寫的,當時出于安全考慮沒放出來,F在部分網上銀行已大幅度降低了無高級別安全措施情況下的轉賬限額,并建議用戶使用動態口令卡或者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盾)等安全措施相對而言還是比較安全的。
|