日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

背景

自從Log4J漏洞被曝光后,正所謂"忽如一夜漏洞來,大黑小灰笑開懷”。無數黑產團伙摩拳擦掌加入了這個“狂歡派對”,其中既有許多業界非常熟悉的惡意軟件家族,同時也有一些新興勢力想趁著這股東風在黑灰產上分一杯羹。36.NETlab作為專注于蜜罐和Botnet檢測跟蹤的團隊,我們自該漏洞被公開后就一直關注它會被哪些僵尸網絡利用,期間我們看到了Elknot,Gafgyt,Mirai等老朋友的從不缺席,也見證了一些新朋友的粉墨登場。

2022年2月9日,360Netlab的蜜罐系統捕獲了一個未知的ELF文件通過Log4J漏洞傳播,此文件在運行時產生的網絡流量引發了疑似DNS Tunnel的告警,這引起了我們的興趣。經過分析,我們確定是一個全新的僵尸網絡家族,基于其傳播時使用的文件名"b1t",XOR加密算法,以及RC4算法秘鑰長度為20字節,它被我們命名為B1txor20。

簡單來說,B1txor20是一個針對linux平臺的后門木馬, 它利用DNS Tunnel技術構建C2通信信道,除了傳統的后門功能,B1txor20還有開啟socket5代理,遠程下載安裝Rootkit,反彈SHELL等功能,這些功能可以很方便的將被侵入的設備變成跳板,供后續滲透時使用。

另外一個有意思的點是我們發現許多開發好了的功能并沒有投入使用(在IDA中表現為,沒有交叉引用);有些功能存在BUG。我們推測B1txor20的作者會持續完善,并根據的不同場景,定制式地開啟不同的功能,或許以后我們將遇到B1txor20的兄弟姐妹。

鑒于B1txor20所使用漏洞的高危性,以及其C2信道的隱蔽性,我們決定撰寫本文向社區分享我們的發現,共同維護網絡安全。

B1txor20概覽

我們一共捕獲了4個不同MD5的B1txor20樣本文件,它們的功能幾乎一樣,一共支持15個功能號,根據這些功能,可以將B1txor20定性為:一個使用DNS Tunnel技術構建隱蔽的C2信道,支持直連和中繼2種方式,同時使用ZLIB壓縮,RC4加密,BASE64編碼的方式保護流量的后門木馬,目前通過Log4j漏洞傳播,主要針對ARM,X64 CPU架構的Linux平臺。

目前支持的主要功能如下所示:

 

  1. SHELL
  2. Proxy
  3. 執行任意命令
  4. 安裝Rootkit
  5. 上傳敏感信息

 

它的基本流程圖如下所示:


 


逆向分析

本文選擇2022年2月09日的樣本為主要分析對象,它的基本信息如下所示:

MD5:0a0c43726fd256ad827f4108bdf5e772ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, strippedPacker:None

B1txor20的樣本是動態鏈接的,因此在逆向上比較容易,簡單來說,當B1txor20在被侵入設備動行后,首先會將自身偽裝成[netns]進程,通過/var/run/.netns.PID這個PID文件實現單一實例,然后使用/etc/machine-id,/tmp/.138171241或/dev/urandom3者中任意一個,生成BotID,接著解密用于DNS Tunnel的域名,以及用于加密流量的RC4秘鑰并測試DNS服務器的連通性,最后使用DNS Tunnel技術向C2發送上線信息,等待執行C2下發的指令。其中進程偽裝,單一實例這些功能比較簡單,就再不細述,下文將圍繞DNS Tunnel剖析B1txor20的實現。

生成Bot ID

B1txor20通過以下代碼片段從etc/machine-id,或/tmp/.138171241,讀取32字節用于生成BotId,如果失敗,則通過/dev/urandom生成16字節數據,并將它寫入到前面2個文件。


 

下面的代碼片段是BotId的計算過程:


 

以我們虛擬機的machine-id值ab3b49d10ec42c38b1093b8ce9ad12af為例,通過下面等效的Python/ target=_blank class=infotextkey>Python代碼,可以算出BotId的值為0x125d。

import structid='ab3b49d10ec42c38b1093b8ce9ad12af'values=struct.unpack("<16H",id)sum=0for i in values:sum ^= iprint hex(sum)if sum&0xff <0xf:sum+=0x10if sum>>8 < 0xf:sum+=0x1000print hex(sum) # sum=0x125d解密

B1txor20通過以下代碼片段解密存儲在樣本中的域名和RC4秘鑰,


它的原理非常簡單,就是單字節xor操作,其中xor_key為49 D3 4F A7 A2 BC 4D FA 40 CF A6 32 31 E9 59 A1


 

通過下圖的CyberChef實現等效的解密過程,可知域名為.dns.webserv.systems,RC4秘鑰為EnLgLKHhy20f8A1dX85l。


 

測出DNS服務器的連通性

B1txor20通過以下代碼片段測試3個DNS (8.8.8.8:53,8.8.8.4:53,194.165.16.24:443)服務器的連通性。


 


它的原理是使用res_mkqueryAPI構建“google.com”的DNS請求報文,然后通過res_send發送請求,只要能夠發送成功,就認為和相應DNS服務器的網絡是連通,把它們保存起來供后續使用。


 

實際中Bot與194.165.16.24產生的流量如下所示:


 

C&C通信

當上述的準備工作完成后,B1txor20進入最終階段,使用DNS Tunnel技術和C2建立通信,等待執行C2下發的指令。


 

