GWS - Google Platforms Phishing

HackTricks 지원

일반적인 피싱 방법론

Google 그룹 피싱

보안 작업 공간 구성원은 기본적으로 그룹을 생성 하고 그룹에 사람을 초대할 수 있습니다. 그런 다음 사용자에게 보내질 이메일을 수정하여 일부 링크를 추가할 수 있습니다. 이메일은 Google 주소에서 올 것이므로 진짜로 보이고 사람들이 링크를 클릭할 수 있습니다.

또한 FROM 주소를 Google 그룹 이메일로 설정하여 그룹 내 사용자에게 더 많은 이메일을 보낼 수도 있습니다. 다음 이미지에서와 같이 그룹 **google--support@googlegroups.com**이 생성되고 그룹의 모든 구성원에게 이메일이 보내졌습니다(동의 없이 추가된 구성원들):

Google 채팅 피싱

이메일 주소만 알고 있으면 사람과 채팅을 시작하거나 대화 초대를 보낼 수 있습니다. 더불어 **"Google 지원"**과 같은 이름의 Space를 생성하고 회원을 초대할 수도 있습니다. 그들이 수락하면 Google 지원팀과 대화 중이라고 생각할 수 있습니다:

그러나 제 테스트에서 초대된 구성원은 심지어 초대장을 받지 못했습니다.

과거에는 겉으로는 진실된 문서를 만들고 주석에 @user@gmail.com과 같은 이메일을 언급할 수 있었습니다. Google은 해당 이메일 주소로 이메일을 보내어 그들이 문서에 언급되었음을 알렸습니다. 현재는 이 방법이 작동하지 않지만 피해자 이메일에 문서 액세스 권한을 부여하면 Google이 이를 알리는 이메일을 보낼 것입니다. 누군가를 언급할 때 나타나는 메시지는 다음과 같습니다:

피해자는 외부 문서가 공유되었다는 이메일을 받지 못하도록 보호 메커니즘이 있을 수 있습니다.

Google 캘린더 피싱

공격 중인 회사의 이메일 주소를 가진 사람을 모두 추가하여 캘린더 이벤트를 생성할 수 있습니다. 현재 시간으로부터 5분 또는 15분 후에 이 캘린더 이벤트를 예약하세요. 이벤트를 진짜로 보이게 만들고 어떤 것을 읽어야 한다는 코멘트와 제목을 추가하세요(피싱 링크와 함께).

이것은 브라우저에 나타나는 "인원 해고"라는 회의 제목이 포함된 경고입니다. 따라서 더 피싱스러운 제목을 설정할 수 있습니다(심지어 이메일과 관련된 이름을 변경할 수도 있습니다).

더 의심스럽게 보이지 않도록 설정하세요:

  • 수신자가 초대된 다른 사람들을 볼 수 없도록 설정

  • 이벤트에 대한 이메일 알림을 보내지 않습니다. 그러면 사람들은 5분 후의 회의에 대한 경고만 보고 그 링크를 읽어야 한다는 것을 알게 됩니다.

  • API를 사용하여 사람들이 이벤트를 수락했음을 True로 설정하고 심지어 그들을 대신하여 코멘트를 작성할 수 있습니다.

앱 스크립트 리다이렉트 피싱

https://script.google.com/에서 스크립트를 만들고 모든 사람이 액세스할 수 있는 웹 애플리케이션으로 노출할 수 있습니다. 이 웹페이지에서는 **script.google.com**과 같은 진짜 도메인을 사용할 것입니다. 다음과 같은 코드로 공격자는 이 스크립트가 도메인에 계속 액세스하면서 이 페이지에 임의의 콘텐츠를 로드할 수 있습니다:

function doGet() {
return HtmlService.createHtmlOutput('<meta http-equiv="refresh" content="0;url=https://cloud.hacktricks.xyz/pentesting-cloud/workspace-security/gws-google-platforms-phishing#app-scripts-redirect-phishing">')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}

예를 들어 https://script.google.com/macros/s/AKfycbwuLlzo0PUaT63G33MtE6TbGUNmTKXCK12o59RKC7WLkgBTyltaS3gYuH_ZscKQTJDC/exec에 액세스하면:

내용이 iframe 내에서 로드되므로 경고가 표시됩니다.

앱 스크립트 OAuth 사기

피해자의 OAuth 토큰에 액세스하려는 문서에 첨부된 앱 스크립트를 만들 수 있습니다. 자세한 정보는 확인하려면:

GWS - App Scripts

OAuth 앱 사기

이전 기술 중 하나를 사용하여 사용자가 Google OAuth 애플리케이션에 액세스하도록 유도할 수 있습니다. 사용자가 소스신뢰한다면 애플리케이션신뢰할 수 있습니다(높은 권한을 요청하더라도).

Google은 애플리케이션이 신뢰할 수 없다는 경고를 표시하며 Workspace 관리자는 OAuth 애플리케이션 수락을 방지할 수도 있습니다.

Google은 여러 Google 서비스에서 사용자를 대신하여 상호 작용할 수 있는 애플리케이션을 만들 수 있습니다: Gmail, 드라이브, GCP...

