压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

Javascript間諜腳本分析:Web惡意程序Scanbox源碼分析與演示

  背景

  “ScanBox相當危險,它只需在web瀏覽器上執(zhí)行Javascript代碼即可啟動鍵盤記錄竊聽,不需要在你的計算機上植入任何惡意程序即可盜取主機信息。”

  —— Chris Doman and Tom Lancaster (普華永道)

  這份名為Scanbox的惡意代碼是具有信息收集和鍵盤記錄等間諜功能的Javascript惡意腳本,適用于IE瀏覽器。Scanbox具有收集主機基本信息、獲取主機安裝的應用程序、獲取Flash版本、獲取Office版本、驗證Adobe Reader和鍵盤記錄等功能。

  后文將對每一種功能源代碼如何實現進行分析。順便吐槽一下,國內也有不少科技網站對其進行了轉載報道,但鮮有針對源碼進行分析解讀,筆者最終在國外安全人員的個人博客中發(fā)現了這份不太完整的(817 lines)源代碼。

  程序框架

  首先看下Scanbox腳本的程序框架

  當惡意腳本被插入到網站頁面進而被用戶訪問時,腳本被瀏覽器本地解析,程序流程可抽象成【圖1】所示幾個模塊。

  收集基本信息

  中scanbox.info對象記錄包括當前頁面頭部的一些基本信息,同時也包含屏幕分辨率、操作系統(tǒng)、語言等主機信息。

  加密模塊

  這個沒什么好說的,沒有引入Base64類庫,所以用原生JS實現的Base64編碼。

  通信模塊

  通信模塊是通過兩個函數實現的,一個是get函數,一個是post函數,也就是http請求的常用方法,實現將竊取的信息回傳給攻擊者后臺的服務器。get函數是創(chuàng)建一個image對象,通過設置src屬性實現get請求;post函數是創(chuàng)建一個form表單,通過設置input元素,加密后調用submit()提交實現post。這也是Javascript實現與后臺通信的方便之處。

  報活模塊

  同樣利用image對象采用GET方式向后臺傳遞數據,數據傳輸前使用加密模塊(Base64)加密。通過setInterval函數設置定時器,以一定時間間隔向服務器報活。

  插件集合

  第1號(pluginid=1)插件的功能是獲取操作系統(tǒng)安裝的軟件列表,方法是通過res://協(xié)議。res協(xié)議是IE瀏覽器預定義的協(xié)議,可以分析所有符合Win32 PE格式的文件的資源文件。

  上圖是通過PE文件查看工具ResourceEditor查看explorer.exe的位圖資源文件,然而這種功能利用IE瀏覽器也能實現,如下:

  進而可以利用創(chuàng)建image對象,將image對象的src屬性設置為通過res協(xié)議訪問某個特定PE文件的資源文件的URL,再利用image的onload和onerror事件判斷image對象是否成功加載,等效于判斷image對象的src屬性對應的res協(xié)議是否訪問成功,從而判斷某個特定應用程序是否安裝在受害者主機。如下圖:

  但Scanbox并不是采用這種方式進行判斷的,而是創(chuàng)建ActiveXObject(“Microsoft.XMLDOM”)對象,解析XML文檔中的res協(xié)議實現的。下圖中調用validateXML函數前構造的XML格式串如紅色標記:

  接下來調用validateXML進行驗證,原理是創(chuàng)建ActiveXObject對象解析。通過對錯誤碼特征的匹配來判斷XML文檔中利用res協(xié)議訪問的PE文件是否存在,進而判斷主機是否安裝特定的應用程序。

  下圖為Scanbox源碼中枚舉的應用程序列表的一部分,可以發(fā)現Scanbox重點關注主機是否安裝安全防護類軟件,為后期進一步實施攻擊收集了重要信息。

  第3號(pluginid=3)插件的功能是判斷Flash版本信息,原理是調用ActiveXObject()與flash相關的對象,從而獲取flash版本。

  第5號(pluginid=5)插件的功能是獲取Office版本信息,原理同上也是創(chuàng)建ActiveXObject對象,獲取版本號

  第6號(pluginid=6)插件的功能是判斷是否安裝AdobeReader,原理同上

  這份不完整的Scanbox源碼中并沒有找到監(jiān)聽鍵盤敲擊的記錄,但網上報道的重點多在于此,無奈筆者根據Scanbox中插件調用的模式自行補充了鍵盤記錄模塊。其實用Javascript實現鍵盤記錄網上已有成形的代碼,而且實現方法都是一致的,就是利用document.onkeydown和document.onkeypress兩個事件,如下:

  這里只介紹了目前能發(fā)現的Scanbox源碼中的插件,不過從插件的編號來看,還有不少插件并沒有出現在這份源碼中,因此筆者只能分析至此。

  腳本實測

  如果網站頁面存在存儲式XSS漏洞,或者通過其它滲透手段將Scanbox植入含有登陸框的頁面進而被用戶訪問加載執(zhí)行就會造成很嚴重的后果。用戶登錄時輸入的密碼都會隨著鍵盤監(jiān)聽模塊的記錄而回傳給攻擊者后臺,而且是明文的。

  筆者在后端寫了幾個簡單的PHP腳本作為Scanbox回傳數據的目標,解碼Base64后將鍵盤記錄保存在本地txt文件中。

  結束語

  總的來看,Scanbox作為一款客戶端解析的惡意腳本,其攻擊效果受瀏覽器安全配置的制約,但這并不影響其強大的功能和導致的嚴重后果。如果被攻擊者利用得當,配合存儲式XSS漏洞實施水坑式(Watering Hole)攻擊,監(jiān)聽用戶登錄時輸入的用戶名和密碼,將會對用戶隱私及財產造成不可估量的風險。

 

上一篇:智能無懼挑戰(zhàn) 山石網科轟動RSA2015

下一篇:絲綢之路重生:網絡黑市Silk Road Reloaded誕生