精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當前位置:安全行業動態 → 正文

深度解析:惡意軟件“Mirai”源代碼的結構及其對策

責任編輯:editor005 作者:全球IT風尚/編譯 |來源:企業網D1Net  2017-01-15 19:27:41 本文摘自:51CTO

2016年9月份以來,發生了多起大規模DDoS攻擊事件。本文針對這些攻擊事件中使用的惡意軟件“Mirai”的源代碼進行分析,進一步介紹Bot(客戶端)的結構,以及其應對方法。

一、 Mirai Botnet是什么

2016年9月13日晚,美國著名安全記者Brian Krebs氏的網站“Krebs on Security”被DDoS攻擊,mirai Botnet發動了此次攻擊。Mirai主要是以網絡攝像頭、路由器、數碼錄像機等IoT設備為跳臺進行DDoS攻擊。

據受到攻擊后Krebs氏的博客報道,保護該網站的Akamai觀測到在高峰時期受到了有史以來經歷的最大規模攻擊近2倍的流量訪問。

另外,2016年10月21日Twitter、Netflix等利用DNS服務進行的DDoS攻擊,也被推斷利用了Mirai僵尸網絡。

然后在Krebs氏網站受到攻擊后,黑客平臺上Mirai的源代碼被公開成為了很大的話題。隨后源代碼又在GitHub上被轉載,誰都可以看到具體內容。

源代碼被公開,Mirai Botnet以出廠設置的密碼未被更改的IoT設備為目標,進行一般的字典攻擊擴大感染范圍。據說在進行前述的攻擊時,也有幾十萬臺的設備受到僵尸網絡攻擊。

近年來各種各樣的IoT設備得到普及,存在漏洞的設備也在不斷增加,受到大規模的DDoS攻擊的可能性也會增大。另外,通常這些設備采用的架構是不同于個人的電腦等的多種多樣的,不過,Mirai可應對ARM、ARM 7、MIPS、PowerPC、SH4、SPARC x86等各種各樣的架構,這與大規模感染的擴大有一定關系吧。

本稿中,以現在GitHub上被公開的代碼為基礎,解說Mirai Botnet的運作,并且反思使家庭及企業的設備遠離僵尸網絡的自衛對策。

二、 Mirai Botnet的構成

被公開的Mirai Botnet的源代碼可大致分為以下3個部分:

1. 攻擊者操作的C&C(Command and Control)服務器功能

2. C&C服務器中被操作的Bot功能

3. Bot程序發布的Downloader功能

C&C服務器部分為Go語言,Bot、下載部分以及其他的加密工具等主要為C語言。對照被公開存儲的目錄,Mirai的構成如下(List 1)

深度解析:“Mirai”源代碼的結構及其對策

  List 1 目錄構成

Mirai Botnet 是攻擊者通過①C&C服務器向②Bot發送指令,形成以大量的Bot為攻擊對象的C&C中心型僵尸網絡。同時,Bot會掃描可感染的設備,將找到的設備信息發送給Report服務器,由③downloader植入Bot程序。(圖1)

深度解析:“Mirai”源代碼的結構及其對策

  (圖1.Mirai的動作)

在這里,首先從C&C服務器的代碼開始解讀Mirai。

三、 C&C服務器

◆ Main函數

由于Mirai的C&C服務器部分為Go語言,最初被執行的mirai/cnc目錄中main.go文件內的main函數被讀取(List 2)。再者,以下代碼中雖然有補充的評語,但是,日語之外的評語是原本就記載的內容。

深度解析:“Mirai”源代碼的結構及其對策

  List 2 main.go內的main函數

Mirai的C&C服務器起初是建立在Telne服務器與API服務器之間的。“go~”的部分是利用Go語言degoroutine的非同期被處理的部分。

apiHandler函數中的經由API初期化接受來自攻擊者的操作處理程序。initialHandler函數中,初期化向連接Telnet的Bot發送指令的處理程序以及實現C&C服務器上指令行接口的處理程序(List 3)。

深度解析:“Mirai”源代碼的結構及其對策

  List 3 main.go 的initialHandler函數

