云安全——對(duì)象存儲(chǔ)安全

基本概念:


不同的廠商對(duì)對(duì)象存儲(chǔ)的叫法不同:

云廠商 對(duì)象存儲(chǔ)名
阿里云 OSS
騰訊云 COS
華為云 OBS
谷歌云 GCS
微軟云 Blob
亞馬遜云 S3
——Bucket:

存儲(chǔ)空間(Bucket)是用戶用于存儲(chǔ)對(duì)象(Object)的容器,所有的對(duì)象都必須隸屬于某個(gè)存儲(chǔ)空間。存儲(chǔ)空間具有各種配置屬性,包括地域、訪問權(quán)限、存儲(chǔ)類型等。用戶可以根據(jù)實(shí)際需求,創(chuàng)建不同類型的存儲(chǔ)空間來存儲(chǔ)不同的數(shù)據(jù)。

  • 每個(gè)用戶可以擁有多個(gè)存儲(chǔ)空間。
  • 存儲(chǔ)空間的名稱在 OSS 范圍內(nèi)必須是全局唯一的,一旦創(chuàng)建之后無法修改名稱。
  • 存儲(chǔ)空間內(nèi)部的對(duì)象數(shù)目沒有限制。
——Object:

對(duì)象(Object)是 OSS 存儲(chǔ)數(shù)據(jù)的基本單元,也被稱為 OSS 的文件。和傳統(tǒng)的文件系統(tǒng)不同,對(duì)象沒有文件目錄層級(jí)結(jié)構(gòu)的關(guān)系。對(duì)象由元信息(Object Meta)用戶數(shù)據(jù)(Data)文件名(Key)組成,并且由存儲(chǔ)空間內(nèi)部唯一的 Key 來標(biāo)識(shí)。

元信息是一組鍵值對(duì),表示了對(duì)象的一些屬性,比如最后修改時(shí)間、大小等信息,同時(shí)用戶也可以在元信息中存儲(chǔ)一些自定義的信息。Data就是存儲(chǔ)的數(shù)據(jù)本體。Key是指存儲(chǔ)桶中的唯一標(biāo)識(shí)符。

——Region(地域):

Region表示OSS的數(shù)據(jù)中心所在物理位置。用戶可以根據(jù)費(fèi)用、請(qǐng)求來源等選擇合適的地域創(chuàng)建Bucket。一般來說,距離用戶更近的Region訪問速度更快。Region是在創(chuàng)建Bucket的時(shí)候指定的,一旦指定之后就不允許更改。該Bucket下所有的Object都存儲(chǔ)在對(duì)應(yīng)的數(shù)據(jù)中心,目前不支持Object級(jí)別的Region設(shè)置。

——Endpoint(訪問域名):

Endpoint表示OSS對(duì)外服務(wù)的訪問域名。當(dāng)訪問不同的Region的時(shí)候,需要不同的域名。通過內(nèi)網(wǎng)和外網(wǎng)訪問同一個(gè)Region所需要的Endpoint也是不同的。例如杭州Region的外網(wǎng)Endpoint:http://oss-cn-hangzhou.aliyuncs.com,而內(nèi)網(wǎng)Endpoint:http://oss-cn-hangzhou-internal.aliyuncs.com

訪問權(quán)限設(shè)置不當(dāng):


存儲(chǔ)空間的訪問權(quán)限(ACL)有以下三類:

訪問權(quán)限 描述
私有 只有Bucket的擁有者可以對(duì)該Bucket內(nèi)的文件進(jìn)行讀寫操作,其他人無法訪問該Bucket內(nèi)的文件。
公共讀 存儲(chǔ)空間的擁有者和授權(quán)用戶有該存儲(chǔ)空間內(nèi)的文件的讀寫權(quán)限,其他用戶只有該存儲(chǔ)空間內(nèi)的文件的讀權(quán)限。
公共讀寫 所有用戶都有該存儲(chǔ)空間內(nèi)的文件的讀寫權(quán)限。
0x01 任意文件上傳:

1、創(chuàng)建一個(gè)私有的Bucket:

點(diǎn)擊剛剛創(chuàng)建的Bucket,上傳一個(gè)文件測(cè)試:

2、上傳成功后,可在文件列表中進(jìn)行查看。點(diǎn)擊詳情即可查看文件訪問鏈接地址:

當(dāng)我們?cè)L問文件地址的時(shí)候,此時(shí)就會(huì)出現(xiàn)拒絕訪問:

3、當(dāng)我們將Bucket設(shè)置成公共讀的時(shí)候,即瀏覽器就可以直接讀取文件內(nèi)容:

4、當(dāng)我們將Bucket設(shè)置成公共讀寫的時(shí)候,此時(shí)可通過PUT方法上傳任意文件:

0x02 文件遍歷:

OSS存儲(chǔ)里面有種類似列目錄的漏洞,會(huì)顯示當(dāng)前存儲(chǔ)下所有的文件存儲(chǔ)路徑。在創(chuàng)建Bucket桶時(shí),默認(rèn)是private的權(quán)限,如果在錯(cuò)誤的配置下,給了ListObject權(quán)限,就會(huì)導(dǎo)致可遍歷存儲(chǔ)桶。

此時(shí)訪問域名,就會(huì)發(fā)現(xiàn)所有文件列表:

綜上,權(quán)限配置錯(cuò)誤一般有以下三種風(fēng)險(xiǎn):

  • 公共讀或公共讀寫:可完整訪問但不顯示完整結(jié)構(gòu)
  • 權(quán)限Bucket授權(quán)策略:設(shè)置ListObject顯示完整結(jié)構(gòu)
  • 權(quán)限Bucket讀寫權(quán)限:公共讀寫直接PUT文件任意上傳
