近一年來,Docker 已經逐漸成爲 container 界的事實標準,成爲技術人員不可或缺的技能之一,就像 Docker 宣稱的那樣,「Build,Ship,and Run Any App,Anywhere」,容器極大簡化了環境部署的步驟,而且很好的保證了環境的一致性。html
Docker 的輕量級給雲市場也注入了活力,國內已經有廠商發佈了基於 Docker 的公有云服務,例如:靈雀雲,DaoCloud。前端
做爲國內早期 Docker 的愛好者,筆者對 Docker 走向公有云的領域仍是有些疑問的,熟悉 Docker 的人都知道,Docker 底層是共享內核的,沒有物理隔離內核,會形成很大的安全問題,不知道國內的廠商是如何規避這個問題,作了哪些安全防禦;可是國內有一支隊伍,推出了本身的輕量級的虛擬化服務 Hyper,一種相似 Docker 的方式,可是解決的 Docker 共享內核的問題,而且在2015的東京舉辦的 OpenStack 大會上,帶去了本身的 Hypernetes ,一個真正多租戶的 Kubernetes Distro,有興趣的朋友能夠進一步瞭解。java
筆者以爲 Docker 共享內核級別的安全,用到的人畢竟是少數,做爲應用開發者,咱們更關心的是跑在 Docker 中的應用是否安全,是否受到 XSS 攻擊,SQL 注入攻擊之類,OneAPM 公司的 OneRASP 就解決了這個安全問題,它無需改動任何代碼,經過 java instrument,實現應用受到攻擊的檢測和防禦功能。git
使用 OneRASP 產品以前,要先弄清楚什麼叫 RASP?不少人只聽過 WAF 防禦的概念,對這個瞭解並很少。github
關於 RASP,Gartner 定義爲"Runtime application self-protection (RASP) is a security technology that is built or linked into an application or application runtime environment, and is capable of controlling application execution and detecting and preventing real-time attacks",實時的應用安全防禦,它在應用程序裏實時對安全威脅進行監控,告警和攔截。web
"Web Application Firewall",Web應用防火牆,它放置在Web應用程序外層,攔截全部它認爲可疑的輸入而並不分析這些輸入是如何被應用程序處理的,它依賴於網絡流量分析,處理不一樣協議的方式也不一樣。正則表達式
在知道 RASP 這個概念前,WAF 在安全領域被普遍推廣,是對應用很好的防禦措施。但 RASP 會精確分析用戶輸入在應用程序裏的行爲,根據分析結果區分合法行爲仍是攻擊行爲,而後對攻擊行爲進行攔截。 RASP 不依賴於網絡流量分析,所以避免了字符解碼,複雜的正則表達式匹配以及基於簽名的威脅鑑別等麻煩。docker
若是想使用 OneRASP ,首先須要在 OneRASP 官網註冊了本身的帳號,而後登陸。apache
單擊管理按鈕,選擇添加探針,對探針進行命名,能夠把探針直接下載下來:
探針目前只能經過瀏覽器下載,將來還將會提供命令行的安裝工具,點開探針配置,發現探針有監聽和保護兩種狀態,僅僅爲了測試,而後選擇監聽狀態:
下面進行探針的安裝,在探針設置和下載頁未有明確的探針安裝的連接地址,退回到首頁找到幫助,進入文檔頁才找到,這裏是安裝文檔。bootstrap
看了下文檔,並未提供官方的 Docker 鏡像,看來只能本身打鏡像了,目前 OneRASP 官方文檔使用 tomcat 做爲Web 容器,筆者使用 Docker 官方提供的 tomcat 鏡像做爲 base image,Dockerfile 以下:
FROM tomcat:7-jre8 MAINTAINER demo<demo@demo.com> ENV CATALINA_HOME /usr/local/tomcat ENV PATH $CATALINA_HOME/bin:$PATH WORKDIR $CATALINA_HOME ADD OneRASP ./OneRASP RUN sed -i '234 a CATALINA_OPTS="-javaagent:/usr/local/tomcat/OneRASP/lib/RaspAgent.jar $CATALINA_OPTS"' $CATALINA_HOME/bin/catalina.sh CMD ["catalina.sh", "run"]
下面咱們開始build鏡像
docker build -t="docker.test.com/onerasp/demo" .
啓動鏡像:
docker run -p 9999:8080 -d --name rasptest docker.test.com/onerasp/demo
查看進程,確認帶有探針的tomcat啓動成功
docker top rasptest
日誌
/usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/usr/local/tomcat/OneRASP/lib/RaspAgent.jar -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
啓動成功。
若是要驗證 RASP 是否能夠防護攻擊,咱們還要準備一個待攻擊的應用,相應的攻擊腳本,最後驗證咱們的攻擊是否有效。
待攻擊應用以 webgoat 爲例,若是有人不瞭解能夠看看Github上 webgoat的介紹。
在 docker hub 能夠搜到 webgoat 的鏡像,實驗也以 pandrew/webgoat 的 Dockerfile 基礎鏡像,稍做修改。
筆者的目錄結構:
修改後的Dockerfile以下:
FROM java:8u40-b22-jre RUN curl -fL https://github.com/WebGoat/WebGoat-Legacy/releases/download/v6.0.1/WebGoat-6.0.1-war-exec.jar -o /webgoat.jar RUN mkdir -p /webgoat_agent/OneRASP ADD OneRASP /webgoat_agent/OneRASP EXPOSE 8080 CMD ["java", "-jar","-javaagent:/webgoat_agent/OneRASP/lib/RaspAgent.jar", "/webgoat.jar"]
在當前目錄下構建webgoat鏡像:
sudo docker build -t="webgoat_agent_test" .
啓動鏡像:
sudo docker run -d --name webgoat -p 8080:8080 webgoat_agent_test
啓動後,要確認兩點:第一,觀察控制檯,確認探針鏈接是否正常;第二,確認應用是否正常啓動。
探針鏈接確認:
應用啓動確認:
如今全部準備工做就緒,能夠按照webgoat的教程,攻擊webgoat,來測試探針是否生效。
測試以 Injection Flaws 中的 XPATH Injection 爲例,按照教程輸入攻擊腳本:
攻擊成功後,會有提示,如上圖。
在 OneRASP 平臺查看攻擊的防禦日誌:
點開 XPath 查看攻擊詳情,確認此攻擊和以前攻擊腳本是否一致:
因而可知,OneRASP 確實檢測到了咱們以前發起的那次 XPath Injection 攻擊,在以後筆者又嘗試了幾種常見的攻擊類型,例如 SQL Injection、CSRF、XSS 等,OneRASP 都監聽到了攻擊請求,而且定位到攻擊的相關位置,試驗到此結束。
對於容器內的應用,OneRASP也能起到必定的防禦效果,目前安裝較爲繁瑣。本次試驗以 webgoat 做爲測試應用的緣由是 webgoat 易於攻擊,若是放到自家的應用還須要具體的測試,並且筆者以爲試驗測試的攻擊集比較有限,可是對於一個無任何安全防禦的裸奔的應用,確定能起到必定的效果。
本文系 OneASP 前端工程師陳亮原創文章。現在,多樣化的攻擊手段層出不窮,傳統安全解決方案愈來愈難以應對網絡安全攻擊。OneASP 自適應安全平臺集成了預測、預防、檢測和響應的能力,爲您提供精準、持續、可視化的安全防禦。想閱讀更多技術文章,請訪問 OneAPM 官方技術博客
本文轉自 OneAPM 官方博客