也就是說,這個C&C服務器的操作可能利用API,也可能通過Telnet連接CLI發送指令。解讀源代碼的話,無論使用哪個方法都是需要認證的。

◆ 認證部分

從api.go文件種Handle函數內的數據看,送來的要求中含有的apikey沒有在C&C服務器內登錄的話,能夠讀取未接收的指令。(List 4)

深度解析:“Mirai”源代碼的結構及其對策

  List 4 api.go中的Handle函數的認證部分

admin.go中實裝的處理程序也同樣,在CLI上操作時需要使用用戶名和密碼登錄。(List 5)

深度解析:“Mirai”源代碼的結構及其對策

  List 5 admin.go中的Handle函數的認證部分

另外,命令行在登錄時要求輸入俄羅斯語,因此推斷制作者或利用者可能是俄羅斯圈的人。

◆ 用戶管理部分

那么,怎樣才能把這些信息登記在數據庫上呢?讀取源代碼訪問C&C服務器上的CLI時,如果是管理者用戶的話可以從CLI注冊登錄(List 6)。

深度解析:“Mirai”源代碼的結構及其對策

  List 6 admin.go的Handle函數內的用戶登錄部分

然而,管理員賬號本身是預先插入數據庫中的,被公開的代碼中沒有管理員賬戶登錄的相關內容。

另外,數據庫的users桌面上,除username及password之外,還有max_bots、last_paid、cooldown、duration_limit等列,這些列被用于創建攻擊指令,因此每個用戶能夠利用的Bot數量、攻擊間隔、賬號等均受控制。并且,用戶向僵尸網絡持有者支付金錢的時間等都保存在C&C服務器的數據庫中。(List 7)

深度解析:“Mirai”源代碼的結構及其對策

  List 7 database.go內的CreateUser函數

綜上所述,是否可以認為Mirai Botnet的所有者使不特定的多數人以金錢等交換利用了僵尸網絡呢。

◆ Bot 管理部分

接下來,看看Bot管理部分吧。首先從Bot連接C&C服務器的話,main.go文件中的initialHandler函數中NewBot.Handle函數被喚起,根據Handle函數的處理Bot信息將被添加到列表中(List 8)。

深度解析:“Mirai”源代碼的結構及其對策

  List 8 bot.go內的Handle函數

存儲Bot信息的clientList是全球變數,main.go內運行main函數之前就被制作了。另外, clientList在新制作的時候,非同步接收的Worker制作Bot指令,等待Bot指令。

◆ 攻擊指令的制作部分

接下來,以攻擊者C&C服務器的輸入為基礎,看看Bot指令的制作部分吧。在API、CLI等輸入指定攻擊種類·攻擊對象的命令,便會在attack.go內的NewAttack函數內完成應對接受指令的Flag設置。在同文件夾中的attackInfoLookup Map內定義了可能利用的攻擊種類(表1)(List 9)。

深度解析:“Mirai”源代碼的結構及其對策

  表1 Mirai Botnet可執行的攻擊種類

深度解析:“Mirai”源代碼的結構及其對策

  List 9 attack.go內attackInfoLookup Map

從表1了解到,Mirai可使Bot受到各種各樣的DDoS攻擊。

另外,VSE平臺攻擊中被瞄準的游戲引起“Source Engine”是非常有人氣的一款在線游戲“反恐精英”中使用的引擎。這樣被特意定義,由此可見這樣的在線游戲可能被作為攻擊的目標。利用GRE等次要的協議進行攻擊是有可能的,因此Mirai可回避一般的DDoS攻擊對策。

然后把這些攻擊Falg設定組裝后,同文件的Build函數內將這些攻擊設定為二進制向Bot發信。這樣就可以向Bot完成數據的發送。

◆ 指令發送部分

最后,看看從C&C服務器向Bot發送指令的流程吧。二進制的攻擊設定移交至clientList.go文件內的QueueBuf函數,如名字所示保持Bot的指示被放置在緩沖區列隊中(List 10)。

深度解析:“Mirai”源代碼的結構及其對策

  List 10 clientList.go的QueueBuf函數

