2016年10月21日,美國(guó)東海岸地區(qū)遭受大面積網(wǎng)絡(luò)癱瘓,其原因?yàn)槊绹?guó)域名解析服務(wù)提供商Dyn公司當(dāng)天受到強(qiáng)力的DDoS攻擊所致。Dyn公司稱此次DDoS攻擊涉及千萬級(jí)別的IP地址(攻擊中UDP/DNS攻擊源IP幾乎皆為偽造IP,因此此數(shù)量不代表僵尸數(shù)量),其中部分重要的攻擊來源于IOT設(shè)備,攻擊活動(dòng)從上午7:00(美國(guó)東部時(shí)間)開始,直到下午1:00才得以緩解,黑客發(fā)動(dòng)了三次大規(guī)模攻擊,但是第三次攻擊被緩解未對(duì)網(wǎng)絡(luò)訪問造成明顯影響。
此次攻擊是一次跨越多個(gè)攻擊向量以及互聯(lián)網(wǎng)位置的復(fù)雜攻擊,F(xiàn)lashpoint與Akamai的分析確認(rèn)攻擊流量的來源之一是感染了Mirai僵尸的設(shè)備,因?yàn)椴糠蛛x散攻擊IP地址來自Mirai僵尸網(wǎng)絡(luò)。
Mirai僵尸在黑客Anna-senpai公布源碼后,被黑客利用并快速的形成了大量的僵尸網(wǎng)絡(luò),其中部分黑客參與了此次攻擊,目前不排除黑客Anna-senpai也參與了本次攻擊,其擁有大概30萬-40萬的Mirai僵尸肉雞。
啟明星辰ADLab分析發(fā)現(xiàn),Mirai僵尸借鑒了QBOT的部分技術(shù),并在掃描技術(shù)、感染技術(shù)等方面做了優(yōu)化,大大提升了感染速度。
Mirai僵尸重要事件回溯
此次針對(duì)Dyn域名服務(wù)器的攻擊讓古老的DDoS技術(shù)再一次震撼了互聯(lián)網(wǎng),其中最引人注目是物聯(lián)網(wǎng)僵尸網(wǎng)絡(luò)的參與,物聯(lián)網(wǎng)概念流行了近7年,大量的智能設(shè)備正不斷地接入了互聯(lián)網(wǎng),其安全脆弱性、封閉性等特點(diǎn)成為黑客爭(zhēng)相奪取的資源。目前已經(jīng)存在大量針對(duì)物聯(lián)網(wǎng)的僵尸網(wǎng)絡(luò),如QBOT、Luabot、Bashlight、Zollard、Remaiten、KTN-RM等等,并且越來越多的傳統(tǒng)僵尸也開始加入到這個(gè)物聯(lián)網(wǎng)行列中。
通過啟明星辰ADLab的調(diào)查分析,Mirai僵尸網(wǎng)絡(luò)有兩次攻擊史,其中一次是針對(duì)安全新聞工作者Brian Krebs的網(wǎng)站,攻擊流量達(dá)到665Gbps。
另一次是針對(duì)法國(guó)網(wǎng)站主機(jī)OVH的攻擊,其攻擊流量達(dá)到1.1Tbps,打破了DDoS攻擊流量歷史記錄。
2016年9月30日,黑客Anna-senpai公開發(fā)布Mirai僵尸源碼。其公布源碼的目的一則是發(fā)現(xiàn)有關(guān)機(jī)構(gòu)正在清理其掌控的僵尸設(shè)備;二則是為了讓更多的黑客使用該僵尸進(jìn)行擴(kuò)散,掩人耳目,隱藏自己的蹤跡。
Mirai僵尸重要事件回顧
1.2016年8月31日,逆向分析人員在malwaremustdie博客上公布mirai僵尸程序詳細(xì)逆向分析報(bào)告,此舉公布的C&C而惹怒黑客Anna-senpai。
2.2016年9月20日,著名的安全新聞工作者Brian Krebs的網(wǎng)站KrebsOnSecurity.com受到大規(guī)模的DDOS攻擊,其攻擊峰值達(dá)到665Gbps,Brian Krebs推測(cè)此次攻擊由Mirai僵尸發(fā)動(dòng)。
3.2016年9月20日,Mirai針對(duì)法國(guó)網(wǎng)站主機(jī)OVH的攻擊突破DDoS攻擊記錄,其攻擊量達(dá)到1.1Tpbs,最大達(dá)到1.5Tpbs4.2016年9月30日,Anna-senpai在hackforums論壇公布mirai源碼,并且嘲笑之前逆向分析人員的錯(cuò)誤分析。
5.2016年10月21日,美國(guó)域名服務(wù)商Dyn遭受大規(guī)模DDoS攻擊,其中重要的攻擊源確認(rèn)來自于Mirai僵尸。
在2016年10月初,Imperva Incapsula的研究人員通過調(diào)查到的49,657個(gè)感染設(shè)備源分析發(fā)現(xiàn),其中主要感染設(shè)備有CCTV攝像頭、DVRs以及路由器。根據(jù)這些調(diào)查的設(shè)備IP地址發(fā)現(xiàn)其感染范圍跨越了164個(gè)國(guó)家或地區(qū),其中感染量最多的是越南、巴西、美國(guó)、中國(guó)大陸和墨西哥。
直到2016年10月26日,我們通過Mirai特征搜索shodan發(fā)現(xiàn),當(dāng)前全球感染Mirai的設(shè)備已經(jīng)超過100萬臺(tái),其中美國(guó)感染設(shè)備有418,592臺(tái),中國(guó)大陸有145,778臺(tái),澳大利亞94,912臺(tái),日本和中國(guó)香港分別為47,198和44,386臺(tái)。
在該地圖中顏色越深,代表感染的設(shè)備越多,可以看出感染Mirai最多的幾個(gè)國(guó)家有美國(guó)、中國(guó)和澳大利亞。
Mirai源碼分析Mirai源碼是2016年9月30日由黑客Anna-senpai在論壇上公布,其公布在github上的源碼被star了2538次,被fork了1371次。
Mirai通過掃描網(wǎng)絡(luò)中的Telnet等服務(wù)來進(jìn)行傳播,實(shí)際感染到設(shè)備bot并不充當(dāng)感染角色,其感染通過黑客配置服務(wù)來實(shí)施,這個(gè)服務(wù)被稱為L(zhǎng)oad。黑客的另外一個(gè)服務(wù)器C&C服務(wù)主要用于下發(fā)控制指令,對(duì)目標(biāo)進(jìn)行實(shí)施攻擊。
通過我們對(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)一旦通過Telnet服務(wù)進(jìn)入,便強(qiáng)制關(guān)閉Telnet服務(wù),以及其他入口如:SSH和web入口,并且占用服務(wù)端口防止這些服務(wù)復(fù)活。
(5)過濾掉通用電氣公司、惠普公司、美國(guó)國(guó)家郵政局、國(guó)防部等公司和機(jī)構(gòu)的IP,防止無效感染。
(6)獨(dú)特的GRE協(xié)議洪水攻擊,加大了攻擊力度。
Mirai感染示意圖:
上圖簡(jiǎn)單顯示了Mirai僵尸的感染過程,與普通僵尸感染不同的是,其感染端是通過黑客服務(wù)端實(shí)施的,而不是靠bot來實(shí)施感染。
感染到設(shè)備端的 bot程序通過隨機(jī)策略掃描互聯(lián)網(wǎng)上的設(shè)備,并會(huì)將成功猜解的設(shè)備用戶名、密碼、IP地址,端口信息以一定格式上傳給sanListen,sanLiten解析這些信息后交由Load模塊來處理,Load通過這些信息來登錄相關(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è)備(掃描過程不只針對(duì)IOT設(shè)備,只要開啟Telnet服務(wù)的網(wǎng)絡(luò)設(shè)備均不會(huì)放過)的Telnet服務(wù)的掃描并嘗試進(jìn)行暴力破解,其會(huì)將成功破解的設(shè)備ip地址、端口、用戶名、密碼等信息發(fā)送給黑客配置的服務(wù)器。并且同時(shí)接收C&C服務(wù)器的控制命令對(duì)目標(biāo)發(fā)動(dòng)攻擊。
1、IOT設(shè)備防重啟
由于Mirai的攻擊目標(biāo)主要設(shè)計(jì)來針對(duì)IOT設(shè)備,因此其無法將自身寫入到設(shè)備固件中,只能存在于內(nèi)存中。所以一旦設(shè)備重啟,Mirai的bot程序就會(huì)消失。為了防止設(shè)備重啟,Mirai向看門狗發(fā)送控制碼0x80045704來禁用看門狗功能。
通常在嵌入式設(shè)備中,固件會(huì)實(shí)現(xiàn)一種叫看門狗(watchdog)的功能,有一個(gè)進(jìn)程會(huì)不斷的向看門狗進(jìn)程發(fā)送一個(gè)字節(jié)數(shù)據(jù),這個(gè)過程叫喂狗。如果喂狗過程結(jié)束,那么設(shè)備就會(huì)重啟,因此為了防止設(shè)備重啟,Mirai關(guān)閉了看門狗功能。這種技術(shù)常常被廣泛應(yīng)用于嵌入式設(shè)備的攻擊中,比如曾經(jīng)的海康威視漏洞(CVE-2014-4880)攻擊代碼中就采用過這種防重啟技術(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采用的手段有所不同,其通過開啟48101端口來防止多個(gè)實(shí)例運(yùn)行,具體做法是通過綁定和監(jiān)聽此端口,如果失敗,便會(huì)關(guān)閉已經(jīng)開啟此端口的進(jìn)程確保只有一個(gè)實(shí)例運(yùn)行。這個(gè)特點(diǎn)是檢測(cè)網(wǎng)絡(luò)設(shè)備中是否存在Mirai的最高效的檢測(cè)方法。
4、重綁定技術(shù)防止外來者搶占資源
Mirai有一個(gè)特點(diǎn)就是具有排他性,設(shè)備一旦感染,其會(huì)通過端口來關(guān)閉Telnet(23)、SSH(22,編譯時(shí)可選刪除項(xiàng))、HTTP(80,編譯時(shí)可選刪除項(xiàng))服務(wù)并且會(huì)阻止這些服務(wù)進(jìn)行重啟,其主要實(shí)現(xiàn)方法是通過kill強(qiáng)制關(guān)閉這三個(gè)服務(wù)進(jìn)程,并強(qiáng)行占用這些服務(wù)開啟時(shí)所需要的端口。此舉Mirai既可以防止設(shè)備被其他惡意軟件感染,也可以防止安全人員從外部訪問該設(shè)備,提高M(jìn)irai的取證難度。此功能實(shí)現(xiàn)在killer.c文件中。
Telnet服務(wù)的重綁定實(shí)現(xiàn)如下圖,SSH和HTTP服務(wù)采用類似的方式實(shí)現(xiàn)。
SSH服務(wù)的重綁定實(shí)現(xiàn):
HTTP服務(wù)的重綁定實(shí)現(xiàn):
通過對(duì)實(shí)際樣本的分析我們發(fā)現(xiàn),大部分黑客并沒有對(duì)SSH和HTTP進(jìn)行重綁定操作,絕大部分都只針對(duì)于Telnet服務(wù)進(jìn)行了重綁定。
5、干掉競(jìng)爭(zhēng)對(duì)手,獨(dú)占資源
Mirai會(huì)通過一種 memory scraping的技術(shù)干掉設(shè)備中的其他惡意軟件,其具體做法是搜索內(nèi)存中是否存在QBOT特征、UPX特征、Zollard蠕蟲特征、Remaiten bot特征來干掉對(duì)手,以達(dá)到獨(dú)占資源的目的。
此外,Mirai如果發(fā)現(xiàn)anime惡意軟件,同樣也會(huì)強(qiáng)行干掉它。
6、可感染設(shè)備探測(cè)
Mirai僵尸隨機(jī)掃描網(wǎng)絡(luò)中IOT設(shè)備的Telnet服務(wù)并通過預(yù)植的用戶名密碼進(jìn)行暴力破解,然后將掃描得到的設(shè)備IP地址、端口、設(shè)備處理器架構(gòu)等信息回傳給Load服務(wù)器。這里要注意的是,Mirai的隨機(jī)掃描是有一個(gè)過濾條件的,其中比較有意思就是他會(huì)過濾掉通用電氣公司、惠普公司、美國(guó)國(guó)家郵政局、國(guó)防部等公司和機(jī)構(gòu)的IP地址。
Mirai僵尸中內(nèi)置有60余個(gè)用戶名和密碼,其中內(nèi)置的用戶名和密碼是加密處理過的,加密算法是通過簡(jiǎn)單的單字節(jié)多次異或?qū)崿F(xiàn),其密鑰為0xDEADBEEF, 解密密鑰為0xEFBEADDE。
Mirai使用高級(jí)SYN掃描技術(shù)對(duì)網(wǎng)絡(luò)中的設(shè)備進(jìn)行掃描破解,其速度僵尸程序QBOT所采用的掃描技術(shù)快80倍,資源消耗減少至少達(dá)20倍。因此具備強(qiáng)大的掃描感染能力,黑客在收集肉雞過程中,曾經(jīng)每秒可新增500個(gè)IOT設(shè)備。
Telnet服務(wù)掃描實(shí)現(xiàn)如下:
當(dāng)Mirai掃描到Telnet服務(wù)時(shí),會(huì)連接Telnet并進(jìn)行暴力登錄嘗試。Mirai首先會(huì)使用內(nèi)置的用戶名和密碼嘗試登錄,之后通過發(fā)送一系列命令來判定登錄成功與否。如果成功則試圖進(jìn)行一些操作,比如開啟shell等操作,其發(fā)送的命令被初始化在一個(gè)Table中,如下表所示:
命令操作類型 | Index | 有效? | 功能描述 |
TABLE_SCAN_CB_DOMAIN | 18 | yes | domain to connect to |
TABLE_SCAN_CB_PORT | 19 | yes | Port to connect to |
TABLE_SCAN_SHELL | 20 | yes | ‘shell’ to enable shell access |
TABLE_SCAN_ENABLE | 21 | yes | ‘enable’ to enable shell access |
TABLE_SCAN_SYSTEM | 22 | yes | ‘system’ to enable shell access |
TABLE_SCAN_SH | 23 | yes | ‘sh’ to enable shell access |
TABLE_SCAN_QUERY | 24 | yes | echo hex string to verify login |
TABLE_SCAN_RESP | 25 | yes | utf8 version of query string |
TABLE_SCAN_NCORRECT | 26 | yes | ‘ncorrect’ to fast-check for invalid password |
TABLE_SCAN_PS | 27 | no | “/bin/busybox ps” |
TABLE_SCAN_KILL_9 | 28 | no | “/bin/busybox kill -9 “ |
以上表格中只有TABLE_SCAN_PS和TABLE_SCAN_KILL_9進(jìn)行了初始化而未對(duì)目標(biāo)設(shè)備進(jìn)行預(yù)執(zhí)行操作。從20到26的操作均是在發(fā)送用戶名和密碼后的登錄驗(yàn)證操作。其中TABLE_SCAN_CB_DOMAIN和TABLE_SCAN_CB_PORT為黑客配置的Load服務(wù)器,該服務(wù)器用于獲取有效的Telnet掃描結(jié)果,掃描結(jié)果中包含IP地址、端口、Telnet用戶名和密碼等信息。發(fā)送信息的格式如下:
zero(1個(gè)字節(jié)) | IP地址(4bytes) | 端口(2bytes) | 用戶名長(zhǎng)度(4bytes) | 用戶名(muti-bytes) | 密碼長(zhǎng)度(4bytes) | 密碼(muti-bytes) |
7、連接C&C,等候發(fā)動(dòng)攻擊
Mirai的攻擊類型包含UDP攻擊、TCP攻擊、HTTP攻擊以及新型的GRE攻擊。其中,GRE攻擊就是著名安全新聞工作者Brian Krebs的網(wǎng)站KrebsOnSecurity.com遭受的主力攻擊形式,攻擊的初始化代碼如下:
C&C會(huì)被初始化在一張表中,當(dāng)Mirai回連C&C時(shí),會(huì)從表中取出C&C進(jìn)行連接。
連接C&C成功后,Mirai會(huì)進(jìn)行上線,其上線過程非常簡(jiǎn)單,自身簡(jiǎn)單向C&C發(fā)送4個(gè)字節(jié)的0。
接下來會(huì)等候C&C的控制命令,司機(jī)對(duì)目標(biāo)發(fā)動(dòng)攻擊。對(duì)于接受控制命令處做了一些處理,比如首先會(huì)進(jìn)行試讀來做預(yù)處理(控制指令長(zhǎng)度判定等等),最后才會(huì)接受完整的控制命令。
當(dāng)接受到控制命令后,Mirai對(duì)控制命令做解析并且執(zhí)行。控制命令格式如下:
type Attackstruct {
Duration???uint32
Type???????uint8
Targets????map[uint32]uint8??? //Prefix/netmask
Flags??????map[uint8]string??? // key=value
}
其中,前4個(gè)字節(jié)為攻擊時(shí)長(zhǎng),接下來的4個(gè)字節(jié)為攻擊類型(攻擊ID),然后是攻擊目標(biāo),攻擊目標(biāo)格式如下:
目標(biāo)數(shù)(4個(gè)字節(jié)) | IP地址(4個(gè)字節(jié)) | MASK(一個(gè)字節(jié)) | IP地址(4個(gè)字節(jié)) | MASK(一個(gè)字節(jié)) | IP地址….MASK… |
最后是Flags,F(xiàn)lag是一系列的鍵值對(duì)數(shù)據(jù),結(jié)構(gòu)類似于攻擊目標(biāo)的格式。下面列出Mirai僵尸網(wǎng)絡(luò)攻擊功能列表。
攻擊類型(32位) | 類型值 | 攻擊函數(shù) |
ATK_VEC_UDP | 0 | attack_udp_generic |
ATK_VEC_VSE | 1 | attack_udp_vse |
ATK_VEC_DNS | 2 | attack_udp_dns |
ATK_VEC_UDP_PLAIN | 9 | attack_udp_plain |
ATK_VEC_SYN | 3 | attack_tcp_syn |
ATK_VEC_ACK | 4 | attack_tcp_ack |
ATK_VEC_STOMP | 5 | attack_tcp_stomp |
ATK_VEC_GREIP | 6 | attack_gre_ip |
ATK_VEC_GREETH | 7 | attack_gre_eth |
ATK_VEC_PROXY | 8 | attack_app_proxy(已經(jīng)被取消) |
ATK_VEC_HTTP | 10 | attack_app_http |
這其中的GRE攻擊也就是2016年。
二、scanListen分析
ScanListen主要用于處理Bot掃描得到的設(shè)備信息(ip、端口、用戶名、密碼),并將其轉(zhuǎn)化為如下格式后將其輸入給Load處理。
三、Load分析
Load模塊的主要功能是處理scanListen的輸入并將其解析后針對(duì)每個(gè)設(shè)備實(shí)施感染。其感染實(shí)現(xiàn)方法如下:
(1)首先通過Telnet登陸目標(biāo)設(shè)備。
(2)登陸成功后,嘗試運(yùn)行命令/bin/busybox ps來確認(rèn)是否可以執(zhí)行busybox命令。
(3)遠(yuǎn)程執(zhí)行/bin/busybox cat /proc/mounts;用于發(fā)現(xiàn)可讀寫的目錄。
(4)如果發(fā)現(xiàn)可用于讀寫的文件目錄,進(jìn)入該目錄并將/bin/echo拷貝到該目錄,文件更名為dvrHelpler,并開啟所有用戶的讀寫執(zhí)行權(quán)限。
(5)接下來通過執(zhí)行命令”/bin/busybox cat /bin/echo\r\n”來獲取當(dāng)前設(shè)備架構(gòu)信息。
(6)如果獲取架構(gòu)信息成功,樣本試圖通過三種方式對(duì)設(shè)備進(jìn)行感染,這三種方式分別為echo方式、wget方式、tftp方式。
(7)接下來通過Telnet遠(yuǎn)程執(zhí)行下放的程序。
(8)最后遠(yuǎn)程刪除bot程序。
總 結(jié)
僵尸網(wǎng)絡(luò)已成為全球面臨的共同問題,其攻擊不同于其他以竊密、遠(yuǎn)控控制為主的惡意代碼,其通過掌握著的巨型僵尸網(wǎng)絡(luò)可以在任何時(shí)候?qū)θ魏文繕?biāo)發(fā)動(dòng)DDoS攻擊。僵尸的感染對(duì)象已經(jīng)從服務(wù)器、PC、智能手機(jī),擴(kuò)展向攝像頭、路由器、家居安防系統(tǒng)、智能電視、智能穿戴設(shè)備,甚至是嬰兒監(jiān)視器,任何互聯(lián)網(wǎng)連接的設(shè)備都可能成為一個(gè)潛在的目標(biāo)。而一般用戶是很難注意到被感染的狀況的。Mirai僵尸由于源碼的開放可能正在迅速的擴(kuò)散,其攻擊的流量特征也可能快速變化而難以監(jiān)測(cè)。由于受感染目標(biāo)多以IOT設(shè)備為主,所有的密碼均固化在固件中,因此即便重啟后Mirai從內(nèi)存中消失也無法杜絕二次感染,并且隱藏在這種嵌入式設(shè)備中是極難判定其是否受到惡意感染。
緩解措施:
(1)如果感染Mirai,請(qǐng)重啟設(shè)備,并且請(qǐng)求設(shè)備廠商更新固件剔除Telnet服務(wù)。
(2)不必要聯(lián)網(wǎng)的設(shè)備盡量不要接入到互聯(lián)網(wǎng)中。
(3)通過端口掃描工具探測(cè)自己的設(shè)備是否開啟了SSH (22), Telnet (23)、 HTTP/HTTPS (80/443)服務(wù),如果開啟,請(qǐng)通知技術(shù)人員禁用這些服務(wù)。
來源:?jiǎn)⒚餍浅紸Dlabs