2 puan yazan GN⁺ 2024-02-27 | 1 yorum | WhatsApp'ta paylaş

S3 bucket'ının AWS hesap kimliğini bulma

  • 2021'de Ben Bridts, açık bir S3 bucket'ının AWS hesap kimliğini bulmak için özgün bir yöntem yayımladı.
  • Bu yazı, hem özel hem de açık S3 bucket'larının hesap kimliğini bulma tekniğini açıklıyor.

S3 bucket'ından AWS hesap kimliğine

  • Kabuk çıktısı üzerinden bucket-alpha adlı bucket'ın daha önce bilinmeyen AWS hesap kimliğini bulma tekniği gösteriliyor.

Bu teknik tam olarak nasıl çalışıyor?

  • Ben'in tekniğinin neden çalıştığını analiz ederek üç temel unsur birleştiriliyor:
    • Bir isteğe IAM politikası uygulayabilme yeteneği
    • IAM politikasının isteğe izin verip vermediğini çıkarabilme yeteneği
    • s3:ResourceAccount koşul anahtarına joker eşleşmesi uygulayabilme yeteneği

Çözüm

  • S3 için bir VPC endpoint'i kullanıp, CloudTrail'de istek reddedildiğinde ortaya çıkan davranış farkından yararlanan bir çözüm bulundu.

Adım adım inceleyelim

  • bucket-alpha bucket'ının hesap kimliğini bulmak istediğinizde izlenecek adım adım süreç:
    • Bucket bölgesini belirleme
    • Aynı bölgede VPC ve VPC endpoint'i dağıtma
    • VPC içinde bir EC2 instance'ı başlatma ve S3 için VPC endpoint'inin kullanıldığını doğrulama
    • Hedef bucket'ın hesap kimliğinin "0" ile başlayıp başlamadığını belirlemek için VPC endpoint politikasını değiştirme
    • Hedef bucket'a istek gönderme
    • İsteğin CloudTrail'de görünüp görünmediğini kontrol etme
    • Sonuca göre, hesap kimliği hakkında daha fazla bilgi ortaya çıkarmak için VPC endpoint politikasını değiştirme

Sonuç

  • Bu süreci otomatikleştiren bir script yazılarak bucket'ın hesap kimliği güvenilir biçimde bulunabiliyor.
  • Gerekli test sayısını azaltmak için her rakam üzerinde ikili arama yapılıyor.

Hızlandırma

  • VPC endpoint politikasının devreye girmesi ve CloudTrail'de sonucu tek tek beklemek için gereken süreyi azaltmak amacıyla VPC endpoint politikası değiştirildi.
  • Böylece hesap kimliğini bulma süresi 10 dakikanın altına indirildi.

Görüşler

  • AWS güvenlik ekibiyle görüştükten sonra bu blog yazısı yayımlandı.
  • AWS hesap kimliğinin hassas bilgi sayılıp sayılmaması konusunda ilginç bir tartışma yaşandı.
  • Bu teknik, S3 dışında başka servislerde de uygulanabilir.
  • Bu teknikler, s3:ResourceAccount için StringLike koşulunun kullanılabilmesi sayesinde mümkün oluyor.
  • VPC endpoint politikası tarafından reddedilen olayların CloudTrail'e loglanması faydalı olabilir.

Teşekkürler

  • Ben Bridt'in orijinal tekniği bu çalışmaya ilham verdi.
  • Chris Farris'in yardım ve tavsiyeleri için teşekkürler.

GN⁺ yorumu

  • Bu teknik, bulut ortamlarında güvenlik denetimi yapmak için çok faydalı olabilir ve özellikle AWS S3 bucket'larının sahipliğini doğrulamaya yardımcı olabilir.
  • Bu tekniğin sağladığı bilginin hassasiyeti hakkındaki tartışma, bulut hizmeti sağlayıcıları ile kullanıcılar arasındaki veri güvenliği ve gizlilik konusundaki süregelen diyaloğu yansıtıyor.
  • Benzer işlev sunan başka bir araç olarak AWS'nin kendi hizmeti CloudTrail bulunuyor; bu hizmet, kullanıcının AWS ortamında gerçekleşen tüm etkinlikleri loglamak ve izlemek için kullanılıyor.
  • Kullanıcılar, bu tekniği benimsemeden önce bunun AWS politikaları ve güvenlik açısından en iyi uygulamalarla uyumlu olduğundan emin olmalı.
  • Bu tekniğin sağladığı faydalar arasında verimli güvenlik denetimi ve hızlı veri sahipliği doğrulaması yer alırken, olası gizlilik ifşası gibi riskler de dikkate alınmalı.

