엔트라 ID와 구글 워크스페이스에서 타이쿤 2FA AiTM 공격 탐지하기

타이쿤 2FA는 엔트라 ID 및 구글 워크스페이스에서 MFA를 우회합니다. 두 플랫폼에 걸쳐 원격 분석 지문을 매핑하고, 두 계층에 대한 탐지 규칙을 전송하며, Elastic Workflow를 통해 10 초 이내에 인시던트를 억제합니다.

타이쿤 2FA는 현재 AiTM 피싱 키트 중 가장 많이 사용되는 서비스형 피싱(PhaaS) 플랫폼입니다. 8월( 2023 )에 처음 발견되었으며 Storm-1747로 추정되는 이 키트는 다중 요소 인증을 우회하고 Microsoft 365 및 Google Workspace 계정에서 인증된 세션 토큰을 훔치는 턴키 방식의 중간자 공격(AiTM) 기능을 제공합니다. 타이쿤 2FA가 최고조에 달했을 때 Microsoft가 차단한 피싱 시도 중 약 62%(% )를 차지했으며, 매월 50만 개 이상의 조직에 도달했습니다.

3월에 Microsoft와 유로폴이 주도하고 Cloudflare, SpyCloud, eSentire 및 기타 파트너의 지원을 받아 300 도메인을 압수한 조직적인 조치( 2026 )에도 불구하고 운영자들은 몇 주 만에 적응해 나갔습니다. 2026년 4월 말까지 타이쿤 트레이드크래프트와 OAuth 디바이스 코드 피싱 플로우를 결합한 캠페인이 문서화되었으며, 키트는 애니런의 멀웨어 트렌드 트래커에서 1위를 유지하고 있습니다.

타이쿤 2FA 작동 방식

AiTM 메커니즘

타이쿤 2FA는 피해자와 합법적인 ID 공급자(Entra ID 또는 Google) 사이에서 역방향 프록시로 작동합니다. 정적 자격 증명 수집기가 아닙니다. 실제 로그인 흐름을 실시간으로 프록시합니다:

  1. 피해자는 PDF, SVG, HTML 또는 PPTX 첨부 파일에 포함된 링크 또는 QR 코드가 포함된 피싱 이메일을 수신합니다.
  2. 링크는 멀티 레이어 리디렉션 체인을 통해 라우팅됩니다. 이 키트는 로그인 페이지를 표시하기 전에 브라우저 핑거프린팅, 캡차 챌린지, 분석 방지 검사를 수행합니다.
  3. 피해자는 실제 서비스에서 동적으로 가져온 공격 대상 조직의 브랜딩을 포함하여 Microsoft 또는 Google 로그인 페이지의 픽셀 단위로 완벽하게 복제된 복제본을 보게 됩니다.
  4. 자격 증명은 합법적인 ID 공급자에게 실시간으로 전달됩니다. 실제 MFA 챌린지가 트리거되어 피해자에게 다시 프록시됩니다.
  5. 피해자가 정상적으로 MFA를 완료합니다. ID 공급자가 세션 토큰을 발급합니다. 프록시는 이 토큰이 피해자의 브라우저에 도달하기 전에 가로챕니다.
  6. 이제 공격자는 완전히 인증된 액세스 토큰을 보유하게 됩니다.

세션 쿠키는 운영자가 수익을 창출하는 가치입니다. 일단 캡처되면 운영자가 MFA 이후 발행된 토큰을 재생하기 때문에 MFA는 무의미해집니다.

현재 회전의 두 가지 구조적 변형

저희가 분석한 두 가지 키트 변형이 활발히 사용되고 있었습니다:

WebSocket AiTM( "클래식" 타이쿤 2FA 플로우): 피해자는 키트에서 호스팅하는 프록시를 통해 인증하며, 이 프록시는 WebSocket(Socket.IO)을 통해 트래픽을 Microsoft 또는 Google로 전달하고 MFA 이후 세션 쿠키를 캡처합니다. 키트의 JavaScript 클라이언트 컨트롤러는 C2 서버에 대한 실시간 양방향 채널을 유지하여 피해자가 입력하는 자격 증명 및 인증 응답을 중계합니다. 이러한 응답에는 사용하도록 발행된 액세스 토큰과 새로 고침 토큰이 포함됩니다.

디바이스 코드 부여 남용(Microsoft만 해당): 키트 릴레이는 Microsoft 인증 브로커(29d9ed98-a469-4536-ade2-f981bc1d605e)를 클라이언트로 사용하는 Microsoft의 oauth2/devicecode 엔드포인트에서 디바이스 코드를 획득하여 "인증 코드" 루어를 통해 피해자에게 표시하고 피해자가 합법적인 microsoft.com/devicelogin에 로그인한 후 코드를 액세스/갱신 토큰으로 교환합니다. 엔드포인트.

