惡意軟件常用的感染技術(shù)
惡意軟件常用的感染技術(shù)。通過(guò)“橫向運(yùn)動(dòng)”,惡意軟件可以進(jìn)一步擴(kuò)大其戰(zhàn)果:從原始受感染設(shè)備傳播到同一網(wǎng)絡(luò)內(nèi)的其他設(shè)備。
最近,勒索軟件已經(jīng)開(kāi)始使用這種傳播方式:包括CryptoWall [1]、CryptoFortess [2]、DMA-Locker [3]和CryptoLuck [4]在內(nèi)的許多著名的勒索軟件家族,不僅對(duì)受害者機(jī)器上的文件進(jìn)行加密,而且對(duì)已經(jīng)映射和未映射的文件共享進(jìn)行了"橫向運(yùn)動(dòng)", 對(duì)這些共享中的文件進(jìn)行加密,從而造成更大的危害。當(dāng)然,對(duì)于許多針對(duì)性和非針對(duì)性攻擊中使用的惡意軟件來(lái)說(shuō),也有許多會(huì)進(jìn)行"橫向運(yùn)動(dòng)"的。
本文將為讀者深入介紹惡意軟件最常見(jiàn)的傳播技術(shù),其中包括網(wǎng)絡(luò)內(nèi)部傳播技術(shù)和網(wǎng)絡(luò)間傳播技術(shù)。
橫向運(yùn)動(dòng)至未映射的驅(qū)動(dòng)器
通過(guò)映射驅(qū)動(dòng)器,軟件就能讀寫可通過(guò)該驅(qū)動(dòng)器訪問(wèn)的共享存儲(chǔ)區(qū)中的文件了。映射驅(qū)動(dòng)器通常分配一個(gè)盤符,可以像操作本機(jī)的其它硬盤驅(qū)動(dòng)器一樣使用它。要訪問(wèn)未映射的驅(qū)動(dòng)器,需要執(zhí)行以下步驟:首先,必須枚舉網(wǎng)絡(luò)以獲取文件共享的列表,然后,在獲得文件共享的訪問(wèn)憑證后,需要使用其用戶名和密碼來(lái)裝載未映射的驅(qū)動(dòng)器。一旦安裝了驅(qū)動(dòng)器,就可以訪問(wèn)來(lái)自未映射驅(qū)動(dòng)器的文件了。
圖1顯示了用于訪問(wèn)未映射驅(qū)動(dòng)器的代碼,并且它已經(jīng)被勒索軟件(例如DMA-Locker,Locky和CryptoLuck)廣泛用于訪問(wèn)未映射的文件共享中的文件了。該代碼首先會(huì)調(diào)用WNetOpenEnumW [5]函數(shù),并以無(wú)符號(hào)整數(shù)2('2u')和1('1u')作為其前兩個(gè)參數(shù)。參數(shù)“2u”能夠確保網(wǎng)絡(luò)中的所有連接都在范圍內(nèi),而“1u”則確保只打開(kāi)磁盤資源進(jìn)行枚舉。
圖1:用于演示向未映射驅(qū)動(dòng)器橫向運(yùn)動(dòng)的代碼
一旦連接打開(kāi),將不斷調(diào)用WNetEnumResourceW以枚舉這些資源。
函數(shù)WNetOpenEnumW的第四個(gè)參數(shù)是變量NetResource,它用來(lái)接收NetResource結(jié)構(gòu)數(shù)組形式的枚舉結(jié)果。該結(jié)構(gòu)的格式如圖2所示。
- typedef struct _NETRESOURCE {
- DWORD dwScope;
- DWORD dwType;
- DWORD dwDisplayType;
- DWORD dwUsage;
- LPTSTR lpLocalName;
- LPTSTR lpRemoteName;
- LPTSTR lpComment;
- LPTSTR lpProvider;
- } NETRESOURCE;
一旦枚舉完網(wǎng)絡(luò),該代碼就會(huì)調(diào)用指令'if(NetResource.dWUsage&2)',它用來(lái)檢查該資源是否為容器資源[6]。如果是,則該函數(shù)在后續(xù)指令“sub_407919(a1,&NetResource)”中遞歸調(diào)用自身,以確保將lpRemoteName成員指向的名稱傳遞給WNetOpenEnumW函數(shù),來(lái)繼續(xù)枚舉容器中的資源。
如果資源是可連接的,那么就會(huì)調(diào)用函數(shù)WNetAddConnection2W,該函數(shù)可以用來(lái)建立到該網(wǎng)絡(luò)資源的連接,同時(shí)還可以將本地設(shè)備重定向到網(wǎng)絡(luò)文件共享。傳遞給函數(shù)WNetAddConnection2W的第二個(gè)和第三個(gè)參數(shù)分別是用戶名和密碼。如圖1中的代碼所示,如果第二和第三參數(shù)的值都是0,那么,它就會(huì)使用默認(rèn)的密碼和用戶名。在WNetAddConnection2W函數(shù)之后的指令“if(NetResource.dwType)== 1”用于檢查資源是否為磁盤資源。如果是的話,在下一個(gè)指令中,共享資源的名稱NetResoure.lpRemoteName就會(huì)被傳遞給函數(shù)a1,然后生成一個(gè)線程來(lái)加密共享驅(qū)動(dòng)器中的文件。
USB驅(qū)動(dòng)器&映射驅(qū)動(dòng)器
除了訪問(wèn)未映射的文件共享,惡意軟件還能訪問(wèn)連接到受感染機(jī)器的可移動(dòng)驅(qū)動(dòng)器以加密這些驅(qū)動(dòng)器中的文件。圖3中的代碼展示了如何使用GetDriveTypeW來(lái)確定驅(qū)動(dòng)器的類型,隨后的表達(dá)式“result == 3”可以檢查驅(qū)動(dòng)器是否為固定類型的,而“result == 2”用來(lái)檢查驅(qū)動(dòng)器是否是可移動(dòng)的,最后, 'result == 6'表示它是一個(gè)RAM磁盤。對(duì)于這些類型的驅(qū)動(dòng)器,只要找到其中的任何一個(gè),就會(huì)調(diào)用“sub_402CFB”例程,然后生成一個(gè)線程來(lái)加密這些驅(qū)動(dòng)器中的文件。
GetDriveTypeW函數(shù)也可用于訪問(wèn)遠(yuǎn)程映射網(wǎng)絡(luò)驅(qū)動(dòng)器。如果函數(shù)GetDriveTypeW返回的值為4,則表示這是一個(gè)遠(yuǎn)程映射驅(qū)動(dòng)器。
圖3:利用GetDriveType函數(shù)進(jìn)行橫向運(yùn)動(dòng)的代碼
基于電子郵件的橫向運(yùn)動(dòng)
電子郵件早已成為惡意軟件廣泛使用的傳播手段了。圖3展示的VBA代碼,就是由蠕蟲(chóng)病毒通過(guò)Outlook進(jìn)行傳播的。如圖4所示,指令'loc_00402FB0'調(diào)用了CreateObject函數(shù),以便作為對(duì)象訪問(wèn)Outlook應(yīng)用程序。在創(chuàng)建對(duì)象之后,指令'loc_00403021'會(huì)調(diào)用AddressLists函數(shù),從該對(duì)象中獲得地址列表,隨后指令'loc_004030CC'調(diào)用了AddressEntries函數(shù),這樣就能訪問(wèn)該列表中的內(nèi)容了。在訪問(wèn)所有列表項(xiàng)之后,指令'loc_005032D2'會(huì)調(diào)用AddressEntry.Address來(lái)提取確切的電子郵件地址。一旦提取了電子郵件地址,指令“loc_004032BA”會(huì)調(diào)用Application.CreateItem函數(shù)來(lái)創(chuàng)建新的電子郵件。之后,指令'loc_0040345B'將惡意文件作為附件添加到電子郵件中,并通過(guò)指令'loc_0040353D'來(lái)發(fā)送電子郵件。當(dāng)受害者收到電子郵件并打開(kāi)附件時(shí),就會(huì)被感染。
圖4:使用電子郵件作為傳播手段
使用文件感染器作為傳播手段
除了使用SMB、電子郵件和驅(qū)動(dòng)器之外,攻擊者還可以通過(guò)感染機(jī)器上的其他文件進(jìn)行橫向運(yùn)動(dòng)。圖5顯示了HTML文件被感染后由Ramnit插入的代碼。被感染的HTML文件含有一個(gè)VBScript代碼,它會(huì)創(chuàng)建一個(gè)名為svchost.exe的文件。該代碼首先會(huì)調(diào)用CreateObject(“Scripting.FileSystemObject”),它在變量FSO中返回一個(gè)TextStream對(duì)象,該對(duì)象可以進(jìn)行讀取或?qū)懭氩僮?。然后,?duì)象FSO會(huì)調(diào)用CreateTextFile方法,創(chuàng)建一個(gè)文件,并在其中寫入變量WriteData的內(nèi)容,即惡意代碼。然后,會(huì)調(diào)用Close方法來(lái)刷新緩沖區(qū)并關(guān)閉該惡意文件。文件關(guān)閉后,該函數(shù)會(huì)調(diào)用WSHshell.Run來(lái)執(zhí)行惡意文件。
圖5:使用文件感染器作為傳播手段
結(jié)束語(yǔ)
一旦惡意軟件繞過(guò)了邊界或內(nèi)聯(lián)設(shè)備,它就可以通過(guò)各種方法滲入到內(nèi)部系統(tǒng)。其中,未映射的驅(qū)動(dòng)器、映射驅(qū)動(dòng)器、電子郵件和感染其他文件是最常用的手段。檢測(cè)惡意軟件的確很重要,與此同時(shí),防止惡意軟件的擴(kuò)散以限制其破壞范圍同樣也很重要。