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和帳號是否相同
  • 當前兩者都發生後要進行阻擋

首先要先了解此頁面再登入失敗時會有哪些反應,先嘗試登入失敗


此時透過Burpsuite截錄封包分析當登入失敗時會產生哪些反應,以及登入時會發送什麼樣的Request,從擷取的訊息來看能夠得知在按下登入鍵時會把帳號密碼放入header url並以get的方式送出,而登入失敗時會從response body看到"Username and/or password incorrect."的訊息

知道要做判斷的條件之後可以開始設定Rate limiting,這個feature主要是根據所設定的條件、頻率,當閥值達目標到時便會做動,首先要先設定Rate limiting中的selectors

自定義名稱,並設定觸法條件

第一個參數為來源ip
CLIENT.IP.SRC
第二個設定是針對登入時的帳號,根據先前用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條件為當登入失敗時(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


留言