接續上一篇初探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 Explained: How To Containerize Python Web Applications
- Haskell sandbox and Docker.io
- Baidu chooses Docker containers over sandbox for PaaS
- Docker Makes Creating Secure Sandboxes Easier Than Ever
像最後一篇文章就有很多人留言來問到,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
2. Run App in Docker of Docker
既然包一層不夠安全,那包兩層呢?這邊看到另一個專案- sandbox-in-docker,在Docker裡面跑Docker來達到Sandbox的效果....不過如果真的不安全不管包幾層都一樣吧?
結論:
但底是Docker as Sandboxes 還是 Docker is Sandboxes呢? 就讓
沒有留言:
張貼留言