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 = timeout
idl =空閑時間
osbt = 32bit / 64bit
osv = OS版本
osbd = OS構建版本
ossp = service pack
tvrv = TeamViewer版本
uname =用戶名
cname =計算機名稱
vpn =有TeamViewer vpn
avr =防病毒解決方案
當我在網絡瀏覽器中打開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。
|