각 클라우드는 고유한 특성을 가지고 있지만, 일반적으로 클라우드 환경을 테스트할 때 펜테스터가 확인해야 할 몇 가지 공통 사항이 있습니다:
벤치마크 체크
이는 환경의 크기와 사용되는 서비스를 이해하는 데 도움이 됩니다.
대부분의 테스트를 자동화 도구로 수행할 수 있으므로 일부 빠른 잘못된 구성을 찾는 데도 도움이 됩니다.
서비스 열거
벤치마크 테스트를 올바르게 수행했다면 여기서 더 많은 잘못된 구성을 찾지 못할 가능성이 높지만, 벤치마크 테스트에서 찾지 못한 일부를 발견할 수 있습니다.
이는 클라우드 환경에서 정확히 무엇이 사용되고 있는지 알 수 있게 해줍니다.
이는 다음 단계에서 많은 도움이 됩니다.
노출된 자산 확인
이는 이전 섹션에서 수행할 수 있으며, 인터넷에 잠재적으로 노출된 모든 것과 어떻게 접근할 수 있는지를 찾아야 합니다.
여기서는 웹 페이지가 있는 인스턴스나 다른 포트가 노출된 수동으로 노출된 인프라와, 노출되도록 구성할 수 있는 다른 클라우드 관리 서비스(예: DB 또는 버킷)에 대해 다룹니다.
그런 다음 해당 리소스가 노출될 수 있는지 여부를 확인해야 합니다(기밀 정보? 취약점? 노출된 서비스의 잘못된 구성?).
권한 확인
여기서는 클라우드 내 각 역할/사용자의 모든 권한을 찾아야 하며, 그것들이 어떻게 사용되는지를 확인해야 합니다.
너무 많은 고급 권한(모든 것을 제어하는) 계정이 있습니까? 생성된 키가 사용되지 않습니까?... 이러한 대부분의 체크는 이미 벤치마크 테스트에서 수행되었어야 합니다.
클라이언트가 OpenID 또는 SAML 또는 다른 연합을 사용하고 있다면, 각 역할이 어떻게 할당되는지에 대한 추가 정보를 요청해야 할 수 있습니다(관리 역할이 1명에게 할당되는 것과 100명에게 할당되는 것은 다릅니다).
관리 권한 "*:*"을 가진 사용자를 찾는 것만으로는 충분하지 않습니다. 사용되는 서비스에 따라 매우 민감할 수 있는다른 권한이 많이 있습니다.
게다가, 권한을 남용하여 따라갈 수 있는 잠재적인 권한 상승 방법이 있습니다. 이러한 모든 사항을 고려해야 하며, 가능한 한 많은 권한 상승 경로를 보고해야 합니다.
통합 확인
클라우드 환경 내에서 다른 클라우드 또는 SaaS와의 통합이 사용되고 있을 가능성이 높습니다.
감사 중인 클라우드의 통합이 다른 플랫폼과의 경우, 그 통합을 (남용할 수 있는) 접근 권한이 있는 사람을 알려야 하며, 수행되는 작업이 얼마나 민감한지를 물어봐야 합니다.
예를 들어, GCP가 데이터를 가져오는 AWS 버킷에 쓸 수 있는 사람은 누구인지(그 데이터 처리에서 GCP의 작업이 얼마나 민감한지 물어보세요).
감사 중인 클라우드 내에서 외부 플랫폼으로부터의 통합에 대해, 그 통합을 (남용할 수 있는) 외부 접근 권한이 있는 사람을 물어보고, 그 데이터가 어떻게 사용되고 있는지 확인해야 합니다.
예를 들어, 서비스가 GCR에 호스팅된 Docker 이미지를 사용하는 경우, 이를 수정할 수 있는 사람과 AWS 클라우드 내에서 실행될 때 해당 이미지가 어떤 민감한 정보와 접근 권한을 얻는지 물어봐야 합니다.
Multi-Cloud tools
여러 클라우드 환경을 테스트하는 데 사용할 수 있는 여러 도구가 있습니다. 설치 단계와 링크는 이 섹션에서 안내됩니다.
클라우드 및 클라우드/SaaS 간의 잘못된 구성 및 권한 상승 경로를 식별하는 도구입니다.
# You need to install and run neo4j alsogitclonehttps://github.com/carlospolop/PurplePandacdPurplePandapython3-mvenv.sourcebin/activatepython3-mpipinstall-rrequirements.txtexport PURPLEPANDA_NEO4J_URL="bolt://neo4j@localhost:7687"export PURPLEPANDA_PWD="neo4j_pwd_4_purplepanda"python3main.py-h# Get help
export GOOGLE_DISCOVERY=$(echo'google:- file_path: ""- file_path: ""service_account_id: "some-sa-email@sidentifier.iam.gserviceaccount.com"'|base64)python3main.py-a-pgoogle#Get basic info of the account to check it's correctly configuredpython3main.py-e-pgoogle#Enumerate the env
# Installpipinstallprowlerprowler-v# Runprowler<provider># Exampleprowleraws--profilecustom-profile [-M csvjsonjson-asffhtml]# Get info about checks & servicesprowler<provider>--list-checksprowler<provider>--list-services
mkdirscout; cdscoutvirtualenv-ppython3venvsourcevenv/bin/activatepipinstallscoutsuitescout--help## Using Docker: https://github.com/nccgroup/ScoutSuite/wiki/Docker-Image
scoutgcp--report-dir/tmp/gcp--user-account--all-projects## use "--service-account KEY_FILE" instead of "--user-account" to use a service accountSCOUT_FOLDER_REPORT="/tmp"for pid in $(gcloudprojectslist--format="value(projectId)"); doecho"================================================"echo"Checking $pid"mkdir"$SCOUT_FOLDER_REPORT/$pid"scoutgcp--report-dir"$SCOUT_FOLDER_REPORT/$pid"--no-browser--user-account--project-id"$pid"done
# Install gcp pluginsteampipeplugininstallgcp# Use https://github.com/turbot/steampipe-mod-gcp-compliance.gitgitclonehttps://github.com/turbot/steampipe-mod-gcp-compliance.gitcdsteampipe-mod-gcp-compliance# To run all the checks from the dashboardsteampipedashboard# To run all the checks from rhe clisteampipecheckall
모든 프로젝트 확인
모든 프로젝트를 확인하기 위해서는 테스트할 모든 프로젝트를 나타내는 gcp.spc 파일을 생성해야 합니다. 다음 스크립트의 지침을 따르면 됩니다.
FILEPATH="/tmp/gcp.spc"rm-rf"$FILEPATH"2>/dev/null# Generate a json like object for each projectfor pid in $(gcloudprojectslist--format="value(projectId)"); doecho"connection \"gcp_$(echo-n $pid |tr "-" "_" )\" {plugin = \"gcp\"project = \"$pid\"}">>"$FILEPATH"done# Generate the aggragator to callecho'connection "gcp_all" {plugin = "gcp"type = "aggregator"connections = ["gcp_*"]}'>>"$FILEPATH"echo"Copy $FILEPATH in ~/.steampipe/config/gcp.spc if it was correctly generated"
# Install aws pluginsteampipeplugininstallaws# Modify the spec indicating in "profile" the profile name to usenano~/.steampipe/config/aws.spc# Get some info on how the AWS account is being usedgitclonehttps://github.com/turbot/steampipe-mod-aws-insights.gitcdsteampipe-mod-aws-insightssteampipedashboard# Get the services exposed to the internetgitclonehttps://github.com/turbot/steampipe-mod-aws-perimeter.gitcdsteampipe-mod-aws-perimetersteampipedashboard# Run the benchmarksgitclonehttps://github.com/turbot/steampipe-mod-aws-compliancecdsteampipe-mod-aws-compliancesteampipedashboard# To see results in browsersteampipecheckall--export=/tmp/output4.json
Cartography는 Neo4j 데이터베이스로 구동되는 직관적인 그래프 뷰에서 인프라 자산과 그들 간의 관계를 통합하는 Python 도구입니다.
# Installationdockerimagepullghcr.io/lyft/cartographydockerrun--platformlinux/amd64ghcr.io/lyft/cartographycartography--help## Install a Neo4j DB version 3.5.*
dockerrun--platformlinux/amd64 \--volume "$HOME/.config/gcloud/application_default_credentials.json:/application_default_credentials.json" \-e GOOGLE_APPLICATION_CREDENTIALS="/application_default_credentials.json" \-e NEO4j_PASSWORD="s3cr3t" \ghcr.io/lyft/cartography \--neo4j-uri bolt://host.docker.internal:7687 \--neo4j-password-env-var NEO4j_PASSWORD \--neo4j-user neo4j# It only checks for a few services inside GCP (https://lyft.github.io/cartography/modules/gcp/index.html)## Cloud Resource Manager## Compute## DNS## Storage## Google Kubernetes Engine### If you can run starbase or purplepanda you will get more info
Starbase는 클라우드 인프라, SaaS 애플리케이션, 보안 제어 등 서비스 및 시스템에서 자산과 관계를 수집하여 Neo4j 데이터베이스에 기반한 직관적인 그래프 뷰로 제공합니다.
# You are going to need Node version 14, so install nvm following https://tecadmin.net/install-nvm-macos-with-homebrew/npminstall--globalyarnnvminstall14gitclonehttps://github.com/JupiterOne/starbase.gitcdstarbasenvmuse14yarninstallyarnstarbase--help# Configure manually config.yaml depending on the env to analyzeyarnstarbasesetupyarnstarbaserun# Dockergitclonehttps://github.com/JupiterOne/starbase.gitcdstarbasecpconfig.yaml.exampleconfig.yaml# Configure manually config.yaml depending on the env to analyzedockerbuild--no-cache-tstarbase:latest.docker-composerunstarbasesetupdocker-composerunstarbaserun
## Config for GCP### Check out: https://github.com/JupiterOne/graph-google-cloud/blob/main/docs/development.md### It requires service account credentialsintegrations:-name:graph-google-cloudinstanceId:testInstanceIddirectory:./.integrations/graph-google-cloudgitRemoteUrl:https://github.com/JupiterOne/graph-google-cloud.gitconfig:SERVICE_ACCOUNT_KEY_FILE: '{Check https://github.com/JupiterOne/graph-google-cloud/blob/main/docs/development.md#service_account_key_file-string}'
PROJECT_ID:""FOLDER_ID:""ORGANIZATION_ID:""CONFIGURE_ORGANIZATION_PROJECTS:falsestorage:engine:neo4jconfig:username:neo4jpassword:s3cr3turi:bolt://localhost:7687#Consider using host.docker.internal if from docker
스캔된 AWS 또는 Azure 환경에서 가장 특권이 있는 사용자, AWS Shadow Admins를 포함하여 발견합니다. PowerShell을 사용합니다.
Import-Module .\SkyArk.ps1 -forceStart-AzureStealth# in the Cloud ConsoleIEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/cyberark/SkyArk/master/AzureStealth/AzureStealth.ps1')
Scan-AzureAdmins