你的 Docker 应用是安全的吗?
近一年來,Docker 已經逐漸成為 container 界的事實標準,成為技術人員不可或缺的技能之一,就像 Docker 宣稱的那樣,「Build,Ship,and Run Any App,Anywhere」,容器極大簡化了環境部署的步驟,并且很好的保證了環境的一致性。
Docker 的輕量級給云市場也注入了活力,國內已經有廠商發布了基于 Docker 的公有云服務,例如:靈雀云,DaoCloud。
作為國內早期 Docker 的愛好者,筆者對 Docker 走向公有云的領域還是有些疑問的,熟悉 Docker 的人都知道,Docker 底層是共享內核的,沒有物理隔離內核,會造成很大的安全問題,不知道國內的廠商是如何規避這個問題,做了哪些安全防護;但是國內有一支隊伍,推出了自己的輕量級的虛擬化服務 Hyper,一種類似 Docker 的方式,但是解決的 Docker 共享內核的問題,并且在2015的東京舉辦的 OpenStack 大會上,帶去了自己的 Hypernetes ,一個真正多租戶的 Kubernetes Distro,有興趣的朋友可以進一步了解。
筆者覺得 Docker 共享內核級別的安全,用到的人畢竟是少數,作為應用開發者,我們更關心的是跑在 Docker 中的應用是否安全,是否受到 XSS 攻擊,SQL 注入攻擊之類,OneAPM 公司的 OneRASP 就解決了這個安全問題,它無需改動任何代碼,通過 java instrument,實現應用受到攻擊的檢測和防護功能。
使用OneRASP產品之前,要先弄清楚什么叫 RASP?很多人只聽過 WAF 防護的概念,對這個了解并不多。
關于 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 Application Firewall",Web應用防火墻,它放置在Web應用程序外層,攔截所有它認為可疑的輸入而并不分析這些輸入是如何被應用程序處理的,它依賴于網絡流量分析,處理不同協議的方式也不同。
在知道 RASP 這個概念前,WAF 在安全領域被廣泛推廣,是對應用很好的防護措施。但 RASP 會精確分析用戶輸入在應用程序里的行為,根據分析結果區分合法行為還是攻擊行為,然后對攻擊行為進行攔截。 RASP 不依賴于網絡流量分析,因此避免了字符解碼,復雜的正則表達式匹配以及基于簽名的威脅鑒別等麻煩。
如果想使用 OneRASP ,首先需要在 OneRASP 官網注冊了自己的賬號,然后登錄。
單擊管理按鈕,選擇添加探針,對探針進行命名,可以把探針直接下載下來:
探針目前只能通過瀏覽器下載,未來還將會提供命令行的安裝工具,點開探針配置,發現探針有監聽和保護兩種狀態,僅僅為了測試,然后選擇監聽狀態:
下面進行探針的安裝,在探針設置和下載頁未有明確的探針安裝的鏈接地址,退回到首頁找到幫助,進入文檔頁才找到,這里是安裝文檔。
看了下文檔,并未提供官方的 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:$PATHWORKDIR $CATALINA_HOMEADD OneRASP ./OneRASPRUN sed -i '234 a CATALINA_OPTS="-javaagent:/usr/local/tomcat/OneRASP/lib/RaspAgent.jar $CATALINA_OPTS"' $CATALINA_HOME/bin/catalina.shCMD ["catalina.sh", "run"]下面我們開始build鏡像
docker build -t="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如下:
在當前目錄下構建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 官方博客
轉載于:https://www.cnblogs.com/oneapm/p/5147938.html
總結
以上是生活随笔為你收集整理的你的 Docker 应用是安全的吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VxWorks6.6 pcPentium
- 下一篇: Win10 IoT 10 中文显示乱码或