Netwrix 1Secure는 데이터와 아이덴티티 전반에 걸쳐 통합된 가시성을 제공합니다 - 14일간 무료로 전체 액세스가 가능합니다.무료 평가판 시작

리소스 센터블로그

AI로 Entra ID 테넌트 파괴 자동화

AI로 Entra ID 테넌트 파괴 자동화

May 21, 2026

AI 보조 브라우저 자동화는 로그인된 계정이 이미 고급 권한에 접근할 수 있는 경우 Microsoft Graph Explorer를 파괴적인 Entra ID 관리 인터페이스로 바꿀 수 있습니다. Claude for Chrome, 브라우저 측 JavaScript, Microsoft Graph 배치 요청을 사용하면 사용자 삭제, 계정 비활성화, 비밀번호 재설정, 세션 해지, 조건부 액세스 정책 제거와 같은 파괴적 작업을 브라우저 세션에서 바로 자동화할 수 있습니다.

AI가 Microsoft Graph, Graph Explorer, 브라우저 측 자동화를 통해 Entra ID 테넌트 파괴를 자동화하는 방법

이 게시물에서는 로그인한 계정에 필요한 권한이 있을 때, AI 보조 브라우저 자동화를 사용해 Entra ID 테넌트에 대해 파괴적인 Microsoft Graph 작업을 수행하는 방법을 보여줍니다.

AI가 Entra ID 테넌트 파괴를 위해 Graph Explorer를 자동화하는 방법

Microsoft Graph Explorer는 Entra ID 테넌트에 대해 Microsoft Graph API 요청을 전송하기 위한 브라우저 기반 도구입니다. 일반적으로 관리자는 API 호출을 테스트하고 응답을 확인하며 어떤 권한이 필요한지 이해하기 위해 사용합니다. 이 게시물에서는 Microsoft Graph에 대한 액세스가 자동화된 파괴적인 테넌트 작업에 어떻게 활용될 수 있는지, 그리고 브라우저를 조작할 수 있는 AI 어시스턴트와 결합될 때 동일한 워크플로가 왜 위험해지는지 보여주기 위해 이를 사용합니다.

테넌트 파괴의 실제 사례

테넌트 파괴는 더 이상 랜섬웨어로 서버를 암호화하는 것에 국한되지 않습니다. 2026년 3월, Stryker는 자사의 Microsoft 환경을 마비시킨 사이버 공격을 공개했으며, Sygnia는 이후 공격자가 Microsoft Intune을 사용하여 노트북, 모바일 기기, 가상 서버를 포함한 내부 가상 인프라를 삭제했다고 보고했습니다.

2025년 8월, Microsoft는 Storm-0501이 온프레미스 Active Directory에서 Entra ID로 이동한 후 클라우드 기반 랜섬웨어 기법을 사용한 사례를 문서화했습니다. 공격자는 Global Administrator 권한을 획득하고, Azure 구독에 대한 액세스를 확대했으며, 복구를 방지하기 위해 클라우드 데이터와 백업 리소스를 삭제한 후 몸값을 요구했습니다.

Claude for Chrome, 개발자 도구, 그리고 브라우저 측 JavaScript를 사용해 Microsoft Graph 작업을 자동화하기

Claude for Chrome은 Claude를 브라우저에 직접 통합하여 웹 페이지와 상호 작용하고, UI 요소를 검사하며, 사용자가 일반적으로 수동으로 사용하는 동일한 인터페이스를 통해 작업을 수행하는 것을 지원합니다. Chrome Developer Tools 및 브라우저 측 JavaScript와 결합하면 단순한 프롬프팅을 넘어, Entra ID 테넌트에 대한 파괴적 Microsoft Graph 작업을 포함하여 Graph Explorer 내에서 워크플로우를 자동화할 수 있습니다.

사전 준비 사항

이 절차는 본인이 소유하고 있으며 손실되어도 무방한 테스트 테넌트에서만 재현하십시오. 운영 테넌트나 명시적인 권한이 없는 환경에서는 파괴적 Graph 작업을 실행하지 마십시오.

이 게시물에서는 Claude for Chrome을 사용하여 Microsoft Graph Explorer 내에서 직접 파괴적 Entra ID 작업을 자동화한 방법을 설명하며, 브라우저 측 JavaScript를 활용하여 워크플로우를 빠르고 수동 개입 없이 진행할 수 있도록 했습니다.

