S3影子存儲(chǔ)桶使AWS帳戶容易受到攻擊
攻擊者可以通過(guò)預(yù)先創(chuàng)建具有可預(yù)測(cè)名稱的S3存儲(chǔ)桶,從而訪問(wèn)AWS賬戶或敏感數(shù)據(jù),而這些存儲(chǔ)桶將被各種服務(wù)和工具自動(dòng)使用。
研究人員發(fā)現(xiàn)了一種攻擊AWS服務(wù)或自動(dòng)配置AWS S3存儲(chǔ)桶的第三方項(xiàng)目的新方法,這種被稱為“Shadow Resource”的新攻擊向量可能導(dǎo)致AWS賬戶被接管、遠(yuǎn)程代碼執(zhí)行或敏感數(shù)據(jù)泄露。
安全公司Aqua Security的研究人員發(fā)現(xiàn),六種AWS服務(wù)會(huì)創(chuàng)建具有可預(yù)測(cè)名稱的S3存儲(chǔ)桶,這些存儲(chǔ)桶易受新劫持技術(shù)的攻擊,他們?cè)诒局艿腂lack Hat USA安全會(huì)議上展示了他們的研究成果。
“Shadow Resource”攻擊涉及攻擊者在其他AWS區(qū)域提前創(chuàng)建存儲(chǔ)桶,然后等待目標(biāo)用戶在這些區(qū)域啟用易受攻擊的服務(wù),從而導(dǎo)致敏感文件和配置被存儲(chǔ)在由攻擊者控制的存儲(chǔ)桶中。
Aqua確定易受此技術(shù)攻擊的AWS服務(wù)包括CloudFormation、Glue、EMR、SageMaker、ServiceCatalog和CodeStar。亞馬遜已經(jīng)修復(fù)了這些服務(wù)中的問(wèn)題,并正在調(diào)查過(guò)去是否曾被利用過(guò),其他表現(xiàn)出類似S3存儲(chǔ)桶配置行為的AWS服務(wù)和第三方工具可能仍然存在漏洞。
具有后門(mén)潛力的影子存儲(chǔ)桶
Aqua的研究人員在注意到AWS CloudFormation每次在新的AWS地理區(qū)域啟用時(shí),都會(huì)在后臺(tái)創(chuàng)建一個(gè)S3存儲(chǔ)桶后,開(kāi)始了他們的調(diào)查。這個(gè)S3存儲(chǔ)桶用于存儲(chǔ)用戶創(chuàng)建的CloudFormation模板,其名稱格式為[固定前綴]-[唯一哈希值]-[AWS區(qū)域名稱],例如cf-templates-123abcdefghi-us-east-1。
S3存儲(chǔ)桶名稱在整個(gè)AWS基礎(chǔ)設(shè)施中是唯一的,因此研究人員想知道,如果攻擊者提前在用戶可能稍后啟用的不同區(qū)域中注冊(cè)了CloudFormation預(yù)期會(huì)創(chuàng)建的存儲(chǔ)桶名稱,會(huì)發(fā)生什么。
存儲(chǔ)桶名稱的前綴和哈希部分在各區(qū)域之間保持不變——只有區(qū)域部分會(huì)改變。因此,如果攻擊者確定了哈希值,他們可以在用戶尚未使用的區(qū)域中預(yù)先注冊(cè)該存儲(chǔ)桶。盡管猜測(cè)哈希值是不可能的,但Aqua研究人員設(shè)法在GitHub的公共倉(cāng)庫(kù)或公開(kāi)的錯(cuò)誤票中找到了這些哈希值。
接下來(lái)他們想知道,當(dāng)用戶在某個(gè)區(qū)域部署服務(wù)時(shí),CloudFormation是否會(huì)使用攻擊者創(chuàng)建的現(xiàn)有存儲(chǔ)桶,還是會(huì)在嘗試創(chuàng)建存儲(chǔ)桶時(shí)出現(xiàn)錯(cuò)誤。他們發(fā)現(xiàn),CloudFormation確實(shí)會(huì)響應(yīng)一個(gè)錯(cuò)誤——但只有在存儲(chǔ)桶未配置為公共訪問(wèn)時(shí)才會(huì)如此,這是因?yàn)樗鼰o(wú)法向存儲(chǔ)桶寫(xiě)入文件。
因此,如果攻擊者配置了非常寬松的策略以允許服務(wù)所需的操作,并啟用了公共訪問(wèn),CloudFormation將直接使用這個(gè)惡意存儲(chǔ)桶。
問(wèn)題的影響取決于易受攻擊服務(wù)在存儲(chǔ)桶中存儲(chǔ)的內(nèi)容。對(duì)于CloudFormation(一個(gè)基礎(chǔ)設(shè)施即代碼工具)來(lái)說(shuō),存儲(chǔ)在存儲(chǔ)桶中的模板用于自動(dòng)部署由用戶定義的基礎(chǔ)設(shè)施堆棧。
這些模板可能包含敏感信息,如環(huán)境變量、憑據(jù)等,但問(wèn)題更嚴(yán)重的是,攻擊者可以在存儲(chǔ)桶中保存的模板中注入后門(mén)代碼,這些代碼將在用戶的賬戶中執(zhí)行。例如,攻擊者可以在模板中注入一個(gè)惡意的Lambda函數(shù),該函數(shù)可以在賬戶中創(chuàng)建一個(gè)新的管理員角色,供攻擊者使用。
使用賬戶ID生成可預(yù)測(cè)的S3存儲(chǔ)桶名稱
CloudFormation攻擊依賴于服務(wù)為用戶在某個(gè)區(qū)域創(chuàng)建的現(xiàn)有S3存儲(chǔ)桶名稱被泄露在代碼倉(cāng)庫(kù)中,但其他自動(dòng)創(chuàng)建S3存儲(chǔ)桶的AWS服務(wù)使用了更為可預(yù)測(cè)的命名模式。例如,AWS EMR(Elastic MapReduce)生成的S3存儲(chǔ)桶名稱為aws-emr-studio-[account-ID]-[region],而AWS SageMaker則使用sagemaker-[region]-[account-ID]。
根據(jù)AWS文檔,AWS賬戶ID不被視為機(jī)密或敏感信息。因此,它比由特定服務(wù)生成的唯一哈希值更有可能在多個(gè)地方被暴露。
AWS EMR是一項(xiàng)服務(wù),用戶可以使用Apache Hadoop、Apache Spark、Apache Hive和Jupyter Notebook等框架處理和分析大數(shù)據(jù)集。由EMR Studio創(chuàng)建的S3存儲(chǔ)桶用于存儲(chǔ)敏感的配置文件,同樣易受此類攻擊。
例如,攻擊者可以在受害者的EMR服務(wù)存儲(chǔ)的Jupyter Notebook文件(.ipynb)中注入惡意函數(shù),導(dǎo)致Jupyter Notebook界面中出現(xiàn)跨站腳本(XSS)漏洞。研究人員表示,這種漏洞可用于將用戶重定向到偽造的AWS登錄頁(yè)面,從而竊取他們的憑據(jù)。
AWS SageMaker是一個(gè)用于構(gòu)建、訓(xùn)練和部署機(jī)器學(xué)習(xí)模型的服務(wù),也存在類似的漏洞,因?yàn)镾ageMaker Canvas會(huì)自動(dòng)設(shè)置一個(gè)可預(yù)測(cè)的S3存儲(chǔ)桶。如果攻擊者預(yù)先注冊(cè)了這個(gè)存儲(chǔ)桶,他們可以訪問(wèn)敏感的模型訓(xùn)練數(shù)據(jù),甚至可以污染數(shù)據(jù)集,從而創(chuàng)建不準(zhǔn)確的模型。
研究人員還警告說(shuō),許多組織用于在其AWS環(huán)境中部署資源的開(kāi)源工具也會(huì)創(chuàng)建具有可預(yù)測(cè)名稱的S3存儲(chǔ)桶,這些名稱通常依賴于AWS賬戶ID、固定前綴和區(qū)域名稱,這些工具是否易受攻擊取決于它們?cè)诖鎯?chǔ)桶已存在的情況下是否會(huì)報(bào)錯(cuò),或者它們是否會(huì)繼續(xù)使用現(xiàn)有存儲(chǔ)桶(該存儲(chǔ)桶可能是由攻擊者擁有的)。影響還取決于存儲(chǔ)在這些存儲(chǔ)桶中的文件和資源類型。
研究人員在GitHub上搜索AWS賬戶ID模式,得到了將近160,000個(gè)結(jié)果。此外,還有其他人建立的包含AWS賬戶ID的列表,以及可能包含賬戶ID的S3存儲(chǔ)桶名稱列表。AWS賬戶ID還可以通過(guò)已知技術(shù)從AWS訪問(wèn)密鑰ID中推導(dǎo)出來(lái)。
桶壟斷攻擊及其緩解措施
為了最大化攻擊成功的可能性,攻擊者可以使用可預(yù)測(cè)的命名模式在組織尚未使用的所有AWS區(qū)域中創(chuàng)建影子S3存儲(chǔ)桶。AWS目前有33個(gè)區(qū)域,而一個(gè)組織不太可能使用其中的所有區(qū)域。研究人員將這種攻擊稱為“桶壟斷攻擊”。
首先,攻擊者找到一個(gè)基于AWS賬戶ID生成具有可預(yù)測(cè)名稱的S3存儲(chǔ)桶的服務(wù)或開(kāi)源工具。然后,他們識(shí)別出使用該服務(wù)或工具的組織,并找到其賬戶ID。確定這些組織尚未使用哪些區(qū)域來(lái)部署服務(wù)或工具并不困難,因?yàn)榇鎯?chǔ)桶名稱在整個(gè)服務(wù)中是唯一的,容易檢查它們是否已存在。
Aqua Security的研究人員提出的一種緩解措施是,組織可以為其使用的服務(wù)或工具所使用或假定的角色定義一個(gè)范圍化的策略,并在策略中包含`aws:ResourceAccount`條件元素,這可以用于檢查擁有資源(如S3存儲(chǔ)桶)的AWS賬戶ID是否與條件中提供的用戶自身的AWS賬戶ID匹配。
想要檢查某些服務(wù)的存儲(chǔ)桶是否遵循可預(yù)測(cè)名稱模式且由自己擁有的組織,可以使用以下命令:`aws s3api list-objects-v2 --bucket --expected-bucket-owner `。如果回復(fù)為“訪問(wèn)被拒絕(Access Denied)”,則表示盡管存儲(chǔ)桶名稱中包含您的賬戶ID,但該存儲(chǔ)桶并不屬于您的賬戶。
那些基于AWS賬戶ID并使用可預(yù)測(cè)模式自動(dòng)生成存儲(chǔ)桶名稱的工具應(yīng)轉(zhuǎn)向使用唯一的哈希值和隨機(jī)標(biāo)識(shí)符來(lái)為每個(gè)區(qū)域生成存儲(chǔ)桶名稱。