CitrixADC針對Brute force attack防護設定(二)

此篇主要是CitrixADC針對Brute force attack防護設定(一)後續,針對不同的需求增加其他方式來達成目標。

這篇文章的需求是當大量不同帳號登入失敗且來源ip相同時要進行阻擋

後續文章
CitrixADC針對Brute force attack防護設定(三)

跟前篇一樣會使用到AppExpert中的Rewrite和Rate limiting,再加上Variables和Assignments這兩個feature。

Rewrite和Rate limiting的使用跟前篇類似,利用rewrite policy來判斷登入失敗與否再加上Rate limiting來判定是否同個來源ip,重點是Variables和Assignments這兩個功能,主要是去紀錄一定時間範圍內的登入失敗帳號,藉此了解目前是否有大量帳號登入失敗。

整個流程為

  • 判定目標request是否為登入失敗
  • 判定登入失敗帳號在時間範圍內是否曾登入失敗過
  • 判定來源request是否為同個ip
  • 若登入失敗透過Variables和Assignments紀錄
  • 當前三者都發生時要進行阻擋
首先要創建rate limiting的selectors

條件部分填入來源ip
CLIENT.IP.SRC
再來創建rate limiting的identifiers
跟上一篇一樣此處主要是設定tarps和time slice來限制時間內不同帳號登入失敗的次數
接著要創建Variables,主要設定暫存變數(登入失敗帳號)存在多久和該變數大小等
Variables的type要選擇map,因為除了要記錄登入失敗帳號外,還要記錄次數和多久過期(Expires in)

創建完Variables後要創Assignment來調用Variables
判定部分為抓取登入時的username並存入剛剛創建的Variables
HTTP.REQ.URL.AFTER_REGEX(re/username=/).BEFORE_REGEX(re/&/)


接著要創建rewrite的actions


actions為當rewrite條件滿足時會替換response成特定頁面(block)
"HTTP/1.1 200 OK\r\n\r\n <html><head><title>Block</title></head><body><h1><B>You have reached the maximum allowed login attempts<B><BR></H1><H3>For next 5 minutes you will be block temporarily</H3> <H3>Your device at: <strong> " + CLIENT.IP.SRC + "</H3><br><H3>Please call support services</H3> <UL> Phone : 0903123347<br>Mail : lab@lab.local<br>Support ID : "+HTTP.RES.TXID.BEFORE_REGEX(re/-\w{12}/)+"</UL></body></html>"
接著要創建policy把所以action連再一起

第一個rewrite policy條件是當登入失敗時會做動,action是先前創建的Assignment,會去紀錄目前已登入失敗的帳號(policy action連動assignments)
HTTP.RES.BODY(25000).CONTAINS("Username and/or password incorrect")
第二個rewrite policy為當條件滿足時會做阻擋,
1.確認在Varibles中是否曾登入失敗過(綠)
2.目前request是否為登入失敗(紅)
3.目前登入失敗次數及是否同一來源(黃)
$failed_login_count.valueExists(HTTP.REQ.URL.AFTER_REGEX(re/username=/).BEFORE_REGEX(re/&/)).not && http.RES.BODY(25000).CONTAINS("Username and/or password incorrect") && SYS.CHECK_LIMIT("login_limiter_src")
最後再把剛剛創的policy bind到virtual server上

此時注意第一個先綁判定是否做阻擋的policy,並將Goto Expression改成Next
結著在綁定紀錄登入失敗帳號的policy
最後到頁面做測試,嘗試用不同帳號登入失敗
在Assignments能觀察是否有做動
Limit Identifiers能確認次數
超過次數後開始阻擋


留言