分析HTTP請(qǐng)求以降低HTTP走私攻擊HTTP數(shù)據(jù)接收不同步攻擊的風(fēng)險(xiǎn)
寫在前面的話
HTTP/1.1自1991年至2014年,已經(jīng)走過了一段很長的發(fā)展歷程:
- HTTP/0.9– 1991
- HTTP/1.0– 1996
- HTTP/1.1
- RFC 2068– 1997
- RFC 2616- 1999
- RFC 7230- 2014
這也就意味著,互聯(lián)網(wǎng)中各種各樣的服務(wù)器和客戶端,可能會(huì)存在很多安全問題,這也會(huì)給HTTP走私攻擊(HTTP數(shù)據(jù)接收不同步攻擊)創(chuàng)造了機(jī)會(huì)。
\
遵循最新的RFC建議似乎很簡單。然而,對(duì)于已經(jīng)存在一段時(shí)間的大型系統(tǒng),它可能會(huì)帶來很多在系統(tǒng)可用性方面令人無法接受的影響。
http_desync_guardian這個(gè)工具庫便應(yīng)運(yùn)而生,該工具可以幫助廣大研究人員分析HTTP請(qǐng)求,以防止HTTP走私攻擊(HTTP數(shù)據(jù)接收不同步攻擊)的發(fā)生,同時(shí)還能夠兼顧安全性和可用性。該工具可以將請(qǐng)求進(jìn)行分類,并并提供針對(duì)每一層的處理建議。
該工具既可以分析原始的HTTP請(qǐng)求Header,也可以對(duì)那些已經(jīng)被HTTP引擎分析過的請(qǐng)求數(shù)據(jù)進(jìn)行二次分析。
工具特性
1、服務(wù)的統(tǒng)一性是關(guān)鍵。這意味著請(qǐng)求分類、日志記錄和度量必須在后臺(tái)進(jìn)行,并使用最少的可用設(shè)置(例如,日志文件目的地址)。
2、關(guān)注可審查性。測試套件不需要關(guān)于庫/編程語言的知識(shí),而只需要關(guān)于HTTP協(xié)議的知識(shí)即可。因此,它很容易審查、貢獻(xiàn)代碼和重復(fù)使用。
3、安全性對(duì)于用戶來說是最重要的。
4、輕量級(jí),開銷非常小,并且處理請(qǐng)求不需要額外開銷。
支持的HTTP版本
該工具主要針對(duì)的是HTTP/1.1,具體可以參考提供的覆蓋測試用例。
HTTP/1.1的前身不支持連接重用,這限制了HTTP去同步的機(jī)會(huì),但是一些代理可能會(huì)將此類請(qǐng)求升級(jí)到HTTP/1.1,并重新使用后端連接,這可能會(huì)導(dǎo)致惡意HTTP/1.0請(qǐng)求。這也就是為什么我們選擇使用與HTTP/1.1相同的標(biāo)準(zhǔn)來分析它們。對(duì)于其他協(xié)議版本,可以參考這篇【文檔】。
工具下載
廣大研究人員可以使用下列命令將該項(xiàng)目源碼克隆至本地:
git clone https://github.com/aws/http-desync-guardian.git
復(fù)制代碼
C代碼使用
這個(gè)工具庫主要使用的是C/C++開發(fā)的HTTP引擎,工具安裝配置方法如下:
1、安裝cbindgen:
cargo install --force cbindgen
復(fù)制代碼
2、生成Header文件:
C:
cbindgen --output http_desync_guardian.h --lang c
復(fù)制代碼
C++:
cbindgen --output http_desync_guardian.h --lang c++
復(fù)制代碼
3、運(yùn)行下列命令,其中相關(guān)代碼位于“
./target/release/libhttp_desync_guardian.*”文件:
cargo build --release
復(fù)制代碼
#include "http_desync_guardian.h"
/*
* http_engine_request_t - already parsed by the HTTP engine
*/
static int check_request(http_engine_request_t *req) {
http_desync_guardian_request_t guardian_request = construct_http_desync_guardian_from(req);
http_desync_guardian_verdict_t verdict = {0};
http_desync_guardian_analyze_request(&guardian_request, &verdict);
switch (verdict.tier) {
case REQUEST_SAFETY_TIER_COMPLIANT:
// The request is good. green light
break;
case REQUEST_SAFETY_TIER_ACCEPTABLE:
// Reject, if mode == STRICTEST
// Otherwise, OK
break;
case REQUEST_SAFETY_TIER_AMBIGUOUS:
// The request is ambiguous.
// Reject, if mode == STRICTEST
// Otherwise send it, but don't reuse both FE/BE connections.
break;
case REQUEST_SAFETY_TIER_SEVERE:
// Send 400 and close the FE connection.
break;
default:
// unreachable code
abort();
}
}
復(fù)制代碼
許可證協(xié)議
本項(xiàng)目的開發(fā)與發(fā)布遵循Apache-2.0開源許可證協(xié)議。
浙公網(wǎng)安備 33010602011771號(hào)