新聞中心
2016年9月份以來(lái),發(fā)生了多起大規(guī)模DDoS攻擊事件。本文針對(duì)這些攻擊事件中使用的惡意軟件“Mirai”的源代碼進(jìn)行分析,進(jìn)一步介紹Bot(客戶(hù)端)的結(jié)構(gòu),以及其應(yīng)對(duì)方法。

10年的開(kāi)封網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷(xiāo)的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整開(kāi)封建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“開(kāi)封網(wǎng)站設(shè)計(jì)”,“開(kāi)封網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
一、 Mirai Botnet是什么
2016年9月13日晚,美國(guó)著名安全記者Brian Krebs氏的網(wǎng)站“Krebs on Security”被DDoS攻擊,mirai Botnet發(fā)動(dòng)了此次攻擊。Mirai主要是以網(wǎng)絡(luò)攝像頭、路由器、數(shù)碼錄像機(jī)等IoT設(shè)備為跳臺(tái)進(jìn)行DDoS攻擊。
據(jù)受到攻擊后Krebs氏的博客報(bào)道,保護(hù)該網(wǎng)站的Akamai觀(guān)測(cè)到在高峰時(shí)期受到了有史以來(lái)經(jīng)歷的最大規(guī)模攻擊近2倍的流量訪(fǎng)問(wèn)。
另外,2016年10月21日Twitter、Netflix等利用DNS服務(wù)進(jìn)行的DDoS攻擊,也被推斷利用了Mirai僵尸網(wǎng)絡(luò)。
然后在Krebs氏網(wǎng)站受到攻擊后,黑客平臺(tái)上Mirai的源代碼被公開(kāi)成為了很大的話(huà)題。隨后源代碼又在GitHub上被轉(zhuǎn)載,誰(shuí)都可以看到具體內(nèi)容。
源代碼被公開(kāi),Mirai Botnet以出廠(chǎng)設(shè)置的密碼未被更改的IoT設(shè)備為目標(biāo),進(jìn)行一般的字典攻擊擴(kuò)大感染范圍。據(jù)說(shuō)在進(jìn)行前述的攻擊時(shí),也有幾十萬(wàn)臺(tái)的設(shè)備受到僵尸網(wǎng)絡(luò)攻擊。
近年來(lái)各種各樣的IoT設(shè)備得到普及,存在漏洞的設(shè)備也在不斷增加,受到大規(guī)模的DDoS攻擊的可能性也會(huì)增大。另外,通常這些設(shè)備采用的架構(gòu)是不同于個(gè)人的電腦等的多種多樣的,不過(guò),Mirai可應(yīng)對(duì)ARM、ARM 7、MIPS、PowerPC、SH4、SPARC x86等各種各樣的架構(gòu),這與大規(guī)模感染的擴(kuò)大有一定關(guān)系吧。
本稿中,以現(xiàn)在GitHub上被公開(kāi)的代碼為基礎(chǔ),解說(shuō)Mirai Botnet的運(yùn)作,并且反思使家庭及企業(yè)的設(shè)備遠(yuǎn)離僵尸網(wǎng)絡(luò)的自衛(wèi)對(duì)策。
二、 Mirai Botnet的構(gòu)成
被公開(kāi)的Mirai Botnet的源代碼可大致分為以下3個(gè)部分:
1. 攻擊者操作的C&C(Command and Control)服務(wù)器功能
2. C&C服務(wù)器中被操作的Bot功能
3. Bot程序發(fā)布的Downloader功能
C&C服務(wù)器部分為Go語(yǔ)言,Bot、下載部分以及其他的加密工具等主要為C語(yǔ)言。對(duì)照被公開(kāi)存儲(chǔ)的目錄,Mirai的構(gòu)成如下(List 1)
List 1 目錄構(gòu)成
Mirai Botnet 是攻擊者通過(guò)①C&C服務(wù)器向②Bot發(fā)送指令,形成以大量的Bot為攻擊對(duì)象的C&C中心型僵尸網(wǎng)絡(luò)。同時(shí),Bot會(huì)掃描可感染的設(shè)備,將找到的設(shè)備信息發(fā)送給Report服務(wù)器,由③downloader植入Bot程序。(圖1)
(圖1.Mirai的動(dòng)作)
在這里,首先從C&C服務(wù)器的代碼開(kāi)始解讀Mirai。
三、 C&C服務(wù)器
◆ Main函數(shù)
由于Mirai的C&C服務(wù)器部分為Go語(yǔ)言,最初被執(zhí)行的mirai/cnc目錄中main.go文件內(nèi)的main函數(shù)被讀取(List 2)。再者,以下代碼中雖然有補(bǔ)充的評(píng)語(yǔ),但是,日語(yǔ)之外的評(píng)語(yǔ)是原本就記載的內(nèi)容。
List 2 main.go內(nèi)的main函數(shù)
Mirai的C&C服務(wù)器起初是建立在Telne服務(wù)器與API服務(wù)器之間的?!癵o~”的部分是利用Go語(yǔ)言degoroutine的非同期被處理的部分。
apiHandler函數(shù)中的經(jīng)由API初期化接受來(lái)自攻擊者的操作處理程序。initialHandler函數(shù)中,初期化向連接Telnet的Bot發(fā)送指令的處理程序以及實(shí)現(xiàn)C&C服務(wù)器上指令行接口的處理程序(List 3)。
List 3 main.go 的initialHandler函數(shù)
也就是說(shuō),這個(gè)C&C服務(wù)器的操作可能利用API,也可能通過(guò)Telnet連接CLI發(fā)送指令。解讀源代碼的話(huà),無(wú)論使用哪個(gè)方法都是需要認(rèn)證的。
◆ 認(rèn)證部分
從api.go文件種Handle函數(shù)內(nèi)的數(shù)據(jù)看,送來(lái)的要求中含有的apikey沒(méi)有在C&C服務(wù)器內(nèi)登錄的話(huà),能夠讀取未接收的指令。(List 4)
List 4 api.go中的Handle函數(shù)的認(rèn)證部分
admin.go中實(shí)裝的處理程序也同樣,在CLI上操作時(shí)需要使用用戶(hù)名和密碼登錄。(List 5)
List 5 admin.go中的Handle函數(shù)的認(rèn)證部分
另外,命令行在登錄時(shí)要求輸入俄羅斯語(yǔ),因此推斷制作者或利用者可能是俄羅斯圈的人。
◆ 用戶(hù)管理部分
那么,怎樣才能把這些信息登記在數(shù)據(jù)庫(kù)上呢?讀取源代碼訪(fǎng)問(wèn)C&C服務(wù)器上的CLI時(shí),如果是管理者用戶(hù)的話(huà)可以從CLI注冊(cè)登錄(List 6)。
List 6 admin.go的Handle函數(shù)內(nèi)的用戶(hù)登錄部分
然而,管理員賬號(hào)本身是預(yù)先插入數(shù)據(jù)庫(kù)中的,被公開(kāi)的代碼中沒(méi)有管理員賬戶(hù)登錄的相關(guān)內(nèi)容。
另外,數(shù)據(jù)庫(kù)的users桌面上,除username及password之外,還有max_bots、last_paid、cooldown、duration_limit等列,這些列被用于創(chuàng)建攻擊指令,因此每個(gè)用戶(hù)能夠利用的Bot數(shù)量、攻擊間隔、賬號(hào)等均受控制。并且,用戶(hù)向僵尸網(wǎng)絡(luò)持有者支付金錢(qián)的時(shí)間等都保存在C&C服務(wù)器的數(shù)據(jù)庫(kù)中。(List 7)
List 7 database.go內(nèi)的CreateUser函數(shù)
綜上所述,是否可以認(rèn)為Mirai Botnet的所有者使不特定的多數(shù)人以金錢(qián)等交換利用了僵尸網(wǎng)絡(luò)呢。
◆ Bot 管理部分
接下來(lái),看看Bot管理部分吧。首先從Bot連接C&C服務(wù)器的話(huà),main.go文件中的initialHandler函數(shù)中NewBot.Handle函數(shù)被喚起,根據(jù)Handle函數(shù)的處理Bot信息將被添加到列表中(List 8)。
List 8 bot.go內(nèi)的Handle函數(shù)
存儲(chǔ)Bot信息的clientList是全球變數(shù),main.go內(nèi)運(yùn)行main函數(shù)之前就被制作了。另外, clientList在新制作的時(shí)候,非同步接收的Worker制作Bot指令,等待Bot指令。
◆ 攻擊指令的制作部分
接下來(lái),以攻擊者C&C服務(wù)器的輸入為基礎(chǔ),看看Bot指令的制作部分吧。在API、CLI等輸入指定攻擊種類(lèi)·攻擊對(duì)象的命令,便會(huì)在attack.go內(nèi)的NewAttack函數(shù)內(nèi)完成應(yīng)對(duì)接受指令的Flag設(shè)置。在同文件夾中的attackInfoLookup Map內(nèi)定義了可能利用的攻擊種類(lèi)(表1)(List 9)。
表1 Mirai Botnet可執(zhí)行的攻擊種類(lèi)
List 9 attack.go內(nèi)attackInfoLookup Map
從表1了解到,Mirai可使Bot受到各種各樣的DDoS攻擊。
另外,VSE平臺(tái)攻擊中被瞄準(zhǔn)的游戲引起“Source Engine”是非常有人氣的一款在線(xiàn)游戲“反恐精英”中使用的引擎。這樣被特意定義,由此可見(jiàn)這樣的在線(xiàn)游戲可能被作為攻擊的目標(biāo)。利用GRE等次要的協(xié)議進(jìn)行攻擊是有可能的,因此Mirai可回避一般的DDoS攻擊對(duì)策。
然后把這些攻擊Falg設(shè)定組裝后,同文件的Build函數(shù)內(nèi)將這些攻擊設(shè)定為二進(jìn)制向Bot發(fā)信。這樣就可以向Bot完成數(shù)據(jù)的發(fā)送。
◆ 指令發(fā)送部分
最后,看看從C&C服務(wù)器向Bot發(fā)送指令的流程吧。二進(jìn)制的攻擊設(shè)定移交至clientList.go文件內(nèi)的QueueBuf函數(shù),如名字所示保持Bot的指示被放置在緩沖區(qū)列隊(duì)中(List 10)。
List 10 clientList.go的QueueBuf函數(shù)
接收信息的atkQueue頻道從持有的Bot信息列表到攻擊者可利用的Bot上線(xiàn)數(shù)為止在Bot單體的緩沖區(qū)排列攻擊設(shè)定。
List 11 clientList.go內(nèi)的worker函數(shù)
然后,排列的攻擊設(shè)定最終會(huì)被發(fā)送到Bot單體(List 12)。
List 12 bot.go內(nèi)的QueueBuf函數(shù)
四、Bot(客戶(hù)端)
接下來(lái),看看Bot客戶(hù)端的運(yùn)作吧。由于客戶(hù)端是C語(yǔ)言編寫(xiě)的,首先讓我們從mirai/bot目錄以下的main.c開(kāi)始解讀吧。
◆C&C的連接部分
main.c內(nèi)的main函數(shù)里,啟動(dòng)后本身的過(guò)程名偽裝成隨機(jī)的名字,無(wú)線(xiàn)循環(huán)地呼出establish_connection函數(shù),將加密的C&C服務(wù)器的域名和Bot解密后連接在一起(List 13)。
List 13 main.c內(nèi)的main函數(shù)與establish_connection函數(shù)
在這里,establish_connection函數(shù)里名為resolve_fudc函數(shù)被同文件內(nèi)anti_gdb_entry函數(shù)替換,所以實(shí)際上也被稱(chēng)作resolve_cnc_addr函數(shù)(List 14)。
況且,C&C服務(wù)器的域名中,對(duì)table.c文件中被定義為“0xdeadbeef”的值實(shí)施seed值XOR加密,C&C服務(wù)器的解析會(huì)變得較困難。
List 14 main.c內(nèi)的anti_gdb_entry函數(shù)與resolve_cnc_addr函數(shù)
成功連接后,Bot向C&C服務(wù)器中發(fā)送二進(jìn)制“\x00\x00\x00\x01”(List 15)。
List 15 main.c內(nèi)的第263行
發(fā)送這個(gè)二進(jìn)制的話(huà),List 3中if文變?yōu)閠rue,被稱(chēng)為NewBot函數(shù),保持C&C服務(wù)器與Bot的連接。
轉(zhuǎn)自L(fǎng)ist 3
◆攻擊部分
接下來(lái),我們一起看看Bot如何接收來(lái)自C&C服務(wù)器的攻擊設(shè)定,以及實(shí)際上是在攻擊嗎?基本上,Bot是等待來(lái)自鏈接main函數(shù)的無(wú)限循環(huán)C&C服務(wù)器發(fā)送過(guò)來(lái)的命令。接收命令后傳送attack.c文件內(nèi)的attack_parse函數(shù),然后運(yùn)行與attack_start函數(shù)內(nèi)接收命令的攻擊設(shè)定一致的攻擊用函數(shù),開(kāi)始所指定種類(lèi)(表1中無(wú)論哪個(gè))的DDoS攻擊(List 16)。
List 16 attack.c中的attack_start函數(shù)
◆感染源掃描部分
Bot在等待來(lái)自C&C服務(wù)器命令的同時(shí),main函數(shù)中被稱(chēng)為scanner_init的函數(shù)開(kāi)始尋找新的可加入Bot的設(shè)備。
如何掃描新的感染源呢?生成隨機(jī)IP(List 17)試圖連接,在連上的時(shí)候利用字典攻擊進(jìn)行搜索。
List 17 scanner.c中的scanner_init函數(shù)的一部分
使用字典攻擊從scanner.c文件的第125行定義用戶(hù)名與密碼(List 18)。
List 18 scanner.c中被定義的一部分用戶(hù)名和密碼列表
最初的一行中雖記錄著root與xc3511的組合,這是2016年10月21日進(jìn)行DNS服務(wù)攻擊的跳臺(tái)防盜攝像機(jī)設(shè)定的組合,隨后該設(shè)備被回收了。隨后會(huì)給出一份用戶(hù)名與密碼的組合清單,請(qǐng)確認(rèn)一下您的設(shè)備所使用的用戶(hù)名與密碼。
若發(fā)現(xiàn)可登錄的末端,Adress、Bot、登錄信息會(huì)發(fā)送到服務(wù)器(List 19)。
List 19 scanner.c中的scnenner_init函數(shù)內(nèi)的一部分
追蹤report_working函數(shù)的話(huà),因送信源服務(wù)器與C&C服務(wù)器是不同的域名(被定義為T(mén)ABLE_SCAN_CB_DOMAIN域名),Bot是發(fā)現(xiàn)的收集新感染源信息的服務(wù)器,與C&C服務(wù)器是不相同的(List 20)。
List 20 scnaner.c中report_working函數(shù)
五、Downloader
最后讓我們了解一下發(fā)布Bot程序的Downloader部分吧。下載Bot運(yùn)行文件的Downloader部分是由C語(yǔ)言編寫(xiě)的,但是在前面提到的Bot收集的感染源信息的Report服務(wù)器的程序存在關(guān)于發(fā)布的部分,所以也一起了解一下吧。
◆感染源收集的部分
首先,解讀一下Report服務(wù)器的部分吧。mirai/tools目錄下的scanListen.go文件單體擁有Report服務(wù)器的作用。main函數(shù)中等待來(lái)自Bot的連接,連上的話(huà)會(huì)運(yùn)行handleConnection函數(shù)(List 21)。
List 21 scanListen.go中的main函數(shù)
在handleConnection內(nèi)只是輸入從Bot發(fā)送來(lái)的感染源信息,與其說(shuō)是收集功能,倒不如說(shuō)是將發(fā)送過(guò)來(lái)的信息傳遞給Downloader的簡(jiǎn)易功能(List 22)。
List 22 scanListen.go內(nèi)的handleConnection函數(shù)
Bot發(fā)布部分
從Bot接收的感染對(duì)象的信息,是在loader/main.c文件的main讀取,傳送給server_queue_telnet函數(shù)(List 23)。
List 23 main.c文件中main函數(shù)的一部分
隨后,將感染源信息從server_queue_telnet傳遞到server_telnet_probe函數(shù),連接感染源(List 24)。
List 24 server.c文件中server_telnet_probe函數(shù)的一部分
連接后進(jìn)行登錄,自主下載(表1中介紹的dlr目錄下的東西)、wget、TFTP中,利用任一可能的方法下載Bot的執(zhí)行文件(List 25)。List 25中只介紹了wget的情況。
List 25 server.c文件中handle_event函數(shù)的一部分
在這里,wget執(zhí)行時(shí)雖利用了busybox,但這是組裝機(jī)器用的Linux也能運(yùn)行標(biāo)準(zhǔn)UNIX命令的簡(jiǎn)易設(shè)計(jì)程序。
接下來(lái),運(yùn)行下載的Bot(List 26)。按照這樣的流程感染存在漏洞的設(shè)備,添加新的僵尸網(wǎng)絡(luò)。
List 26 server.c文件中handle_event函數(shù)的一部分
六、應(yīng)對(duì)方法
最后,如何才能避免感染這樣的僵尸網(wǎng)絡(luò)呢,重新思考一下應(yīng)對(duì)方法吧。
就像我們了解到的那樣,Mirai是將隨機(jī)生成的IP地址連接Telnet,感染字典攻擊可突破的設(shè)備。基本上是采用把出廠(chǎng)設(shè)置的密碼改成較難推斷密碼的方法,便能有效躲避感染。
以下記載著Mirai使用的用戶(hù)名與密碼的組合列表。再確認(rèn)一下是否有相同設(shè)置的吧。
表2 Mirai利用的用戶(hù)名與密碼一覽表
但是,由于Mirai的源代碼被公開(kāi)誕生了亞種,這些亞種未必會(huì)使用相關(guān)的密碼列表。因此,不要因?yàn)樵诠_(kāi)的密碼列表之外就大意,設(shè)定不容易被類(lèi)推的密碼等,最好只訪(fǎng)問(wèn)信賴(lài)度高的網(wǎng)站。
另外,此次感染了Mirai的設(shè)備若是公司內(nèi)部的連網(wǎng)設(shè)備,很有可能作為跳臺(tái)已經(jīng)成了入侵的開(kāi)端,需要十分地注意。
從Krebs氏的網(wǎng)站受害中發(fā)覺(jué)的一些列由Mirai引起的DDoS攻擊漸漸地演變成大規(guī)模的攻擊。不僅如此,如前所述即使Mirai僵尸網(wǎng)絡(luò)自身被消滅了,但是不同的Mirai亞種的僵尸網(wǎng)絡(luò)仍然會(huì)出現(xiàn)吧。
實(shí)際上,按照黑客平臺(tái)上投稿的流程進(jìn)行環(huán)境整備,只需要擁有一點(diǎn)知識(shí),短時(shí)間內(nèi)便能完成Bot與C&C服務(wù)器的執(zhí)行文件的建立,利用大部分代碼便能制作出亞種。
DDoS攻擊對(duì)策等更重要的是針對(duì)來(lái)自Bot的攻擊對(duì)策,為了徹底消除僵尸網(wǎng)絡(luò),盡量減少可支持僵尸網(wǎng)絡(luò)的設(shè)備也同樣重要。在正確理解僵尸網(wǎng)絡(luò)的威脅后采取對(duì)策,希望本文能夠給大家?guī)?lái)幫助。
新聞名稱(chēng):深度解析:惡意軟件“Mirai”源代碼的結(jié)構(gòu)及其對(duì)策
分享鏈接:http://m.fisionsoft.com.cn/article/cccdpec.html


咨詢(xún)
建站咨詢(xún)