接收信息的atkQueue頻道從持有的Bot信息列表到攻擊者可利用的Bot上線數為止在Bot單體的緩沖區排列攻擊設定。

深度解析:“Mirai”源代碼的結構及其對策

  List 11 clientList.go內的worker函數

然后,排列的攻擊設定最終會被發送到Bot單體(List 12)。

深度解析:“Mirai”源代碼的結構及其對策

  List 12 bot.go內的QueueBuf函數

四、Bot(客戶端)

接下來,看看Bot客戶端的運作吧。由于客戶端是C語言編寫的,首先讓我們從mirai/bot目錄以下的main.c開始解讀吧。

◆C&C的連接部分

main.c內的main函數里,啟動后本身的過程名偽裝成隨機的名字,無線循環地呼出establish_connection函數,將加密的C&C服務器的域名和Bot解密后連接在一起(List 13)。

深度解析:“Mirai”源代碼的結構及其對策

  List 13 main.c內的main函數與establish_connection函數

在這里,establish_connection函數里名為resolve_fudc函數被同文件內anti_gdb_entry函數替換,所以實際上也被稱作resolve_cnc_addr函數(List 14)。

況且,C&C服務器的域名中,對table.c文件中被定義為“0xdeadbeef”的值實施seed值XOR加密,C&C服務器的解析會變得較困難。

深度解析:“Mirai”源代碼的結構及其對策

  List 14 main.c內的anti_gdb_entry函數與resolve_cnc_addr函數

成功連接后,Bot向C&C服務器中發送二進制“

關鍵字:Miraimain函數c文件

本文摘自:51CTO

x 深度解析:惡意軟件“Mirai”源代碼的結構及其對策 掃一掃
分享本文到朋友圈
當前位置:安全行業動態 → 正文

深度解析:惡意軟件“Mirai”源代碼的結構及其對策

責任編輯:editor005 作者:全球IT風尚/編譯 |來源:企業網D1Net  2017-01-15 19:27:41 本文摘自:51CTO

2016年9月份以來,發生了多起大規模DDoS攻擊事件。本文針對這些攻擊事件中使用的惡意軟件“Mirai”的源代碼進行分析,進一步介紹Bot(客戶端)的結構,以及其應對方法。

一、 Mirai Botnet是什么

2016年9月13日晚,美國著名安全記者Brian Krebs氏的網站“Krebs on Security”被DDoS攻擊,mirai Botnet發動了此次攻擊。Mirai主要是以網絡攝像頭、路由器、數碼錄像機等IoT設備為跳臺進行DDoS攻擊。

據受到攻擊后Krebs氏的博客報道,保護該網站的Akamai觀測到在高峰時期受到了有史以來經歷的最大規模攻擊近2倍的流量訪問。

另外,2016年10月21日Twitter、Netflix等利用DNS服務進行的DDoS攻擊,也被推斷利用了Mirai僵尸網絡。

然后在Krebs氏網站受到攻擊后,黑客平臺上Mirai的源代碼被公開成為了很大的話題。隨后源代碼又在GitHub上被轉載,誰都可以看到具體內容。

源代碼被公開,Mirai Botnet以出廠設置的密碼未被更改的IoT設備為目標,進行一般的字典攻擊擴大感染范圍。據說在進行前述的攻擊時,也有幾十萬臺的設備受到僵尸網絡攻擊。

近年來各種各樣的IoT設備得到普及,存在漏洞的設備也在不斷增加,受到大規模的DDoS攻擊的可能性也會增大。另外,通常這些設備采用的架構是不同于個人的電腦等的多種多樣的,不過,Mirai可應對ARM、ARM 7、MIPS、PowerPC、SH4、SPARC x86等各種各樣的架構,這與大規模感染的擴大有一定關系吧。

本稿中,以現在GitHub上被公開的代碼為基礎,解說Mirai Botnet的運作,并且反思使家庭及企業的設備遠離僵尸網絡的自衛對策。

二、 Mirai Botnet的構成

被公開的Mirai Botnet的源代碼可大致分為以下3個部分:

1. 攻擊者操作的C&C(Command and Control)服務器功能