회피 기술

이 키트는 자바스크립트 디컴파일을 통해 확인된 계층화된 분석 방지 메커니즘을 사용합니다:

  • IP 기반 연구자 필터링: 콘텐츠가 표시되기 전에 키트에서 api.ipapi.is (또는 이와 동등한 서비스)를 호출하여 클라우드/호스팅 제공업체의 차단 목록(Leaseweb, M247, DigitalOcean, Linode, Amazon, OVH, Hetzner, Google, Microsoft, Cloudflare, Akamai, Fastly, 역방향 문자열로 저장)에서 방문자의 IP를 확인합니다(고정 검색을 피하기 위해 역방향 문자열로 저장). 클라우드 인프라의 방문자는 무해한 미끼 사이트로 리디렉션됩니다.
  • 봇/도구 탐지: 사용자 에이전트 문자열에서 navigator.webdriver (셀레늄), window.callPhantom / window._phantom (PhantomJS), "Burp" 를 확인합니다. 감지되면 about:blank로 리디렉션이 트리거됩니다.
  • 개발자 도구 차단: 개발자 도구의 키보드 단축키(F12, Ctrl+Shift+I/J/C, Ctrl+U, macOS에 해당하는 단축키)를 가로채고 오른쪽 클릭 상황에 맞는 메뉴를 비활성화합니다.
  • 디버거 트랩: 100ms마다 실행되는 setInterval 루프가 디버거 문을 삽입하고 실행 시간을 측정합니다. 개발자 도구가 열려 있으면(실행이 일시 정지됨 >100ms) 피해자는 미끼 사이트로 리디렉션됩니다.
  • DOM 사라짐: 악성 자바스크립트는 실행 후 DOM에서 스스로를 제거하여 정적 검사를 위한 흔적을 남기지 않습니다.
  • 피해자별 암호화: 페이로드는 세션별 값으로 시드된 사용자 지정 2단계 암호(시저 시프트 + PRNG 생성 키 스트림이 포함된 XOR)를 사용합니다. 시드, 키 및 암호화된 블롭은 각 피해자에 대해 서버 측에서 생성되므로 정적 서명 탐지가 불가능합니다.
  • 플랫폼 타깃팅: Linux 데스크톱에서는 빈 문자열을 작성하여 페이지를 비웁니다. Linux 사용자가 보안 연구원일 가능성이 높다고 가정했을 가능성이 높습니다.
  • 가짜 캡차: 사용자 지정 이미지 그리드 캡차가 현재 변형에서 Cloudflare Turnstile을 대체합니다. 피싱 페이지가 로드되기 전에 3×3 격자로 된 언스플래시 소스 이미지를 통해 사람이 직접 확인할 수 있습니다.

Google 타겟 캠페인의 경우, 운영자가 제어하거나 손상된 도메인도 관찰되지만, 첫 번째 홉 미끼는 Google 스토리지 또는 Google 사이트와 같은 합법적인 Google 인프라에서 이루어지는 경우가 많습니다. Google 자체 호스팅을 사용하는 경우 storage.googleapis.com 또는 sites.google.com 오리진은 피해자가 AiTM 릴레이에 도달하기 전에 기본 제공 평판 보호 기능을 제공합니다.

다른 경우에는 피해자의 이메일이 자동으로 채워지고 "다음" 버튼이 자동으로 클릭되어 피해자는 비밀번호 페이지로 바로 이동하여 이미 부분적으로 인증된 것처럼 보이게 됩니다(신뢰도 증가):


var emailcheck = "victim@email.corp";
// ...
function tryfindingele(email) {
   emailinputcheck.value = email;
   emailsectionelecheck.querySelector(".btn-blue-next-btn").click();
}
if (emailcheck !== "0") { tryfindingele(emailcheck); }

Microsoft 365 / Entra ID

2계층 운영 아키텍처

타이쿤 2FA의 현재 운영 모델은 두 개의 서로 다른 인프라 계층으로 나뉘며, 각각 고유한 ASN, 역할 및 행동 서명을 가지고 있습니다. 단일 패턴을 찾는 방어자는 한 계층을 포착하고 다른 계층을 놓칠 수 있습니다.

계층 1 - 키트 릴레이

