1. 程式人生 > >物聯網病毒原理-Mirai原始碼分析

物聯網病毒原理-Mirai原始碼分析

1. 概述

Mirai病毒是物聯網病毒的鼻祖,由於其具備了所有僵屍網路病毒的基本功能(爆破、C&C連線、DDoS攻擊),後來的許多物聯網病毒都是基於Mirai原始碼進行更改的。所以對研究Mirai的原始碼可以讓我們對物聯網病毒有個全面的瞭解。
專案地址:https://github.com/jgamblin/Mirai-Source-Code
1

2. 攻擊流程

2

1.黑客在黑客伺服器上執行loader,loader開始對公網上的物聯網裝置進行telnet爆破。

2.爆破成功後,遠端執行命令,使肉雞從檔案伺服器上下載mirai病毒。

3.檢測是否可以使用wget和tftp命令,若不行則使用dlr程式下載mirai病毒。

4.肉雞執行mirai病毒,會主動跟C&C伺服器進行通訊。

5.C&C伺服器下發DDoS、傳播指令給肉雞,後者執行相應的操作。

3. 原始碼分析

原始碼包含5個核心程式:loader、bot、dlr、cnc、tools。

3

loader:黑客攻擊程式,執行在黑客電腦上,主要功能為telnet爆破。

bot: 被爆破成功後,肉雞下載的病毒程式,主要功能為telnet弱密碼掃描、DDoS攻擊。

dlr: 下載程式,被包含在loader中,只要功能是,當目標裝置不支援wget、tftp命令時,使用dlr程式下載mirai病毒。

cnc: Go語言開發的肉雞控制程式,執行在C&C伺服器上。主要功能為接受黑客指令、控制肉雞發起DDoS。

tools: 幾個單獨的工具,黑客自己使用。包括wget、禁止mirai被gdb、資料加解密、接受爆破的telnet使用者名稱密碼等。

4. loader分析

4.1 main分析

下圖為loader的main.c的程式碼,主要呼叫了5個核心函式:binary_init、server_create、fgets、telnet_info_parse、server_queue_telnet,功能依次為:載入dlr、多執行緒發起telnet請求、迴圈讀取telnet返回資訊、解析telnet返回資訊、遠端執行惡意操作。
4

4.2 binary_init分析

binary_init在binary.c檔案裡,首先會呼叫glob遍歷bins下的所有平臺對應的下載程式dlr.*,然後呼叫load載入這些程式。
5

4.3 dlr分析

我們順勢來看看 dlr是什麼來的,檢視其程式碼dlr/main.c,程式碼功能一目瞭然,就是使用socket從目標IP下載 mirai病毒。首先呼叫open建立dvrHelper檔案,然後使用socket連線黑客的檔案伺服器,獲取[ip]/bins/mirai的資料,寫入到dvrHelper檔案中。dlr的作用就是,在目標IoT裝置無法使用wget、tftp命令的時候,使用它來下載mirai病毒。
6

4.4 server_create分析

server_create在server.c中,功能為建立多個後臺執行緒,進行telnet爆破,爆破的實現程式碼如下。
7

4.5 telnet_info_parse分析

telnet_info_parse位於telnet_info.c檔案中,解析telnet的原理很簡單,就是通過冒號間的順序進行隔斷,提取出目標裝置的資訊:IP、埠、使用者名稱、密碼、裝置平臺。
8

4.6 server_queue_telnet分析

函式經過層層封裝,最後執行的是下載 mirai的操作,server_queue_telnet -> server_telnet_probe -> *worker -> handle_event,都在server.c中。handle_event裡包含了所有遠端執行的命令,如下TELNET_COPY_ECHO的作用為拷貝/bin/echo到當前目錄,TELNET_DETECT_ARCH的作用為探測目標裝置的作業系統。
9

然後是核心的下載命令,分別為UPLOAD_ECHO、UPLOAD_WGET、UPLOAD_TFTP,功能分別為使用dlr、wget、tftp下載mirai病毒。
10

5. cnc分析

5.1 main分析

cnc為跑在C&C伺服器上的僵屍網路服務端,用於下發C&C命令。它會監聽兩個埠:23和101。
11

23埠有兩個通訊用途:肉雞上傳資訊和管理員配置資訊,分別對應NewBot和NewAdmin函式。101埠的用途為供攻擊使用者傳送攻擊指令,對應NewApi函式。可能有點繞,什麼是攻擊使用者?就是說這個C&C伺服器相當於一個攻擊平臺,黑客搭了這個C&C伺服器後,可以向暗網中的使用者租售DDoS服務,使用者交了錢後,黑客將傳送一個攻擊賬號給使用者,使用者使用該賬號登陸101埠的攻擊平臺,就可以指定要DDoS的IP實施攻擊了。如下還是main.go檔案的程式碼。
12

5.2 NewBot分析

NewBot位於bot.go中,用於接收肉雞上傳上來的版本資訊、平臺型別。
13

5.3 NewAdmin分析

NewAdmin位於admin.go檔案,用於黑客遠端新增賬號名、賬號密碼和殭屍主機數量。
14

5.4 NewApi分析

NewApi是對NewAttack的封裝,後者用於給肉雞下發DDoS命令,該函式位於attack.go中。下圖為DDoS攻擊包的構造引數Flag。
15

通過對這些flag的自由搭配,構造出各個DDoS攻擊包,入、如:UDP flood、DNS flood、SYN flood等等。
16

6. bot分析

6.1 main分析

先來看main.c,程式碼首先會做一些淨化環境的操作,先呼叫ensure_single_instance確保自己單程序執行,避免重複執行。然後還會隱藏argv0、process name等操作。
17

淨化了執行環境後,程式碼就開始呼叫attack_init和kill_init開始進行核心的惡意操作了。
18

6.2 attack_init分析

attack_init在attack.c中,用於初始化各種DDoS攻擊包。
19

傳送各種DDoS攻擊包的實現程式碼在attack_app.c、attack_gre.c、attack_tcp.c和attack_udp.c中,分別http、gre、tcp、udp洪水攻擊的程式碼。
20

這4個攻擊程式碼的結構都大同小異,這裡以tcp和udp為例進行講解。

6.3 attack_tcp分析

原始套接字發包,偽造源IP,迴圈傳送tcp洪水攻擊包。
21

6.4 attack_app分析

構造http洪水攻擊包。
22

6.5 kill_init分析

主要用於排除異己,殺掉一些埠對應的服務,如下圖,它會殺死23、22、80埠的程序。
23

最後,病毒會時刻C&C保持通訊,每隔一段時間上報肉雞資訊,以及接收命令。
24

7. 總結

至此,Mirai病毒原始碼分析完畢,通過該次分析,可以發現,物聯網病毒並沒有想象中那麼神祕,可以把它們看作低配版Linux病毒。Mirai可以說是一個完美的IoT裝置攻擊病毒,程式碼結構清晰健全,以至於後續的IoT病毒都是在Mirai的基礎上進行修改的,只不過是多了些IoT裝置的漏洞利用功能。由於物聯網裝置的OS簡單,沒有較高階的功能,所以目前來說IoT病毒最主要的攻擊操作還是DDoS。