惡意軟件通過鼠標功能逃避檢測
惡意軟件開發者繼續部署“聰明的”防護程序,這些程序通過隱藏在操作系統例程后面來躲避自動檢測,但與此同時,惡意軟件用于保持隱蔽的相同方法也可能用于標記出惡意代碼。
賽門鐵克研究人員最近發現了一種遠程訪問木馬(RAT),這種木馬能夠通過隱藏在與外部設備(例如鼠標)通信的例程背后來逃避檢測,它能夠逃避檢測是因為:當鼠標不使用時,惡意代碼保持非活動狀態,這樣就能夠逃避虛擬環境中動態分析系統的檢查。
賽門鐵克的Hiroshi Shinotsuka寫道:“如果惡意軟件能夠躲過自動威脅分析系統的檢查,它就可以混在數百萬的示例文件中,這樣防病毒應用將無法發現它是惡意軟件。因此,惡意軟件和包裝程序作者都試圖利用這種技術,來使惡意文件逃避自動威脅分析系統的檢測。”
Shinotsuka解釋說,此類型惡意軟件逃避檢測能力的關鍵在于利用系統范圍內的“掛鉤”,即消息處理機制,該機制允許鼠標驅動程序等應用安裝一個子例程來監測等待被激活的系統消息流量。賽門鐵克發現的這個惡意軟件利用了一個“等待掛鉤”,在使用鼠標導致的激活之前,它都保持休眠狀態。
KNOS項目聯合創始人兼架構師Kevin McAleavey表示:“問題是,惡意軟件開發者利用各種系統“掛鉤”已經多年,動態分析系統應該早就設計好彌補這個威脅檢測中的盲點。賽門鐵克所指的系統范圍內的掛鉤早已過時,自動分析系統早就應該進行檢測,同時檢測合法程序試圖對任何掛鉤的使用。”自1996年以來,McAleavey就一直活躍在反惡意軟件研究和安全產品開發。
這個問題歸結到底是人力資源的問題。由于每天平均出現一百萬個新惡意軟件變種,我們不可能手動檢查每個樣本的功能以評估哪個樣本應該被放入防病毒軟件進行分析,所以,我們需要自動化威脅分析系統來以更有效地方式來分析代碼行為。
由于自動檢測可能無法識別像賽門鐵克發現的RAT這樣的惡意軟件,McAleavey認為,任何使用“掛鉤”的應用都應該被標記,并進行手動分析,但目前殺毒行業已經不堪重負,具有惡意軟件分析專業技能的人員十分短缺,他們根本沒有時間來手動分析這些代碼,因此這不可能實現。
微軟公開發布的MSDN文檔中詳細地列明了各種“可掛鉤”Windows事件。例如,McAleavey指出了有“等待掛鉤”的各種事件,惡意軟件設計者可以用它們中任何一個激活以下代碼:
◆WH_CALLWNDPROC -等待特定消息從一個窗口傳遞到另一個窗口
◆WH_CBT –這很過時了,它支持“計算機輔助培訓”,并被用于擊鍵記錄/回放宏
◆WH_GETMESSAGE –檢索鼠標、鍵盤或者任何其他系統輸入
◆WH_KEYBOARD –鍵盤掛鉤,鍵盤記錄器的首選攻擊因子
◆ WH_MOUSE –鼠標掛鉤,賽門鐵克指的就是這個
◆WH_MSGFILTER –檢測對按鈕、菜單或者其他Windows功能的觸動
◆WH_DEBUG –可能觸發調試器的任何溢出
McAleavey解釋說,上面列出“掛鉤”函數只是少數可供利用的“調試”函數,例如能夠檢測機器是否在虛擬模式下運行,檢查防病毒軟件是否為了檢測插入其自己的掛鉤,以及是否徹底檢測到轉移程序到獨立的惡意DLL以控制病毒感染。WH_DEBUG掛鉤控制對所有對其他WH掛鉤的訪問,并能中斷任何其他掛鉤,(例如)檢查這些掛鉤是否應該繼續或者采取其他行動來取代原有函數。這也是惡意軟件如何檢測防病毒軟件是否正在監控其他掛鉤,如果是這樣的話,就能夠逃避檢測。
McAleavey認為微軟調試函數的問題出現在零售版本的操作系統中。微軟已經提供了其所有操作系統的開發者版本,其中包含大量調試功能和調試符號以用于為Windows平臺編寫軟件,所以這些函數不必出現在零售版本中。結果是,微軟的調試函數總是被惡意軟件用來隱藏自己。分析師做的第一件事情是檢查任何樣本的函數調用,以檢測是否有任何調試調用,然后仔細地跟蹤它們。讓我非常驚訝的是,自動系統沒有對另一個調試調用做出任何標記。”
由于每個調試功能都是被枚舉,并列在所有可執行文件中,任何自動系統應該可以很容易地在提交的樣本中發現它們的存在并采取行動。對程序中調試掛鉤的任何調用都會讓調用在程序本身中變得可見,所以任何自動分析系統都可能發現對SetWindowsHookEx的調用,并標記它以進一步分析。這些調用沒有隱藏,它們在被分析的樣本中,因此,所有自動系統需要做的是,在掃描文件時匹配字符。
McAleavey說:“我們長久以來忽略它們的存在,這似乎有些違反常識。在沒有特定理由的情況下,合法軟件不應該會進行這種調試呼叫,當檢測到這種函數時,應該立即對未知可執行文件進行標記,直到證明其‘清白’之前,都應該保持標記。”