羅馬尼亞的首都布加勒斯特舉行的DefCamp 2017上,入侵檢測系統(IDS)的特征碼,被利用以繞過IDS本身。DefCamp 2017安全大會的一場演講中,基里爾·什普林,Positive Technologies 安全研究員,闡述了IDS特征碼是如何被用來致癱其本身的防御的。他還宣稱,對性能及安全的破壞,可創造出繞過防御的機會。
基于特征碼的IDS,依賴發現特定模式來檢測攻擊,要么查找網絡流量中的字節序列,要么找尋惡意軟件使用的已知惡意指令序列。
此類系統的主要局限,在于無法檢測沒有可用特征模式的攻擊。而且,從新威脅被發現,到其特征碼開始應用到IDS上的時間差,也可供攻擊者利用來毫無顧忌地入侵系統,絲毫不用懼怕IDS會檢測到自己的入侵行為。
目前已有很多特征碼被創建出來,用以保護系統不受公開漏洞利用程序的侵害;而設計高品質特征碼,需要開發人員具備多方面的技能,避免誤報。另外,遲緩低效的特征碼,會導致IDS中出現弱點,增加已有常見繞過技術的打擊面。
在采訪中,該安全研究員表示:“特征碼,就是以系統能理解的形式呈現的專業知識。開發人員通常缺乏時間來深入分析漏洞并設計修復程序。他們還要關注性能,而這容易導致出錯。”
某些現有特征碼笨重而遲緩,需要大量時間執行必要的分析。當此類規則遭遇有問題的流量,IDS可能會被搞癱,開始丟棄流量數據包。要么引發拒絕服務,要么讓攻擊者得以繞過檢測系統。
在規劃IDS/IPS容量的時候,需遵守的一條經驗原則就是,每個處理器上只分配有限數量的特征碼和流量,確保系統能高效運轉。
什普林用開源網絡威脅檢測引擎Suricata測試了他的研究,發現找不到特征碼匹配所花的時間,比找到匹配所花的時間多,這就有損性能了。
Suricata使用強大而廣泛的規則及特征碼語言,支持YAML和JSON之類標準輸入/輸出格式,以特殊性能模式打造。然而,不久前該平臺中剛剛解決的一個漏洞,攻擊者可利用這個漏洞創建不良流量,讓系統滿載運行,從而繞過防御機制。
該漏洞影響4.x版本之前的Suricata,編號CVE-2017-15377,可觸發對特定特征碼所構成流量內容的大量冗余檢查,即便沒有發現任何匹配,搜索引擎也不會停止檢查,除非達到了檢查遞歸上限(默認是3000次)。
Suricata使用正則表達式,而什普林發現自己可以指定表達式用來搜索的字符串。采用放大攻擊,他還發現自己可以讓系統滿載:每條正則表達式檢查花費150萬個CPU時鐘周期,放大1000倍,就會消耗30億個時鐘周期以上——對處理器來說需要1秒鐘。
再加上Suricata即便沒找到匹配都會一直檢查下去,什普林發現,僅用250Kb/秒的網絡流量,就能讓1臺企業級服務器上40個處理器中的8個滿負荷運轉。每秒10個 HTTP POST 請求,該系統就開始丟包,然后被繞過。他用的是純凈安裝,于是,現實企業網絡所需的網絡流量還會更小。
慢速特征碼的檢測無法自動化,意味著這種被發現可行的攻擊方式是無法被檢測到。一旦系統開始丟包,宕機也就不遠了。
基于特征碼檢測的其他系統也會被攻擊者以類似方法繞過,因為該攻擊方法不引人注意。不過,什普林也指出,特征碼本身不是問題,但特征碼真的需要做做品質檢查了。
這還只是我們創建不良流量并放大慢速特征碼的其中一種方法。可能還有其他方法、其他案例、其他關鍵字組合,可被攻擊者用來致癱或繞過防御系統。