爬虫应对银行安全控件
背景
之前有個業務需求,抓取用戶在銀行的個人信息(經授權)。但由于安全控件的原因,程序在密碼框無法輸入,導致無法抓取。
銀行流水,對網貸平臺而言這是非常重要的征信數據。我所知道的,就有好些爬蟲在為安全控件的問題頭疼,甚至有專門的外包,尋求解決方案。
我做過各種檢索和嘗試,發現大部分方法都是無效的。但銀行征信數據的采集,確實有些平臺在做,那就說明這個問題能破,那也就沒什么好擔心的了,靜下心一點一點來。
本文分享一些相關資料,但不便公開具體解決方案。想必對很多人而言也算是一個福利貼了。
先上幾篇論文。
- 《鍵盤輸入安全研究》(鏈接: https://pan.baidu.com/s/1Vu4k7EkCz3LkI0ulvkopMg 密碼: p7fa)
- 《銀行網上支付發展研究》(鏈接: https://pan.baidu.com/s/1dLK_v2UW-oNEHfEnF-yY5Q 密碼: qmy9)
- 《驅動掛載對網銀的入侵以及相應的防御方式》(鏈接: https://pan.baidu.com/s/1w1J0KRQWMPVJOMEoKxKghg 密碼: iyry)
- 《基于WDM的多功能鼠標和鍵盤驅動的設計與實現》(鏈接: https://pan.baidu.com/s/1ED3NQZRpsdzwxvCzgJiovw 密碼: shf7)
正文
我的嘗試
尋求原因
以上為熱身動作,開始吧。先搜索鍵盤輸入一個按鍵的傳遞流程,再搜索安全控件的功能(目的)和實現原理。
百度 谷歌很容易搜得到的,我就不說了。下面提一些比較關鍵的內容。
Windows 操作系統中,PS/2 鍵盤輸入信息的傳遞流程如下:
1)用戶敲擊按鍵,一個按鍵被按下時,鍵盤發送相應的電信號到計算機主板上的鍵盤控制器(i8042);
2)鍵盤控制器告知CPU有鍵按下,同時將按鍵信息以鍵盤掃描碼的形式寫到鍵盤 I/O 接口(其中 0x60 端口保存按鍵掃描碼,0x64 端口記錄鍵盤控制器的狀態),并產生終端請求IRQ1;
3)操作系統根據 IOAPIC 重定位表查到 IRQ1 所對應的中斷號(正常情況為0x93),在根據中斷向量表(IDT)查得這一中斷對應的中斷處理函數的地址,調用中斷處理程序(ISR)進行處理;ISR 讀出 0x60 端口的鍵盤掃描碼,將之轉換成系統掃描碼,封裝包含按鍵信息的 IO 請求包(IRP),將 IRP 發往鍵盤端口驅動(PS/2 鍵盤的端口驅動為 i8042 prt.sys);
4)鍵盤端口驅動將按鍵信息發往鍵盤類驅動(Kdbclass.sys,所有類型鍵盤通用);
5)鍵盤類驅動將按鍵信息封裝到系統消息中發往 csrss.exe,按鍵信息首先被保存到系統消息隊列中;
6)csrss.exe 將按鍵信息分發到各個應用程序的線程消息隊列;
7)焦點窗口所屬的程序從線程消息隊列中讀取被轉為 ASCII 碼(如果需要,還需要經過輸入法編輯器 IME 的處理)的按鍵信息,并調用 use32.dll 更新用戶界面。
(摘自2013年《鍵盤輸入安全研究》)
以上,可以很清晰的看到 PS/2 類型鍵盤的傳遞流程。而銀行的安全控件,應該是從第2層拿了端口數據進行加密。對于這種情況,我們只需要查詢所要輸入字符的鍵盤掃描碼,發送到60/64端口即可。事實上我們網上搜到的大部分“驅動級模擬鍵盤輸入”,都是這種。
然而,這是對于 PS/2 這種鍵盤而言的。可是目前只有筆記本和部分老臺式機才保留有 PS/2 ,現在主流的服務器都是只接受 USB 鍵盤的。所以向端口發送鍵盤掃描碼這種方式并不好用。
來,再來看一下安全控件的原理。
如上圖所示,AcitveX 安全控件的防護原理如下:
1、 當用戶將輸入焦點定位到安全控件上,準備進行口令輸入時,激活相應安全控件。
2、用戶通過敲擊鍵盤上的字符,產生相應的電信號。觸動操作系統的相應的中斷 IRQ。
3、操作系統調用鍵盤驅動解釋相應電信號所代表的字符,并進行相應的數據加密。將驅動解釋出來的字符發送到操作系統消息隊列中。
4、安全控件將接收到的密文保存在控件內的私密控件中,然后在界面上顯示星號(*),并且停止字符的繼續傳播。
5、當用戶點擊網頁上的登錄提交按鈕時,安全控件中被通知執行提交動作。安全控件動態將已加密的口令內容添加到頁面中要提交的表單中,然后提交表單。
6、IE 將表單中的數據通過 HTTPS 通道傳送到服務器,進行相應的處理工作。
依靠微軟的驅動,先于用戶態下和核心態上層的病毒和木馬程序(如 hook 和篡改 SSDT、系統服務 API)獲取到鍵盤輸入,以杜絕病毒和木馬程序獲取到鍵盤輸入。。。
摘自論文《銀行網上支付發展研究》,張春鶴,2010年。
嗯,難怪我用系統 API 和 hook 都無效,原來安全控件在之前就已經把數據加密了。了解安全控件在哪里加密,那我們在它之前來模擬就好了。3、操作系統調用鍵盤驅動解釋相應電信號所代表的字符,并進行相應的數據加密。Windows系統自帶鍵盤驅動,供標準USB鍵盤使用。但有些特殊的像游戲鍵盤,經常會編寫自己的鍵盤驅動,我們可以找相關的開發資料。另外,有些游戲對鼠標鍵盤的輸入要求高響應,經常會像安全控件的做法那樣,直接讀驅動解釋出來的數據。我們只需要找相應的外掛程序,也能作一些參考。
《驅動掛載對網銀的入侵以及相應的防御方式》中,就是通過驅動掛載監控到密碼的輸入。然而攻防是個博弈的過程,兩者都不斷在發展,技術不斷更新。。
結語
本文純屬瞎扯淡,我只是做了一些技術上的分享,我可沒有慫恿你去爬銀行數據哦。
題外話
近日群里都在說去年的一個裁判文書,爬蟲被告,法人坐牢一年。
嗯,又一個爬蟲案。
咋說呢,天眼查廣告都做到地鐵里了,大大一墻廣告忒威風;征信數據的同步服務,一條就是幾毛到幾元不等,這油水,這數據。。
咋說呢,爬蟲工程師不應該僅限于爬蟲,可以搞搞安全,玩玩大數據。現如今大家都在互相爬,一起爬,一份數據100個人大家一人爬一遍,何必呢。。
總結
以上是生活随笔為你收集整理的爬虫应对银行安全控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL查询(嵌套查询)
- 下一篇: 再思人机智能融合