五大AWS安全漏洞:洩露的S3儲存桶

五大AWS安全漏洞:洩露的S3儲存桶

2024.06.14

隨著我們準備在即將到來的DevOps.com網絡研討會中討論五大AWS安全漏洞,我們想提供一個預覽,介紹我們將討論的信息類型和深度。由於最受關注且可能是AWS安全中最脆弱的一環無疑是洩露的S3儲存桶,因此我們首先處理S3是理所當然的。

在本文中,我們將深入探討S3儲存桶,解釋它們如何變得脆弱,涵蓋八種不同的方式,這些方式本質上可能使它們對外公開,以及如何找到並保護任何面向公眾的S3數據。

S3儲存桶

S3是AWS中最古老的服務之一—它如此之舊,以至於其部分仍支持基於XML的策略,而不是您在其他地方看到的JSON。S3還具有許多不再常見或使用的功能,例如允許其他人將對象放入您的儲存桶中,同時仍保留它們的所有權。

可以將S3儲存桶視為一台可以擁有子目錄和文件的服務器。由於S3儲存桶可以擁有不同的根URL(例如“dops.s3.amazonaws.com”),並且擁有自己的生命周期和設置,我們傾向於將儲存桶視為服務器,而不是目錄。此外,S3中的目錄允許您組織對象,但除了名稱之外,它們沒有任何自己的明顯設置。

AWS需要支持廣泛的使用案例,這就是為什麼我們有所有這些機制的原因。公開共享、賬戶內共享、跨賬戶共享、托管網站等創建了複雜性。好消息是S3始終默認為安全和私有。壞消息是AWS允許人類使用它(從而削弱安全性),管理起來可能令人困惑。例如,S3支持讀寫權限(以及對於儲存桶的列表權限)。可能存在公開寫但不公開讀的情況,這可能導致人們在您的目錄中放置不良文件。

AWS數據變為公開的8種方式

至少有八種不同的方式,AWS的S3儲存桶可能無意中對外公開,從而暴露於數據洩露風險中。

  1. 儲存桶ACL(訪問控制列表):這是一份定義第一層訪問權限的XML文檔。默認情況下,只有賬戶擁有者有訪問權限,但這可以對其他AWS賬戶或廣大公眾開放。亞馬遜不建議使用這些,但這也是快速公開某些內容的最簡單方法,因此我們經常看到這種情況。
  2. 儲存桶策略:這些是超級靈活的JSON策略,允許您設置諸如基於IP的和其他條件權限在一個儲存桶上。雖然這應該是管理公共訪問的主要方式,但ACL是第一個選項卡,並且大約三次點擊就可以使某物公開。正是這種靈活性導致了諸如打開比預期更廣泛的IP範圍或使用否定來阻止某些IP的訪問但無意中授予其他所有人訪問權的錯誤。
  3. IAM策略:這些是您用來控制整個AWS賬戶訪問權限的正常IAM權限。您不能用它們使儲存桶公開,因為它們只管理AWS用戶,但您可以通過授權另一個AWS服務訪問來打開儲存桶的訪問權限,然後該服務暴露內容。
  4. 對象ACL:這些是主要的對象級控制。它就像一個儲存桶ACL並使用XML允許來自其他賬戶或公眾的訪問。對象不一定繼承儲存桶ACL。即使儲存桶是私有的,您也完全可以使一個對象公開。
  5. 明確的IAM或儲存桶策略聲明:IAM策略和儲存桶策略可以有明確聲明參考對象,這將覆蓋對象ACL(如果您擁有對象),因為它們首先被評估。
  6. 預簽名URL:這些對象級策略必須使用代碼(而不是控制台)創建,並為擁有URL的任何人提供臨時訪問權限。例如,用於分享文件幾分鐘或一小時,讓使用您應用的人下載媒體文件。
  7. CloudFront原始訪問身份:CloudFront是AWS的內容交付網絡,可以作為S3的前端。您可以創建所謂的CloudFront原始訪問身份來編寫一個IAM策略,允許CloudFront訪問S3內容。如果CloudFront允許公共訪問,它可以訪問S3內容,並且這不會顯示在儲存桶策略或ACL中。
  8. 跨來源資源共享(CORS)策略:如果您在網站中使用S3並不希望由於相同站點安全設置而導致瀏覽器出錯,則需要CORS。S3中的CORS不會覆蓋ACL或儲存桶策略,但在有限的情況下,當數據通過授權網站在網絡代碼中暴露時,可能會掩蓋公共訪問。

綜合來看,AWS首先評估IAM權限。在這些中,唯一可以通過網絡使儲存桶公開的是CloudFront原始訪問身份。然後AWS轉向儲存桶ACL和策略,尋找任何明確拒絕聲明。然後它查看對象ACL以尋找公共訪問。如果您使一個對象公開,而儲存桶策略沒有明確拒絕,它仍然是公開的,但否則一個好的儲存桶策略將阻止一切。此外,許多問題都是開放的儲存桶ACL,而不是對象ACL。

找到您的公開S3儲存桶並保護您的數據的4種方式

找到公開儲存桶的最佳方式是什麼?這相對容易。

就是這樣。儘管如此,如果您知道任何其他邊緣案例,請不要猶豫讓我們知道。在進行評估時,我們發現超過90%的問題僅僅是基本的儲存桶ACL和政策錯誤。對象ACL也是一個問題,但風險略低,因為如果您的儲存桶以其他方式被正確保護,您需要確切的URL才能找到它們。

相關文章