一般來說惡意軟件使用DNS Tunnel的場景是這樣的:Bot把竊取的敏感信息,命令的執行結果等等任何需要傳遞的信息,在使用特定的編碼技術隱藏之后,以DNS請求的方式,將它發送到C2;C2到接收到請求之后,把payload做為DNS請求的響應,將它發送到Bot端。這樣一來,Bot與C2就在DNS協議的幫助之下實現了通信。在這樣的網絡結構中,有3個關鍵的點值得注意

 

  1. C2必須支持DNS協議
  2. 特定的編碼技術
  3. DNS請求的發送方式

 

下文將圍繞這些點,結合B1txor20在實際中產生的流量,分析B1txor20的通信技術細節。


 

0x01:定位C2

通過上圖的流量,可以看出B1txor20使用的SLD是webserv.systems,使用DIG命令可知此SLD綁定的IP為194.165.16.24;而194這個IP上又開啟了DNS解析服務,因此我們可以確定B1txor20的C2正是194.165.16.24。


 

0x02:生成Tunnel域名

B1txor20的Tunnel域名格式為Base64-Like String+.dns.websrv.systems 很明顯前面
類似Base64的字串就是Bot發往C2的信息,它是如何生成的呢?
首先,B1txor20數據包的有一個前置構造過程,可以看出其格式為0xFF + BotId + 0xFF + Stage + 0xFF + Other Info,0xFF用于分隔不同的項,當成完構造后,再根據不同的Stage值,進入不同的任務,填充Other Info部分。


 

以上線這個任務為例,Stage值為1,通過gather_info函數,將"sysinfo_uptime,uid,hostname"這些信息填充到Other Info中,它們使用0x0a分隔。


 

當所需的信息都已準備好之后,B1txor20接著使用process_query函數對上面的信息進一步處理,它包括ZLIB壓縮,RC4加密,Base64編碼3個過程。


 

其中RC4加密所使用的秘鑰就是前文解密章節所說的字串“EnLgLKHhy20f8A1dX85l”,Base64使用的Alphabet String為ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789^_。

最后B1txor20在上面生成的Base64字串前加入1字節表示status,4字節隨機字串,再和domain進行拼接,就么得了最終要查詢的域名。其中status的取值為['0', '1', '2'],0表示當前的查詢被截斷了,后續的查詢和當前應該拼成同一個;1表示當成查詢是完整的。


 


以實際產生的一個查詢1HQoOKPvBKs8yqO1tTUQkCqGWN9anB4RAGWhnJy8A.dns.webserv.systems為例,去除前5字節,以及.dns.webserv.systems部分,得到KPvBKs8yqO1tTUQkCqGWN9anB4RAGWhnJy8A,然后使用Base64解碼,RC4解密,ZLIB解壓,就能得到了以下原始數據。


 

從數據內容和格式來看,它和我們前文的描述能一一對應,說明我們前面的分析是正確的。

Botid =0x125dStage=1sysinfo.uptime = 34uid=30hostname=debian0x3:發送DNS請求

當上述域名構造完成后,B1txor20使用RES系列API生成并發送DNS請求。


 

根據前文測試DNS連通情況的不同,發送DNS請求的方式有3種。

 

  1. 向public dns(8.8.8.8,8.8.4.4)發送
  2. 直接向C2(194.165.16.24)發送
  3. 向local dns(nameserver in /etc/resolv.conf)發送

 

其中2這種方式,它的速度較快,但蔽性弱,很容易被探測追蹤;1,3這種倆種方式隱蔽性強,但速度稍慢。

0x4:處理C2指令

當Bot通過上述方式發送DNS請求后,就等待執行C2下發的指令。C2的指令存放在DNS請求的響應報文中,它的格式為Status(1 byte):Body,其中Body部分也使用了“ZLIB壓縮,RC4加密,BASE64編碼”這種保護方法。


 

以下圖實際收到的指令“1VSE6NZwczNMm2zgaXeLkZro= ”為例,


 

Body部分為"VSE6NZwczNMm2zgaXeLkZro=",它經過Base64解碼,RC4解密后,就能得到了以下格式的數據,再將紅色部分解壓,就得到了最終的指令FF 02 FF 0A FF,可以看出它的格式和上文查詢產生的格式是一致的,此時可知Bot將去執行0x02號功能,至此Bot與C2的一輪交互就完成了。


 

C&C指令

B1txor20一共支持15條指令,指令號與功能的對應關系如下表所示:

CMD ID

FUNCTION

0x1

Beacon/Heartbeat

0x2

Upload system info

0x3

Create "/dev/pamd" (unix domain socket) which can get a shell

0x4

Exec arbitrary system cmd via popen

0x5

Traffic forwarding

0x6

Write File

0x7

Read File

0x8

Deliver info via "/var/tmp/.unetns"(unix domain socket),Not used

0x9

Upload specific info,Not used

0x10

Stop proxy service

0x11

Start proxy service

0x1a

Create proxy service

0x21

Reverse shell

0x50

Upload "/boot/conf- XXX" info,Not used

0x51

install M3T4M0RPH1N3.ko rootkit

表中"Not used"表示這個功能,在樣本中有應的處理代碼,但沒有被調用,我們不確定這些代碼是用于調試的,或是在別的樣本中使用。
另外有意思的一點是,我們發現有些功能在實現上是有Bug的,如0x3,它在bind 域套接字后,使用remove函數刪除了套接字文件,這會讓此套接字無法被connect,進而整個功能失效。


 

花絮

域名一買就是6年,這是想要大干一票?

webserv.systems createddate 2021-02-08 15:13:22webserv.systems updateddate 2021-02-24 22:27:23webserv.systems expiresdate 2027-02-08 15:13:22

分享到:
標簽:木馬
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定