토큰 획득 및 갱신을 처리하는 자동화된 백엔드입니다. 특성:

  • Cloud-VPS는 단일 참여 중에 서로 다른 /16 블록의 여러 IP를 순환하는 호스팅 제공업체(Alibaba Cloud, 유사한 저렴한 VPS ASN)의 이그레스 IP를 사용합니다.
  • Node.js HTTP 클라이언트 사용자 에이전트: node(베어, 기본 Node.js UA), axios/1.15.2, node-fetch/1.0, undici.
  • 클라이언트 앱: Microsoft 인증 브로커(29d9ed98-a469-4536-ade2-f981bc1d605e), 나중에 DRS(장치 등록 서비스) 와 함께 기본 리프레시 토큰(PRT)을 발급하는 데 사용됩니다.
  • 토큰 유형 진행: 수신 토큰 유형: 없음(초기 피해자 인증) > refreshToken(키트 릴레이 갱신 루프, 회전하는 IP에서 반복) > 로그 기기 등록 > primaryRefreshToken(PRT 리플레이, 더 넓은 범위).
  • 비대화형 로그인: 초기 대화형 장치 코드가 완료된 후 후속 토큰 작업은 서버 간 새로 고침입니다.

계층 2 - 운영자 콘솔

손상 후 정찰을 수행하는 인간(또는 인간 시뮬레이션 도구)입니다. 특성:

  • 일반적으로 일반적인 호스팅 제공업체 위협 피드에는 존재하지 않는 소규모 ASN인 주거형 ISP 또는 프록시 이그레스입니다. 단일 /24에서 여러 IP가 모두 협력하여 작동합니다.
  • 클러스터의 모든 IP에서 단일 브라우저 사용자 에이전트(예: Windows의 Firefox)가 고정되어 있습니다. 독립적인 사용자가 아닌 구성된 도구입니다.
  • Microsoft 웹 앱에 대한 브라우저 기반 대화형 로그인: 내 프로필, 내 로그인, Microsoft 승인 관리, Outlook 웹 및 OfficeHome.
  • 모든 IP에서 공유되는 단일 c_sid(그래프 활동 로그의 클라이언트 세션 ID)로 풀 전체에 분산된 단일 세션을 확인합니다.
  • 운영 템포: 일반적으로 키트 릴레이의 첫 번째 토큰 발행 성공 후 10~20분 후에 나타납니다. 간격은 키트와 운영자 간의 핸드오프 기간을 나타냅니다.

내구성 있는 계층 간 탐지 신호: 두 개의 서로 다른 ASN(클라우드-VPS 1개, 주거형 1개)이 몇 분 내에 동일한 사용자 주체로 인증합니다. 단일 ASN 규칙은 한 계층을 포착하고, 교차 계층 피벗은 신뢰도가 높은 지표입니다.

사후 손상된 그래프 API 열거형

운영자 콘솔에 유효한 토큰이 있으면 일반적으로 30~60초 내에 수십 건의 요청이 발생하여 높은 가치의 정찰 엔드포인트를 공격하는 Microsoft Graph API 호출이 빠르게 이어집니다:

정찰 카테고리엔드포인트 예시목적
역할 검색전이적 역할 할당, 회원/디렉토리 역할, 역할 관리/디렉토리/역할 할당유출된 ID가 보유한 Entra ID 역할 확인
테넌트 간 정찰tenantRelationships/getResourceTenants측면 이동을 위한 신뢰할 수 있는 테넌트 간 관계 열거하기
사서함 정찰me/mailbox설정전달 규칙, 자동 회신, 시간대 읽기
수확에 문의me/contactFolders/contacts ($top=1000)차세대 피싱 표적에 대한 연락처 목록 덤프
Org & 라이선스구독된스큐, 조직, 앱 역할 할당된 리소스 ($top=999)테넌트 라이선싱, 조직 구조, 앱 환경 맵화

자동화된 침해 후 정찰의 주요 원격 측정 지표:

  • 통화량 및 속도: 30~60초 이내에 20~30개 이상의 통화가 각각 다른 엔드포인트에 도달합니다.
  • 혼합 HTTP 메서드: 대부분의 엔드포인트에는 GET, getResourceTenants와 같은 작업에는 POST를 사용합니다.
  • 구조화된 쿼리 매개변수: $select, $top=999, $count=true - 호출당 최대 데이터 추출에 최적화되어 있습니다.
  • /beta/ API 사용량: 일반 포털 탐색에 비해 공격적인 도구에서 불균형적으로 사용됨.
  • 성공/실패가 혼합되어 있습니다: 일부 엔드포인트는 400 또는 403 (키트에서 모든 것을 검사함)을 반환하지만, 대부분은 200을 반환합니다. 실패한 정찰 시도는 여전히 정찰입니다.
  • C_DeviceId를 비웁니다: 토큰이 관리되지 않고 등록되지 않은 장치에 발급되었습니다.
  • 사전 동의 범위가 광범위한 타사 앱: 내 프로필용 토큰에는 RoleManagement.ReadWrite.Directory, MailboxSettings.ReadWrite, UserAuthenticationMethod.ReadWriteUser.RevokeSessions.All 등의 범위가 포함되며, 모두 사전 동의된 것이므로 OAuth 동의 메시지가 필요하지 않습니다.

