2014年8月30日 星期六

初探Docker - Docker as Sandboxes



接續上一篇初探Docker - Docker 跟 LXC 以及一般Hypervisor有何差別?

前幾天聽到Hitcon團隊的演講,在講述系統如何被破解和入侵,比如說php的web如何透過sql injection和埋後門的方式被入侵,想想也是捏了一把冷汗.....

很多時候就算我們自己寫程式時會注意這些東西,但是當我們用別人現成的Open Source套件或是Lib時呢?我們不一定會(一定不會)把source code 都review一遍,就直接把東西裝來玩,就算我們很注重安全,但是整個系統可能就因為我們裝了這些軟體而門戶大開...

那些知名的軟體專案都可能會有漏洞了,更何況那些來路不明的軟體/系統呢?我們都知道亂裝來路不明的軟體本來就是大忌,但是手賤又想要玩玩看的話那該怎麼辦呢?像最近看到一個自定短網址的系統yourls,就很想裝起來玩玩看,但是又怕有問題...這時候我們就該使用sandbox~

首先我們先來看看wiki上 Sandbox的定義:

沙盒(英語:sandbox),有時也稱為沙箱,是為一些來源不可信、具破壞力或無法判定程式意圖的程式提供實驗的環境。然而,沙盒中的所有改動對作業系統不會造成任何損失。通常,這種技術被電腦技術人員廣泛使用,尤其是電腦防毒軟體行業,沙盒是一個觀察電腦病毒的重要環境。影子系統即是利用了這種技術的軟體之一
而傳統的Sandbox大多使用幾種方法:
  • chroot
  • visualization 
  • native hosts with restrict environment (such as limit network)


這些需求感覺用Docker也可以達成?而且很簡單的樣子....但是真的是這樣嗎?


1. Just Run App in Docker

的確有很多人這樣做:

像最後一篇文章就有很多人留言來問到,Docker是否可以做到Sanbox般保護以下情境:

a simple environment to test submitted, potentially dangerous, student code , such as fork bomb
(惡搞老師的學生...那他一定不想過了...XD) 作者回答道,可以透過以下方法:

configuring some sensible PAM limits for the number of processes (e.g. 100) a single user can run in any one session

類似的Solution 大多使用LXC:

但是這樣真的夠安全嗎?以LXC的案例來說,可以參考IBM這份文件 - Secure Linux containers cookbook,主要透過幾個方法:
  • Linux Security Modules (LSM)
  • SELinux
  • Smack is the Simplified Mandatory Access Control Kernel
 很顯然的仍然有許多設定要注意,那是不是Docker都有幫我們注意到呢?或是這又是另一個商機? Secure Docker ?

2. Run App in Docker of Docker



既然包一層不夠安全,那包兩層呢?這邊看到另一個專案- sandbox-in-docker,在Docker裡面跑Docker來達到Sandbox的效果....不過如果真的不安全不管包幾層都一樣吧?


結論:

但底是Docker as Sandboxes 還是 Docker is Sandboxes呢? 就讓看官們自行定奪我們繼續研究下去吧吧~:P



張貼留言