1 yorum

 
GN⁺ 2024-02-27
Hacker News görüşü
  • AWS'nin s3:ResourceAccount koşul anahtarına wildcard eşleştirmesi uygulayabilme yeteneği

    • Bu özelliğin şaşırtıcı yanı, kısmi hesap ID eşleşmesine dayanarak izin vermek ya da reddetmek için geçerli bir neden olmaması. AWS hesap ID'leri, IP adresleri gibi hassas olabilir; ancak işi ilerletebilmek için birilerinin bunu bilmesi gerekir.
  • AWS hesap ID'si == IP adresiniz. Hassas olabilir, ancak işlerin yürümesi için birilerinin bunu bilmesi gerekir.

    • Örnek: Yazar, kara para aklamayı önleme prosedürleri nedeniyle entegrasyon kurması gereken bir üçüncü tarafla yapılan işlemde, açık bir sftp portuna kıyasla genel olarak daha güvenli olan bir privatelink yapılandırması istiyordu. Ancak ilgili şirket, güvenlik gerekçesiyle hesap ID'sini gizlediği için bunu reddetti. Sonuç olarak yazarın ekibi, onların kullandığı genel IP aralığını 22 numaralı porta whitelist'e aldı.
    • Hikâyenin dersi: ID'yi gizlemek akıllıca görünebilir, ancak insanların size ulaşabileceği bir adres yoksa fiilen iş yürütemezsiniz.
  • Genelde hesap ID'nizi kamuya açık şekilde dağıtmazsınız, ama bir noktada bir kısmının açığa çıkacağını varsaymalısınız.

    • Üçüncü taraf tedarikçiler ve SaaS platformları, IAM kullanıcıları ve erişim anahtarları yerine role assumption tercih eden entegrasyonlara geçtikçe, entegrasyon noktası olarak kullanılan hesabın hesap ID'si karşı tarafça bilinir hale gelir; onların da kendi bağımlılıkları ve güvenlik açıkları vardır.
  • Global namespace'e sahip başka herkese açık AWS kaynakları da AWS hesap ID'sini açığa çıkarır.

    • İlgilenenler için, ilgili kodu burada çevrimiçi olarak paylaştı: find-s3-account
  • İlgili: AWS key ID'leri (secret key kısmı değil) hesap ID'sini içerir ve bitler bir konum kaydırılmıştır.

    • Bu key ID'leri, S3 için pre-signed link URL'lerinde yer alır; dolayısıyla büyük olasılıkla hesap ID'nizi zaten ifşa ediyorsunuzdur.
  • İlginç bir bulgu, ama başlığı görünce daha basit bir yöntem olmasını beklemiştim.

    • AWS'de yönetici hesabıyla "X kaynağı nerede" diye sorabileceğiniz basit bir yol olmasını isterdim. Özellikle belirli bir S3 bucket'ın hangi hesapta olduğunu hızlıca söyleyen bir özelliğe ihtiyaç var. Bu daha çok, code as infrastructure tanımlanmadan önce var olan legacy bucket'larla ilgili bir sorun. Çok sayıda AWS hesabınız olduğunda, bilinmeyen hesaplar ve olası bölgeler arasında kaynak aramak zahmetli olabiliyor.
  • Gerçek hack'lerin, "parolayı her seferinde bir karakter 'hack'lemek" gibi eski klişeleri ya da yanlış anlamaları çağrıştırdığı senaryolar her zaman güzeldir.

  • Daha endişe verici saldırı vektörü, artık hesap numarasını kullanarak başka hesaplardaki principal'ları kendi hesap politikanızın allowlist'ine eklemeye çalışabilmeniz.

    • Eğer diğer hesapta ilgili principal yoksa, role/user bulunamadı hatası alırsınız. Bu da diğer hesaplardaki gerçek principal'ları bulmak için kullanılabilir.
  • Bu neden önemli? Bariz bir örnek: Elinizde production bucket varsa, aynı organizasyondaki development bucket'ları da bulabilmeniz mümkün oluyor; bu da beklenmedik bir davranış.