惡意軟件常用的感染技術(shù)

責(zé)任編輯:editor007

2017-01-17 19:59:23

摘自:51CTO

圖1顯示了用于訪問未映射驅(qū)動器的代碼,并且它已經(jīng)被勒索軟件(例如DMA-Locker,Locky和CryptoLuck)廣泛用于訪問未映射的文件共享中的文件了

惡意軟件常用的感染技術(shù)。通過“橫向運動”,惡意軟件可以進(jìn)一步擴大其戰(zhàn)果:從原始受感染設(shè)備傳播到同一網(wǎng)絡(luò)內(nèi)的其他設(shè)備。

勒索軟件

最近,勒索軟件已經(jīng)開始使用這種傳播方式:包括CryptoWall [1]、CryptoFortess [2]、DMA-Locker [3]和CryptoLuck [4]在內(nèi)的許多著名的勒索軟件家族,不僅對受害者機器上的文件進(jìn)行加密,而且對已經(jīng)映射和未映射的文件共享進(jìn)行了"橫向運動", 對這些共享中的文件進(jìn)行加密,從而造成更大的危害。當(dāng)然,對于許多針對性和非針對性攻擊中使用的惡意軟件來說,也有許多會進(jìn)行"橫向運動"的。

本文將為讀者深入介紹惡意軟件最常見的傳播技術(shù),其中包括網(wǎng)絡(luò)內(nèi)部傳播技術(shù)和網(wǎng)絡(luò)間傳播技術(shù)。

橫向運動至未映射的驅(qū)動器

通過映射驅(qū)動器,軟件就能讀寫可通過該驅(qū)動器訪問的共享存儲區(qū)中的文件了。映射驅(qū)動器通常分配一個盤符,可以像操作本機的其它硬盤驅(qū)動器一樣使用它。要訪問未映射的驅(qū)動器,需要執(zhí)行以下步驟:首先,必須枚舉網(wǎng)絡(luò)以獲取文件共享的列表,然后,在獲得文件共享的訪問憑證后,需要使用其用戶名和密碼來裝載未映射的驅(qū)動器。一旦安裝了驅(qū)動器,就可以訪問來自未映射驅(qū)動器的文件了。

圖1顯示了用于訪問未映射驅(qū)動器的代碼,并且它已經(jīng)被勒索軟件(例如DMA-Locker,Locky和CryptoLuck)廣泛用于訪問未映射的文件共享中的文件了。該代碼首先會調(diào)用WNetOpenEnumW [5]函數(shù),并以無符號整數(shù)2('2u')和1('1u')作為其前兩個參數(shù)。參數(shù)“2u”能夠確保網(wǎng)絡(luò)中的所有連接都在范圍內(nèi),而“1u”則確保只打開磁盤資源進(jìn)行枚舉。

用于演示向未映射驅(qū)動器橫向運動的代碼

  圖1:用于演示向未映射驅(qū)動器橫向運動的代碼

一旦連接打開,將不斷調(diào)用WNetEnumResourceW以枚舉這些資源。

函數(shù)WNetOpenEnumW的第四個參數(shù)是變量NetResource,它用來接收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ò),該代碼就會調(diào)用指令'if(NetResource.dWUsage&2)',它用來檢查該資源是否為容器資源[6]。如果是,則該函數(shù)在后續(xù)指令“sub_407919(a1,&NetResource)”中遞歸調(diào)用自身,以確保將lpRemoteName成員指向的名稱傳遞給WNetOpenEnumW函數(shù),來繼續(xù)枚舉容器中的資源。

如果資源是可連接的,那么就會調(diào)用函數(shù)WNetAddConnection2W,該函數(shù)可以用來建立到該網(wǎng)絡(luò)資源的連接,同時還可以將本地設(shè)備重定向到網(wǎng)絡(luò)文件共享。傳遞給函數(shù)WNetAddConnection2W的第二個和第三個參數(shù)分別是用戶名和密碼。如圖1中的代碼所示,如果第二和第三參數(shù)的值都是0,那么,它就會使用默認(rèn)的密碼和用戶名。在WNetAddConnection2W函數(shù)之后的指令“if(NetResource.dwType)== 1”用于檢查資源是否為磁盤資源。如果是的話,在下一個指令中,共享資源的名稱NetResoure.lpRemoteName就會被傳遞給函數(shù)a1,然后生成一個線程來加密共享驅(qū)動器中的文件。