장치-PRT 지속성

앞서 설명한 것처럼 이 키트는 표준 세션 해지 플레이북에서도 지속되는 기기 등록 지속성을 설정할 수 있습니다. 메커니즘:

  1. MAB 새로 고침 토큰은 oauth2/token에서 aud가 urn :ms-drs:enterpriseregistration.windows.net인 액세스 토큰(동일한 클라이언트 ID, 새 대상, 동의 프롬프트 없음)으로 리소스 스왑됩니다.
  2. 이 키트는 로컬에서 생성된 PKCS#10 CSR, 합성 기기 메타데이터 및 전송 키 블롭과 함께 urn :ms-drs:enterpriseregistration.windows.net 액세스 토큰을 사용하여 엔드포인트 EnrollmentServer/장치에 POST합니다. DRS는 장치 개체를 만들고, 장치 ID를 할당하고, 서명하고, 장치 인증서를 반환합니다.
  3. 이 키트는 사용자의 새로 고침 토큰이 포함된 JWT를 빌드하고 장치 개인 키로 RS256 서명하며 장치 인증서를 JWT 헤더에 삽입합니다. 로그인.microsoftonline.com/common/oauth2/token에 이 내용을 게시합니다. 를 JWT 무기명 보조금으로 지급합니다. Entra는 인증서에 대해 서명의 유효성을 검사하고 PRT와 암호화된 세션 키(JWE)를 반환합니다.
  4. 방어자가 모든 사용자 수준 토큰과 새로 고침 토큰을 무효화하는 revokeSignInSessions를 실행하면 장치가 Entra ID에서 별도의 주체이므로 장치 PRT는 유효하게 유지됩니다.
  5. 이 키트는 새로운 릴레이 IP에서 PRT와 세션 키를 사용하여 요청별 HMAC-SHA256 어설션에 /oauth2/token에 서명하여 퍼스트 파티(Teams, Outlook, OneDrive, Office, Intune)의 액세스 토큰을 브로커링합니다( client_id 이름).

세션을 취소해도 타이쿤 2FA가 중지되지 않는 이유는 무엇인가요?

즉, 표준 인시던트 대응 순서인 "세션 취소 > 비밀번호 재설정" 이 불충분하다는 의미입니다. 방어자는 세션을 취소하기 전에 등록된 디바이스를 열거하고 삭제하여 디바이스-PRT 체인을 원자적으로 끊어야 합니다.

탐지 뉘앙스 - Microsoft

신원 보호는 키트 인프라에 플래그를 지정하지 않을 수 있습니다. 타이쿤 2FA의 현재 송신 IP는 공격적으로 회전하며 Microsoft의 리스크 코퍼스에 포함되지 않을 수 있습니다. AiTM 탐지를 위해 Entra ID 위험 신호에만 의존하는 방어자는 아무것도 볼 수 없습니다.

그래프 활동 로그의 c_sid는 사용자 개체 ID가 아닙니다. 세션/보안 컨텍스트 식별자입니다. c_sid == user_object_id 으로 그래프 활동 로그를 필터링하는 분석가는 빈 결과를 얻고 공격자가 그래프 토큰을 사용하지 않았다고 결론을 내립니다. 올바른 헌트 피벗은 소스 IP + 앱아이디이며, 로그인 로그와 상호 참조하여 IP를 사용자에 매핑합니다.

지리적 위치는 클라우드 제공업체 IP에 대해 신뢰할 수 없습니다. 동일한 키트 릴레이 IP는 동일한 로그인 세션 내에서 다른 도시로 위치 정보를 전송할 수 있습니다. ASN은 탐지 규칙을 위한 유일한 신뢰할 수 있는 보강 기능입니다.

토큰 발행 가시성. 토큰 발행 또는 발행은 기록되지 않으며, 이러한 토큰을 활용한 인증 이벤트는 보다 반응적인 헌팅 신호를 제안합니다.

