這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Mirai概述
mirai,2016年一個備受關注的DDoS攻擊程式,與傳統的殭屍網路不同的是,mirai的控制的殭屍主要是網路攝影機等嵌入式裝置,mirai的出現將一大波安全研究者引入了IoT安全領域。
mirai的事迹主要有:
- 2016.9.20 ,攻擊Brian Krebs個人網站,攻擊流量達到665Gbps,據稱有150萬殭屍發起攻擊。
- 2016.9.21, 攻擊法國網路服務商OVH,攻擊流量達到1Tbps
- 2016.9.30,mirai開源
- 2016.10.21, 攻擊Dyn DNS,導致Github、Twitter等美國大半個互連網下線
- 2016.11.28, 攻擊德國電信,mirai出現新變種
mirai已經成為IoT DDOS攻擊的母體。
mirai能夠控制如此大規模的殭屍網路,主要原因是各個裝置供應商對安全的不重視,包括雄邁裝置、浙江大華等企業,所有裝置密碼都一樣且不能由使用者修改,且開放telnet連接埠以致mirai輕易爆破成功。
當然,mirai開源了,不看白不看。
架構
mirai架構
mirai主要由三部分構成,源碼對應四個模組:
- loader :監聽bot的report,並上傳payload到要感染的裝置
- cnc: command&control,即控制伺服器,主要功能是處理使用者登入和下發命令
- bot: 即payload,殭屍程式
- tools: 工具
loader源碼分析
CNC源碼分析
CNC部分由golang編寫,golang能用goroutine+channel寫出高效能的伺服器。
CNC源碼主要分為:
- 使用者管理
- 攻擊命令管理
- 感染節點管理
- 資料庫管理
bot源碼分析
bot模組劃分
bot源碼主要分為:
- attack模組:解析下發的命令,發起DoS攻擊
- scanner模組:掃描telnet弱口令登入,上報給loader
- killer模組:佔用連接埠,kill同類殭屍(排除異己)
- public模組: utils
1、bot主流程
1、關閉watchdog,防止裝置重啟
2、Ensure_single_instance 綁定48101,防止多個執行個體執行
3、產生隨機數,加密進程路徑和進程名
4、建立daemon,關閉stdin、stdout、stderr
5、attack_init 主進程, add_attack() 添加攻擊類型和回呼函數
6、kill_init 建立killer子進程,根據連接埠號碼找到pid殺死進程,killer_kill_by_port
7、scanner_init, 掃描子進程,一個死迴圈
8、主進程,死迴圈,監聽CNC串連,解析攻擊參數,發起攻擊
2、attack模組
①從table.c擷取CNC的網域名稱和連接埠,建立串連,然後監聽CNC connection
②定時發送心跳,保持串連
③解析攻擊參數 ,attack_start發起dos攻擊
攻擊方式
- attack_app.c
- attack_gre.c
- attack_tcp.c
1、attack_tcp_syn()
2、attack_tcp_ack()
3、attack_tcp_stomp()
- attack_udp.c
1、attack_udp_generic()
2、attack_udp_vse()
3、attack_udp_dns()
4、attack_udp_plain()
3、scanner模組
1、用raw socket試探性掃描telnet的23號連接埠,有回應才進行telnet登陸嘗試
2、用scanner_init中硬式編碼弱口令字典去嘗試登陸telnet
3、進入登入狀態機器,執行一系列命令來判斷是否登入成功
4、如果登入成功,開啟一個子進程,將IP、連接埠、使用者名稱、密碼按照固定格式上報給loader,loader的scanListen.go處理接收暴力掃描的結果
4、killer模組
5、public模組
- talbe.c 存了一些硬式編碼資料,並對資料進行加密,向外提供加解密、取出成員和新增成員的介面。
tools源碼分析