【AWS 安全系列】Amazon S3 配置錯誤(上)

本文章先發表在我公衆號 “我的安全專家之路”上了~

打算出一個系列文章,分幾篇講解 AWS 的安全問題,本篇先介紹 Amazon S3 基本概念,並且搭建一個實驗環境。

近年來雲平臺上的數據泄漏經常發生,其中經常聽到的就是 aws s3 數據泄漏,今天就來詳細介紹此漏洞的形成原因、怎樣復現漏洞及修復建議。

1. 什麼是 Amazon S3 ?

Amazon S3 全稱 Amazon Simple Storage Service 是互聯網存儲解決方案。該服務旨在降低開發人員進行網絡規模級計算的難度。

Amazon S3 提供了一個簡單 Web 服務接口,可用於隨時在 Web 上的任何位置存儲和檢索任何數量的數據。此服務讓所有開發人員都能訪問同一個具備高擴展性、可靠性、安全性和快速價廉的數據存儲基礎設施, Amazon 用它來運行其全球的網站網絡。此服務旨在爲開發人員帶來最大化的規模效益。
簡單來說,Amazon S3 就是亞馬遜提供的雲存儲服務,開發人員可以上傳文件到 Amazon S3 上進行管理。同時,還可以在Amazon S3 上託管靜態網站。
Amazon S3 上面存儲文件有很多好處,它的計費方式是按文件大小來計費的,也就是用多少容量就收多少錢,十分經濟。它容量是無限的,不會出現硬盤容量不夠需要擴容等問題。

2. Amazon S3 的一些概念

我們先來了解下一些基本概念,先放上一個圖幫助理解下面的概念,圖中是一個桶,桶裏面裝着對象。
aws s3 bucket

存儲桶(bucket)

存儲桶是 Amazon S3 中用於存儲對象的容器。每個對象都儲存在一個存儲桶中。例如,如果名爲 photos/puppy.jpg 的對象存儲在 johnsmith 存儲桶中,則可使用 URL http://johnsmith.s3.amazonaws.com/photos/puppy.jpg 對該對象進行尋址。

對象(object)

對象是 Amazon S3 中存儲的基本實體。對象由對象數據和元數據組成。數據部分對 Amazon S3 不透明。元數據是一組描述對象的名稱-值對。其中包括一些默認元數據 (如上次修改日期) 和標準 HTTP 元數據 (如 Content-Type)。您還可以在存儲對象時指定自定義元數據。

簡單來說,對象由數據和元數據組成,其中數據是文件內容,元數據是一些信息,如創建時間、權限信息和對象擁有者信息等。

區域

您可以選擇一個地理區域供 Amazon S3 存儲您創建的存儲桶。您可以選擇一個區域,以便優化延遲、儘可能降低成本或滿足法規要求。在某一區域存儲的對象將一直留在該區域,除非您特意將其傳輸到另一區域。例如,在 歐洲(愛爾蘭) 區域存儲的對象將一直留在該區域。
區域這個概念還是要關注下,在不同區域創建的存儲桶,其URL訪問方式是不一樣的,比如在 ap-northeast-1 創建了名爲 johnsmith 的存儲桶,並且在上面上傳了一個名名爲 index.html 的文件,則訪問方式爲(前提是該文件是公開的):
https://johnsmith.s3-ap-northeast-1.amazonaws.com/index.html
小結Amazon S3 用存儲桶來存儲對象,對象中的數據就是文件。要使用 aws 雲存儲服務就需要創建一個存儲桶,然後才能上傳文件到雲上去使用。

3. 搭建實驗環境

我們先搭建一個實驗環境,然後開始測試 Amazon S3 錯誤配置的問題。先創建一個 aws 賬號,創建賬號時,需要綁定一張信用卡,所以要準備一張信用卡。最好能創建兩個賬號來做實驗。

在以下地址點擊註冊,並綁定信用卡
https://amazonaws-china.com/cn/console/
註冊會後,會扣除信用卡的一美元,用來驗證信用卡是否可用,一週後會自動退款。然後我們會獲得一年的免費體驗套餐,用來體驗各種 aws 服務,也就是說,在一年內我們可以免費創建和使用存儲桶。
使用註冊的賬號在以下地址登錄
https://console.aws.amazon.com/console/home
這裏是使用根用戶登錄,也就是用我們註冊的郵箱和密碼登錄:
在這裏插入圖片描述
登錄控制檯後,在搜索框裏輸入 s3 , 然後點擊進入 s3 控制檯
aws 控制檯
接下來創建一個存儲桶,直接在 s3 控制檯上點擊創建存儲桶
創建存儲桶
存儲桶的名稱必須符合DNS命名規範,這一點主要是因爲可能通過URL來訪問,所以需要符合DNS命令規範。