엔트라 ID 보호 위험 사용자 상태. Entra ID 보호는 로그인 이벤트, 세션, 토큰 등을 분석하여 사용자에게 위험 수준과 상태를 적용합니다. 계층 2 릴레이 중에 aiConfirmedSafe가 관찰되어 사용자에게 위험이 없음을 표시합니다. 그런 다음 이상 토큰을 기반으로 사용자 위험 이상 징후를 식별한 다음 사용자를 다시 중간 위험으로 분류했습니다. aiConfirmedSafe가 오탐을 탐지하는 이벤트를 Microsoft의 레이블 지정에서 제외하면 조직이 오탐을 탐지하지 못할 수 있습니다.

Google Workspace

단일 계층 키트 릴레이

Google 변형은 Microsoft 측에서 볼 수 있는 별도의 운영자 콘솔 계층이 없는 단일 계층 키트 릴레이로 작동합니다. 여러 개의 키트 릴레이 IP(일반적으로 Clouvider, Host Telecom 등과 같은 저렴한 호스팅 ASN에서 제공)가 각각 동일한 네 가지 이벤트 시퀀스를 수행하면서 몇 분 내에 동일한 사용자를 인증합니다:

  1. login_success 비밀번호 유효성 검사 완료(T+0.000초)
  2. login_verification is_second_factor: true - 키트에서 TOTP/SMS/푸시 코드를 실시간으로 전달하여 2SV(T+0.000초)를 완료합니다.
  3. 토큰: 구글 크롬 OAuth 클라이언트 인증(77185425430)(T+0.4~0.6초)
  4. DEVICE_REGISTER_UNREGISTER_EVENT (프로필 인증으로 인해 새 기기가 Google에 등록됨) (T+0.6~1.2초) (T+0.6~1.2초)

이 약 1초의 압축 시간은 자동 로그인의 신호입니다.

이 키트는 모든 릴레이 세션에서 동일한 OAuth 클라이언트를 일관되게 인증합니다:

Field
google_workspace.token.client.id77185425430.apps.googleusercontent.com
google_workspace.token.app_nameGoogle Chrome
google_workspace.token.client.type네이티브_데스크탑
google_workspace.device.typeWINDOWS
google_workspace.token.scope.valuehttps://www.google.com/accounts/OAuthLogin
google_workspace.token.method_name권한 부여

OAuthLogin 범위는 Chrome의 내부 부트스트랩 로그인 범위입니다. 데이터 플레인 범위가 아닙니다(그 자체로 Gmail, 드라이브 또는 캘린더 액세스 권한을 부여하지 않음). 이 단일 범위에서 키트의 폭발 반경은 추가 토큰 교환 호출 없이 직접 사서함이나 파일 액세스가 아닌 Chrome 동기화 세션이 될 수 있는 오래 지속되는 로그인에 바인딩됩니다.

VPS ASN의 token.authorize 이벤트를 통해 확인되는 것은 인증이 피해자의 디바이스가 아닌 릴레이 중에 서버 측에서 발생하므로 운영자의 의도와 관계없이 의심스럽다는 것입니다.

키트 JavaScript 아키텍처(Google 변형)

Google 타겟팅 웹소켓 변형을 디컴파일하면 5계층 아키텍처를 확인할 수 있습니다:

레이어기능
1. 안티 분석api.ipapi.is(문자열이 반전된 클라우드 공급자 차단 목록)를 통한 IP 필터링, 봇/디버거 탐지, DOM 소실 처리
2. 피싱 HTML모든 Google 인증 방법을 포함하는 15 입력 필드가 있는 ~747KB base64 디코딩된 Google 로그인 클론.
3. 웹소켓 C2Socket.IO 4.6.0 실시간 릴레이(send_to_브라우저 / 응답_from_브라우저 이벤트)
4. 암호화된 페이로드희생자당 시저+XOR 암호(LCG PRNG, 세션당 고유 시드), 런타임에 eval()'됨
5. 라이브러리AES-CBC 자격 증명 암호화를 위한 CryptoJS 4.2.0(수집된 자격 증명을 암호화하기 위한 하드코딩된 키 1234567890123456 ), list.js

15 입력 필드에는 비밀번호, TOTP, SMS, 음성 통화, 백업 코드, 복구 이메일, 전화 인증, 보안 키 폴백, 모바일 프롬프트, 강제 비밀번호 변경 등 모든 Google 2FA 방법을 캡처할 수 있습니다. (오타에 주의하세요.) "recieveid" Socket.IO 이벤트 이름은 일관된 키트 지문입니다.

탐지 뉘앙스 - Google

Google 알림 센터는 침묵을 유지할 수 있습니다. 몇 분 내에 여러 ASN에서 동일한 사용자에게 여러 번 로그인하는 경우에도 알림 센터 기록이 알림 API로 전달되지 않을 수 있습니다. Google의 피해 사서함 보안 경고 이메일은 관리자 화면이 아닌 침해된 사용자의 받은 편지함으로 전송되므로 이를 대신할 수 없습니다.