시작하기 전에, 테스트 테넌트에서 활성화된 Global Administrator 세션이 있는 브라우저에서 Microsoft Graph Explorer를 열고 Claude for Chrome을 열어 둡니다.

테스트 테넌트에서 제어된 테넌트 파괴 수행

먼저 아무것도 건드리기 전에, Claude에게 한 번에 네 가지를 나열해 달라고 요청했습니다. 즉, 모든 디렉터리 역할 구성원, 모든 Entra ID 애플리케이션 등록, 모든 조건부 액세스 정책, 그리고 등록된 모든 디바이스였습니다. 이 작업이 빠를 수 있었던 이유는 Claude가 Graph API 토큰을 확보하는 방식 때문이었습니다. Claude는 브라우저 개발자 도구에서 토큰을 복사하라고 하지 않고, 작은 인터셉터로 브라우저의 기본 fetch 함수를 패치했습니다.

      window._originalFetch = window.fetch;

window.fetch = function (...args) {
  const url = args[0];
  const options = args[1] || {};

  if (url.includes("graph.microsoft.com")) {
    const auth = (options.headers || {})["Authorization"];

    if (auth) {
      window._capturedToken = auth;
    }
  }

  return window._originalFetch.apply(this, args);
};
      

다음에 Graph Explorer가 API 호출을 수행했을 때, 이 인터셉터는 요청 헤더에서 Bearer 토큰을 조용히 가로챘습니다. Claude는 그런 다음 이 토큰을 사용하여 Promise.all()을 통해 네 개의 열거 쿼리를 동시에 실행했습니다. 따라서 네 개의 별도 호출이 순차적으로 완료되기를 기다리는 대신, 모두 병렬로 실행되었고 결과는 거의 즉시 반환되었습니다. 디렉터리 역할의 경우, 먼저 활성 역할 목록을 가져온 다음, 각 역할의 구성원을 하나씩 순회하는 대신 동시에 가져왔습니다. 최종 결과는 단 몇 초 만에 전체 테넌트의 완전한 인벤토리를 확보한 것이었습니다. 처음에 캡처된 토큰은 읽기 수준의 스코프만 보유하고 있었기 때문에, 쓰기 또는 삭제 작업은 403을 반환했습니다. Claude는 Graph Explorer에 내장된 Modify Permissions 탭을 통해 모든 작업을 처리했습니다.

Claude for Chrome interacting with Microsoft Graph Explorer in the browser
Figure 1. Claude for Chrome interacting with Microsoft Graph Explorer in the browser, using automated steps to run Graph API queries, request permissions, and collect Entra ID enumeration results.

더 높은 권한 스코프가 필요한 각 작업에 대해, Claude는 Graph Explorer에서 올바른 HTTP 메서드로 해당 엔드포인트로 이동하고, Modify Permissions 탭으로 전환하여 필요한 스코프가 자동으로 표시되도록 한 다음 Consent를 클릭했습니다.

각 동의 후에는 새로운 Run Query 작업을 실행하여 Graph Explorer가 업데이트된 스코프로 새 토큰을 발급하도록 했으며, 그런 다음 동일한 인터셉터를 통해 이를 다시 캡처했습니다. 동의한 권한은 앱 등록을 삭제하기 위한 Application.ReadWrite.All, Conditional Access 정책을 삭제하기 위한 Policy.ReadWrite.ConditionalAccess, 디렉터리 역할에서 계정을 제거하기 위한 RoleManagement.ReadWrite.Directory, 그리고 사용자 계정을 삭제하기 위한 User.DeleteRestore.All이었습니다.

액세스 토큰에 필요한 권한이 모두 포함된 상태에서, Claude는 파괴적 작업을 병렬로 수행하는 단일 JavaScript 블록을 실행했습니다. 각 객체 유형에 대해 동일한 패턴이 사용되었습니다. 즉, 전체 목록을 가져오고, 각 객체를 DELETE 요청에 매핑하고, Promise.all()로 요청을 실행한 다음, 모든 응답에 대해 HTTP 상태를 기록했습니다.

