TeamViewer,遠(yuǎn)程支持、遠(yuǎn)程訪問、在線協(xié)作和會(huì)議,用于實(shí)現(xiàn)遠(yuǎn)程支持、遠(yuǎn)程訪問、遠(yuǎn)程管理、家庭辦公及在線協(xié)作和會(huì)議功能的軟件。支持Windows、Mac、Linux、Chrome OS、iOS、Android、Windows Mobile和BlackBerry平臺(tái)。不幸的是,惡意軟件 TeamSpy也發(fā)現(xiàn)這個(gè)工具非常有利于用來進(jìn)行惡意活動(dòng)。惡意軟件 TeamSpy 是由遠(yuǎn)程訪問工具 TeamViewer 和鍵盤記錄器等組件組成。攻擊者利用社會(huì)工程學(xué)誘騙受害者安裝TeamSpy,并通過 DLL 劫持技術(shù)進(jìn)行隱藏,然后利用合法的遠(yuǎn)程訪問工具 TeamViewer 執(zhí)行未經(jīng)授權(quán)的操作,從而從受害者的設(shè)備中竊取機(jī)密文檔和加密密鑰。TeamSpy 早在 2013 年就被發(fā)現(xiàn)了,當(dāng)時(shí)匈牙利 CrySyS 實(shí)驗(yàn)室的研究人員和卡巴斯基實(shí)驗(yàn)室發(fā)布了有關(guān)其操作的白皮書。 來自Heimdal Security的安全專家最近發(fā)現(xiàn)了TeamSpy出現(xiàn)了新的攻擊方式,該攻擊方式采用了一個(gè)有針對(duì)性的垃圾郵件活動(dòng),通過惡意程序來獲得目標(biāo)計(jì)算機(jī)的完整控制權(quán)。
隱藏命令
在感染設(shè)備后,大多數(shù)惡意軟件會(huì)與命令和控制(C&C)服務(wù)器進(jìn)行通信,因?yàn),C&C服務(wù)器是發(fā)送惡意軟件執(zhí)行命令的控制中心。 C&C服務(wù)器也是惡意軟件收集數(shù)據(jù)的地方,在和C&C服務(wù)器進(jìn)行通信時(shí),惡意軟件的開發(fā)者通常會(huì)實(shí)現(xiàn)一個(gè)自定義協(xié)議,但這樣,殺毒軟件就可以很容易地發(fā)現(xiàn)它與其他流量的不同,從而進(jìn)行阻止。于是,為了使殺毒軟件更加難以檢測到惡意行為,一些惡意軟件的開發(fā)者便想到利用流行的遠(yuǎn)程控制程序(如TeamViewer),而不是利用其VPN網(wǎng)絡(luò),這樣就能起到更好地掩蓋其惡意軟件和C&C服務(wù)器之間通信的作用。
TeamSpy如何進(jìn)行感染
TeamSpy通過垃圾郵件傳播,旨在誘騙受害者打開附件。附件是一個(gè)帶有宏的Excel文件,打開附件后,將出現(xiàn)以下內(nèi)容:
當(dāng)攻擊目標(biāo)啟用宏時(shí),感染過程就會(huì)開始,這一切都會(huì)在后臺(tái)完全運(yùn)行,因此受害者不會(huì)發(fā)現(xiàn)任何攻擊征兆。但如果讓安全人員來查看這些惡意宏,他們就可以看到經(jīng)過混淆的字符串,這些經(jīng)過修改的字符串通常會(huì)分割成一個(gè)或多個(gè)子串,這些子串最后又能被連接起來。最重要的信息,我在下圖已用紅色圈出來了,并且是一個(gè)鏈接,攻擊者可以通過這個(gè)鏈接下載攻擊程序以及稍后使用的密碼:
該鏈接disk.karelia.pro是用于上傳和共享文件的合法的俄羅斯服務(wù),雖然下載的附件是PNG,但它實(shí)際上是一個(gè)EXE文件,更具體地說,它是一個(gè)受密碼保護(hù)的Inno安裝程序:
在innounp實(shí)用程序的幫助下,我可以輕松地從惡意軟件使用的Inno Setup安裝程序列出或提取文件。如下圖列所示,大多數(shù)文件都是常規(guī)的經(jīng)過數(shù)字簽名的TeamViewer二進(jìn)制文件,但兩個(gè)文件除外——msimg32.dll和tvr.cfg。 Tvr.cfg是TeamSpy的配置文件,稍后我會(huì)介紹,而msimg32.dll則是惡意軟件的一個(gè)組成部分。 Msimg32.dll是一個(gè)DLL庫,它是Windows操作系統(tǒng)的一部分。然而TeamSpy會(huì)濫用DLL搜索順序,以便將當(dāng)前目錄中的假msimg32.dll加載到進(jìn)程中,而不是從Windows / System32目錄中刪除原始msimg32.dll。惡意軟件本身就位于假的msimg32.dll庫中:
TeamSpy的隱藏過程通常當(dāng)你安裝TeamViewer時(shí),會(huì)看到一個(gè)帶有ID和密碼的GUI窗口,但對(duì)于攻擊者來說,他們需要知道是否要遠(yuǎn)程連接到攻擊目標(biāo)的計(jì)算機(jī):
如果TeamSpy成功感染了用戶,則不會(huì)顯示任何內(nèi)容,因?yàn)樗胁僮鞫际窃诤笈_(tái)運(yùn)行的,因此攻擊目標(biāo)不會(huì)注意到安裝了TeamViewer。這是通過掛接許多API函數(shù)并改變其行為來實(shí)現(xiàn)的。 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
其中有一些掛接會(huì)阻止應(yīng)用程序訪問某些特定資源,例如如果RegCreateKey或RegOpenKey嘗試訪問Software TeamViewer注冊(cè)表項(xiàng),則會(huì)返回錯(cuò)誤代碼ERROR_BADKEY:
掛接GetCommandLine使得TeamViewer認(rèn)為它是以預(yù)定義的密碼開始的,而不是隨機(jī)生成的密碼,TeamViewer用戶通?梢酝ㄟ^添加命令行參數(shù)將此密碼設(shè)置為任意值:
掛接 SetWindowLayeredAttributes將TeamViewer窗口的不透明度設(shè)置為0(指令PUSH 0),根據(jù)MSDN文檔,該視圖的含義如下:“當(dāng)bAlpha為0時(shí),窗口是完全透明的。當(dāng)bAlpha為255時(shí),窗口是不透明的:
掛鉤CreateDialogParam會(huì)阻止一些惡意軟件創(chuàng)建不需要的對(duì)話框,用戶可以在文件TeamViewer_Resource_en.dll中查找這些對(duì)話框,它們以10075的數(shù)字引用,如下圖所示:
在ShowWindow的情況下,它定義了它自己的nCmdShow參數(shù)范圍4d2h-10e1h。如果其他值超過這個(gè)范圍,則不會(huì)發(fā)生任何進(jìn)程:
其中最有趣的掛鉤便是CreateWindowEx API。通過一系列類名檢查,我發(fā)現(xiàn)它屬于TeamViewer聊天窗口的窗口和其他窗口控件。在WinSpy ++等工具的幫助下,即使特定進(jìn)程的所有窗口被隱藏,我們還是可以看到這些窗口的。從下圖可以看出,有一個(gè)ControlWin窗口,它有幾個(gè)TVWidgets。TvWidget是一個(gè)TV常用效果控件,包括焦點(diǎn)、邊框處理等, 它有兩個(gè)ATL:????????文本編輯,一個(gè)用于聊天消息歷史,一個(gè)用于新的聊天消息,還有一個(gè)組合框,具有聊天參與者的下拉列表和按鈕發(fā)送。 “消息01”代表聊天中收到的消息,“消息02”代表在點(diǎn)擊“發(fā)送”按鈕后發(fā)送的消息。聊天窗口無法正常顯示,因?yàn)閻阂廛浖诤笈_(tái)運(yùn)行,但是可以修復(fù)惡意軟件,從而不會(huì)發(fā)生隱藏窗口:
下面的代碼片段顯示了惡意軟件是如何獲取這些窗口控件的句柄的, GetWindowLong,CallWindowProc,SetWindowLong與nIndex = GWL_PROC用自定義窗口過程替換了聊天歷史文本編輯窗口過程的舊地址:
自定義窗口過程會(huì)監(jiān)聽傳入消息,并且基于窗口消息id,它會(huì)發(fā)送新消息或等待來自C&C服務(wù)器的回復(fù),直到EM_SETCHARFORMAT消息的出現(xiàn)。下圖顯示了惡意軟件是如何發(fā)送新消息,惡意軟件首先將重點(diǎn)放在使用WM_SETFOCUS的新消息文本編輯中,然后通過WM_SETTEXT設(shè)置新消息編輯文本,最后通過發(fā)送BM_CLICK點(diǎn)擊“發(fā)送”按鈕:
上述50個(gè)API中的大多數(shù)都使用了類似的修改,其中有一些補(bǔ)丁很簡單,只有幾個(gè)指令,單還有一些補(bǔ)丁是非常復(fù)雜的,如CreateWindowEx。我不會(huì)在這里一一列舉,但是最終的結(jié)果表明,TeamViewer的窗口是絕不會(huì)讓受害者看見的,它只存在與系統(tǒng)的后臺(tái)。
TeamSpy的配置文件
TeamSpy的配置存儲(chǔ)在tvr.cfg文件中,它使用簡單的自定義加密算法,可以在下圖中看到。它讀取輸入文件并使用密碼“TeamViewer”,該算法運(yùn)行兩個(gè)計(jì)數(shù)器,cnt1(0.v.tvr.cfg中的字節(jié)數(shù))和cnt2(0..length的密碼)。它需要一個(gè)來自密碼的字節(jié),加上乘法cnt1 * cnt2的結(jié)果。這些密碼會(huì)通過異或,產(chǎn)生一個(gè)字符,并且在循環(huán)結(jié)束時(shí),它與來自配置文件的相應(yīng)字節(jié)進(jìn)行異或,配置文件中的所有字節(jié)都重復(fù)這些步驟:
解密的配置文件可以在下圖中看到,參數(shù)的名稱大多是自我說明的。對(duì)我來說最重要的是密碼(受感染的機(jī)器具有密碼“superpass”)和server1,其中感染的設(shè)備ID已過濾了:
受感染的設(shè)備和C&C服務(wù)器之間的通信是在感染過程開始后才建立的,之后便會(huì)定期發(fā)送以下請(qǐng)求,大多數(shù)參數(shù)的名稱可以清楚地推導(dǎo)出來:
id = TeamViewer ID,網(wǎng)絡(luò)犯罪分子需要這個(gè)id,它與密碼一起就足以遠(yuǎn)程連接到受感染的計(jì)算機(jī)
tout = timeout
idl =空閑時(shí)間
osbt = 32bit / 64bit
osv = OS版本
osbd = OS構(gòu)建版本
ossp = service pack
tvrv = TeamViewer版本
uname =用戶名
cname =計(jì)算機(jī)名稱
vpn =有TeamViewer vpn
avr =防病毒解決方案
當(dāng)我在網(wǎng)絡(luò)瀏覽器中打開C&C服務(wù)器時(shí),就可以看到登錄頁面。
通信插件
受感染的計(jì)算機(jī)是通過TeamViewer控制的,攻擊者可以連接到遠(yuǎn)程計(jì)算機(jī),因?yàn)樗麄円呀?jīng)知道了TeamViewer的ID和密碼,或者他們可以通過TeamViewer聊天發(fā)送命令,這樣就可以在受感染的機(jī)器上做任何事情。通過TeamViewer聊天的通信可以實(shí)現(xiàn)基本的后門功能:applist,wcmd,ver,os,vpn,locale,time,webcam,genid。在TeamSpy代碼中,這些命令與它們的crc32校驗(yàn)和進(jìn)行比較,所以很容易發(fā)生沖突。因?yàn)閏rc32(wcmd)= 07B182EB = crc32(aacvqdz),這兩個(gè)命令都是可互換的:
攻擊者使用TeamViewer的合法VPN加密流量,使其與合法的TeamViewer流量無法區(qū)分。一旦設(shè)備受到感染,他們就可以完全訪問計(jì)算機(jī)。他們可以竊取和滲透敏感數(shù)據(jù),下載和執(zhí)行任意程序等等。不得不說,濫用合法應(yīng)用程序是一個(gè)聰明的技術(shù),因?yàn)椴⒉皇敲總(gè)用戶都會(huì)檢查所有DLL庫在同一目錄的合法性。檢查主可執(zhí)行文件的簽名沒有顯示任何可疑的內(nèi)容,可能讓受害者認(rèn)為一切都是正常的。詳細(xì)情況,請(qǐng)參考下面的main_w32.exe文件的數(shù)字簽名,這個(gè)文件就不是惡意的。
安全專家發(fā)現(xiàn),目前除了TeamSpy外,已有越來越多的惡意軟件類開始濫用TeamViewer。
|