2. C&C服務器中被操作的Bot功能

3. Bot程序發布的Downloader功能

C&C服務器部分為Go語言,Bot、下載部分以及其他的加密工具等主要為C語言。對照被公開存儲的目錄,Mirai的構成如下(List 1)

深度解析:“Mirai”源代碼的結構及其對策

  List 1 目錄構成

Mirai Botnet 是攻擊者通過①C&C服務器向②Bot發送指令,形成以大量的Bot為攻擊對象的C&C中心型僵尸網絡。同時,Bot會掃描可感染的設備,將找到的設備信息發送給Report服務器,由③downloader植入Bot程序。(圖1)

深度解析:“Mirai”源代碼的結構及其對策

  (圖1.Mirai的動作)

在這里,首先從C&C服務器的代碼開始解讀Mirai。

三、 C&C服務器

◆ Main函數

由于Mirai的C&C服務器部分為Go語言,最初被執行的mirai/cnc目錄中main.go文件內的main函數被讀取(List 2)。再者,以下代碼中雖然有補充的評語,但是,日語之外的評語是原本就記載的內容。

深度解析:“Mirai”源代碼的結構及其對策

  List 2 main.go內的main函數

Mirai的C&C服務器起初是建立在Telne服務器與API服務器之間的。“go~”的部分是利用Go語言degoroutine的非同期被處理的部分。

apiHandler函數中的經由API初期化接受來自攻擊者的操作處理程序。initialHandler函數中,初期化向連接Telnet的Bot發送指令的處理程序以及實現C&C服務器上指令行接口的處理程序(List 3)。

深度解析:“Mirai”源代碼的結構及其對策

  List 3 main.go 的initialHandler函數

也就是說,這個C&C服務器的操作可能利用API,也可能通過Telnet連接CLI發送指令。解讀源代碼的話,無論使用哪個方法都是需要認證的。

◆ 認證部分

從api.go文件種Handle函數內的數據看,送來的要求中含有的apikey沒有在C&C服務器內登錄的話,能夠讀取未接收的指令。(List 4)

深度解析:“Mirai”源代碼的結構及其對策

  List 4 api.go中的Handle函數的認證部分

admin.go中實裝的處理程序也同樣,在CLI上操作時需要使用用戶名和密碼登錄。(List 5)

深度解析:“Mirai”源代碼的結構及其對策

  List 5 admin.go中的Handle函數的認證部分

另外,命令行在登錄時要求輸入俄羅斯語,因此推斷制作者或利用者可能是俄羅斯圈的人。

◆ 用戶管理部分

那么,怎樣才能把這些信息登記在數據庫上呢?讀取源代碼訪問C&C服務器上的CLI時,如果是管理者用戶的話可以從CLI注冊登錄(List 6)。

深度解析:“Mirai”源代碼的結構及其對策

  List 6 admin.go的Handle函數內的用戶登錄部分

然而,管理員賬號本身是預先插入數據庫中的,被公開的代碼中沒有管理員賬戶登錄的相關內容。

另外,數據庫的users桌面上,除username及password之外,還有max_bots、last_paid、cooldown、duration_limit等列,這些列被用于創建攻擊指令,因此每個用戶能夠利用的Bot數量、攻擊間隔、賬號等均受控制。并且,用戶向僵尸網絡持有者支付金錢的時間等都保存在C&C服務器的數據庫中。(List 7)

深度解析:“Mirai”源代碼的結構及其對策

  List 7 database.go內的CreateUser函數

綜上所述,是否可以認為Mirai Botnet的所有者使不特定的多數人以金錢等交換利用了僵尸網絡呢。

◆ Bot 管理部分

接下來,看看Bot管理部分吧。首先從Bot連接C&C服務器的話,main.go文件中的initialHandler函數中NewBot.Handle函數被喚起,根據Handle函數的處理Bot信息將被添加到列表中(List 8)。

深度解析:“Mirai”源代碼的結構及其對策

  List 8 bot.go內的Handle函數

存儲Bot信息的clientList是全球變數,main.go內運行main函數之前就被制作了。另外, clientList在新制作的時候,非同步接收的Worker制作Bot指令,等待Bot指令。

