關(guān)于我們

質量為(wèi)本、客戶為(wèi)根、勇于拼搏、務(wù)實創新(xīn)

< 返回新(xīn)聞公共列表

CC攻擊&TCP和UDP正确打開姿勢

發布時(shí)間(jiān):2019-09-05 09:55:34

引言:

1:CC攻擊是正常的業務(wù)邏輯,大并發讓你處理(lǐ)不過來(lái),處理(lǐ)XP SP2,以上(shàng)的系統都封了(le)RAW格式協議(yì)封包自定義,除了(le)基于應用層改協議(yì),之外都是模拟或請求來(lái)測試傳輸層

2:UDP不會粘包,不會少包,除非緩存區滿

3:TCP主要特征有:

  1. 3次握手連接

  2. 4次揮手斷開

  3. 擁塞控制

  4. 重傳控制

  5. 流傳輸方式,服務(wù)端需要額外解析方面有:協議(yì)粘包,協議(yì)少包,協議(yì)丢包、異常協議(yì)響應、正常協議(yì)響應

UDP主要特征有:

  1. 包傳輸方式

  2. 無粘包錯包

  3. 且無連接,無擁塞控制,無重傳機制

4:TCP主要特征有:

1.3次握手連接:

一(yī)測試用例:壓力機在請求大量握手鏈接後迅速關(guān)閉,需要大并發操作(zuò)

一(yī)測試邏輯點:測試服務(wù)端底層邏輯關(guān)閉socket的同時(shí),又來(lái)新(xīn)的socket鏈接請求,服務(wù)端底層邏輯這(zhè)部分(fēn)是否處理(lǐ)正常

我測試的項目BUG:創建ID為(wèi)5000的socket端口後,由于壓力機關(guān)閉socket,導緻服務(wù)端回收這(zhè)個(gè)ID為(wèi)5000的SOCKET,新(xīn)來(lái)的TCP連接請求,由于5000的釋放(fàng)又使用上(shàng)這(zhè)個(gè)SOCEKT,這(zhè)時(shí)服務(wù)端報(bào)錯:新(xīn)的SOCKET無法使用

二測試用例:壓力機在請求大量握手鏈接,需要大并發操作(zuò)

二測試邏輯點:測試服務(wù)端最大連接SOCKET數量,以保證服務(wù)端有可用的SOCKET資源分(fēn)配,

我測試的項目BUG:服務(wù)端創建5000個(gè)SOCKET後無法創建成功,因配置的JAVA内存不夠及系統開放(fàng)的端口數不夠

上(shàng)述兩點的測試工具實現(xiàn):隻有IOCP和AIO底層測試驗證最有效,測試同時(shí)觀察在 N并發/秒(miǎo) 得出瓶頸拐點

5:4次揮手斷開:

測試用例:壓力機設置SOCKET選項,在請求大量握手鏈接後迅速關(guān)閉,需要大并發操作(zuò)

//快(kuài)速關(guān)閉socket ::setsockopt(pUsoc, SOL_SOCKET, SO_REUSEADDR, (const char*)&on, sizeof(bool));//複用端口 ::setsockopt(pUsoc, SOL_SOCKET, SO_DONTLINGER, (const char*)&off, sizeof(bool));//打開LINGER ::setsockopt(pUsoc, SOL_SOCKET, SO_LINGER, (const char*)&m_sLinger, sizeof(linger));//設置強制關(guān)閉SOCKET

測試邏輯點:測試因壓力機器(qì)人(rén)修改Socket配置,客戶端主動斷開,服務(wù)端無法得到4次揮手的通知包,導緻需要N時(shí)間(jiān)節點才關(guān)閉Socket/不關(guān)閉Socket

項目測試BUG:因無法得到4次揮手包,服務(wù)端存在大量異常長連接,導緻拒絕服務(wù)

6:擁塞控制-簡單理(lǐ)解為(wèi),堵死汽車排氣孔,同時(shí)踩油門

測試用例:壓力機客戶端設置1字節接受協議(yì)或1字節緩存區,同時(shí)請求需要響應的大數據:例如(rú)排行榜

測試邏輯點:由于擁塞控制特殊性,TCP會開辟内存緩存這(zhè)部分(fēn)數據,簡單說(shuō),服務(wù)端産生(shēng)的協議(yì)多,但(dàn)有效發出的少,系統緩存剩餘協議(yì)越來(lái)越多,硬件監控服務(wù)端内存暴漲

項目測試BUG:同上(shàng),設置好(hǎo)(hǎo)SOCKET參數後,請求排行榜數據,服務(wù)端内存暴漲,直接崩潰

7:重傳控制

