CitrixADC針對Brute force attack防護設定(一)
最近在POC時客戶有需求針對暴力登入攻擊在CitrixADC上需要提供防護方式。
不過一般來說在防範這類攻擊最佳的解決方式是在AP那邊就直接限制住才是比較好的方式,如果要改成由WAF執行勢必會有所限制,既然題目都已經出了那就需要想個辦法解決。
後續文章
CitrixADC針對Brute force attack防護設定(二)
CitrixADC針對Brute force attack防護設定(三)
本篇目標是針對單一帳號相同來源持續登入失敗時會做阻擋的動作,針對其他不同的形式與解法會拆分多篇文章來做解析。
這次設定會用到在CitrixADC上AppExpert中的Rewrite和Rate limiting,利用rewrite policy來判斷登入失敗與否再加上Rate limiting來判定是否同個來源ip和帳號,測試站台是使用DVWA中的Vulnerability: Brute Force頁面來做範例。
整個流程為
- 判定目標request是否為登入失敗
- 若是登入失敗,在特定時間內的失敗次數為多少,來源ip和帳號是否相同
- 當前兩者都發生後要進行阻擋
首先要先了解此頁面再登入失敗時會有哪些反應,先嘗試登入失敗
自定義名稱,並設定觸法條件
第一個參數為來源ipCLIENT.IP.SRC
第二個設定是針對登入時的帳號,根據先前用burpsuite能確定登入時帳號的參數在哪邊
第二個設定是針對登入時的帳號,根據先前用burpsuite能確定登入時帳號的參數在哪邊
HTTP.REQ.URL.AFTER_REGEX(re/username=/).BEFORE_REGEX(re/&/)
使用Evaluator能確認正規表示法設定是否正確,把從burpsuite上抓到的request貼進來測試,黃色部分代表抓到的參數
設定完selector後要設定limit identifiers
這個設定主要是決定重複次數或是閥值來判定是否要作動,trap設定是決定觸發次數,thresold與time slice是決定在這時間區段最多能有多少request,但目前我們主要是拿來監控登入失敗次數所以時間設定300000(毫秒) thresold在此作用不大,結合前面設定的selector後主要效果是,在5分鐘內(time slice)最多只能3次(traps),透過selector判斷是否是同個ip及帳號
設定完rate limit後要透過rewrite把全部結合起來,先創建一個rewrite action
這個action是當條件滿足時所有request會被替換成內容的頁面(阻擋)
"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>"
接著設定rewrite policy
接著將此policy bind到目標virtual server上
進行測試,看首次登入失敗會有什麼反應
在此處能觀察目前rate limit的狀況
此處就能確認rate limit觸發條件滿足後的session
當閥值達到後就會觸發rewrite action
設定完selector後要設定limit identifiers
"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>"
接著設定rewrite policy
設定policy條件為當登入失敗時(Username and/or password incorrect),確認是否滿足rate limit條件(登入失敗的帳號及來源是否重複超過三次),當兩者條件皆滿足時會觸發rewrite action將頁面替換成阻擋頁面
HTTP.RES.BODY(25000).CONTAINS("Username and/or password incorrect") && SYS.CHECK_LIMIT("DVWA_Login_Limiter")
接著將此policy bind到目標virtual server上
進行測試,看首次登入失敗會有什麼反應
在此處能觀察目前rate limit的狀況
此處就能確認rate limit觸發條件滿足後的session
當閥值達到後就會觸發rewrite action
留言
張貼留言