Claude for Chrome executing destructive Microsoft Graph operations
Figure 2. Claude for Chrome executing destructive Microsoft Graph operations through Graph Explorer, deleting Entra ID applications, Conditional Access policies, and devices in the test tenant.

이러한 Entra ID 감사 로그는 정리 작업이 실시간으로 진행되는 모습을 보여줍니다. 오전 8시 6분 19초에 기기 삭제, 애플리케이션 삭제, 서비스 주체 제거를 포함한 여러 삭제 작업이 성공으로 기록되었습니다.

Entra ID audit logs showing successful delete operations
Figure 3. Entra ID audit logs showing successful delete operations for devices, applications, and service principals after the automated Graph workflow executed.

이 스크린샷은 오른쪽에서 Claude for Chrome이 JavaScript 블록을 생성하는 동시에, Graph Explorer 세션 내의 Chrome Developer Tools에서 동일한 로직이 실행되는 모습을 보여줍니다. 콘솔 출력은 스크립트가 2,551명의 사용자를 찾아 2,550명을 삭제 대상으로 표시하고 1개의 계정을 보호한 후, 삭제 작업에 대해 성공적인 204 응답을 반환하기 시작했음을 보여줍니다.

Claude for Chrome generating a destructive JavaScript workflow
Figure 4. Claude for Chrome generating a destructive JavaScript workflow while Chrome Developer Tools executes it inside the Graph Explorer session, returning successful 204 responses for Microsoft Graph delete operations.

여기서는 워크플로우의 사용자 삭제 단계를 보여줍니다. 오전 8시 14분 5초에 여러 Delete user 이벤트가 Core Directory에 기록되었고 Success로 표시되었습니다.

Entra ID audit logs showing successful user deletion events
Figure 5. Entra ID audit logs showing successful user deletion events recorded under Core Directory after the automated Graph workflow executed.

예를 들어, 삭제된 사용자 중 일부는 부분적으로 복원했고, 나머지는 삭제된 항목 컨테이너에 남아 있었습니다. 그 후 Claude를 사용하여 정리 작업을 자동화했으며, 브라우저 세션에서 직접 남아 있는 삭제된 사용자들을 영구적으로 삭제할 수 있는 브라우저 측 JavaScript를 생성했습니다.

이러한 감사 로그는 영구 삭제 단계를 보여줍니다. Entra ID는 Core Directory와 UserManagement에 여러 Hard Delete user 이벤트를 기록했으며, 모두 Success로 표시되었습니다. 이는 이전의 소프트 삭제 단계와는 다릅니다. 이러한 사용자들은 삭제된 항목 컨테이너에서 제거되었으며, 이는 일반적인 Entra ID 복원 흐름을 통해서는 더 이상 복구할 수 없음을 의미합니다.

Entra ID audit logs showing successful hard-delete events
Figure 6. Entra ID audit logs showing successful hard-delete events for user objects, confirming the users were permanently removed from the deleted items container.

테넌트 잠금

테넌트 잠금(tenant lockout)은 조직이 자사의 Microsoft 365 또는 Entra ID 테넌트에 대한 관리 액세스 권한을 상실할 때 발생합니다. 이는 모든 Global Administrator 또는 동등한 계정이 삭제, 비활성화되거나, 잘못된 Conditional Access 정책에 의해 차단되거나, 더 이상 충족할 수 없는 MFA 설정으로 보호되는 경우에 발생할 수 있습니다. 이 시점에서 테넌트는 여전히 존재할 수 있지만, 조직은 더 이상 사용자, 애플리케이션, 정책, 기기 또는 복구 설정을 관리할 수 없습니다.

다음 워크플로우는 테넌트 객체를 삭제하는 대신, 사용자 암호 재설정, 활성 세션 취소, 모든 계정 비활성화를 통해 테넌트 잠금에 초점을 맞춥니다.

Claude for Chrome reporting the tenant lockout workflow
Figure 7. Claude for Chrome reporting the tenant lockout workflow, showing successful password resets, session revocations, and account disablement across 1,103 users in the test tenant.

내부적으로 Claude는 Graph Explorer 세션에서 얻은 동일한 브라우저 측 액세스 토큰을 사용하여 브라우저에서 Microsoft Graph $batch 요청을 구성했습니다. 사용자당 하나의 요청을 수동으로 전송하는 대신, 사용자들을 20명 단위의 배치로 그룹화하고 각 그룹에 대해 세 가지 배치 작업을 전송했습니다. 즉, 암호 재설정 작업, 활성 로그인 세션 취소 작업, 그리고 계정 비활성화 작업입니다.

