「安全輸入框插件」能否有效地保護輸入數據
前言:
不少安全性較高的網站,會提供一個安全輸入框插件,用戶必須下載安裝后,才能輸入賬號口令等數據。例如各大網銀的登錄頁面,相信大家都見過。
下面我們來探討,這類安全插件對用戶輸入的數據,究竟能起到多大的保護效果。
對抗
稍了解編程的朋友都知道,用戶在安全框內輸入時,其他程序是無法通過簡單的技術手段,來截獲按鍵消息的。因為插件會從最底層的鍵盤驅動中取走消息,保障按鍵過程無法被輕易竊聽。
同時,也無法簡單地通過內存掃描等手段,獲取控件內部的數據。所以從系統攻防上,這類插件還是有一定保護效果的。
但是,攻擊者非得從系統攻防上進行對抗嗎?
繞過
我們先來聊一個其他話題。大家都知道 HTTPS 是難以破解的,但這并不意味它就是無懈可擊的。例如某些場合下,使用類似 SSLStrip 的工具,就能讓用戶進不了 HTTPS —— 我們雖然不能解決問題,但能回避問題。
類似的,對于安全輸入框,我們也可設法回避它。例如,支付寶曾經使用的登錄插件(幾年前的截圖):
從系統攻防的角度來看,它是管用的。惡意程序想通過按鍵竊聽口令,并不十分容易。至于想靠頁面中的 JS 來捕獲鍵盤事件,那更是天方夜譚。
然而事實上,用 JS 攻擊才是最容易、最可行的。并不是因為這個插件存在什么接口、暴露了什么隱私,而是,這里根本就用不著插件!
如果能運行 JS,我們只需簡單地刪除插件 DOM,然后通過 HTML 畫個相似的輸入框,就能釣到用戶口令了:)
$('.alieditContainer').html(
'<input type="password" style="width:100%; border:double 3px #ccc" />'
);
至于用戶無法正常登錄,我們并不用關心,反正我們已經拿到明文口令了 —— 雖然未必正確,但正確的可能性是很大的。另外,也不必每次都劫持,讓用戶仍能正常登陸。
更進一步,惡意代碼甚至可通過 API Hook 或是 MutationObserver 攔截安全控件的 DOM 創建。這樣,防護程序連運行的機會都沒有,更不用說風險掃描了。
由此看來,程序的安全等級,并不能只看權限的高低。啟動的先后順序,更是直接決定了生死。
如果某個惡意程序在系統攻防上并不突出,卻有注入 JS 到瀏覽器頁面的能力,同樣能繞過這類插件,直接獲取用戶的輸入信息。
結尾
所以光靠獨立的插件,并不能十分有效地保護輸入信息。還需結合優先級更高的系統服務共同防護,才能起到更好的效果。
當然,安全插件并不僅僅是為了提供輸入環境,還有讀取 USBkey、采集系統信息等更多操作。這些功能瀏覽器大多不支持,所以只能通過插件來實現 —— 既然有了插件,于是就干脆再加上輸入防護的功能,有防護總比沒有好吧。