USB驅(qū)動器&映射驅(qū)動器

除了訪問未映射的文件共享,惡意軟件還能訪問連接到受感染機器的可移動驅(qū)動器以加密這些驅(qū)動器中的文件。圖3中的代碼展示了如何使用GetDriveTypeW來確定驅(qū)動器的類型,隨后的表達(dá)式“result == 3”可以檢查驅(qū)動器是否為固定類型的,而“result == 2”用來檢查驅(qū)動器是否是可移動的,最后, 'result == 6'表示它是一個RAM磁盤。對于這些類型的驅(qū)動器,只要找到其中的任何一個,就會調(diào)用“sub_402CFB”例程,然后生成一個線程來加密這些驅(qū)動器中的文件。

GetDriveTypeW函數(shù)也可用于訪問遠(yuǎn)程映射網(wǎng)絡(luò)驅(qū)動器。如果函數(shù)GetDriveTypeW返回的值為4,則表示這是一個遠(yuǎn)程映射驅(qū)動器。

利用GetDriveType函數(shù)進(jìn)行橫向運動的代碼

  圖3:利用GetDriveType函數(shù)進(jìn)行橫向運動的代碼

基于電子郵件的橫向運動

電子郵件早已成為惡意軟件廣泛使用的傳播手段了。圖3展示的VBA代碼,就是由蠕蟲病毒通過Outlook進(jìn)行傳播的。如圖4所示,指令'loc_00402FB0'調(diào)用了CreateObject函數(shù),以便作為對象訪問Outlook應(yīng)用程序。在創(chuàng)建對象之后,指令'loc_00403021'會調(diào)用AddressLists函數(shù),從該對象中獲得地址列表,隨后指令'loc_004030CC'調(diào)用了AddressEntries函數(shù),這樣就能訪問該列表中的內(nèi)容了。在訪問所有列表項之后,指令'loc_005032D2'會調(diào)用AddressEntry.Address來提取確切的電子郵件地址。一旦提取了電子郵件地址,指令“loc_004032BA”會調(diào)用Application.CreateItem函數(shù)來創(chuàng)建新的電子郵件。之后,指令'loc_0040345B'將惡意文件作為附件添加到電子郵件中,并通過指令'loc_0040353D'來發(fā)送電子郵件。當(dāng)受害者收到電子郵件并打開附件時,就會被感染。

使用電子郵件作為傳播手段

  圖4:使用電子郵件作為傳播手段

使用文件感染器作為傳播手段

除了使用SMB、電子郵件和驅(qū)動器之外,攻擊者還可以通過感染機器上的其他文件進(jìn)行橫向運動。圖5顯示了HTML文件被感染后由Ramnit插入的代碼。被感染的HTML文件含有一個VBScript代碼,它會創(chuàng)建一個名為svchost.exe的文件。該代碼首先會調(diào)用CreateObject(“Scripting.FileSystemObject”),它在變量FSO中返回一個TextStream對象,該對象可以進(jìn)行讀取或?qū)懭氩僮?。然后,對象FSO會調(diào)用CreateTextFile方法,創(chuàng)建一個文件,并在其中寫入變量WriteData的內(nèi)容,即惡意代碼。然后,會調(diào)用Close方法來刷新緩沖區(qū)并關(guān)閉該惡意文件。文件關(guān)閉后,該函數(shù)會調(diào)用WSHshell.Run來執(zhí)行惡意文件。

使用文件感染器作為傳播手段

  圖5:使用文件感染器作為傳播手段

結(jié)束語

一旦惡意軟件繞過了邊界或內(nèi)聯(lián)設(shè)備,它就可以通過各種方法滲入到內(nèi)部系統(tǒng)。其中,未映射的驅(qū)動器、映射驅(qū)動器、電子郵件和感染其他文件是最常用的手段。檢測惡意軟件的確很重要,與此同時,防止惡意軟件的擴散以限制其破壞范圍同樣也很重要。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號