研究人員發(fā)現(xiàn)一種新型攻擊途徑,可允許攻擊者濫用Docker API隱藏目標(biāo)系統(tǒng)上的惡意軟件,Docker API可被用于實(shí)現(xiàn)遠(yuǎn)程代碼執(zhí)行與安全機(jī)制回避等目的。
作為開發(fā)人員群體當(dāng)中人氣極高的代碼測試方案,Docker能夠建立起一套完整的IT堆棧(包含操作系統(tǒng)、固件以及應(yīng)用程序),用以在容器這一封閉環(huán)境當(dāng)中進(jìn)行代碼運(yùn)行。盡管其結(jié)構(gòu)本身非常適合實(shí)現(xiàn)代碼測試,但容器技術(shù)亦可能被攻擊者用于在企業(yè)環(huán)境內(nèi)進(jìn)行惡意軟件感染。
在本屆于拉斯維加斯召開的2017美國黑帽大會上,Aqu Security公司研究人員Michael Cherny與Sagie Dulce指出,Aqua Security研究人員塞奇·杜爾塞曾提出這種概念驗(yàn)證(PoC)攻擊,并首次演示了這種技術(shù)。
研究人員們解釋稱,攻擊者不僅能夠在企業(yè)網(wǎng)絡(luò)之內(nèi)運(yùn)行惡意軟件代碼,同時(shí)亦可在過程當(dāng)中配合較高執(zhí)行權(quán)限。
在攻擊當(dāng)中,惡意一方往往會誘導(dǎo)受害者打開受控網(wǎng)頁,而后使用REST API調(diào)用執(zhí)行Docker Build命令,借以建立起能夠執(zhí)行任意代碼的容器環(huán)境。通過一種名為“主機(jī)重綁定”的技術(shù),攻擊者能夠繞過同源政策保護(hù)機(jī)制并獲得底層Moby Linux虛擬機(jī)當(dāng)中的root訪問能力。
如此一來,攻擊者將能夠竊取開發(fā)者登錄憑證、在開發(fā)者設(shè)備上運(yùn)行惡意軟件或者將惡意軟件注入至容器鏡像之內(nèi),進(jìn)而在該容器的每一次啟動(dòng)當(dāng)中實(shí)現(xiàn)感染傳播。
杜爾塞表示,攻擊最終能在企業(yè)網(wǎng)絡(luò)中駐留持久代碼,由于這部分代碼運(yùn)行在Moby Linux虛擬機(jī)當(dāng)中,因此現(xiàn)有主機(jī)上的安全產(chǎn)品無法檢測主機(jī)上的持久性。
攻擊的多個(gè)階段
這種攻擊分多個(gè)階段進(jìn)行。首先,將運(yùn)行Docker for Windows的開發(fā)人員引誘到攻擊者控制的網(wǎng)頁(托管著特制JavaScript)。
JavaScript能繞過瀏覽器“同源策略”(Same Origin Policy,SOP)安全協(xié)議——現(xiàn)代瀏覽器上的數(shù)據(jù)保護(hù)功能。所謂同源,是指,域名,協(xié)議,端口相同。
杜爾塞指出,HTTP請求方法有限,包括GET、HEAD和POST。杜爾塞不僅使用未違反SOP保護(hù)的API命令,而且還在主機(jī)(將Git倉庫作為C&C服務(wù)器)上創(chuàng)建一個(gè)Docker容器,由此托管惡意攻擊代碼。
DNS重綁定攻擊VS主機(jī)重綁定攻擊
杜爾塞表示,Docker容器受限。如果想要訪問整個(gè)Docker API,以便能運(yùn)行任何容器,例如對主機(jī)和底層虛擬機(jī)具有更多訪問權(quán)的特權(quán)容器。為了實(shí)現(xiàn)該效果,Aqua研究人員創(chuàng)建了與“DNS重綁定攻擊”(DNS Rebinding Attack.)類似的“主機(jī)重綁定攻擊”(Host Rebinding Attack)技術(shù)。
DNS重綁定攻擊指的是,對手濫用DNS誘騙瀏覽器不執(zhí)行SOP。Aqua的主機(jī)重綁定攻擊針對Microsoft名稱解析協(xié)議實(shí)現(xiàn)同樣的目標(biāo),不過主機(jī)重綁定攻擊通過虛擬接口實(shí)現(xiàn),因此攻擊本身不會在網(wǎng)絡(luò)中被檢測到。
研究人員寫到,主機(jī)重綁定攻擊會將本地網(wǎng)絡(luò)上的主機(jī)IP地址重綁定到另一個(gè)IP地址,即與DNS重綁定類似。DNS重綁定是欺騙DNS響應(yīng)、控制域名或干擾DNS服務(wù),但主機(jī)重綁定攻擊則是欺騙對名稱解析協(xié)議(廣播的)的響應(yīng),例如NetBIOS和LLMNR。其結(jié)果是創(chuàng)建容器,使其在受害者Hyper-V虛擬機(jī)中運(yùn)行,共享主機(jī)網(wǎng)絡(luò),并執(zhí)行攻擊者控制的任意代碼。
研究人員解釋稱,具備能力針對Docker Daemon REST API執(zhí)行任何命令之后,他們能有效獲取底層Moby Linux虛擬機(jī)的Root訪問權(quán)限。
下一步是利用Root權(quán)限執(zhí)行惡意代碼,同時(shí)在主機(jī)上保持持久性,并在虛擬機(jī)內(nèi)隱匿活動(dòng)。
生成“影子容器”
接下來,需生成杜爾塞所謂的“影子容器”(Shadow Container)。當(dāng)虛擬機(jī)重啟時(shí),“影子容器”允許惡意容器下達(dá)保持持久性的指令。如果受害者重啟主機(jī)或只是重啟Docker for Windows,攻擊者將失去控制。為了解決這些問題,他們提出采用“影子容器”技術(shù)獲取持久性和隱匿性。
為此,杜爾塞編寫了容器關(guān)閉腳本,以此保存他的腳本/狀態(tài)。當(dāng)Docker重啟時(shí),或Docker重置或主機(jī)重啟后,“影子容器”將運(yùn)行攻擊者的容器,保存攻擊腳本。這樣一來,攻擊者便能在滲透網(wǎng)絡(luò)的同時(shí)保持隱匿性,以此執(zhí)行偵察活動(dòng)、植入惡意軟件或在內(nèi)部網(wǎng)絡(luò)中橫向活動(dòng)。
這種攻擊能實(shí)現(xiàn)攻擊者什么目的?
杜爾塞表示,通過這種攻擊可以訪問內(nèi)部網(wǎng)絡(luò)、掃描網(wǎng)絡(luò)、發(fā)現(xiàn)開放端口、橫向活動(dòng),并感染其它設(shè)備,但還得找到方法感染本地容器鏡像,從而散布到整個(gè)企業(yè)Docker渠道中。
杜爾塞和Aqua Security研究負(fù)責(zé)人邁克爾·喬爾內(nèi)表示,他們今年年初通知了Docker這種攻擊途徑。
Docker承認(rèn)存在這個(gè)問題,并表示這是由于先前所有Docker for Windows版本允許通過TCP/HTTP遠(yuǎn)程訪問Docker。自此之后,Docker改變了默認(rèn)配置,關(guān)閉了HTTP端口,以此防止訪問Docker Daemon。
緩解措施
專家給出的緩解措施包括,更新Docker for Windows,僅允許證客戶端訪問暴露的端口,通過防火墻阻止Moby Linux虛擬機(jī)接口上的2375端口,以及在所有端點(diǎn)上禁用LLMNR和NetBIOS。