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