각 배치는 캡처된 토큰을 Authorization 헤더에 포함하여 https://graph.microsoft.com/v1.0/$batch로 전송되었습니다. 이를 통해 워크플로우는 브라우저에서 빠르고 반복적으로 실행될 수 있었으며, Graph는 계정 잠금 작업을 일괄적으로 처리했습니다.

Claude for Chrome building Microsoft Graph $batch requests in the browser
Figure 8. Claude for Chrome building Microsoft Graph $batch requests in the browser to reset passwords, revoke sessions, and disable accounts in grouped user batches.

감사 로그는 계정 비활성화 단계가 Entra ID에 반영되는 모습을 보여줍니다. 여러 사용자가 동일한 짧은 시간 창 내에서 비활성화되었고, 각 이벤트는 Core Directory에 Success 상태로 기록되었습니다. 이는 잠금 워크플로우가 테스트 테넌트에 실제 변경 사항을 적용했음을 확인시켜 줍니다.

Entra ID audit logs showing successful account disablement events
Figure 9. Entra ID audit logs showing successful account disablement events after the tenant lockout workflow executed through Microsoft Graph batch requests.

여기서는 매우 짧은 시간 창 내에 여러 사용자 계정에 걸쳐 StsRefreshTokenValidFrom 타임스탬프가 일괄적으로 업데이트되는 모습을 보여줍니다. 이 활동은 Revoke Refresh Tokens 작업이 실행될 때 업데이트되며, 영향을 받는 사용자들의 모든 기존 refresh 토큰을 무효화하고 재인증을 강제합니다.

Microsoft Entra ID audit log
Figure 10. Microsoft Entra ID audit log: Bulk StsRefreshTokenValidFrom timestamp updates

결론

이 예시는 올바른 권한이 이미 확보되어 있다면, 필요한 도구가 얼마나 적을 수 있는지를 보여줍니다. 브라우저, Graph Explorer, 브라우저 기반 AI 어시스턴트, 그리고 브라우저 측 JavaScript만으로도 별도의 독립 실행 도구를 작성하거나 코드를 컴파일하거나 외부 스크립트를 실행하지 않고도 파괴적인 Entra ID 작업을 자동화할 수 있었습니다. 중요한 점은 AI가 그 자체로 새로운 공격 경로를 만든 것이 아니라는 것입니다. 실제 위험은 AI가 기존의 관리 작업 흐름을 더 빠르게 만들고, 서로 연계하기 쉽게 하며, 브라우저를 통해 실행하기 더 쉽게 만든다는 데 있습니다. 브라우저 측 JavaScript는 자동화 계층 역할을 수행하여, 수동적인 Graph Explorer 작업을 병렬로 실행될 수 있는 반복 가능한 API 호출로 전환했습니다. 권한 검색, 동의, 토큰 갱신, Graph 요청, 배치 처리, 삭제, 비밀번호 재설정, 세션 폐기, 계정 비활성화는 모두 동일한 브라우저 세션에서 일괄적으로 수행될 수 있었습니다.

테넌트 파괴는 더 이상 랜섬웨어로 서버를 암호화하는 데만 국한되지 않습니다.

Claude for Chrome은 Claude를 브라우저에 직접 가져와, 웹 페이지와 상호작용하고 UI 요소를 검사하며 사용자가 일반적으로 수동으로 사용하는 것과 동일한 인터페이스를 통해 작업을 수행하는 데 도움을 줍니다. Chrome 개발자 도구와 브라우저 측 JavaScript와 결합하면 단순한 프롬프트 단계를 넘어 Graph Explorer 내부에서 워크플로를 자동화할 수 있으며, Entra ID 테넌트에 대해 파괴적인(파괴를 유발할 수 있는) Microsoft Graph 작업까지 자동화할 수 있습니다.

이 내용을 반드시 본인이 소유하고 있으며 잃어도 괜찮을 만큼 대비된 테스트 테넌트에서만 재현하세요. 운영(프로덕션) 테넌트 또는 명시적인 승인 권한이 없는 환경에서는 파괴적인 Graph 작업을 실행하지 마세요.

