GCP - App Engine Enum

htARTE (HackTricks AWS Red Team Expert)에서 **제로부터 영웅까지 AWS 해킹 배우기**!

다른 HackTricks 지원 방법:

기본 정보

Google Cloud Platform의 (GCP) App Engine은 대규모 웹 애플리케이션의 개발 및 호스팅을 위해 맞춤화된 강력한 서버리스 플랫폼입니다. 이 플랫폼의 설계는 개발 프로세스를 최적화하고 애플리케이션의 관리성을 향상시키는 데 초점을 맞추고 있습니다. GCP의 App Engine의 주요 기능 및 이점은 다음과 같습니다:

  1. 서버리스 아키텍처: App Engine은 인프라 관리, 서버 프로비저닝, 구성 및 스케일링을 자동으로 처리합니다. 이를 통해 개발자는 하드웨어에 대해 걱정하지 않고 코드 작성에 집중할 수 있습니다.

  2. 자동 스케일링: App Engine은 수신하는 트래픽 양에 따라 애플리케이션을 자동으로 확장할 수 있습니다. 트래픽이 증가하면 확장되고, 트래픽이 감소하면 축소하여 비용과 성능을 최적화합니다.

  3. 언어 및 런타임 지원: Java, Python, Node.js, Go, Ruby, PHP, .NET 등 인기 있는 프로그래밍 언어를 지원합니다. 표준 환경 또는 유연한 환경에서 애플리케이션을 실행할 수 있습니다. 표준 환경은 제한적이지만 특정 언어에 대해 최적화되어 있으며, 유연한 환경은 더 많은 사용자 정의를 허용합니다.

  4. 통합 서비스: App Engine은 Cloud SQL, Cloud Storage, Cloud Datastore 등 많은 다른 GCP 서비스와 통합됩니다. 이 통합은 클라우드 기반 애플리케이션의 아키텍처를 간소화합니다.

  5. 버전 및 트래픽 분할: 애플리케이션의 여러 버전을 쉽게 배포하고 A/B 테스트 또는 점진적인 롤아웃을 위해 트래픽을 분할할 수 있습니다.

  6. 애플리케이션 인사이트: App Engine은 로깅, 사용자 인증 및 모니터링 및 애플리케이션 관리를 위한 개발자 도구와 같은 내장 서비스를 제공합니다.

  7. 보안: 애플리케이션 버전 관리, 안전한 연결을 위한 SSL/TLS 인증서 및 식별 및 액세스 관리와 같은 내장 보안 기능을 제공합니다.

방화벽

다음 옵션을 사용하여 실행 중인 인스턴스에 대한 간단한 방화벽을 구성할 수 있습니다:

SA

이러한 애플리케이션에서 사용되는 기본 서비스 계정은 **<proj-name>@appspot.gserviceaccount.com**이며 프로젝트 및 APP Engine 인스턴스 내의 SAs에게 프로젝트에 대한 Editor 역할을 부여하며 cloud-platform 범위로 실행됩니다.

저장소

소스 코드 및 메타데이터는 <proj-id>.appspot.com, staging.<proj-id>.appspot.com<country>.<proj-id>.appspot.com과 같은 이름의 버킷에 자동으로 저장됩니다.

앱의 모든 파일콘텐츠의 sha1를 파일 이름으로 사용하여 저장됩니다:

staging.<proj-id>.appspot.comae 폴더 안에는 버전당 하나의 폴더가 있으며 소스 코드 파일과 앱의 구성 요소를 설명하는 manifest.json 파일이 포함되어 있습니다:

{"requirements.txt":{"sourceUrl":"https://storage.googleapis.com/staging.onboarding-host-98efbf97812843.appspot.com/a270eedcbe2672c841251022b7105d340129d108","sha1Sum":"a270eedc_be2672c8_41251022_b7105d34_0129d108"},"main_test.py":{"sourceUrl":"https://storage.googleapis.com/staging.onboarding-host-98efbf97812843.appspot.com/0ca32fd70c953af94d02d8a36679153881943f32","sha1Sum":"0ca32fd7_0c953af9_4d02d8a ...

컨테이너

웹 앱은 컨테이너 내에서 실행되며 Code Build가 컨테이너를 빌드하는 데 사용됩니다.

URL 및 지역

기본 웹 페이지는 URL **<project-uniq-name>.appspot.com**에 노출되지만 이전 버전의 URL은 약간 다를 수 있습니다. **https://20240117t001540-dot-<project-uniq-name>.uc.r.appspot.com**와 같이 (초기 타임스탬프 주목).

한 지역당 1개의 앱 엔진 웹 애플리케이션만 배포할 수 있는 것처럼 보일 수 있지만, **app.yml**에서 **service: <servicename>**를 지정하고 새 서비스(새 웹)를 만들 수 있습니다. 이 새 웹의 URL 형식은 **<servicename>-dot-<project-uniq-name>.appspot.com**입니다.

열거

앱에 새 코드를 업로드할 때마다 새 버전이 생성됩니다. 모든 버전이 저장되며 접근할 수 있는 URL도 있습니다. 따라서 이전 버전의 코드를 수정하는 것은 훌륭한 지속성 기술일 수 있습니다.

Cloud Functions와 마찬가지로, 애플리케이션이 런타임에서 환경 변수를 통해 액세스하는 비밀 정보에 의존할 수 있습니다. 이러한 변수는 app.yaml 파일에 저장되어 있으며 다음과 같이 액세스할 수 있습니다:

# List the apps
gcloud app services list
gcloud app services describe <app-name>
# Access via browser to the specified app
gcloud app services browse <app-name>

# Get App versions
gcloud app versions list
# Get all the info of the app and version, included specific verion URL and the env
gcloud app versions describe -s <app-name> <version-id>

# Logs
gcloud app logs tail -s <app-name>

# Instances
## This is only valid if a flexible environment is used and not a standard one
gcloud app instances list
gcloud app instances describe -s <app-name> --version <version-id> <ID>
## Connect to the instance via ssh
gcloud app instances ssh --service <app-name> --version <version-id> <ID>

# Firewalls
gcloud app firewall-rules list
gcloud app firewall-rules describe <num_fw>

# Get domains
gcloud app domain-mappings list
gcloud app domain-mappings describe <name>

# SSl certificates
gcloud app ssl-certificates list
gcloud app ssl-certificates describe <name>

권한 상승

pageGCP - AppEngine Privesc

인증되지 않은 열거

pageGCP - App Engine Unauthenticated Enum

후반 공격

pageGCP - App Engine Post Exploitation

지속성

pageGCP - App Engine Persistence

最終更新