◆ 攻擊指令的制作部分

接下來,以攻擊者C&C服務器的輸入為基礎,看看Bot指令的制作部分吧。在API、CLI等輸入指定攻擊種類·攻擊對象的命令,便會在attack.go內的NewAttack函數內完成應對接受指令的Flag設置。在同文件夾中的attackInfoLookup Map內定義了可能利用的攻擊種類(表1)(List 9)。

深度解析:“Mirai”源代碼的結構及其對策

  表1 Mirai Botnet可執行的攻擊種類

深度解析:“Mirai”源代碼的結構及其對策

  List 9 attack.go內attackInfoLookup Map

從表1了解到,Mirai可使Bot受到各種各樣的DDoS攻擊。

另外,VSE平臺攻擊中被瞄準的游戲引起“Source Engine”是非常有人氣的一款在線游戲“反恐精英”中使用的引擎。這樣被特意定義,由此可見這樣的在線游戲可能被作為攻擊的目標。利用GRE等次要的協議進行攻擊是有可能的,因此Mirai可回避一般的DDoS攻擊對策。

然后把這些攻擊Falg設定組裝后,同文件的Build函數內將這些攻擊設定為二進制向Bot發信。這樣就可以向Bot完成數據的發送。

◆ 指令發送部分

最后,看看從C&C服務器向Bot發送指令的流程吧。二進制的攻擊設定移交至clientList.go文件內的QueueBuf函數,如名字所示保持Bot的指示被放置在緩沖區列隊中(List 10)。

深度解析:“Mirai”源代碼的結構及其對策

  List 10 clientList.go的QueueBuf函數

接收信息的atkQueue頻道從持有的Bot信息列表到攻擊者可利用的Bot上線數為止在Bot單體的緩沖區排列攻擊設定。

深度解析:“Mirai”源代碼的結構及其對策

  List 11 clientList.go內的worker函數

然后,排列的攻擊設定最終會被發送到Bot單體(List 12)。

深度解析:“Mirai”源代碼的結構及其對策

  List 12 bot.go內的QueueBuf函數

四、Bot(客戶端)

接下來,看看Bot客戶端的運作吧。由于客戶端是C語言編寫的,首先讓我們從mirai/bot目錄以下的main.c開始解讀吧。

◆C&C的連接部分

main.c內的main函數里,啟動后本身的過程名偽裝成隨機的名字,無線循環地呼出establish_connection函數,將加密的C&C服務器的域名和Bot解密后連接在一起(List 13)。

深度解析:“Mirai”源代碼的結構及其對策

  List 13 main.c內的main函數與establish_connection函數

在這里,establish_connection函數里名為resolve_fudc函數被同文件內anti_gdb_entry函數替換,所以實際上也被稱作resolve_cnc_addr函數(List 14)。

況且,C&C服務器的域名中,對table.c文件中被定義為“0xdeadbeef”的值實施seed值XOR加密,C&C服務器的解析會變得較困難。

深度解析:“Mirai”源代碼的結構及其對策

  List 14 main.c內的anti_gdb_entry函數與resolve_cnc_addr函數

成功連接后,Bot向C&C服務器中發送二進制“

關鍵字:Miraimain函數c文件

本文摘自:51CTO

電子周刊
回到頂部

關于我們聯系我們版權聲明隱私條款廣告服務友情鏈接投稿中心招賢納士

企業網版權所有 ©2010-2024 京ICP備09108050號-6 京公網安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 托克逊县| 兴仁县| 昌平区| 岱山县| 尼勒克县| 祁门县| 三亚市| 兴宁市| 南乐县| 江源县| 襄垣县| 曲周县| 沾益县| 顺平县| 金阳县| 淳化县| 鹿邑县| 武宣县| 山阴县| 巩义市| 洛扎县| 清丰县| 长顺县| 两当县| 海淀区| 闻喜县| 密云县| 旌德县| 扬中市| 虎林市| 桐乡市| 昆山市| 凤城市| 任丘市| 遵义县| 河南省| 金堂县| 兴化市| 德庆县| 同德县| 化隆|