GWS - Google Platforms Phishing

Support HackTricks

Generic Phishing Methodology

Google Groups Phishing

기본적으로, 워크스페이스의 구성원은 그룹을 생성할 수 있고 사람들을 초대할 수 있습니다. 그런 다음 사용자에게 보낼 이메일을 수정하여 링크를 추가할 수 있습니다. 이메일은 구글 주소에서 발송되므로, 합법적으로 보일 것이며 사람들이 링크를 클릭할 수 있습니다.

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

Google Chat Phishing

이메일 주소만 있으면 사람과 채팅을 시작하거나 대화 초대를 보낼 수 있습니다. 또한, **"Google Support"**와 같은 이름을 가진 Space를 생성하고 구성원을 초대할 수 있습니다. 그들이 수락하면 Google Support와 대화하고 있다고 생각할 수 있습니다:

하지만 제 테스트에서는 초대된 구성원들이 초대장을 받지 못했습니다.

이것이 과거에 어떻게 작동했는지 확인할 수 있습니다: https://www.youtube.com/watch?v=KTVHLolz6cE&t=904s

Google Doc Phishing

과거에는 명백히 합법적인 문서를 생성하고 댓글에서 이메일(@user@gmail.com과 같은)을 언급할 수 있었습니다. Google은 해당 이메일 주소로 이메일을 보내 문서에서 언급되었음을 알렸습니다. 현재는 이 방법이 작동하지 않지만, 피해자에게 문서에 대한 접근 권한을 부여하면 Google이 이를 알리는 이메일을 보냅니다. 누군가를 언급할 때 나타나는 메시지는 다음과 같습니다:

피해자는 외부 문서가 공유되었다는 알림 이메일이 그들의 이메일로 도달하지 않도록 하는 보호 메커니즘을 가질 수 있습니다.

Google Calendar Phishing

캘린더 이벤트를 생성하고 공격하는 회사의 이메일 주소를 가능한 만큼 추가할 수 있습니다. 현재 시간으로부터 5분 또는 15분 후에 이 캘린더 이벤트를 예약합니다. 이벤트를 합법적으로 보이게 하고 읽어야 할 내용을 나타내는 제목과 댓글을 추가합니다 (여기에 피싱 링크 포함).

이것은 "Firing People"이라는 회의 제목으로 브라우저에 나타날 경고입니다. 따라서 더 피싱 같은 제목을 설정할 수 있습니다 (이메일과 연결된 이름을 변경할 수도 있습니다).

덜 의심스럽게 보이도록 하려면:

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

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

  • API를 사용하여 사람들이 이벤트를 수락했다고 설정하고 심지어 그들의 이름으로 댓글을 생성할 수 있습니다.

App Scripts Redirect Phishing

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 내에서 로드될 때 경고가 나타날 것임을 유의하세요.

App Scripts OAuth 피싱

문서에 첨부된 App Scripts를 생성하여 피해자의 OAuth 토큰에 접근하려고 시도할 수 있습니다. 자세한 내용은 다음을 확인하세요:

OAuth 앱 피싱

이전의 기술 중 어떤 것이든 사용자가 Google OAuth 애플리케이션에 접근하도록 유도할 수 있으며, 이 애플리케이션은 사용자에게 접근요청할 것입니다. 사용자가 출처신뢰하면 애플리케이션신뢰할 수 있습니다(비록 높은 권한의 권한을 요청하더라도).

Google은 여러 경우에 애플리케이션이 신뢰할 수 없다는 경고를 요청하는 불쾌한 프롬프트를 표시하며, Workspace 관리자는 사람들이 OAuth 애플리케이션을 수락하는 것을 방지할 수 있습니다.

Google은 여러 Google 서비스(Gmail, Drive, GCP...)를 대신하여 사용자와 상호작용할 수 있는 애플리케이션을 생성할 수 있도록 허용합니다.

다른 사용자를 대신하여 작동하는 애플리케이션을 생성할 때, 개발자는 GCP 내에서 OAuth 앱을 생성하고 애플리케이션이 사용자 데이터에 접근하는 데 필요한 범위(권한)를 지정해야 합니다. 사용자가 해당 애플리케이션사용하고자 할 때, 그들은 애플리케이션이 범위에 지정된 데이터에 접근할 것임을 수락하라는 프롬프트를 받게 됩니다.

이는 비기술적 사용자가 민감한 정보에 접근하는 애플리케이션을 사용하도록 피싱하는 매우 매력적인 방법입니다. 그들은 결과를 이해하지 못할 수 있기 때문입니다. 그러나 조직 계정에서는 이러한 일이 발생하지 않도록 방지할 수 있는 방법이 있습니다.

인증되지 않은 앱 프롬프트

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

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

  • 개인 데이터에 접근할 수 있는 범위를 사용하는 앱(Gmail, Drive, 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. 앱에 이름을 지정하고, 지원 이메일(조금 더 익명성을 높이기 위해 구글 그룹 이메일을 설정할 수 있습니다), 로고, 허가된 도메인업데이트를 위한 다른 이메일을 입력합니다.

  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>"

Go to http://localhost:8000 click on the Login with Google button, you will be prompted with a message like this one:

The application will show the access and refresh token than can be easily used. For more information about how to use these tokens check:

Using glcoud

It's possible to do something using gcloud instead of the web console, check:

References

Support HackTricks

Last updated