“AccountDumpling” 30,000개 이상의 Facebook 계정을 위협하는 구글 전송 피싱 파동을 추적하기
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
피싱 운영이 Google AppSheet을 악용하여 피해자를 Netlify와 Vercel에 호스팅된 악성 페이지로 유인하는 합법적인 이메일을 보냅니다. 이 페이지는 Facebook 계정 복구 세부 정보를 수집하여 실시간으로 Telegram 봇에 전달합니다. 이 캠페인은 베트남 거주 개인과 관련이 있으며 이미 3만 개 이상의 Facebook 계정이 탈취되었습니다. 도난당한 계정은 계정 복구 서비스를 홍보하는 상점프론트를 통해 수익화됩니다.
조사
Guardio 연구원들은 AppSheet으로 전달 체인을 추적하고 네 개의 별도 피싱 클러스터를 식별하였으며 수백 개의 악성 호스팅 URL을 수집했습니다. 그들은 또한 Telegram 봇 토큰과 채팅 ID를 추출하고 인프라를 베트남 이름이 포함된 Canva PDF에 연결하였으며, 피해자의 지리적 분포를 분석했습니다. 그들의 연구는 피싱 키트를 개발하는 그룹, 캠페인을 수행하는 그룹, 도난당한 계정 접근에서 수익을 얻는 그룹으로 구성된 모듈식 생태계를 폭로했습니다.
완화
방어자는 알려진 악성 Netlify 및 Vercel 하위 도메인을 차단하고, 의심스러운 행동 유도 링크가 포함된 AppSheet 생성 이메일을 모니터링하며, Telegram 봇 API 엔드포인트로의 아웃바운드 연결을 탐지해야 합니다. 조직은 또한 Facebook 로그인 및 복구 워크플로 주위의 유효성을 강화하고 민감한 복구 작업에 대해 재인증을 요구해야 합니다. 사용자는 신뢰할 수 있는 Google 서비스로 보낸 이메일도 여전히 피싱 시도의 일부일 수 있음을 상기해야 합니다.
대응
보안 팀은 noreply@appsheet.com 에서 온 이메일에 경고해야 하며 미지의 Netlify, Vercel 또는 shorten.tv 도메인으로 링크가 포함된 경우에는 DNS 조회를 Telegram 봇 트래픽과 상관시켜서 가능한 데이터 탈취를 식별해야 합니다. 자격 증명이 도난당했으면 영향을 받은 사용자는 비밀번호를 강제로 재설정해야 하며, 탈취된 Facebook 계정은 즉시 검토되어야 합니다. 관련 지표는 또한 SOC 및 외부 위협 인텔리전스 채널과 공유되어야 합니다.
"graph TB %% Class definitions classDef action fill:#99ccff %% Nodes action_phishing["<b>Action</b> – <b>T1566 피싱</b><br/>Google AppSheet을 통한 피싱으로 사용자에게 인증 정보를 노출하거나 악성 링크를 클릭하도록 유도합니다."] class action_phishing action action_cloud_abuse["<b>Action</b> – <b>T1496.004 리소스 납치: 클라우드 서비스 납치</b><br/>클라우드 이메일 서비스를 악용하여 인증된 악성 이메일을 전송합니다.<br/><b>추가 기술</b> – <b>T1021.007 원격 서비스: 클라우드 서비스</b><br/>합법적인 클라우드 원격 서비스를 사용하여 악의적 활동을 수행합니다."] class action_cloud_abuse action action_credential_harvest["<b>Action</b> – <b>T1606 웹 자격 증명 위조</b><br/>Netlify/Vercel에 호스팅된 자격 증명 수확 페이지 생성.<br/><b>추가 기술</b> – <b>T1212 자격 증명 접근을 위한 착취</b><br/>웹 플랫폼을 착취하여 사용자 자격 증명을 확보합니다."] class action_credential_harvest action action_gather_info["<b>Action</b> – <b>T1589 피해자 신원 정보 수집</b><br/>피해자 신원 데이터를 수집합니다.<br/><b>추가 기술</b> – <b>T1591.002 피해자 조직 정보 수집: 비즈니스 관계</b><br/>비즈니스 관계 세부 정보를 수집합니다.<br/><b>추가 기술</b> – <b>T1591.004 피해자 조직 정보 수집: 역할 식별</b><br/>조직 내에서 피해자 역할을 식별합니다."] class action_gather_info action action_exfil_telegram["<b>Action</b> – <b>T1041 C2 채널을 통한 데이터 유출</b><br/>Telegram 봇 C2 채널을 통한 데이터 유출.<br/><b>추가 기술</b> – <b>T1552.001 미보안 자격 증명: 파일 내 자격 증명</b><br/>파일에 저장된 자격 증명을 수확합니다."] class action_exfil_telegram action action_facebook_access["<b>Action</b> – <b>T1078 유효한 계정</b><br/>도난당한 유효한 계정을 사용하여 Facebook 비즈니스 자원을 접근합니다."] class action_facebook_access action %% Connections action_phishing –>|leads_to| action_cloud_abuse action_cloud_abuse –>|leads_to| action_credential_harvest action_credential_harvest –>|leads_to| action_gather_info action_gather_info –>|leads_to| action_exfil_telegram action_exfil_telegram –>|leads_to| action_facebook_access "
공격 흐름
시뮬레이션 실행
전제 조건: Telemetry & Baseline Pre-flight Check가 통과했어야 함.
설명: 이 섹션은 탐지 규칙을 유발하기 위해 설계된 적대적 기술(TTP)의 정확한 실행을 상세하게 설명합니다. 명령문과 내러티브는 식별된 TTP를 직접적으로 반영하고 탐지 논리에 의해 예상되는 정확한 텔레메트리를 생성하기 위한 것이어야 합니다. 추상적이거나 관련 없는 예시들은 오진으로 이어질 것입니다.
-
공격 내러티브 및 명령:
-
정찰: 공격자는 공개 소스에서 Facebook 직원 이메일 주소 목록을 수집합니다.
-
AppSheet 악용 설정: 공격자는 손상된 Google Workspace 계정을 사용하여 이메일 알림을 보내는 AppSheet 앱을 생성합니다. 앱은 기본 AppSheet 반송 도메인
appsheet.bounces.google.com. -
피싱 페이로드: 알림 이메일은 악성 링크와 함께 (‘귀하의 Facebook 비밀번호가 곧 만료됩니다 – 지금 재설정하세요.’)라는 유인을 포함하고 있습니다.
-
캠페인 시작: 공격자는 AppSheet 워크플로를 트리거하여 플랫폼이 대상 목록으로 제작된 이메일을 전송하도록 합니다. 결과 이메일 메타 데이터는 일치합니다:
발신자 이메일 = noreply@appsheet.com전달 도메인 = appsheet.bounces.google.com
-
결과: SIEM 규칙은 수신 로그 항목을 평가하여 두 필드를 모두 일치시키고 경고를 생성합니다.
-
-
회귀 테스트 스크립트: 아래 스크립트는 AppSheet 스타일의 알림을 에뮬레이션하기 위해 Google Apps Script API를 사용하여 2-4단계를 자동화합니다. Gmail API를 통해 메일을 보낼 수 있는 권한이 있는 서비스 계정 JSON이 필요합니다.
# Python 3.x – Gmail API를 통해 제작된 피싱 스타일의 이메일 전송 import base64, json, sys from email.mime.text import MIMEText from google.oauth2 import service_account from googleapiclient.discovery import build # ---- 구성 ------------------------------------------------- SERVICE_ACCOUNT_FILE = "service-account.json" # <-- 경로로 대체 SCOPES = ["https://www.googleapis.com/auth/gmail.send"] SENDER = "noreply@appsheet.com" RECIPIENT = "victim@facebook.com" SUBJECT = "중요: Facebook 계정 조치 필요" BODY = """ 친애하는 Facebook 사용자님, 귀하의 비밀번호가 24시간 내에 만료될 것입니다. 즉시 아래 링크를 클릭하여 재설정하십시오: https://malicious.example.com/steal?uid=12345 감사합니다, Facebook 보안 팀 """ # -------------------------------------------------------------------- credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES) try: service = build('gmail', 'v1', credentials=credentials) message = MIMEText(BODY, "plain") message["to"] = RECIPIENT message["from"] = SENDER message["subject"] = SUBJECT # AppSheet 반송 도메인을 모방하는 사용자 지정 헤더 추가 message["X-Delivery-Domain"] = "appsheet.bounces.google.com" raw = base64.urlsafe_b64encode(message.as_bytes()).decode() send_body = {"raw": raw} result = service.users().messages().send(userId="me", body=send_body).execute() print(f"메시지 전송, ID={result['id']}") except Exception as e: print(f"이메일 전송 오류: {e}", file=sys.stderr) sys.exit(1) -
정리 명령: 발신 폴더에서 테스트 메시지를 제거하고 서비스 계정 토큰을 철회합니다.
# PowerShell – Gmail API를 사용하여 보낸 편지함에서 테스트 메시지를 삭제합니다 $serviceAccount = "service-account.json" $scopes = @("https://www.googleapis.com/auth/gmail.modify") $cred = (Get-Content $serviceAccount | ConvertFrom-Json) | ` New-Object Google.Apis.Auth.OAuth2.ServiceAccountCredential ` -ArgumentList ([Google.Apis.Auth.OAuth2.ServiceAccountCredential]::Initializer) ` -Property @{Scopes = $scopes} $gmail = New-Object Google.Apis.Gmail.v1.GmailService -ArgumentList $cred # 메시지 ID 검색(전송 스크립트에서 실제 ID로 교체) $msgId = "INSERT_MESSAGE_ID_HERE" $gmail.Users.Messages.Delete("me", $msgId).Execute() Write-Host "테스트 이메일이 삭제되었습니다."