Az - Device Registration

Support HackTricks

Basic Information

장치가 AzureAD에 가입할 때 AzureAD에 새로운 객체가 생성됩니다.

장치를 등록할 때, 사용자는 자신의 계정으로 로그인하라는 요청을 받습니다 (필요한 경우 MFA 요청), 그런 다음 장치 등록 서비스에 대한 토큰을 요청하고 마지막 확인 프롬프트를 요청합니다.

그런 다음, 장치에서 두 개의 RSA 키 쌍이 생성됩니다: 장치 키 (공개 키)는 AzureAD에 전송되고 전송 키 (개인 키)는 가능하면 TPM에 저장됩니다.

그 후, 객체AzureAD에서 생성되고 (Intune이 아님) AzureAD는 장치에 서명된 인증서를 반환합니다. 장치가 AzureAD에 가입되었는지인증서에 대한 정보(예: TPM으로 보호되는지 여부)를 확인할 수 있습니다.

dsregcmd /status

장치 등록 후 Primary Refresh Token이 LSASS CloudAP 모듈에 의해 요청되고 장치에 제공됩니다. PRT와 함께 장치만 복호화할 수 있도록 암호화된 세션 키도 제공되며(전송 키의 공개 키를 사용) PRT를 사용하기 위해 필요합니다.

PRT에 대한 자세한 정보는 다음을 확인하세요:

TPM - 신뢰할 수 있는 플랫폼 모듈

TPM은 전원이 꺼진 장치에서 키 추출을 방지하고(핀으로 보호되는 경우) OS 계층에서 개인 정보를 추출하는 것을 보호합니다. 하지만 TPM과 CPU 간의 물리적 연결을 스니핑하거나 시스템이 실행 중일 때 SYSTEM 권한을 가진 프로세스에서 TPM의 암호화 자료를 사용하는 것에 대해서는 보호하지 않습니다.

다음 페이지를 확인하면 PRT를 훔치는 것사용자처럼 접근하는 데 사용될 수 있다는 것을 알 수 있습니다. 이는 PRT가 장치에 위치하므로 장치에서 훔칠 수 있거나(훔치지 않더라도 새로운 서명 키를 생성하는 데 악용될 수 있습니다):

SSO 토큰으로 장치 등록하기

공격자가 손상된 장치에서 Microsoft 장치 등록 서비스에 대한 토큰을 요청하고 등록하는 것이 가능할 것입니다:

# Initialize SSO flow
roadrecon auth prt-init
.\ROADtoken.exe <nonce>

# Request token with PRT with PRT cookie
roadrecon auth -r 01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9 --prt-cookie <cookie>

# Custom pyhton script to register a device (check roadtx)
registerdevice.py

어떤 것이 미래에 PRT를 요청하는 데 사용할 수 있는 인증서를 제공합니다. 따라서 지속성을 유지하고 MFA를 우회할 수 있습니다. 왜냐하면 새 장치를 등록하는 데 사용된 원래 PRT 토큰이 이미 MFA 권한이 부여되었기 때문입니다.

이 공격을 수행하려면 새 장치를 등록할 수 있는 권한이 필요합니다. 또한, 장치를 등록한다고 해서 해당 장치가 Intune에 등록될 수 있는 것은 아닙니다.

이 공격은 2021년 9월에 수정되었으며, 더 이상 SSO 토큰을 사용하여 새 장치를 등록할 수 없습니다. 그러나 여전히 정당한 방법으로 장치를 등록하는 것은 가능합니다(필요한 경우 사용자 이름, 비밀번호 및 MFA가 필요). 확인: roadtx.

장치 티켓 덮어쓰기

장치 티켓을 요청하고, 현재 장치의 것을 덮어쓰며, 흐름 중에 PRT를 훔치는 것이 가능했습니다(따라서 TPM에서 훔칠 필요가 없습니다. 자세한 내용은 이 강연을 확인하세요.

그러나, 이것은 수정되었습니다.

WHFB 키 덮어쓰기

원본 슬라이드를 여기서 확인하세요

공격 요약:

  • SSO를 통해 등록된 WHFB 키를 덮어쓸 수 있습니다

  • 이는 TPM 보호를 무력화하며, 키가 새 키 생성 중에 스니핑됩니다

  • 이것은 또한 지속성을 제공합니다

사용자는 Azure AD Graph를 통해 자신의 searchableDeviceKey 속성을 수정할 수 있지만, 공격자는 테넌트에 장치가 있어야 합니다(즉석에서 등록되었거나 정당한 장치에서 인증서 + 키를 훔쳤거나) 및 AAD Graph에 대한 유효한 액세스 토큰이 필요합니다.

그런 다음, 다음을 사용하여 새 키를 생성할 수 있습니다:

roadtx genhellokey -d <device id> -k tempkey.key

그리고 검색 가능한 DeviceKey의 정보를 PATCH합니다:

디바이스 코드 피싱을 통해 사용자로부터 액세스 토큰을 얻고 이전 단계를 악용하여 그의 액세스를 훔칠 수 있습니다. 자세한 내용은 다음을 확인하세요:

References

HackTricks 지원하기

Last updated