就在2016年底,也就是七天之前,我們的網(wǎng)絡系統(tǒng)記錄下了一次650Gbps的DDoS分布式拒絕服務攻擊,這也是我們首次遇到流量如此之大的DDoS攻擊。我們通過研究發(fā)現(xiàn),此次大流量的DDoS攻擊依舊是由物聯(lián)網(wǎng)僵尸網(wǎng)絡發(fā)動的,其中還涉及到某種新型的惡意軟件。不過請不用擔心,此次攻擊已經(jīng)被我們的網(wǎng)絡防御系統(tǒng)輕松地“解決”掉了。
攻擊描述
此次DDoS攻擊大概開始于12月21日上午10點55分,針對的是Imperva Incapsula網(wǎng)絡中的多個IP地址。目前我們?nèi)匀徊磺宄舜喂魹槭裁瘁槍Φ牟皇翘囟ǖ挠脩?,但是根?jù)我們的推測,這很有可能是由于攻擊者無法解析真正目標的IP地址所造成的,因為客戶真正的IP地址已經(jīng)由Incapsula的代理服務器進行了隱藏處理。因此,攻擊者便失去了最佳的攻擊目標,所以他們只能將注意力轉移到Imperva Incapsula上。
下圖顯示的是攻擊流量的相關數(shù)據(jù):
我們可以從上圖中看到,第一波DDoS攻擊流量持續(xù)了將近20分鐘,流量峰值在400Gbps左右。然后流量迅速減少,產(chǎn)生了一個凹槽,接下來攻擊者便發(fā)動了第二波攻擊。這一次,攻擊者所控制的僵尸網(wǎng)絡生成了一波650Gbps的DDoS攻擊流量,這波攻擊每秒鐘的數(shù)據(jù)包數(shù)量(Mpps)已經(jīng)超過了1億5000萬個。
下圖顯示的是每秒鐘的數(shù)據(jù)包數(shù)量(150+Mpps):
第二波攻擊持續(xù)了大約17分鐘,但是我們的網(wǎng)絡防御系統(tǒng)仍然可以輕松應對這些惡意流量。當然了,攻擊者也十分聰明,當他發(fā)現(xiàn)攻擊效果不明顯之后,他也打消了繼續(xù)攻擊的念頭。
我們的安全技術人員通過分析發(fā)現(xiàn),這兩波DDoS攻擊流量來源于偽造的IP地址,所以我們幾乎無法定位到這個僵尸網(wǎng)絡的真實地理位置,而且也很難去確定發(fā)動攻擊的設備是什么。
下圖顯示的是此次攻擊中僵尸網(wǎng)絡的部分IP地址:
雖然無法通過IP地址來定位僵尸網(wǎng)絡,但是我們可以對攻擊payload來進行分析,然后從中發(fā)現(xiàn)一些蛛絲馬跡,最后成功識別此次攻擊背后的僵尸網(wǎng)絡。
Payload分析
通過研究發(fā)現(xiàn),此次攻擊中的惡意流量由兩種不同的SYN payload生成:
1. 常規(guī)大小的SYN數(shù)據(jù)包,大小從44字節(jié)到60字節(jié)不等;
2. 不正常的大型SYN數(shù)據(jù)包,大小從799字節(jié)到936字節(jié)不等;
第一種數(shù)據(jù)包是為了達到一個較高的Mpps,而第二種數(shù)據(jù)包是為了將攻擊能力放大到650Gbps。
實際上,這種將小型和大型payload結合起來發(fā)動網(wǎng)絡攻擊的情況越來越常見了。在此之前,我們還發(fā)現(xiàn)有攻擊者曾嘗試利用這種手段來堵塞目標的網(wǎng)絡通信線路,并意圖拖垮網(wǎng)絡交換機和路由器等設備。
在對這兩種payload進行了深入分析之后,我們發(fā)現(xiàn)了一些非常有意思的東西。
我們所發(fā)現(xiàn)的第一樣東西,就是攻擊者在常規(guī)大小的SYN數(shù)據(jù)包中所留下的“簽名”。在這些惡意數(shù)據(jù)包中,其header中TCP選項的值(“1337″)是專門修改過的,這個值代表的是“leet”或“elite”。
具體如下圖所示:
第二個吸引我們眼球的東西就是大型SYN payload中的內(nèi)容。某些payload中的內(nèi)容似乎是一些隨機字符串,而另一些payload中似乎零零散散地夾雜著一些IP地址,具體如下圖所示:
我們可以從這些零散的IP地址中找出這些惡意payload內(nèi)容的生成方式。經(jīng)過分析之后我們發(fā)現(xiàn),我們所面對的這個惡意軟件可以訪問目標設備的本地文件(日志文件和iptable列表等等),并利用這些文件中的數(shù)據(jù)來生成惡意payload。
基本上我們可以這樣認為,攻擊者從成千上萬臺被入侵的設備系統(tǒng)中提取出了大量文件數(shù)據(jù),并利用這些數(shù)據(jù)生成了攻擊所用的payload。
但是,使用這種攻擊方法的人一般都有準確的目的。具體來說,這種方法可以算得上是一種十分有效的混淆技術,攻擊者可以通過這項技術來生成無限數(shù)量的隨機payload。接下來,攻擊者就可以利用這些隨機程度非常高的惡意payload來繞過基于簽名的安全防護系統(tǒng),并實施進一步的攻擊活動。
Mirai的對手,Leet僵尸網(wǎng)絡
就此看來,此次攻擊似乎為我們的2016年畫上了一個“圓滿”的句號。成功地緩解此次攻擊也是網(wǎng)絡安全防御領域的一個里程碑,因為這不僅標志著我們的網(wǎng)絡防御技術踏上了一個新的臺階,而且也顯示出了我們的網(wǎng)絡系統(tǒng)足夠強大的應變能力。但是,我們?nèi)砸獜闹形〗?jīng)驗和教訓,并為迎接2017年更多未知的安全風險做好準備。
直到目前為止,2016年所有的大規(guī)模DDoS攻擊事件都與Mirai惡意軟件有關。但是,這些payload的特性足以表明,此次攻擊與Mirai僵尸網(wǎng)絡及其變種沒有任何的關系。
證據(jù)如下:
1. 安全專家在對Mirai的代碼進行了分析之后發(fā)現(xiàn),Mirai對SYN payload數(shù)據(jù)包的大小進行了硬編碼,這也就意味著Mirai惡意軟件無法使用大型SYN數(shù)據(jù)包來發(fā)動攻擊。相關代碼如下所示:
1
|
iph->tot_len?=?htons(sizeof?(struct?iphdr)?+?sizeof?(struct?tcphdr)?+?20); |
2. Mirai對TCP選項(MSS、SACK、TSVAL、WSS)同樣進行了硬編碼,而在此次攻擊中,99.99%的payload中都沒有出現(xiàn)這些數(shù)據(jù),只有0.01%屬于特例(純屬巧合)。相關代碼如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//?TCP?MSS ??????? *opts++?=?PROTO_TCP_OPT_MSS;?? ???????? *opts++?=?4;?????????????????? ???????? *((uint16_t?*)opts)?=?htons(1400?+?(rand_next()?&?0x0f)); ???????? opts?+=?sizeof?(uint16_t); ???????? //?TCP?SACK?permitted ???????? *opts++?=?PROTO_TCP_OPT_SACK; ???????? *opts++?=?2; ???????? //?TCP?timestamps ???????? *opts++?=?PROTO_TCP_OPT_TSVAL; ???????? *opts++?=?10; ???????? *((uint32_t?*)opts)?=?rand_next(); ???????? opts?+=?sizeof?(uint32_t); ???????? *((uint32_t?*)opts)?=?0; ???????? opts?+=?sizeof?(uint32_t); ???????? //?TCP?nop ???????? *opts++?=?1; ???????? //?TCP?window?scale ???????? *opts++?=?PROTO_TCP_OPT_WSS; ???????? *opts++?=?3; ???????? *opts++?=?6; |
3. Mirai payload是由隨機字符串生成的,但是此次攻擊中的payload其內(nèi)容是由目標系統(tǒng)的文件內(nèi)容所構成的。
綜上所示,這肯定是一個新型的僵尸網(wǎng)絡,但是我們目前只能通過攻擊者在TCP header中留下的簽名(“1337″)來識別惡意軟件作者的身份。
惡意流量達到了650Gbps,Leet僵尸網(wǎng)絡可以稱得上算是Mirai僵尸網(wǎng)絡的第一個對手了。但是,它顯然不是最后一個。2016年,DDoS攻擊的規(guī)模和殺傷力已經(jīng)上升了好幾個臺階,而殺傷力更強的僵尸網(wǎng)絡撲向我們也只是時間問題,2017年肯定還會出現(xiàn)各種各樣更加可怕的僵尸網(wǎng)絡。