이 글에서는 Claude for Chrome 를 사용해 브라우저 측 JavaScript로 워크플로를 빠르고 손이 덜 가게 만들면서, Microsoft Graph Explorer 내부에서 바로 파괴적인 Entra ID 작업을 자동화한 방법을 살펴봅니다.

시작하기 전에 테스트 테넌트에서 활성 상태의 Microsoft Graph Explorer 권한을 가진 브라우저에서 Global Administrator 세션으로 열고, Claude for Chrome을 열린 상태로 유지하세요.

다음에 Graph Explorer가 어떤 API 호출이든 수행하면, 이 인터셉터가 요청 헤더에서 Bearer 토큰을 조용히(사일런트하게) 가져왔습니다. 그다음 Claude는 그 토큰을 사용해 Promise.all() 로 네 가지 열거 쿼리를 동시에 실행했습니다. 따라서 네 개의 호출이 순차적으로 끝나기를 기다리는 대신, 모두 병렬로 실행되어 결과가 거의 즉시 반환됐습니다. 특히 디렉터리 역할의 경우에는 먼저 활성 역할 목록을 가져온 다음, 역할을 하나씩 반복(루프)하며 구성원을 가져오는 대신 모든 역할의 구성원을 동시에 가져왔습니다. 최종 결과는 몇 초 만에 전체 테넌트에 대한 완전한 인벤토리였습니다. 캡처된 토큰에는 처음에 읽기 수준의 스코프만 있었기 때문에, 어떤 쓰기 또는 삭제 작업을 시도하면 403 오류가 반환되었습니다. Claude는 Graph Explorer의 내장 Modify Permissions 탭을 통해 모든 작업을 처리했습니다.

더 높은 권한 스코프가 필요한 각 작업에 대해 Claude는 Graph Explorer에서 올바른 HTTP 메서드로 관련 엔드포인트로 이동한 다음 Modify Permissions 탭으로 전환했습니다. 이 탭은 필요한 스코프를 자동으로 표시해 주었고, Consent 을 클릭했습니다.

각 동의가 끝날 때마다 Graph Explorer가 업데이트된 범위(scopes)로 새 토큰을 발급한 다음, 동일한 인터셉터를 통해 다시 캡처하도록 Run Query 작업을 새로 트리거했습니다. 동의한 권한은 앱 등록을 삭제하기 위한 Application.ReadWrite.All, 조건부 액세스 정책을 삭제하기 위한 Policy.ReadWrite.ConditionalAccess, 디렉터리 역할에서 계정을 제거하기 위한 RoleManagement.ReadWrite.Directory 그리고 사용자 계정을 삭제하기 위한 User.DeleteRestore.All 입니다.

액세스 토큰에 필요한 권한이 포함된 상태에서, Claude는 파괴적인 작업을 병렬로 수행하는 단일 JavaScript 블록을 실행했습니다. 동일한 패턴이 각 개체 유형에 대해 사용되었습니다. 즉 전체 목록을 가져온 다음, 각 개체를 DELETE 요청에 매핑하고, Promise.all()로 요청을 실행한 뒤, 모든 응답에 대해 HTTP 상태를 기록했습니다.

이 Entra ID 감사 로그는 실시간으로 진행되는 정리가 표시됩니다. 8:06:19 AM 에 여러 삭제 작업이 성공으로 기록되었으며, 여기에는 디바이스 삭제, 애플리케이션 삭제, 서비스 주체(Service principal) 제거가 포함됩니다.

이 스크린샷은 Graph Explorer 세션 내의 Chrome 개발자 도구에서 동일한 로직이 실행되는 동안, 오른쪽에 표시된 JavaScript 블록을 Claude for Chrome이 생성하는 모습을 보여줍니다. 콘솔 출력에는 스크립트가 사용자 2,551명을 찾고 2,550명을 삭제 대상으로 표시했으며 1개 계정을 보호한 다음 삭제 작업에 대해 성공적인 204 응답을 반환하기 시작했음을 보여줍니다.

여기서는 워크플로의 사용자 삭제 단계가 표시됩니다. 8:14:05 AMDelete user 이벤트가 Core Directory 아래에서 기록되었고 Success 로 표시되었습니다.

