一、說明
1.1 RASP和WAF的區別
WAF,Web Application Firewall,應用防火牆。其原理是攔截原始http數據包,然后使用規則對數據包進行匹配掃描,如果沒有規則匹配上那就放行數據包。正如一個門衛,如果他根據自己以往經驗沒看出要進入的人有疑點那么這個人就會被放行,至於進去的人在里面干什么他就不知道了。
RASP,Runtime application self-protection,運行時應用自我保護。Gartner公司2014年新提出的一個概念。其不是攔截數據包而是攔截將要執行的代碼,對代碼進行規則匹配如果沒匹配上就放行代碼。就好像在客廳、廚房、卧窒等每個地方都派一個管家監視,每個進到家里的要去什么地方做什么動作都在監視之下,一但發現某人要做出某些危險舉動就會被阻止。攔截代碼就類似hook,java通過重寫ClassLoader等方法實現代碼攔截。
我們經常聽說免殺、繞WAF,其主要原理就是通過各種函數進行編碼實現換臉來繞過WAF的匹配規則;而RASP審查的是最終要執行的代碼,此時為了能夠執行各種被編碼的payload都將被還原成原始的payload,顯然此時查殺漏報率和誤報率都會更低。但同時也顯然RASP比WAF做了更多的事情,這意味着RASP會比傳統WAF要消耗更多的系統資源。
就Web Application Firewall這個詞的字面意思而言RASP也屬於WAF,可以認為RASP是深入到中間件內部的新型WAF。
1.2 OpenRASP
OpenRASP是百度在2017年針對RASP概念推出的一款開源免費的自適應安全產品。
安裝配置等官方文檔(https://rasp.baidu.com/doc/)都已有詳細說明,這篇博客只是為了自己備忘,實現在Tomcat上安裝OpenRASP。
參考:
https://baijiahao.baidu.com/s?id=1596150015211244982&wfr=spider&for=pc
https://github.com/baidu/openrasp
二、安裝
2.1 設置主機名解析
避免后邊tomcat部署應用時出現主機名無法解析錯誤(Caused by: java.net.UnknownHostException: ls: Temporary failure in name resolution)
cat >> /etc/hosts << EOF 127.0.0.1 `hostname` EOF
2.2 安裝jdk配置環境變量
這個就不多說了。
jdk下載地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html
2.3 安裝tomcat
下載解壓就行,這個也不多說了。我這里以centos 6.10+tomcat8.5為例,具體安裝路徑/usr/myapp/apache-tomcat-8.5.35
tomcat下載地址:http://tomcat.apache.org/
2.4 安裝openrasp
我這里為了簡便直接使用jar包進行自動化安裝
jar包下載地址:https://github.com/baidu/openrasp/releases
# 下載tar.gz包,鏈接修改成自己安裝時的最新版本 wget https://github.com/baidu/openrasp/releases/download/v0.50/rasp-java.tar.gz # 解壓 tar -zxf rasp-java.tar.gz # 進入到目錄,修改成自己解壓出的 cd rasp-2018-10-29/ # 自動化安裝,后邊的tomcat安裝路徑修改成自己tomcat安裝在的位置 java -jar RaspInstall.jar -install /usr/myapp/apache-tomcat-8.5.35
從上邊的提示中可以看到所謂的“安裝”,主要是做兩件事件:第一件是把rasp文件夾復制到tomcat安裝目錄下,第二件是修改catalina.sh加載openrasp。(官方文檔手動安裝更可知道詳細在做什么)
三、防護測試
3.1 安裝測試用例
此時重啟tomcat,openrasp就能按默認規則開始防護了。
不過由於openrasp是監測要執行的代碼的,我們不能像openresty那樣弄個不存在的頁面來測試頁面不存在openrasp只會返回404,所以我們須要弄個真正存在且真正存在漏洞的頁面,使用可行的exp進行攻擊才能測出是否防護已生效。
百度已提供存在漏洞的網頁,我們直接下載其war包放到tomcat的html文件夾下重啟tomcat即可。反序列化依賴jdk版本為了簡便用們使用vulns.war
下載地址:https://github.com/baidu-security/openrasp-testcases/releases
3.2 測試防護效果
重啟tomcat后訪問vulns目錄,如下
隨便點擊一個頁面右方的鏈接,即可見進攻擊說明。以“001 - 使用 File.listFiles 遍歷目錄(有路徑拼接)”為例如下
直接點擊正常調用鏈接可以正常訪問,點不正常調用鏈接觸下如下攔截。攔截日志在rasp/logs/alarm/alarm.log
3.3 使用體驗說明
從道理上來說RASP效果會比傳統WAF好,但就OpenRASP使用來看成熟度還有待提高,比如自己提供的測試用例有些都沒成功觸發攔截(如004 - 命令執行后門 - 帶回顯)。