文档章节

你的 Docker 应用是安全的吗?

OneAPM蓝海讯通
 OneAPM蓝海讯通
发布于 2016/01/21 13:17
字数 1817
阅读 19
收藏 0

近一年来,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 防护的概念,对这个了解并不多。

  1. 关于 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",实时的应用安全防护,它在应用程序里实时对安全威胁进行监控,告警和拦截。

  2. "Web Application Firewall",Web应用防火墙,它放置在Web应用程序外层,拦截所有它认为可疑的输入而并不分析这些输入是如何被应用程序处理的,它依赖于网络流量分析,处理不同协议的方式也不同。

在知道 RASP 这个概念前,WAF 在安全领域被广泛推广,是对应用很好的防护措施。但 RASP 会精确分析用户输入在应用程序里的行为,根据分析结果区分合法行为还是攻击行为,然后对攻击行为进行拦截。 RASP 不依赖于网络流量分析,因此避免了字符解码,复杂的正则表达式匹配以及基于签名的威胁鉴别等麻烦。

如果想使用 OneRASP ,首先需要在 OneRASP 官网注册了自己的账号,然后登录。

你的 Docker 应用是安全的吗? 单击管理按钮,选择添加探针,对探针进行命名,可以把探针直接下载下来: 你的 Docker 应用是安全的吗? 探针目前只能通过浏览器下载,未来还将会提供命令行的安装工具,点开探针配置,发现探针有监听和保护两种状态,仅仅为了测试,然后选择监听状态: 你的 Docker 应用是安全的吗? 下面进行探针的安装,在探针设置和下载页未有明确的探针安装的链接地址,退回到首页找到帮助,进入文档页才找到,这里是安装文档

看了下文档,并未提供官方的 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

启动后,要确认两点:第一,观察控制台,确认探针连接是否正常;第二,确认应用是否正常启动。

探针连接确认: 你的 Docker 应用是安全的吗? 应用启动确认: 你的 Docker 应用是安全的吗? 现在所有准备工作就绪,可以按照webgoat的教程,攻击webgoat,来测试探针是否生效。

测试以 Injection Flaws 中的 XPATH Injection 为例,按照教程输入攻击脚本: 你的 Docker 应用是安全的吗? 攻击成功后,会有提示,如上图。

在 OneRASP 平台查看攻击的防护日志: 你的 Docker 应用是安全的吗? 点开 XPath 查看攻击详情,确认此攻击和之前攻击脚本是否一致: 你的 Docker 应用是安全的吗?

由此可见,OneRASP 确实检测到了我们之前发起的那次 XPath Injection 攻击,在之后笔者又尝试了几种常见的攻击类型,例如 SQL Injection、CSRF、XSS 等,OneRASP 都监听到了攻击请求,并且定位到攻击的相关位置,试验到此结束。

对于容器内的应用,OneRASP也能起到一定的防护效果,目前安装较为繁琐。本次试验以 webgoat 作为测试应用的原因是 webgoat 易于攻击,如果放到自家的应用还需要具体的测试,而且笔者觉得试验测试的攻击集比较有限,但是对于一个无任何安全防护的裸奔的应用,肯定能起到一定的效果。

本文系 OneASP 前端工程师陈亮原创文章。如今,多样化的攻击手段层出不穷,传统安全解决方案越来越难以应对网络安全攻击。OneASP 自适应安全平台集成了预测、预防、检测和响应的能力,为您提供精准、持续、可视化的安全防护。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

© 著作权归作者所有

OneAPM蓝海讯通
粉丝 94
博文 631
码字总数 1266889
作品 0
海淀
私信 提问
应用程序跑在Docker容器中会更安全

作者:Nathan McCauley 译者:廖煜 Docker对安全的支持是与生俱来的。作为一个平台,Docker为跑在其中的所有应用程序提供安全保障,不需要在Docker之外,单独部署一套安全解决方案。 目前,D...

精灵云
2016/08/31
0
0
你还在为下载Docker镜像过慢而烦恼吗?

  【IT168 评论】不知道还有多少人记得2013年以前的App Store,国内用户下载一个应用十分煎熬,直到和CDN厂商合作才有所改观。   这种情况不止于App Store,Docker Hub同样也存在。其作为...

it168网站
2017/06/28
0
0
Docker 涉密信息管理介绍

容器正在改变我们对应用程序和基础设施的看法。无论容器内的代码量是大还是小,容器架构都会引起代码如何与硬件相互作用方式的改变 —— 它从根本上将其从基础设施中抽象出来。对于容器安全来...

作者: Ying Li
2018/01/13
0
0
Docker为整个软件生命周期提供安全保障

作者:Docker Security Team 译者:廖煜 提到Docker的安全性和隔离性,人们关注点大多都在运行阶段。但是,运行时的安全问题仅仅是整个软件生命周期中的一部分,我们需要在整个软件生命周期都...

精灵云
2016/09/07
0
0
Docker EE 2.0 版本尝鲜测评,带给您无与伦比的容器体验(二)

本文首发自“Docker公司”公众号(ID:docker-cn) 编译丨小东 每周一、三、五 与您不见不散! 我们很高兴地宣布,Docker Enterprise Edition 2.0 已经发布,这标志着 Docker 企业级容器平台...

docker公司
2018/04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
42
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部