CC攻擊的原理就是攻擊者控制某些主機不停地發大量數據包給對方服務器造成服務器資源耗盡,一直到宕機崩潰。CC主要是用來消耗服務器資源的,每個人都有這樣的體驗:當一個網頁訪問的人數特別多的時候,打開網頁就慢了,CC就是模擬多個用戶(多少線程就是多少用戶)不停地進行訪問那些需要大量數據操作(就是需要大量CPU時間)的頁面,造成服務器資源的浪費,CPU長時間處于100%,永遠都有處理不完的連接直至就網絡擁塞,正常的訪問被中止。
CC攻擊的種類有三種:直接攻擊、僵尸網絡攻擊、代理攻擊。
直接攻擊:主要針對有重要缺陷的 WEB 應用程序,一般說來是程序寫的有問題的時候才會出現這種情況,比較少見。
僵尸網絡攻擊:有點類似于 DDOS 攻擊了,從 WEB 應用程序層面上已經無法防御。
代理攻擊【常見】:是CC 攻擊者一般會操作一批代理服務器,比方說 100 個代理,然后每個代理同時發出 10 個請求,這樣 WEB 服務器同時收到 1000 個并發請求的,并且在發出請求后,立刻斷掉與代理的連接,避免代理返回的數據將本身的帶寬堵死,而不能發動再次請求,這時 WEB 服務器會將響應這些請求的進程進行隊列,數據庫服務器也同樣如此,這樣一來,正常請求將會被排在很后被處理,就象本來你去食堂吃飯時,一般只有不到十個人在排隊,今天前面卻插了一千個人,那么輪到你的機會就很小很小了,這時就出現頁面打開極其緩慢或者白屏。
CC攻擊是通過大量的代理ip進行訪問網站,從而達到網站服務器無法負荷最終癱瘓的過程。
并且這種攻擊是會消耗大量的流量,從而造成站長虧錢,要想判斷CC攻擊,
其實非常簡單,如果發現網站在短時間內cup直線上升,而且網站打開變慢甚至502錯誤,那可能是遭受cc攻擊了
1.1、消耗CPU資源
黑客用1萬臺肉雞,刷新你網站動態頁面,如果你程序不夠健壯,cpu直接100%
1.2、消耗內存資源
黑客只要刷新你動態頁面中搜索數據庫的內容,只要搜索量一大,內存占滿。網站直接打不開或者是非常卡。
1.3、消耗IO資源
黑客找到上傳文件,或者是下載文件的頁面,在不停的上傳與下載,磁盤資源點滿
1.4、消耗帶寬資源
能看流量占用多少,如果流量占滿了,服務器直接掉包,掉線。網站一點都打不開。如果自己主機上不去,你可以問運營商要流量圖,機房都有流量圖的。
1.5、網站502
很多時候,發現自己網站特別的慢,甚至經常502,一般來說是被CC攻擊了。
1.4、查看SYN連接
# 檢查方式
[root@mayi-ops ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122
# 其中可以重點觀察,如果數字大于以上情況的話,基本都被命中了被CC攻擊的
SYN_RECV 大于50
TIME_WAIT 大于500
ESTABLISHED 大于 500
CC攻擊基本是模擬真人訪問,如果肉雞夠多的話,基本是無解
以下是稍微簡單有效的幾種辦法:
1.針對IP進行封禁,例如一個IP如果在一秒內請求大于100的,可以封禁掉(一般肉雞的話,都N多IP,封禁不過來的)
2.針對被高頻訪問的URL,譬如定制為 10秒內訪問超過100次的,需要進行真人驗證,有效防止被刷(也需要你有足夠的寬帶,如果寬帶不夠早就卡死了)
3.使用一些高防CDN,一些高防CDN會同時具備以上的兩種功能
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
#限制每ip每秒不超過20個請求,漏桶數burst為5
#brust的意思就是,如果第1秒、2,3,4秒請求為19個,
#第5秒的請求為25個是被允許的。
#但是如果你第1秒就25個請求,第2秒超過20的請求返回503錯誤。
#nodelay,如果不設置該選項,嚴格使用平均速率限制請求數,
#第1秒25個請求時,5個請求放到第2秒執行,
#設置nodelay,25個請求將在第1秒執行。
limit_req zone=one burst=1 nodelay;
}
}
上面樣本的配置是什么意思呢?
詳細的可以參考官方說明文檔:Module ngx_http_limit_req_module
以下三種配置方式,訪問結果參考地址:https://www.cnblogs.com/kenshinobiy/p/10215913.html
這里我們需要Apache Benchmark這個小工具來生成請求
//1個用戶持續100s的時間向服務器發送請求
ab -t 100 -c 1 -vvv <http://example.com/>
# 樣本一
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
limit_req zone=one burst=1 nodelay;
}
}
# 樣本二,提高了burst值,明顯nginx成功的請求數上去
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
limit_req zone=one burst=10 nodelay;
}
}
# 樣本三,去掉nodelay,成功的請求數在100左右而失敗的請求數變成0了
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
limit_req zone=one burst=10;
}
從這里的數據可以看到將nodelay的參數去掉的話,成功的請求數在100左右而失敗的請求數變成0了,為什么呢?
存在的問題:
雖然用limit_req_module可以一定上的防止CC攻擊,但是有誤殺概率;國內寬帶用戶的IP地址已經大量內網化,幾百人共享一個IP的可能性是很大的。
1、對于輕量級CC工具,通過工具、腳本進行屏蔽IP限制防御,CCKiller:https://zhangge.net/5066.html
2、接入高防CDN,隱藏服務器源IP,自動識別攻擊流量,清洗后將正常訪客流量回源到源服務器IP上,保障業務安全。
3、網站頁面靜態化: 網站頁面靜態化可以較大程度的減少系統資源消耗,從而達到提高抗系統抗攻擊能力(業務不同,成本高)。
4、域名欺騙解析:如果發現針對域名的CC攻擊,我們可以把被攻擊的域名解析到127.0.0.1這個地址上。我們知道127.0.0.1是本地回環IP是用來進行網絡測試的,如果把被攻擊的域名解析到這個IP上,就可以實現攻擊者自己攻擊自己的目的,這樣他再多的肉雞或者代理也會宕機,讓其自作自受(殺敵一千,自損八百)。
5、nginx 配置限制,如上
保守:站點應盡快進行服務能力升級。
積極:盡所能,追溯攻擊者。
追溯攻擊者:
CC:proxy-forward-from-ip
單個IP高并發的DDOS:找到訪問異常的、高度可疑的ip列表,exploit,搜集、分析數據,因為一個傀儡主機可被二次攻占的概率很大(但不建議這種方法)
單個IP低并發的DDOS:以前極少訪問被攻擊站點,但是在攻擊發生時,卻頻繁訪問我們的站點,分析日志得到這一部分ip列表
追溯攻擊者的過程中,snat與web proxy增加了追蹤的難度,如果攻擊者采用多個中繼服務器的方法,追溯將變得極為困難。
防御者:
1.應對當前系統了如指掌,如系統最高負載、最高數據處理能力,以及系統防御體系的強項與弱點
2.歷史日志的保存、分析
3.對當前系統進行嚴格安全審計
4.上報公安相關部分,努力追溯攻擊者
5.網站,能靜態,就一定不要動態,可采取定時從主數據庫生成靜態頁面的方式,對需要訪問主數據庫的服務使用驗證機制。
6.防御者應能從全局的角度,迅速及時地發現系統正在處于什么程度的攻擊、何種攻擊,在平時,應該建立起攻擊應急策略,規范化操作,免得在急中犯下低級錯誤
對歷史日志的分析這時將會非常重要,數據可視化與統計學的方法將會很有益處:
1.分析每個頁面的平均訪問頻率
2.對訪問頻率異常的頁面進行詳細分析 分析得到ip-頁面訪問頻率
3.得到對訪問異常頁面的訪問異常ip列表
4.對日志分析得到忠實用戶IP白名單
5.一般一個頁面會關聯多個資源,一次對于這樣的頁面訪問往往會同時增加多個資源的訪問數,而攻擊程序一般不會加載這些它不感興趣的資源,所以,這也是一個非常好的分析突破點
防御思路
因為CC攻擊通過工具軟件發起,而普通用戶通過瀏覽器訪問,這其中就會有某些區別。想辦法對這二者作出判斷,選擇性的屏蔽來自機器的流量即可。
初級
普通瀏覽器發起請求時,除了要訪問的地址以外,Http頭中還會帶有Referer,UserAgent等多項信息。遇到攻擊時可以通過日志查看訪問信息,看攻擊的流量是否有明顯特征,比如固定的Referer或UserAgent,如果能找到特征,就可以直接屏蔽掉了。
中級
如果攻擊者偽造了Referer和UserAgent等信息,那就需要從其他地方入手。攻擊軟件一般來說功能都比較簡單,只有固定的發包功能,而瀏覽器會完整的支持Http協議,我們可以利用這一點來進行防御。
首先為每個訪問者定義一個字符串,保存在Cookies中作為Token,必須要帶有正確的Token才可以訪問后端服務。當用戶第一次訪問時,會檢測到用戶的Cookies里面并沒有這個Token,則返回一個302重定向,目標地址為當前頁面,同時在返回的Http頭中加入set cookies字段,對Cookies進行設置,使用戶帶有這個Token。
客戶端如果是一個正常的瀏覽器,那么就會支持http頭中的set cookie和302重定向指令,將帶上正確的Token再次訪問頁面,這時候后臺檢測到正確的Token,就會放行,這之后用戶的Http請求都會帶有這個Token,所以并不會受到阻攔。
客戶端如果是CC軟件,那么一般不會支持這些指令,那么就會一直被攔在最外層,并不會對服務器內部造成壓力。
高級
高級一點的,還可以返回一個網頁,在頁面中嵌入JavaScript來設置Cookies并跳轉,這樣被偽造請求的可能性更小
Token生成算法
Token需要滿足以下幾點要求
1,每個IP地址的Token不同
2, 無法偽造
3, 一致性,即對相同的客戶端,每次生成的Token相同
Token隨IP地址變化是為了防止通過一臺機器獲取Token之后,再通過代理服務區進行攻擊。一致性則是為了避免在服務器端需要存儲已經生成的Token。
推薦使用以下算法生成Token,其中Key為服務器獨有的保密字符串,這個算法生成的Token可以滿足以上這些要求。
Token = Hash( UserAgent + client_ip + key )
本文主要講述了DDoS攻擊之一的CC攻擊工具實現,以及如何防御來自應用層的DDoS攻擊的理論總結。接下來的文章,筆者將會實現一個工作于內核態的、具有黑名單功能的防火墻模塊,以對應于上述防御狀態機中的防火墻單元,它實現了自主地動態內存管理,使用hash表管理ip列表,并可以自定義hash表的modular。
喲!親們好久不見,今天為大家帶來的文章是如何利用一臺聯網電腦來突破局域網封鎖,一起來看一下吧!
常見網絡架構
上圖是一種較為常見的公司、學校網絡環境,包含主路由、三層交換、二層交換、傻瓜交換機和無線路由器、PC機等設備,而為了便于網絡管理,信息化部門也會采購行為管理路由,此設備通常安裝在主路由與三層之間,采用旁路或橋接模式,在小型網絡中,行為管理路由可以直接使用路由模式替換主路由、行為管理、三層交換三種設備。
在這種典型的網絡拓撲中,每臺設備都有明確和簡單的使用目的,主路由用于與外網的NAT連接,提供外網服務。行為管理是為了監控檢測控制內網流量。三層交換起VLAN劃分和VLAN間路由功能,因為三層交換的路由效率遠遠超過路由器的路由效率。二層交換用于物理分布上的VLAN擴展和網絡擴展,而傻瓜交換機則用于實際環境中單個空間內的端口擴展。
為了實行外網管控,行為管理一般實施為白名單策略,即IP+MAC地址綁定,對于這種情況通常的突破思路為強制設置IP地址并修改為白名單用戶的MAC地址,這樣缺點也很明顯,對方即會提示IP沖突,同時也會由于MAC地址沖突導致交換機的MAC地址表不斷更新引起網絡緩慢。
為此,我們需要真正意義上的,不影響網絡運行,同時又能上網的方法。
在這里我為大家介紹兩種本質意義相同的方法,但需要注意的是,其前提條件是,網路中必須有一臺能夠使用的同時能夠上網的電腦,如圖所示。
一、路由轉發模式
在路由轉發模式中,我們在白名單電腦上做的事情很簡單,只需要開啟轉發模式即可。
LINUX系統開啟IPV4轉發功能
echo "1" > /proc/sys/net/ipv4/ip_forward
Windows系統開啟IPV4轉發功能
在注冊表編輯器中,定位以下注冊表項:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters
選擇下面的項目:
IPEnableRouter:REG_DWORD:0x0 要對該計算機安裝和使用的所有網絡連接都啟用 IP 轉發,請指定值為 1。 要對該計算機安裝和使用的所有網絡連接都關閉 IP 轉發,請指定值為 0。
注意,windows修改注冊表后需要重啟,而linux則不需要。
在客戶端中,我們只需要將網關設置為白名單PC的IP即可,此時白名單PC處于路由模式,等同于一臺路由器。
修改網關前測試
tracert 114.114.114.114 Tracing route to public1.114dns.com [114.114.114.114] over a maximum of 30 hops: 1 <1 ms <1 ms <1 ms 192.168.136.2 ping 114.114.114.114 Pinging 114.114.114.114 with 32 bytes of data: Reply from 114.114.114.114: bytes=32 time=10ms TTL=128
修改網關后測試
tracert 114.114.114.114 Tracing route to public1.114dns.com [114.114.114.114] over a maximum of 30 hops: 1 * * 1 ms 192.168.136.129 2 <1 ms <1 ms <1 ms 192.168.136.2 ping 114.114.114.114 Pinging 114.114.114.114 with 32 bytes of data: Reply from 114.114.114.114: bytes=32 time=11ms TTL=128
此時我們會發現在我們的路由192.168.136.2之前多了192.168.136.129的路由,我們的全部網絡流量都會通過白名單PC連接。
同時我們的網絡結構沒有任何改變,對于局域網內的資源我們依然正常訪問。
二、代理服務器模式
代理服務器模式如其名字,我們是通過白名單PC搭建代理服務器來上網,我們需要用到下面兩款軟件
CCProxy代理服務器軟件 Proxifier全局流量代理軟件
如果是linux用戶,可以使用$$(指代)服務端與客戶端搭建,效果相同。
我們的網絡模式跟上面的方法也沒有任何區別,都不會影響局域網內的訪問。
服務器搭建
在白名單PC安裝CCProxy,此軟件三個用戶內免費使用。
只需要對軟件進行簡單的設置,我們的代理服務器就搭建完成了。
勾選自動啟動和自動隱藏,實現軟件靜默啟動,當然我們也可以勾選NT服務實現更高級別的靜默隨機啟動。
客戶端設置
簡單的網頁代理設置,Internet選項-連接-局域網(LAN)設置-代理服務器
設置為白名單PC的地址和代理端口,同時勾選 跳過本地地址的代理服務器,就可以進行網頁瀏覽了。
那么這里就有了一個小小的問題,很多軟件是不會加載Internet選項的設置的,軟件不能上網不是很尷尬?
這里就需要Proxifier全局流量代理軟件了
客戶端安裝Proxifier,主要配置都在配置文件選項中
代理服務器只需要配置為白名單PC的SOCKS5代理,即可完成默認的代理全局上網。
使用其他軟件聯網測試,正常上網。
這時你可能會想,這好簡單哦,怎么會難呢?難點主要來自以下兩個問題,一是SOCKS5代理速度其實并沒有HTTP代理快,影響上網速度,二是本地局域網軟件如飛鴿等軟件也會因為代理導致出現問題,這就需要用到Proxifier規則。
在配置文件-代理規則中,我們可以看到兩條默認規則
Localhost 任意 127.0.0.1 任意 Direct直接連接 Default 任意 任意 任意 Proxy代理連接
我們想要實現網頁走http代理,飛秋直接連接,局域網直接連接,其他全部走代理,則需要如下配置。
此時實現的效果是,IE與飛秋不走代理直接連接,192.168.136.0網段內通信不走代理直接連接,其他應用全部走代理,完美實現我們的目的。
以上就是本文所有內容,涉及一些網絡基礎,看似復雜卻很簡單,如果你對此類文章感興趣,不妨百度9S博客,文章不定時更新,我們下次再見!