在這裏插入圖片描述
下一步的配置選項按默認就行,點下一步
在這裏插入圖片描述
設置權限這裏默認是阻止公有訪問的,所以默認是安全的,而 s3 的配置錯誤會導致存儲桶的公有訪問,這裏後面會介紹到,直接點下一步。
在這裏插入圖片描述
最後直接點創建存儲桶就行了。
在這裏插入圖片描述
如下圖所示,成功創建了名爲 timeshatter 的存儲桶了,並且存儲桶默認不是公有的。

在這裏插入圖片描述
接來點擊存儲桶,隨便上傳一個文件
在這裏插入圖片描述
其它選擇按默認就行了。

在這裏插入圖片描述
上傳後,直接點擊上傳的文件,會進入詳情
在這裏插入圖片描述
可以看到,上傳的文件可以通過紅框中的URL來訪問。直接訪問該URL會出現 403 拒絕訪問。

在這裏插入圖片描述
如果點擊打開按鈕,會攜帶個token來打開,這樣相當於授權訪問,可以打開文件。
在這裏插入圖片描述
接下來安裝 aws cli 工具來訪問創建的存儲桶。

AWS Command Line Interface (AWS CLI) 是一種開源工具,讓您能夠在命令行 Shell 中使用命令與 AWS 服務進行交互。僅需最少的配置,您就可以從常用終端程序中的命令提示符開始使用基於瀏覽器的 AWS 管理控制檯提供的相同功能。

如果在 kali 上,可以直接通過 apt 工具安裝

apt install awscli

mac 上如果安裝了 brew ,也可以通過以下命令安裝

brew install awscli

如果您已經有 pip 和支持的 Python 版本,則可以使用以下命令安裝 AWS CLI:如果您安裝了 Python 3+ 版本,建議您使用 pip3 命令。

pip3 install awscli --upgrade --user

安裝完後,輸入下面命令查看是否安裝成功

aws --version

aws cli 安裝
現在可以嘗試下用未認證的用戶訪問下新創建的存儲桶,命令如下:

aws s3 ls s3://timeshatter --no-sign-request

在這裏插入圖片描述
其中的 s3 用於指定訪問的是 s3 服務, ls 參數用於列出存儲桶中的目錄,類似 linux 上的 ls , s3://timeshatter 是指訪問名爲 timeshatter 的存儲桶。 --no-sign-request 參數指定該請求不進行認證,也就是在未登錄的情況下發出此請求,或者說未授權的情況下發送請求。

從下圖可以看到,對於不是公開訪問的存儲桶,我們是無法列出存儲桶裏面的內容的,因爲 aws s3 有嚴格的權限控制。

接下來,我們來設置下 aws cli 的認證信息。點擊賬號 - 我的安全憑證
在這裏插入圖片描述
接着會進入 aws 的 iam 管理界面,這裏主要是管理賬號有關資源的,會出現以下提醒,直接點 Continue 就行了,這是個安全問題,後面的文章再討論。

aws 創建訪問密鑰
點擊訪問密鑰,接着點擊創建新的訪問密鑰
在這裏插入圖片描述
創建完後,你可以點擊顯示訪問密鑰,或者下載密鑰文件,注意,訪問密鑰需要妥善保管,不要發送給其它人,否則其它人在獲取你的密鑰後,可以完全訪問你的 aws 資源。

獲取訪問密鑰後,通過以下命令配置 aws cli 的認證信息。

aws configure --profile timeshatter

其中的 --profile 參數指定該認證信息的名字,隨便填個有意義的名字就行,一般輸入用戶名。

接下來按要求把訪問 ID 和私有訪問密鑰複製進去就行,後面的區域和格式可以不填
aws configure
配置完後,我們再次使用 ls 命令來列出存儲桶的內容,使用 --profile 指定使用的認證信息。

在這裏插入圖片描述

配置完後,我們再次使用 ls 命令來列出存儲桶的內容,使用 --profile 指定使用的認證信息。

由於是使用自己的 aws 根賬號的訪問密鑰來請求存儲桶,所以可以擁有列出存儲桶內容的權限。

我們還可以嘗試上傳、下載和刪除存儲桶的操作

上傳文件到存儲桶

aws s3 cp test.txt s3://timeshatter/ --profile timeshatter

在這裏插入圖片描述
從存儲桶上下載文件

aws s3 cp s3://timeshatter/test.txt test.txt --profile timeshatter

在這裏插入圖片描述
同步存儲桶上的所有文件,這條命令會把存儲桶上的所有文件同步到本地,執行這條命令時,要先創建一個文件夾專門用於存放這個存儲桶,然後cd到該文件夾來運行命令,其中的 . 代表當前路徑,也可以指定絕對路徑。

aws s3 sync s3://timeshatter/ . --profile timeshatter

aws sync

刪除存儲桶上的文件

aws s3 rm s3://timeshatter/test.txt --profile timeshatter

aws rm

到這裏,實驗環境已經搭建好了。

4.總結

目前,我們已經瞭解完了基本概念以及實驗環境的搭建,下一篇文章會介紹 aws s3 的錯誤配置問題以及漏洞利用。

感興趣的表哥們趕緊關注公衆號啦~

我的安全專家之路

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章