예를 들어, 삭제된 사용자 중 일부는 복원했고 다른 사용자들은 삭제된 항목 컨테이너에 그대로 남아 있었습니다. 그 다음 Claude를 사용해 정리를 자동화했는데, 브라우저에서 실행되는 JavaScript를 생성하여 브라우저 세션에서 남아 있던 삭제된 사용자를 직접 영구 삭제할 수 있게 했습니다.

이 감사 로그는 영구 삭제 단계를 보여줍니다. Entra ID는 다수의 Hard Delete user 이벤트를 Core DirectoryUserManagement 아래에서 기록했으며, 모두 Success 로 표시되었습니다. 이는 이전의 소프트 삭제 단계와 다릅니다. 이 사용자들은 삭제된 항목 컨테이너에서 제거되었으므로, 일반적인 Entra ID 복원 흐름을 통해서는 더 이상 복구할 수 없었습니다.

테넌트 잠금은 조직이 Microsoft 365 또는 Entra ID 테넌트에 대한 관리 권한을 잃을 때 발생합니다. 이는 모든 Global Administrator(전역 관리자) 또는 이에 준하는 계정이 삭제되거나 비활성화되었거나, 깨진 조건부 액세스(Conditional Access) 정책 뒤에 잠겨 있거나, 더 이상 아무도 충족할 수 없는 MFA 설정으로 보호되는 경우에 발생할 수 있습니다. 그 시점에는 테넌트가 여전히 존재할 수는 있지만, 조직은 더 이상 사용자, 애플리케이션, 정책, 디바이스 또는 복구 설정을 관리할 수 없습니다.

이 다음 워크플로는 테넌트 개체를 삭제하는 대신, 사용자 암호를 재설정하고 활성 세션을 해지하며 모든 계정을 비활성화함으로써 테넌트 잠금에 초점을 둡니다.

내부적으로 Claude는 Graph Explorer 세션에서 사용한 것과 동일한 브라우저 측 액세스 토큰을 사용하고 Microsoft Graph $batch 요청을 브라우저에서 구성했습니다. 사용자별로 요청을 하나씩 수동으로 보내는 대신, 사용자를 20명 단위로 묶어 배치로 만들고, 그룹당 3개의 배치 작업을 전송했습니다. 즉, 하나는 암호를 재설정하고, 하나는 활성 로그인 세션을 해지하며, 하나는 계정을 비활성화하는 작업이었습니다.

각 배치는 https://graph.microsoft.com/v1.0/$batch 로 전송되었으며, 포착한 토큰을 Authorization 헤더에 포함했습니다. 이를 통해 브라우저에서 워크플로가 빠르고 반복적으로 실행되는 한편, Graph는 계정 잠금(락아웃) 작업을 일괄로 처리했습니다.

감사 로그에는 계정 비활성화 단계가 Entra ID에 반영된 것으로 표시됩니다. 동일한 짧은 시간 창 내에서 여러 사용자가 비활성화되었으며, 각 이벤트는 Core Directory 아래에 Success 상태로 기록되었습니다. 이는 잠금(락아웃) 워크플로가 테스트 테넌트에 실제 변경을 수행했음을 확인해 줍니다.

이는 아주 짧은 시간 창 안에서 여러 사용자 계정에 대해 StsRefreshTokenValidFrom 타임스탬프가 일괄 업데이트된 것을 보여줍니다. 이 활동은 Revoke Refresh Tokens 작업이 트리거될 때 업데이트됩니다. 그러면 영향을 받은 사용자의 기존 모든 리프레시 토큰이 무효화되어 재인증을 강제하게 됩니다.

공유하기

더 알아보기

저자 소개

Asset Not Found

Huy Kha

보안 연구 디렉터

Huy는 Netwrix의 보안 연구 부서 디렉터로, 보안 연구 팀을 이끌며 보안 제품 포트폴리오 전반의 개선을 추진하여 고객의 회복탄력성을 높이는 데 기여하고 있습니다. 그는 또한 Windows & Devices 분야에서 Microsoft MVP이기도 합니다. 사고 대응, 보안 운영, 시스템 최적화 분야의 배경을 바탕으로 복잡한 문제를 명확하고 간소화된 프로세스로 전환하는 실용적이고 반복 가능한 접근 방식을 집중적으로 연구합니다.