測試用例:搭建測試代理(lǐ)工具,對包傳輸順序/丢包進行參數配置轉發

測試邏輯點:由于重傳的特殊性是傳輸層控制,所以在應用層模拟丢包和亂序請求

大家常用的kugou音(yīn)樂(yuè)的APP通過工具模拟重傳控制,在試聽(tīng)音(yīn)樂(yuè)的時(shí)候,進行丢包和亂序測試,APP崩潰

8:流傳輸方式,内容比較多,慢(màn)慢(màn)看

測試用例:協議(yì)粘包 - 通過代理(lǐ)工具自動*N倍,既123變123123123123123123

測試邏輯點:

1)測試服務(wù)端最大可分(fēn)割的數據包上(shàng)限,

2)測試服務(wù)端是否并發執行協議(yì),如(rú)領取任務(wù)、購(gòu)買物品、創建角色等等

項目BUG:創建N個(gè)123角色在數據庫中,且完整協議(yì)分(fēn)割最大上(shàng)限為(wèi)4,後期調至20份/Max緩存區

測試用例:協議(yì)少包 - 通過工具1字節發送

  • 1)高速

  • 2)慢(màn)速

測試邏輯點:

1)高速發送1字節,服務(wù)端讀取處理(lǐ)協議(yì),來(lái)消耗CPU資源,

2)占用服務(wù)端緩存區長時(shí)間(jiān)消耗資源,以上(shàng)2點測試服務(wù)端對協議(yì)讀取健壯性

測試用例:服務(wù)端私有協議(yì) - 構造異常數據及有效數據進行測試

測試邏輯點:

1)有效數據

  • 包體(tǐ) - 這(zhè)裏用的有效數據既為(wèi)超大包體(tǐ),如(rú)喊話(huà)等可變協議(yì),超過服務(wù)端緩存器(qì)上(shàng)限

  • 協議(yì)接口 - 對于已知的服務(wù)端協議(yì)響應接口遍曆,遍曆測試是否有未開放(fàng)的或頻繁調用

  • 協議(yì)參數 - A使用B的參數如(rú)用戶ID、數值類的:0 負數 邊界值 正數溢出

2)異常數據

  • 包體(tǐ) - 修改包體(tǐ)邊界值或自定義數據,既包體(tǐ)過短或超長數值

  • 協議(yì)接口 - 遍曆服務(wù)端接口,既不存在的接口,自動+N修改

  • 協議(yì)參數 - 遍曆字節既協議(yì)自動+N修改

  • 特殊協議(yì) - 及發送非正常的協議(yì)如(rú)1字節 00 11 22 33 - FF

項目BUG:

1)協議(yì)包體(tǐ):移動協議(yì)修改包體(tǐ)數據,包體(tǐ)修改為(wèi)8字節,既無協議(yì)接口的參數,服務(wù)端報(bào)錯崩潰

2)協議(yì)參數:

  1. A用戶使用B用戶ID登陸,強制踢B下(xià)線、

  2. 購(gòu)買數量*金(jīn)額超服務(wù)端變量上(shàng)限,數值溢出倒貼錢(qián)給玩(wán)家、

  3. 負數不用多說(shuō),賣東西(xī)-1,多送一(yī)件給玩(wán)家、

  4. 有除法計算(suàn)的地方使用0數值,服務(wù)端崩潰

3)協議(yì)接口:

  1. 副本調用怪自爆協議(yì),秒(miǎo)殺所有怪、

  2. 角色在監獄中調用傳送接口越獄

  3. 攻擊類,并發N/秒(miǎo)請求大數據的協議(yì)接口,服務(wù)端内存Cpu暴漲,後期限制請求頻率

10:UDP主要特征有:包傳輸、無粘包、錯包、無連接,無擁塞控制、無重傳機制

測試用例:

應用層

1)協議(yì)測試同TCP

2)大并發請求(性能(néng)測試同TCP)

測試邏輯點:

1)由于傳輸層無特殊處理(lǐ),即傳輸層在協議(yì)測試上(shàng)隻有丢包、亂序、延遲等3項,測試方案同TCP的測試用例

2)應用層的方案延用TCP中測試用例:

  1. 有效數據

  2. 異常數據

1)有效數據

包體(tǐ) - 這(zhè)裏用的有效數據既為(wèi)超大包體(tǐ),如(rú)喊話(huà)等可變協議(yì),超過服務(wù)端緩存器(qì)上(shàng)限

2)異常數據

包體(tǐ) - 修改包體(tǐ)邊界值或自定義數據,既包體(tǐ)過短或超長數值



/template/Home/Zkeys/PC/Static