is_suspicious가 실행되지 않을 수 있습니다. 저렴한 호스팅 ASN의 키트 릴레이 IP는 Google의 리스크 코퍼스에 포함되지 않을 수 있습니다. 이 필드를 기본 신호로 사용하는 수비수는 사각지대가 생깁니다. 카나리아 인게이지먼트에서 Clouvider와 호스트 텔레콤 모두에 걸쳐 4개의 키트 IP에서 login_success 모두에서 is_suspicious 가 거짓이었습니다.

로그인 이벤트에 사용자 에이전트가 없습니다: 보고서 API 로그인 이벤트에는 사용자 에이전트 또는 디바이스 지문 데이터가 포함되지 않습니다. 엔트라 측(노드/엑시오스/언디시)에서 작동하는 UA 기반 탐지에는 직접적으로 구글에 해당하는 기능이 없습니다.

OAuth 워크플로 가시성이 얕습니다: Google의 token.authorize 이벤트는 client.id를 표시합니다, 앱_이름, 클라이언트.유형, 및 scope.value, 이것이 전체 세트입니다. 범위와 구별되는 resource_id, grant-type 필드, 수신 토큰 유형 필드가 없습니다.

대부분의 보조 스트림은 조용히 유지됩니다: google_workspace.context_aware_access가 없습니다. 이벤트가 발생했지만(사용자에 대한 5개의 새 디바이스 레코드가 있음에도 불구하고) 알림 센터 레코드가 알림 API에 도달하지 않았습니다. 키트 풋프린트는 로그인, 토큰, 디바이스의 세 가지 스트림에만 존재합니다. 다른 스트림에 의존하는 사냥은 이 키트를 감지하지 못합니다.

엔트라 ID와 구글 워크스페이스의 타이쿤 2FA

차원Microsoft 365 (엔트라 ID)Google Workspace
키트 릴레이 인프라클라우드-VPS 호스팅 ASN, 로테이팅 IP클라우드-VPS 호스팅 ASN, 로테이팅 IP
키트 릴레이 사용자 에이전트node, axios, undici, node-fetch노출되지 않음(보고서 API에 UA가 없음)
인증 흐름 대상인증 브로커 디바이스 코드 부여Google Chrome OAuth 로그인
지속성 범위기본 리프레시 토큰(PRT)으로 이어지는 장치 등록관찰되지 않음
지속성 내구성높음 - 장치-PRT는 세션 해지 후에도 생존 가능낮음 - 단일 OAuth 취소로 충분
운영자 콘솔 계층예 - 거주지 프록시 IP, 브라우저 기반 M365 웹 앱 정찰관찰되지 않음
위험 엔진 플래그가 지정된 키트 이그레스예 - 변칙 토큰에대한 사용자 위험 감지아니요 (is_suspicious 무음 )
SOC 로그 지연 시간<5분(거의 실시간에 가까운 로그인 로그)최대 ~3시간(API 지연 보고)
CA/정책 방어 가능장치 코드 흐름 차단 CA > clean 53003 거부동등한 정책 없음
킬 스위치 복잡성세션을 해지하기 전에 등록된 장치를 삭제해야 합니다.단일 OAuth 취소로 충분

M365 버전은 운영적으로 더 무겁고 로깅을 통해 ID 유출 전후에 대한 광범위한 세부 정보를 제공합니다. Google Workspace 변형은 더 가볍지만(로그인만 관찰됨) 기본 로깅에는 중요한 컨텍스트가 부족합니다.

타이쿤 2FA 동작 탐지 규칙

초기 AiTM 피싱, 토큰 릴레이, 운영자 콘솔 정찰 및 디바이스 지속성 등 전체 공격 체인을 포괄하는 탐지 규칙을 Microsoft 및 Google 원격 분석 소스에 제공했습니다.

Microsoft - 키트 릴레이 감지

OfficeHome을 통한 엔트라 ID 잠재적 AiTM 로그인(Tycoon2FA) - 인증 브로커 또는 OfficeHome 로그인 시 Node.js 스타일 사용자 에이전트(node, axios, undici)로 그래프/교환에 트리거되는 높은 신호 감지 기능입니다. 키트 릴레이 계층의 서버 측 토큰 작업을 포착합니다.

오피스 앱을 통해 로그인한 M365 잠재적 AiTM 사용자(Tycoon2FA) - Entra 로그인 규칙과 동일한 탐지 로직이지만 Entra 로그인 로그 대신(또는 추가로) o365.audit 을 수집하는 테넌트에 대한 M365 통합 감사 로그에 대한 탐지 로직입니다.