0x03 域名解析Bucket接管:

正常情況下OSS存儲(chǔ)是不解析存儲(chǔ)的文件的,比如上傳一個(gè)html文件,訪問是直接下載,而非展示出html文件解析后的頁面。當(dāng)Bucket配置域名綁定后,直接訪問域名,即可解析html文件。

這樣設(shè)置本身是沒有漏洞的,但如果用戶設(shè)置了域名綁定,但后來由于某種原因?qū)SS存儲(chǔ)中的Bucket刪除了,域名綁定沒有刪除,這時(shí)訪問域名就會(huì)出現(xiàn)NoSuchBucket。因此可以登錄自己的阿里云賬號(hào),創(chuàng)建同樣的 Bucket 從而實(shí)現(xiàn)網(wǎng)站接管。

0x04 AccessKey,SecretAccessKey泄漏:

訪問密鑰AccessKey(簡稱AK)是阿里云提供給阿里云用戶的永久訪問密鑰,用于通過開發(fā)工具(API、CLI、SDK、Cloud Shell、Terraform等)訪問阿里云時(shí)的身份驗(yàn)證,不用于控制臺(tái)登錄。獲取到這些信息后,是可以用官方工具或者網(wǎng)上別人開發(fā)的利用工具接管OSS存儲(chǔ)的。

廠商 Access Key Secret
亞馬遜云計(jì)算服務(wù) (Amazon Web Services, AWS) ^AKIA[A-Za-z0-9]{16}$ 40個(gè)隨機(jī)的大小寫字母組成的字符
Google Cloud Platform (GCP) ^GOOG[\w\W]{10,30}$
Microsoft Azure ^AZ[A-Za-z0-9]{34,40}$(36個(gè)字符) 44個(gè)字符
IBM Cloud ^IBM[A-Za-z0-9]{10,40}$
Oracle Cloud ^OCID[A-Za-z0-9]{10,40}$
阿里云 ^LTAI[A-Za-z0-9]{12,20}$(16-24個(gè)字符) 30個(gè)字符
騰訊云 ^AKID[A-Za-z0-9]{13,20}$(17個(gè)字符) 40個(gè)字符
華為云 ^AK[\w\W]{10,62}$(64個(gè)字符) 44個(gè)字符
百度云 ^AK[A-Za-z0-9]{10,40}$
京東云 ^AK[A-Za-z0-9]{10,40}$
UCloud ^UC[A-Za-z0-9]{10,40}$
青云 ^QY[A-Za-z0-9]{10,40}$
金山云 ^KS3[A-Za-z0-9]{10,40}$
聯(lián)通云 ^LTC[A-Za-z0-9]{10,60}$
移動(dòng)云 ^YD[A-Za-z0-9]{10,60}$
電信云 ^CTC[A-Za-z0-9]{10,60}$

此時(shí)我們可以利用去官網(wǎng)上查找利用工具或者第三方開發(fā)的工具如oss-browser進(jìn)行進(jìn)一步利用。

0x05 不安全的 Bucket 策略配置:

如果管理員設(shè)置了某些 IP,UA 才可以請(qǐng)求該存儲(chǔ)桶的話,此時(shí)如果錯(cuò)誤的配置了 GetBucketPolicy,可導(dǎo)致攻擊者獲取策略配置

通過直接訪問:http(s)://url/?policy 來確定是否對(duì) Bucket 具有讀取權(quán)限

另外如果我們擁有PutBucketPolicy權(quán)限,我們可以直接修改策略,比如原本Effect中設(shè)置為Deny,我們只需要將它更改為Allow即可。

當(dāng)設(shè)置Becket授權(quán)策略如下圖所示,不具有ListObjects權(quán)限、但具有PutBucketPolicy權(quán)限

此時(shí)訪問結(jié)果如下:

我們直接使用PUT方法上傳修改BucketPolicy

PUT /?policy HTTP/1.1
Host: dapaozhang1.oss-cn-beijing.aliyuncs.com
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Priority: u=0, i
Connection: keep-alive
Content-Length: 544

{"Version":"1","Statement":[{"Effect":"Deny","Action":["oss:ListObjects","oss:GetObject"],"Principal":["*"],"Resource":["acs:oss:*:1227685127112444:dapaozhang1/*"]},{"Effect":"Allow","Action":["oss:ListObjects","oss:GetObject"],"Principal":["*"],"Resource":["acs:oss:*:1227685127112444:dapaozhang1"],"Condition":{"StringLike":{"oss:Prefix":["*"]}}},{"Effect":"Allow","Action":["oss:GetBucketPolicy","oss:PutBucketPolicy"],"Principal":["*"],"Resource":["acs:oss:*:1227685127112444:dapaozhang1"],"Condition":{"StringLike":{"oss:Prefix":["*"]}}}]}

再次訪問我們就可以正常看到存儲(chǔ)桶中的對(duì)象了:

除了將原本的Deny策略修改為Allow以外,我們也可以反過來,這樣就會(huì)導(dǎo)致某些網(wǎng)站獲取oss上的資源文件失效,從而影響網(wǎng)站的正常運(yùn)行。

參考如下:


對(duì)象存儲(chǔ)攻防案例 - Geekby's Blog
【云安全攻防1】對(duì)象存儲(chǔ)安全圖文+實(shí)戰(zhàn)案例詳解
【云安全】阿里云 OSS對(duì)象存儲(chǔ)攻防

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容