作為一名資安工作者,臺灣資安技術社群 CHROOT 、臺灣駭客年會 HITCON 創辦人,目前任職於美商 vArmour 資深工程師的徐千洋,已經養成習慣,經常在各大網站瀏覽,檢查是否有該站管理者沒有察覺的漏洞存在。他表示,位居Alexa網站評比全球網路流量第61名的色情網站Pornhub,由於使用者人數眾多,自然是吸引駭客攻擊的大目標。為此,Pornhub也發起一個漏洞懸賞計畫,歡迎資安高手回報該網站存在的任何漏洞及弱點,成功入侵者也能獲得豐厚的獎賞。
Pornhub懸賞最高金額的前兩名漏洞,都是歸類在遠端命令執行漏洞,總計金額高達2萬5千美元,「而最高金額的獎金已經被人領走。」
即便如Pornhub,使用者眾多、營收規模如此大,更用砸重金打造的安全防護不亞於他人的網站,都能夠被駭客找到遠端執行的漏洞,「這意味著全球更多網站都暴露在類似風險之下。」
讓駭客領取Pornhub最高懸賞金的遠端命令執行漏洞,不僅是駭客常見的攻擊手法,一旦執行成功也相當具有威力,網站中各類的設定檔、原始碼,或是儲存在SQL資料庫的使用者帳號密碼,全部都在攻擊者的掌握,更讓管理者近乎喪失網站的主導權。徐千洋也直言,許多大型網站一旦使用者帳號密碼外洩,往往並非是單純SQL injection攻擊事件,「很可能該網站已被徹底地入侵、掌控了。」這不禁讓徐千洋思考,一名網站管理員有無可能阻絕這些攻擊,即便駭客找到零時差漏洞,也無法成功的入侵?
市面常見的網站,大多都會透過網頁伺服器如Httpd執行連線服務,串連到程式語言直譯器,最後透過PHP等程式語言執行網頁應用程式。但是這段常見的運作流程,從一開始接通網路連線後,就已經暴露在遠端執行的風險中,徐千洋表示,若中間任何一環存在漏洞,就可能導致駭客入侵,例如執行Shell等命令。他觀察,目前網頁服伺服器而言,想找到漏洞並非易事,風險最高的遠端命令執行漏洞數量更是稀少。不過程式語言、網頁應用程式則不乏高風險漏洞,像是通用漏洞平臺CVE的資料庫中,PHP存在漏洞的漏洞,範圍涵括6至10等高風險,「網頁應用程式的漏洞更是多如牛毛。」
徐千洋也歸納駭客經常使用的遠端執行攻擊手法,像某網站經常性的遭入侵,很可能是該網站存在遠端攻擊漏洞,比方說熱門開發套件Wordpress如果突然爆出來不及修補的零時差漏洞,就很可能遭致駭客攻擊。或該網站開放上傳外部資料的功能,如傳送大頭貼、文件等檔案。這類允許外部程式執行寫入權限是高風險行為,一旦使用者疏忽,攻擊就可以將檔案寫入特定目錄,留下後門作為發動攻擊的入口。在成功拿下Webshell後,也能植入簡單的PHP後門一句話木馬,下達攻擊指令。乍聽之下,網站管理者只能成為駭客的待宰羔羊,徐千洋表示,解法就是利用容器技術強化網站安全。
徐千洋表示,過去利用Unix運行網頁伺服器的時代,避免使用root權限執行系統服務是基本的安全守則,碰上非用root權限不可的情況,使用者執行完服務後,也一定要執行權限降低為一般使用者。再者,搭配chroot環境運作網頁伺服器也能提高整體安全性,「就像是加上了一把鎖」,即便遭受攻擊也能將損害限縮在此環鏡,而利用Container建立網站,其中安全觀念與Unix的操作不謀而合,「容器是chroot的強化版本,照理來講安全性會更高。」他說。
容器3大安全強化術
徐千洋表示,使用者可透過Docker中內建的3個原生機制,加強使用容器的安全性。第一個安全術是善用命名空間(Username Space),讓Container不再使用root權限執行。在去年推出的Docker 1.9.0版本中,Docker就將此機制納入其中,「即使在Container用root權限執行服務,也並非host主機握有的root權限。」
當Container在運作程式時,位在使用者命名空間的執行環境,系統會透過host主機取得其執行身份。即使在Container中,某使用ID利用root權限執行程式也不會有影響,「因為Username space中,系統會以該使用者真正握有root權限」,但是在Container底下有root權限的帳號,僅是host主機底下的一般權限帳號,「從host主機的角度來看,所有容器下執行的程序都只是一般權限執行而已。」
第二是善用安全機制Capabilities,劃分特權帳號所能能執行的數十個程序,一一給予控制。徐千洋表示,雖然此機制早在Linux中就能使用,但是礙於使用者必須要熟悉Unix底層操作,並且具備Linux Kernel的相關之至,「因此一直無法普及。」
利用Capabilities機制,使用者可以將root權限所能執行的功能,向下切割成數十個,讓無root權限的使用者也能執行某些程序。舉例,在Unix的設計中,使用者如果想要啟用數字小於1024的port,必須取得root權限。但是利用Capabilities,不需要透過root權限,就可以讓某些服務開啟低於1024的port。
最後一招則是Linux內建的安全模組AppArmor,掌管某程式在執行的當下,對於其他檔案的操作。例如,如果某檔案被限定只能讀取,即使使用者取得可以任意讀寫的root權限,也會被AppArmor所阻擋。
徐千洋也歸納,使用者可以利用3個基本法則,加強網站服務的安全性。第一原則就是避免使用root權限運作服務,「即便使用Container也盡量不要使用root權限。」
再者,不得將網頁程式、設定檔寫入納入服務執行的權限。他表示,許多開發者會因為使用者群組的設定而輕忽此事。例如網站管理者、網頁應用程式擁有者都給予相通的權限,當駭客成功利用遠端攻擊打入網站時,就可以將許多惡意程式植入其中。但是,要防範此事,「只要讓網頁應用程式擁有者的權限,跟網站伺服器擁有者的權限不一致即可。」最後則是服務程序具有寫入權限的檔案不可以被執行。
使用習慣也影響網站安全
但是,除了技術面問題,使用者習慣也是安全的一大考驗,「有些使用者就是不信邪,非得要用root權限運作服務」,一旦駭客取得最高權限,不管系統管理者如何搶救都是徒勞無功。
所以針對Container安全強化,徐千洋也提出了幾個建議。例如,如果不了解Capabilities機制如何運作,「就將它所有的權限去除」,發現某些程序無法執行,再依序地加回原有的權限。
而容器映像檔也是能增進安全的施力點,像是移除不需要的檔案及程式,「像是運行微服務、網站伺服器,根本不會用到GCC編譯器」,多餘的檔案只是徒增駭客所能攻擊的範圍。也因此,開發環境、正式環境中,應要使用不同的容器映像檔。再者,如果網站開發使用者上傳檔案的功能,也必須做出相關管制。偵測到Container中新增了檔案,也可呼叫外部防毒系統掃描。一旦偵測到攻擊事件,產生Log的記錄也要傳送到資安監控中心SOC及資安事件管理平臺SIEM,「不只是阻擋攻擊,還要知道攻擊來源為何,以及使用何種攻擊手法,這樣就可以找到系統內可能存在的漏洞。」