AiTM을 통한 Entra ID OAuth 디바이스 코드 피싱 : Exchange, Graph 또는 SharePoint를 대상으로 하는 인증 브로커를 통해 성공적인 대화형 디바이스 코드 흐름 로그인을 탐지합니다. 디바이스 코드 부여 어뷰징 변형을 구체적으로 포착합니다.

비정상적인 리소스에 대한 Entra ID Microsoft 인증 브로커 로그인 : 대상 리소스가 일반적으로 관찰되는 퍼스트 파티 집합을 벗어난 경우 성공적인 인증 브로커 로그인을 감지합니다. 예기치 않은 API 또는 엔터프라이즈 애플리케이션에 대한 FOCI 토큰 교환을 포착합니다.

Microsoft - 지속성 감지

비정상적인 사용자 에이전트가 있는 ID 등록 디바이스(Azure AD 조인) : 사용자 에이전트가 알려진 기본 등록 클라이언트 (Dsreg, DeviceRegistrationClient, Dalvik)가 아닌 경우 성공적인 디바이스 등록 이벤트를 감지합니다. 키트의 디바이스-PRT 지속성 플레이도 axios 사용자 에이전트에서 시작됩니다:

사후 손상 그래프 API 열거(ES|QL)

운영자 콘솔 계층의 침해 후 정찰을 위해 각 Microsoft Graph API 요청을 5개의 정찰 범주 중 하나로 태그하고 집계 기간(<= 60초) 내에 4 이상의 고유한 범주가 발생하면 실행하는 ES|QL 규칙을 구축했습니다:

Microsoft Graph 다중 범주 정찰 버스트는 유기적인 포털 사용을 필터링하면서 체계적인 사후 손상 열거를 포착합니다. 일반적인 사용자 활동은 이러한 카테고리 중 한두 개를 건드릴 수 있으며, 짧은 시간(33초) 내에 단일 세션에서 4 또는 그 이상의 고유한 정찰 카테고리를 누르는 것이 자동화된 툴링 지문이 됩니다.

Google - 키트 릴레이 및 지속성 감지

Google Workspace 불가능한 이동 로그인 - *st_distance()* 지리적 공간 기능을 사용하여 최소 500 km 간격으로 800 km/h보다 빠른 이동을 의미하는 위치에서 성공적인 로그인을 감지하는 ES|QL 규칙입니다. 서로 다른 지리적 위치에 있는 여러 IP가 몇 분 안에 동일한 사용자를 인증하는 다중 ASN 키트 릴레이 패턴을 포착합니다:

비정형 ASN에서 Google Workspace 사용자 로그인 - 14일의 기록 기간 내에 지정된 소스 ASN에서 Google Workspace 사용자가 처음으로 로그인에 성공한 경우 이를 감지하는 새로운 용어 규칙입니다.

의심스러운 ASN에서 OAuth 후 구글 워크스페이스 기기 등록 : 저렴한 호스팅 ASN에서 크롬 클라이언트(77185425430.apps.googleusercontent.com)에 대한 OAuth 인증을 감지한 후, 30 초 이내에 계정 상태 REGISTERED 로 기기 등록을 하는 EQL 시퀀스 규칙 .

단일 사용자에 대한 구글 워크스페이스 기기 등록 버스트 - 동일한 사용자에 대한 구글 워크스페이스 기기 등록 이벤트의 버스트를 감지하며, 여기서 세 개 이상의 고유한
google_workspace.device.id 값이 1분 동안 세 개 이상 발생하는 것을 감지합니다:

Elastic 워크플로우를 통한 격리 자동화

탐지 콘텐츠가 준비되면 다음 단계는 알림과 조치 사이의 시간입니다. 앞서 문서화한 타이쿤 2FA M365 키트에서 운영자 간 핸드오프 기간은 10~20분으로, 키트 릴레이의 첫 번째 토큰 발급 성공과 침해 후 그래프 정찰을 시작하는 운영자 계층 세션 사이의 시간입니다.

수동 SOC 대응은 일반적으로 이 기간보다 더 오래 걸리기 때문에 운영자는 봉쇄가 시작되기 전에 정찰 작업을 수행합니다. 이러한 간극을 좁히는 것이 바로 탐지를 실행 가능한 것으로 만드는 것입니다.

스택(9.4 이상)과 함께 제공되는 Elastic Workflows를 사용하면 모든 경보에서 탐지 규칙이 YAML로 정의된 단계 파이프라인을 통해 사용자 정의 워크플로를 호출할 수 있습니다.

PoC로, 필요한 대응 조치를 반영하는 Entra ID 잠재적 AiTM 로그인(Tycoon2FA) 탐지 규칙에 연결된 사용자 지정 워크플로우를 구축했습니다.

