
Microsoft SSPR(Self-Service Password Reset) 포털을 통해 사용자 계정과 등록된 인증 방법을 열거합니다
Microsoft의 셀프 서비스 암호 재설정(SSPR) 엔드포인트를 프로브하여 등록된 검증 방법을 열거하고 강력한 2차 인증 요소가 없는 방법을 표시합니다. 사용자 열거와 Entra 계정 전반의 MFA 상태에 대한 근사치를 제공합니다.
[!NOTE] 2026년 8월 기준으로 Microsoft는 SSPR 흐름에서 레거시 CAPTCHA를 제거하고 백엔드 스로틀링과 행동 기반 악용 탐지로 대체했습니다(MC1400824 참조). Microsoft의 입장은 백엔드 제어가 자동화된 악용을 탐지하고 차단하기에 충분하다는 것입니다.
# Install pipx if needed
apt install pipx && pipx ensurepath
# From a local clone
git clone https://github.com/mlcsec/ResetSpy.git
cd ResetSpy
pipx install .
python3 -m venv .venv
pip install -r requirements.txt
# Single acc
resetspy [email protected]
# Email file (one per line)
resetspy emails.txt
# Proxy
resetspy emails.txt --proxy http://127.0.0.1:8080
# Export to CSV with increased delay
resetspy emails.txt --csv results.csv --delay 4
# Full HTTP debug — request/response headers and bodies printed to stderr
resetspy [email protected] -v
모든 요청 사이에 --delay에 더해 무작위 지터가 추가됩니다.
429 응답과 네트워크 오류 시 지수 백오프(--retries 횟수까지)가
적용됩니다. 기본 지연은 2초이며, 대량 배치의 경우 4-6초로
늘리십시오. User-Agent는 매 요청마다 16개의 일반적인
에이전트(Windows, macOS, iOS, Android) 풀에서 순환됩니다.
2020년부터 기본으로 활성화된 Microsoft의 결합 보안 정보 등록 환경은 SSPR과 MFA 모두에 대한 인증 방법을 단일 흐름에서 등록합니다. 실제로 이는 대부분의 최신 Entra ID 테넌트에서 SSPR을 통해 보이는 방법이 로그인을 보호하는 방법과 동일하다는 것을 의미합니다. 강력한 SSPR 방법이 등록되지 않은 계정은 강력한 MFA 방법이 등록되지 않은 계정일 가능성이 매우 높습니다.
참고 자료:
SSPR과 MFA는 별개의 레지스트리입니다. 결합 등록은 대부분의 경우 이들을 중첩시키지만 동일한 것은 아닙니다. 결합 등록이 활성화되기 전에 등록되었거나 관리자가 SSPR 정책에서 제외한 경우, MFA에는 존재하지만 여기에는 보이지 않는 방법이 있을 수 있습니다.
FIDO2 보안 키와 인증서 기반 인증은 SSPR에서 지원되지 않습니다. Microsoft는 이러한 방법을 SSPR 흐름에 추가한 적이 없습니다. 등록된 유일한 요소가 FIDO2 키나 스마트 카드인 사용자는 여기에서 방법이 없는 것으로 나타납니다 — 거짓 음성입니다. 실제로 이는 일반 사용자에게는 드물지만 높은 보안 또는 비밀번호 없는 환경에서는 더 흔합니다.
참고 자료:
방법별 정책 불일치. 관리자는 MFA 로그인에는 방법을 허용하지만 SSPR 정책에서는 제외하거나 그 반대로 할 수 있습니다. 예를 들어 조직이 로그인에는 인증 앱 푸시를 허용하지만 암호 재설정에는 허용하지 않을 수 있습니다. 이 도구는 SSPR이 제공하려는 것만 볼 수 있습니다.
SSPR 완전 비활성화(SSPR_0011). 사용자에 대해 SSPR이 라이선스되지 않았거나
활성화되지 않은 경우, 엔드포인트는 ViewSsprNotEnabledInUserPolicy를 반환하고
방법 정보를 사용할 수 없습니다. 계정은 존재하며 MFA가 구성되어 있을 가능성이
높지만, 이 도구는 무엇인지 판단할 수 없습니다.
게스트 및 페더레이션 계정. 외부 사용자와 B2B 게스트는 홈 테넌트를 통해
인증합니다. 리소스 테넌트의 SSPR 엔드포인트는 홈 테넌트의 MFA 등록에 대한
가시성이 없으며 ViewFeatureNotAvailable을 반환합니다. 이들의 MFA 상태는
이 엔드포인트에서 보이지 않습니다.
테넌트 전체 방법 제한. 관리자가 SSPR 정책에서 방법 클래스를 비활성화한 경우, 개별 등록과 관계없이 어떤 사용자에게도 제공되지 않으므로 "방법이 등록되지 않음"과 "방법이 비활성화됨"을 구분하는 것이 불가능합니다.
관리자 계정은 항상 SSPR이 활성화됩니다. Microsoft의 SSPR 정책 설정은 표준 최종 사용자에게만 적용됩니다. 관리자 계정은 테넌트 SSPR 정책과 관계없이 항상 셀프 서비스 암호 재설정이 활성화되며, Microsoft는 이들에게 두 가지 인증 방법을 등록하도록 요구합니다. 이는 플랫폼 수준에서 강제되며 테넌트 관리자가 비활성화할 수 없습니다.
참고 자료: SSPR 정책 문서
[!IMPORTANT] 이는 정찰에 유용한 함의를 가집니다. 테넌트의 표준 사용자에 대해 SSPR이 비활성화된 경우(
ViewSsprNotEnabledInUserPolicy반환), 방법 선택 화면에 성공적으로 도달하는 모든 계정은 권한 있는 역할의 구성원일 가능성이 높습니다. 광범위한 테넌트 정책이 비활성화된 상태에서 SSPR을 통해 깔끔하게 열거되는 계정은 관리자 계정일 가능성이 높으며, 표준 사용자 방법이 보이지 않을 때에도 등록된 방법이 보입니다. 이를 통해 추가 표적 공격을 위해 선별될 수 있는 고가치 표적과 권한 있는 계정을 식별할 수 있습니다.
CurrentViewName 응답 필드가 결과에 대한 기준 진실로 사용됨 — HTML 본문 매칭이 아님Microsoft의 SSPR 포털(passwordreset.microsoftonline.com)은 유효한
사용자 이름을 수락한 후 연락 방법 선택 화면(MultigateAuthenticationControl)을
표시합니다. 반환된 HTML은 등록된 모든 검증 방법을
MultigateAuthenticationControl_RadioTable의 라디오 버튼으로 나열합니다.
<tr> 행이 display:none인 방법은 해당 사용자에게 등록되지 않은
것이며 건너뜁니다.
각 대상에 대해 도구는 두 번의 요청을 수행합니다. 첫째, 랜딩
페이지에 대한 GET으로 세션을 설정하고 서버가 POST를 수락하는 데 필요한
ASP.NET 폼 토큰(__VIEWSTATE, __EVENTVALIDATION, WorkflowConsistencyCheck)을
추출합니다. 이 토큰들은 세션 쿠키에 암호학적으로 바인딩되어 있으며
예측하거나 세션 간에 재사용할 수 없습니다. 둘째, 사용자가 다음을 클릭할 때
브라우저가 수행하는 비동기 UpdatePanel 포스트백을 복제하여 해당 토큰과 함께
이메일 주소를 제출하는 POST입니다.
ASP.NET 와이어 응답의 CurrentViewName 숨겨진 필드는 HTML 본문에 대한
부분 문자열 매칭이 아니라 서버가 결정한 것에 대한 권위 있는 신호로
사용됩니다.
대체 이메일과 보안 질문은 피싱에 취약하고 2차 인증 요소의 취지를 충족하지 못하므로 약함으로 표시됩니다. 약한 방법만 있거나 방법이 전혀 없는 계정은 표시됩니다.
[!NOTE] Microsoft는 SSPR에 대해 소프트웨어 OATH 토큰과 하드웨어 OATH 토큰(미리 보기)을 모두 지원합니다. 인증 앱을 통해 입력된 소프트웨어 OATH 토큰은 TOTP와 동일한
AppCodeRadio버튼을 통해 나타날 가능성이 높습니다 — 둘 다 6자리 코드 입력으로 표시되므로 — 따라서 별도의 라디오 ID 없이 이미 처리되고 있을 가능성이 높습니다. 하드웨어 OATH 토큰(물리적 키포브)은 별개의 장치 클래스이지만 역시 시간 기반 코드를 생성합니다. 이들은 동일한 버튼이나 이 프로세스의 테스트 중에 아직 관찰되지 않은 다른 버튼을 통해 렌더링될 수 있습니다.
| 플래그 | 기본값 | 설명 |
|---|
--delay SECONDS | 2.0 | 요청 간 기본 지연; 지터가 자동으로 추가됨 |
--retries N | 1 | 일시적 오류 발생 시 계정당 최대 재시도 횟수 |
--proxy URL | 프록시; SSL 검증을 자동으로 비활성화함 | |
--csv FILE | 모든 결과를 CSV로 내보내기 | |
-v / --verbose | 전체 요청/응답 헤더와 본문을 stderr로 출력 |
| 기능 | 지원 |
|---|
| 사용자 열거(계정 존재 여부) | 예 |
| SSPR 방법 열거 | 예 |
| MFA 방법 추론(결합 등록을 통한) | 근사치 — 대부분의 표준 테넌트에서 신뢰할 수 있음 |
| FIDO2 / 인증서 기반 MFA 탐지 | 아니오 |
| 게스트 / 페더레이션 계정 MFA | 아니오 |
| SSPR이 비활성화된 계정 | 아니오(계정 존재는 확인되지만 방법은 알 수 없음) |
| 관리자 계정 식별 | 부분적 — 관리자는 항상 SSPR이 활성화되므로 테넌트 SSPR이 비활성화된 경우 두드러질 수 있음 |
| 라디오 ID | 방법 | 강도 |
|---|
MultigateAuthenticationControl_AltEmailRadio | 대체 이메일 OTP | 약함 |
MultigateAuthenticationControl_SecurityQuestionsRadio | 보안 질문 | 약함 |
MultigateAuthenticationControl_AppCodeRadio | 인증 앱(TOTP) | 적절함 |
MultigateAuthenticationControl_MobileAppNotificationRadio | 인증 앱 푸시 알림 | 적절함 |
MultigateAuthenticationControl_PhoneRadio | 전화 통화 / SMS | 적절함 |
MultigateAuthenticationControl_OfficePhoneRadio | 사무실 전화 | 적절함 |
| 상태 | 의미 |
|---|
MFA OK | 계정 발견됨; SSPR에 하나 이상의 강력한 2차 인증 요소가 등록됨 |
NO MFA | 계정 발견됨; 강력한 요소 없음(약한 방법만 있거나 방법이 등록되지 않음) |
NOT FOUND | 사용자 이름이 디렉터리에 존재하지 않음 |
SSPR DISABLED | 계정은 존재하지만 관리자 정책이 SSPR을 차단함(예: SSPR_0011) — 방법 알 수 없음 |
SSPR N/A | SSPR에서 지원하지 않는 계정 유형 — 게스트, 외부 또는 페더레이션 사용자 |
CAPTCHA | 서버가 CAPTCHA를 제시함; 수동 개입 필요 |
ERROR | 예상치 못한 응답 또는 네트워크 실패 |