다른 사용자를 대신하여 작동하는 애플리케이션을 만들 때 개발자는 GCP 내에서 OAuth 앱을 만들고 사용자 데이터에 액세스해야 하는 권한(범위)을 지정해야 합니다. 사용자해당 애플리케이션을 사용하려고 할 때, 해당 애플리케이션이 권한 범위에서 지정된 데이터에 액세스할 수 있도록 수락하도록 요청됩니다.

이는 비기술적 사용자가 민감한 정보에 액세스하는 애플리케이션을 사용하도록 유도하는 매우 유혹적인 방법입니다. 그러나 조직 계정에서는 이를 방지할 수 있는 방법이 있습니다.

확인되지 않은 앱 프롬프트

이미 언급했듯이 Google은 항상 사용자에게 애플리케이션이 그들을 대신하여 부여하는 권한을 수락할 것인지 묻는 프롬프트를 표시합니다. 그러나 애플리케이션이 위험하다고 간주되면 Google은 먼저 애플리케이션이 위험하다고 표시하고 사용자가 앱에 권한을 부여하는 것을 더 어렵게 만듭니다.

이 프롬프트는 다음과 같은 앱에서 나타납니다:

  • 개인 데이터에 액세스할 수 있는 범위를 사용하는 경우 (Gmail, 드라이브, GCP, BigQuery...)

  • 100명 미만의 사용자를 가진 앱 (100명 이상의 앱의 경우 검토 프로세스도 필요하여 확인되지 않은 프롬프트가 표시되지 않도록 함)

흥미로운 범위

여기에서 Google OAuth 범위 목록을 찾을 수 있습니다.

  • cloud-platform: 여러 Google Cloud Platform 서비스에서 데이터를 보고 관리합니다. GCP에서 사용자를 대신할 수 있습니다.

  • admin.directory.user.readonly: 조직의 GSuite 디렉터리를 볼 수 있고 다운로드할 수 있습니다. 모든 사용자의 이름, 전화번호, 캘린더 URL을 얻을 수 있습니다.

OAuth 앱 만들기

OAuth 클라이언트 ID를 만들기 시작

  1. https://console.cloud.google.com/apis/credentials/oauthclient로 이동하고 동의 화면 구성을 클릭합니다.

  2. 그런 다음 사용자 유형내부(조직 내 사람 전용)인지 외부인지 묻습니다. 필요에 맞는 것을 선택합니다.

  • 내부는 이미 조직의 사용자를 침해했으며 다른 사용자를 사기하기 위해이 앱을 만드는 경우 흥미로울 수 있습니다.

  1. 앱에 이름, 지원 이메일(더 익명화하려면 googlegroup 이메일을 설정할 수 있음), 로고, 인증된 도메인업데이트용 이메일을 지정합니다.

  2. OAuth 범위선택합니다.

  • 이 페이지는 민감하지 않은 권한, 민감한 권한 및 제한된 권한으로 나뉩니다. 새 권한을 추가할 때마다 해당 범주에 추가됩니다. 요청된 권한에 따라 사용자에게 다양한 프롬프트가 표시되어 이러한 권한이 얼마나 민감한지를 나타냅니다.

  • admin.directory.user.readonly 및 **cloud-platform**은 민감한 권한입니다.

  1. 테스트 사용자 추가. 앱의 상태가 테스트인 동안에는 이러한 사용자만 앱에 액세스할 수 있으므로 사기를 할 이메일을 추가하는지 확인하세요.

이제 이전에 만든 OAuth 클라이언트 ID를 사용하여 웹 애플리케이션용 자격 증명을 가져옵니다:

  1. https://console.cloud.google.com/apis/credentials/oauthclient로 돌아가면 이번에는 다른 옵션이 나타납니다.

  2. 웹 애플리케이션용 자격 증명 생성을 선택합니다.

  3. 필요한 Javascript 원본리디렉션 URI를 설정합니다.

  • 테스트를 위해 둘 다 **http://localhost:8000/callback**과 같은 것을 설정할 수 있습니다.

  1. 애플리케이션 자격 증명을 가져옵니다.

마지막으로, 이전에 만든 OAuth 애플리케이션 자격 증명을 사용하는 웹 애플리케이션을 실행합시다. 예제는 https://github.com/carlospolop/gcp_oauth_phishing_example에서 찾을 수 있습니다.

git clone ttps://github.com/carlospolop/gcp_oauth_phishing_example
cd gcp_oauth_phishing_example
pip install flask requests google-auth-oauthlib
python3 app.py --client-id "<client_id>" --client-secret "<client_secret>"

**http://localhost:8000**로 이동하여 Google로 로그인 버튼을 클릭하면 다음과 같은 메시지가 표시됩니다:

애플리케이션은 쉽게 사용할 수 있는 액세스 및 리프레시 토큰을 표시합니다. 이러한 토큰을 사용하는 방법에 대한 자세한 정보는 다음을 확인하십시오:

GCP - Non-svc Persistance

glcoud 사용

웹 콘솔 대신 gcloud를 사용하여 무언가를 수행할 수 있습니다. 확인하십시오:

GCP - ClientAuthConfig Privesc

참고 자료

HackTricks 지원

Last updated