모든 알림에서 워크플로:

  1. client_credentials (실행당 1회)를 통해 그래프 베어러를 획득합니다.
  2. 손상된 UPN을 accountEnabled: false 으로 패치하여 새 인증을 중지합니다.
  3. 사용자의 등록된 디바이스와 소유 디바이스를 열거합니다.
  4. 각 디바이스 주체를 삭제하며, 이는 실제로 디바이스 바인딩 PRT를 무효화합니다.
  5. 사용자 수준 새로 고침 토큰 및 세션 쿠키를 무효화하기 위해 revokeSignInSessions에 POST를 보냅니다.
  6. IR 후 감사(비밀번호 재설정, 인증 방법 검토, OAuth 권한 부여 감사)를 위한 알림 컨텍스트가 채워진 Kibana 케이스를 엽니다.

이 체인은 Microsoft Graph에 대해 엔드투엔드 방식으로 10 초 이내에 실행되며, 이는 타이쿤 2FA 핸드오프 기간인 10~20분보다 훨씬 짧은 시간입니다. 운영자 계층 세션은 정찰을 시작할 기회를 얻지 못합니다.

패턴은 이 하나의 규칙을 넘어 확장됩니다. 즉각적인 격리의 이점을 누릴 수 있는 모든 클라우드 신원 탐지에 동일한 워크플로 형태가 적용됩니다: AiTM 로그인, 불가능한 이동, 불법 OAuth 동의 부여, 역할 에스컬레이션, MFA 피로도, 비정상적인 디바이스 등록. 관련 클라우드 API를 호출하는 워크플로에 규칙을 연결하면 SOC가 초 단위로 격리됩니다.

타이쿤 2FA AiTM 공격 방어

  • 피싱 방지 MFA 배포: FIDO2 보안 키와 패스키는 AiTM 세션 도용에 영향을 받지 않는 유일한 방법입니다. TOTP, SMS 및 푸시 기반 MFA를 모두 프록시할 수 있습니다.
  • 조건부 액세스를 통해 디바이스 규정 준수를 시행하세요: 토큰 발급을 위해 규정을 준수하는 관리형 디바이스를 요구합니다. 이는 AiTM 토큰 도난을 방지하는 가장 효과적인 방법입니다.
  • 디바이스 코드 흐름을 차단합니다: Block device code flow 조건부 액세스 정책은 승인 단계에서 키트 릴레이를 깔끔하게 거부합니다(오류 53003). 명시적으로 승인된 키오스크/헤드리스 시나리오를 제외한 모든 사용자에게 사용하도록 설정합니다.
  • 토큰 보호(토큰 바인딩)를 사용 설정합니다: 토큰을 토큰이 발급된 장치에 바인딩합니다. 다른 기기에서 도난당한 토큰을 재생하면 거부됩니다.
  • 지속적인 액세스 평가(CAE)를 활성화합니다: 위험 조건이 변경되면 거의 실시간으로 토큰을 취소합니다.
  • Entra ID에서 보안 기본값 사용(사용자 지정 조건부 액세스가 없는 테넌트만 해당): ROPC와 같은 레거시 인증을 거부하고 기본적으로 장치 코드 흐름을 차단합니다. 보안 기본값을 사용 설정하면 사용자 지정 CA 정책이 비활성화되므로 이미 세분화된 CA를 실행 중인 테넌트에는 이 기능이 적용되지 않습니다.

MITRE ATT&CK 매핑

기술ID관측 가능합니다.
피싱: 스피어피싱 링크T1566.002링크, QR코드, PDF/SVG/HTML 첨부 파일이 포함된 이메일 유인하기
웹 세션 쿠키 도용T1539AiTM 프록시는 MFA 이후 세션 토큰을 캡처합니다.
유효한 계정: 클라우드 계정T1078.004그래프 API 액세스 및 M365 웹 앱 브라우징에 사용된 도난 토큰
계정 조작: 장치 등록T1098.005PRT 지속성을 위한 키트 등록 장치
대체 인증 자료를 사용합니다: 애플리케이션 액세스 토큰T1550.001인증 브로커 앱 제품군에서 FOCI 토큰 교환
계정 검색: 클라우드 계정T1087.004사용자 프로필, 역할 멤버십, 연락처의 그래프 열거 보기
권한 그룹 검색: 클라우드T1069.003디렉터리 역할 및 전이적 역할 할당 열거하기
클라우드 서비스 검색T1526구독된 Skus, 조직 메타데이터, 앱 인벤토리 나열

참고 자료

이 문서 공유하기