深入了解惡意軟體如何濫用TeamViewer?
TeamViewer,遠程支持、遠程訪問、在線協作和會議,用於實現遠程支持、遠程訪問、遠程管理、家庭辦公及在線協作和會議功能的軟體。支持Windows、Mac、Linux、Chrome OS、iOS、Android、Windows Mobile和BlackBerry平台。
不幸的是,惡意軟體 TeamSpy也發現這個工具非常有利於用來進行惡意活動。惡意軟體 TeamSpy 是由遠程訪問工具 TeamViewer 和鍵盤記錄器等組件組成。攻擊者利用社會工程學誘騙受害者安裝TeamSpy,並通過 DLL 劫持技術進行隱藏,然後利用合法的遠程訪問工具 TeamViewer 執行未經授權的操作,從而從受害者的設備中竊取機密文檔和加密密鑰。
TeamSpy 早在 2013 年就被發現了,當時匈牙利 CrySyS 實驗室的研究人員和卡巴斯基實驗室發布了有關其操作的白皮書。 來自Heimdal Security的安全專家最近發現了TeamSpy出現了新的攻擊方式,該攻擊方式採用了一個有針對性的垃圾郵件活動,通過惡意程序來獲得目標計算機的完整控制權。
隱藏命令
在感染設備後,大多數惡意軟體會與命令和控制(C&C)伺服器進行通信,因為,C&C伺服器是發送惡意軟體執行命令的控制中心。 C&C伺服器也是惡意軟體收集數據的地方,在和C&C伺服器進行通信時,惡意軟體的開發者通常會實現一個自定義協議,但這樣,殺毒軟體就可以很容易地發現它與其他流量的不同,從而進行阻止。
於是,為了使殺毒軟體更加難以檢測到惡意行為,一些惡意軟體的開發者便想到利用流行的遠程控制程序(如TeamViewer),而不是利用其VPN網路,這樣就能起到更好地掩蓋其惡意軟體和C&C伺服器之間通信的作用。
TeamSpy如何進行感染
TeamSpy通過垃圾郵件傳播,旨在誘騙受害者打開附件。附件是一個帶有宏的Excel文件,打開附件後,將出現以下內容:
當攻擊目標啟用宏時,感染過程就會開始,這一切都會在後台完全運行,因此受害者不會發現任何攻擊徵兆。但如果讓安全人員來查看這些惡意宏,他們就可以看到經過混淆的字元串,這些經過修改的字元串通常會分割成一個或多個子串,這些子串最後又能被連接起來。最重要的信息,我在下圖已用紅色圈出來了,並且是一個鏈接,攻擊者可以通過這個鏈接下載攻擊程序以及稍後使用的密碼:
該鏈接disk.karelia.pro是用於上傳和共享文件的合法的俄羅斯服務,雖然下載的附件是PNG,但它實際上是一個EXE文件,更具體地說,它是一個受密碼保護的Inno安裝程序:
在innounp實用程序的幫助下,我可以輕鬆地從惡意軟體使用的Inno Setup安裝程序列出或提取文件。如下圖列所示,大多數文件都是常規的經過數字簽名的TeamViewer二進位文件,但兩個文件除外——msimg32.dll和tvr.cfg。 Tvr.cfg是TeamSpy的配置文件,稍後我會介紹,而msimg32.dll則是惡意軟體的一個組成部分。 Msimg32.dll是一個DLL庫,它是Windows操作系統的一部分。然而TeamSpy會濫用DLL搜索順序,以便將當前目錄中的假msimg32.dll載入到進程中,而不是從Windows / System32目錄中刪除原始msimg32.dll。惡意軟體本身就位於假的msimg32.dll庫中:
TeamSpy的隱藏過程
通常當你安裝TeamViewer時,會看到一個帶有ID和密碼的GUI窗口,但對於攻擊者來說,他們需要知道是否要遠程連接到攻擊目標的計算機:
如果TeamSpy成功感染了用戶,則不會顯示任何內容,因為所有操作都是在後台運行的,因此攻擊目標不會注意到安裝了TeamViewer。這是通過掛接許多API函數並改變其行為來實現的。 TeamSpy掛接了以下近50種不同的API:
kernel32.dll
CreateMutexW, CreateDirectoryW, CreateFileW, CreateProcessW, GetVolumeInformationW, GetDriveTypeW, GetCommandLineW, GetCommandLineA, GetStartupInfoA, MoveFileExW, CreateMutexA
user32.dll
SetWindowTextW, TrackPopupMenuEx, DrawTextExW, InvalidateRect, InvalidateRgn, RedrawWindow, SetWindowRgn, UpdateWindow, SetFocus, SetActiveWindow, SetForegroundWindow, MoveWindow, DialogBoxParamW, LoadIconW, SetWindowLongW, FindWindowW, SystemParametersInfoW, RegisterClassExW, CreateWindowExW, CreateDialogParamW, SetWindowPos, ShowWindow, GetLayeredWindowAttributes, SetLayeredWindowAttributes, IsWindowVisible, GetWindowRect, MessageBoxA, MessageBoxW
advapi32.dll
RegCreateKeyW, RegCreateKeyExW, RegOpenKeyExW, CreateProcessAsUserW, CreateProcessWithLogonW, CreateProcessWithTokenW, Shell_NotifyIconW, ShellExecuteW
iphlpapi.dll
GetAdaptersInfo
其中有一些掛接會阻止應用程序訪問某些特定資源,例如如果RegCreateKey或RegOpenKey嘗試訪問Software TeamViewer註冊表項,則會返回錯誤代碼ERROR_BADKEY:
掛接GetCommandLine使得TeamViewer認為它是以預定義的密碼開始的,而不是隨機生成的密碼,TeamViewer用戶通常可以通過添加命令行參數將此密碼設置為任意值:
掛接 SetWindowLayeredAttributes將TeamViewer窗口的不透明度設置為0(指令PUSH 0),根據MSDN文檔,該視圖的含義如下:「當bAlpha為0時,窗口是完全透明的。當bAlpha為255時,窗口是不透明的:
掛鉤CreateDialogParam會阻止一些惡意軟體創建不需要的對話框,用戶可以在文件TeamViewer_Resource_en.dll中查找這些對話框,它們以10075的數字引用,如下圖所示:
在ShowWindow的情況下,它定義了它自己的nCmdShow參數範圍4d2h-10e1h。如果其他值超過這個範圍,則不會發生任何進程:
其中最有趣的掛鉤便是CreateWindowEx API。通過一系列類名檢查,我發現它屬於TeamViewer聊天窗口的窗口和其他窗口控制項。在WinSpy ++等工具的幫助下,即使特定進程的所有窗口被隱藏,我們還是可以看到這些窗口的。從下圖可以看出,有一個ControlWin窗口,它有幾個TVWidgets。TvWidget是一個TV常用效果控制項,包括焦點、邊框處理等, 它有兩個ATL:????????文本編輯,一個用於聊天消息歷史,一個用於新的聊天消息,還有一個組合框,具有聊天參與者的下拉列表和按鈕發送。 「消息01」代表聊天中收到的消息,「消息02」代表在點擊「發送」按鈕後發送的消息。聊天窗口無法正常顯示,因為惡意軟體在後台運行,但是可以修復惡意軟體,從而不會發生隱藏窗口:
下面的代碼片段顯示了惡意軟體是如何獲取這些窗口控制項的句柄的, GetWindowLong,CallWindowProc,SetWindowLong與nIndex = GWL_PROC用自定義窗口過程替換了聊天歷史文本編輯窗口過程的舊地址:
自定義窗口過程會監聽傳入消息,並且基於窗口消息id,它會發送新消息或等待來自C&C伺服器的回復,直到EM_SETCHARFORMAT消息的出現。
下圖顯示了惡意軟體是如何發送新消息,惡意軟體首先將重點放在使用WM_SETFOCUS的新消息文本編輯中,然後通過WM_SETTEXT設置新消息編輯文本,最後通過發送BM_CLICK點擊「發送」按鈕:
上述50個API中的大多數都使用了類似的修改,其中有一些補丁很簡單,只有幾個指令,單還有一些補丁是非常複雜的,如CreateWindowEx。我不會在這裡一一列舉,但是最終的結果表明,TeamViewer的窗口是絕不會讓受害者看見的,它只存在與系統的後台。
TeamSpy的配置文件
TeamSpy的配置存儲在tvr.cfg文件中,它使用簡單的自定義加密演算法,可以在下圖中看到。它讀取輸入文件並使用密碼「TeamViewer」,該演算法運行兩個計數器,cnt1(0.v.tvr.cfg中的位元組數)和cnt2(0..length的密碼)。它需要一個來自密碼的位元組,加上乘法cnt1 * cnt2的結果。這些密碼會通過異或,產生一個字元,並且在循環結束時,它與來自配置文件的相應位元組進行異或,配置文件中的所有位元組都重複這些步驟:
解密的配置文件可以在下圖中看到,參數的名稱大多是自我說明的。對我來說最重要的是密碼(受感染的機器具有密碼「superpass」)和server1,其中感染的設備ID已過濾了:
受感染的設備和C&C伺服器之間的通信是在感染過程開始後才建立的,之後便會定期發送以下請求,大多數參數的名稱可以清楚地推導出來:
id = TeamViewer ID,網路犯罪分子需要這個id,它與密碼一起就足以遠程連接到受感染的計算機
tout = timeoutidl =空閑時間osbt = 32bit / 64bitosv = OS版本osbd = OS構建版本
ossp = service packtvrv = TeamViewer版本uname =用戶名cname =計算機名稱vpn =有TeamViewer vpnavr =防病毒解決方案
當我在網路瀏覽器中打開C&C伺服器時,就可以看到登錄頁面。
通信插件
受感染的計算機是通過TeamViewer控制的,攻擊者可以連接到遠程計算機,因為他們已經知道了TeamViewer的ID和密碼,或者他們可以通過TeamViewer聊天發送命令,這樣就可以在受感染的機器上做任何事情。通過TeamViewer聊天的通信可以實現基本的後門功能:applist,wcmd,ver,os,vpn,locale,time,webcam,genid。在TeamSpy代碼中,這些命令與它們的crc32校驗和進行比較,所以很容易發生衝突。因為crc32(wcmd)= 07B182EB = crc32(aacvqdz),這兩個命令都是可互換的:
攻擊者使用TeamViewer的合法VPN加密流量,使其與合法的TeamViewer流量無法區分。一旦設備受到感染,他們就可以完全訪問計算機。他們可以竊取和滲透敏感數據,下載和執行任意程序等等。
不得不說,濫用合法應用程序是一個聰明的技術,因為並不是每個用戶都會檢查所有DLL庫在同一目錄的合法性。檢查主可執行文件的簽名沒有顯示任何可疑的內容,可能讓受害者認為一切都是正常的。詳細情況,請參考下面的main_w32.exe文件的數字簽名,這個文件就不是惡意的。
安全專家發現,目前除了TeamSpy外,已有越來越多的惡意軟體類開始濫用TeamViewer。
本文翻譯自:A deeper look into malware abusing TeamViewer ,如若轉載,請註明來源於嘶吼:t深入了解惡意軟體如何濫用TeamViewer? 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※Android是否存在網路注入攻擊?
※收集下股災期間知乎上看空和看多的理財達人,默默等待時間給出答案?
※Windows惡意軟體API調用特徵分析
※如何使用SilentCleanup繞過UAC?
※20150930節前最後一個交易日市場如何看?
TAG:技术分析 |