在該地圖中顏色越深,代表感染的設(shè)備越多,可以看出感染Mirai最多的幾個(gè)國(guó)家有美國(guó)、中國(guó)和澳大利亞。
Mirai源碼分析
Mirai源碼是2016年9月30日由黑客Anna-senpai在論壇上公布,其公布在github上的源碼被star了2538次,被fork了1371次。

Mirai通過(guò)掃描網(wǎng)絡(luò)中的Telnet等服務(wù)來(lái)進(jìn)行傳播,實(shí)際受感染的設(shè)備bot并不充當(dāng)感染角色,其感染通過(guò)黑客配置服務(wù)來(lái)實(shí)施,這個(gè)服務(wù)被稱(chēng)為L(zhǎng)oad。黑客的另外一個(gè)服務(wù)器C&C服務(wù)主要用于下發(fā)控制指令,對(duì)目標(biāo)實(shí)施攻擊。
通過(guò)我們對(duì)僵尸源碼的分析發(fā)現(xiàn),該僵尸具備如下特點(diǎn):
(1)黑客服務(wù)端實(shí)施感染,而非僵尸自己實(shí)施感染。
(2)采用高級(jí)SYN掃描,掃描速度提升30倍以上,提高了感染速度。
(3)強(qiáng)制清除其他主流的IOT僵尸程序,干掉競(jìng)爭(zhēng)對(duì)手,獨(dú)占資源。比如清除QBOT、Zollard、Remaiten Bot、anime Bot以及其他僵尸。
(4)一旦通過(guò)Telnet服務(wù)進(jìn)入,便強(qiáng)制關(guān)閉Telnet服務(wù),以及其他入口如:SSH和web入口,并且占用服務(wù)端口防止這些服務(wù)復(fù)活。
(5)過(guò)濾掉通用電氣公司、惠普公司、美國(guó)國(guó)家郵政局、國(guó)防部等公司和機(jī)構(gòu)的IP,防止無(wú)效感染。
(6)獨(dú)特的GRE協(xié)議洪水攻擊,加大了攻擊力度。
Mirai感染示意圖:

上圖簡(jiǎn)單顯示了Mirai僵尸的感染過(guò)程,與普通僵尸感染不同的是,其感染端是通過(guò)黑客服務(wù)端實(shí)施的,而不是靠bot來(lái)實(shí)施感染。
受感染的設(shè)備端的 bot程序通過(guò)隨機(jī)策略?huà)呙杌ヂ?lián)網(wǎng)上的設(shè)備,并會(huì)將成功猜解的設(shè)備用戶(hù)名、密碼、IP地址,端口信息以一定格式上傳給sanListen,sanLiten解析這些信息后交由Load模塊來(lái)處理,Load通過(guò)這些信息來(lái)登錄相關(guān)設(shè)備對(duì)設(shè)備實(shí)施感染,感染方式有echo方式、wget方式和tftp方式。這三種方式都會(huì)向目標(biāo)設(shè)備推送一個(gè)具有下載功能的微型模塊,這個(gè)模塊被傳給目標(biāo)設(shè)備后,命名為dvrHelper。最后,dvrHelper遠(yuǎn)程下載bot執(zhí)行,bot再次實(shí)施Telnet掃描并進(jìn)行密猜解,由此周而復(fù)始的在網(wǎng)絡(luò)中擴(kuò)散。這種感染方式是極為有效的,Anna-senpai曾經(jīng)每秒會(huì)得到500個(gè)成功爆破的結(jié)果。
bot分析
bot是mirai僵尸的攻擊模塊,其主要實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)服務(wù)設(shè)備(掃描過(guò)程不只針對(duì)IOT設(shè)備,只要開(kāi)啟Telnet服務(wù)的網(wǎng)絡(luò)設(shè)備均不會(huì)放過(guò))的Telnet服務(wù)的掃描并嘗試進(jìn)行暴力破解,其會(huì)將成功破解的設(shè)備ip地址、端口、用戶(hù)名、密碼等信息發(fā)送給黑客配置的服務(wù)器。并且同時(shí)接收C&C服務(wù)器的控制命令對(duì)目標(biāo)發(fā)動(dòng)攻擊。
1、IOT設(shè)備防重啟
由于Mirai的攻擊目標(biāo)主要設(shè)計(jì)來(lái)針對(duì)IOT設(shè)備,因此其無(wú)法將自身寫(xiě)入到設(shè)備固件中,只能存在于內(nèi)存中。所以一旦設(shè)備重啟,Mirai的bot程序就會(huì)消失。為了防止設(shè)備重啟,Mirai向看門(mén)狗發(fā)送控制碼0×80045704來(lái)禁用看門(mén)狗功能。

通常在嵌入式設(shè)備中,固件會(huì)實(shí)現(xiàn)一種叫看門(mén)狗(watchdog)的功能,有一個(gè)進(jìn)程會(huì)不斷的向看門(mén)狗進(jìn)程發(fā)送一個(gè)字節(jié)數(shù)據(jù),這個(gè)過(guò)程叫喂狗。如果喂狗過(guò)程結(jié)束,那么設(shè)備就會(huì)重啟,因此為了防止設(shè)備重啟,Mirai關(guān)閉了看門(mén)狗功能。這種技術(shù)常常被廣泛應(yīng)用于嵌入式設(shè)備的攻擊中,比如曾經(jīng)的海康威視漏洞(CVE-2014-4880)攻擊代碼中就采用過(guò)這種防重啟技術(shù)。
這里有個(gè)小插曲,2016年8月31日,一位逆向分析人員將此代碼判定錯(cuò)誤,認(rèn)為這是為了做延時(shí)而用,黑客Anna-senpai在Hackforums論壇公布源碼時(shí)嘲笑并斥責(zé)了該逆向分析人員的錯(cuò)誤。
2、進(jìn)程名隱藏
Mirai為了防止進(jìn)程名被暴露,在一定程度上做了隱藏,雖然這種隱藏并不能起到很好的作用。Mirai的具體做法是將字符串進(jìn)行了隨機(jī)化。

3、防止多實(shí)例運(yùn)行
Mirai同大多數(shù)惡意代碼一樣,需要一種互斥機(jī)制防止同一個(gè)設(shè)備多個(gè)實(shí)例運(yùn)行。但Mirai采用的手段有所不同,其通過(guò)開(kāi)啟48101端口來(lái)防止多個(gè)實(shí)例運(yùn)行,具體做法是通過(guò)綁定和監(jiān)聽(tīng)此端口,如果失敗,便會(huì)關(guān)閉已經(jīng)開(kāi)啟此端口的進(jìn)程確保只有一個(gè)實(shí)例運(yùn)行。這個(gè)特點(diǎn)是檢測(cè)網(wǎng)絡(luò)設(shè)備中是否存在Mirai的最高效的檢測(cè)方法。