
SecureWorks의 최근 Azure Active Directory 비밀번호 무차별 대입 취약점에 대한 POC
SecureWorks가 최근 공개한 Azure Active Directory 비밀번호 무차별 대입 취약점의 PoC
이 코드는 Secureworks가 발표한 최근 공개된 Azure Active Directory 비밀번호 무차별 대입 취약점의 개념 증명(proof-of-concept)입니다. (공식 발표보다 약 하루 먼저 게시되었지만 내용은 거의 동일한 Ars Technica 기사도 참조하세요.)
이론적으로 이 방법을 사용하면 하나 이상의 AAD 계정을 대상으로 계정 잠금이나 로그 데이터 생성 없이 무차별 대입 또는 비밀번호 스프레이 공격을 수행할 수 있어 공격을 눈에 띄지 않게 만들 수 있습니다.
기본 사용법은 간단합니다:
.\aad-sso-enum-brute-spray.ps1 USERNAME PASSWORD
이렇게 코드를 호출하면 지정된 사용자 이름과 비밀번호에 대한 결과를 얻을 수 있습니다.
foreach를 활용하면 이를 쉽게 비밀번호 스프레이에 이용할 수 있습니다:
foreach($line in Get-Content .\all-m365-users.txt) {.\aad-sso-enum-brute-spray.ps1 $line Passw0rd! |Out-File -FilePath .\spray-results.txt -Append }
참고로 이 방법을 사용할 경우 Linux에서 작업하려면 결과 파일을 UTF-16에서 UTF-8로 변환해야 합니다:
iconv -f UTF16 -t UTF-8 spray-results.txt >new-spray-results.txt
열거에만 관심이 있다면 위의 비밀번호 스프레이와 동일하게 실행하면 됩니다. 반환 값이 "bad password"이거나 "no user"가 아닌 다른 값이면 유효한 사용자 이름을 찾은 것입니다.
사용자 이름에 대해 "True"가 반환되면 제공된 비밀번호가 유효하다는 의미입니다.
"locked"가 반환되면 계정이 잠겨 있거나, Smart Lockout이 일시적으로 계정과의 상호 작용을 차단하고 있음을 의미할 수 있습니다.
무차별 대입에 코드를 활용하려면 사용자 이름 필드 대신 비밀번호 필드를 반복하면 됩니다:
foreach($line in Get-Content .\passwords.txt) {.\aad-sso-enum-brute-spray.ps1 [email protected] $line |Out-File -FilePath .\brute-results.txt -Append }
유효한 사용자 이름/비밀번호 쌍을 하나 이상 발견하면 이 코드를 수정하여 반환되는 DesktopSSOToken을 얻을 수 있습니다. 그런 다음 DesktopSSOToken은 이 방법을 사용하여 OAuth2 액세스 토큰으로 교환할 수 있습니다.
그런 다음 OAuth2 액세스 토큰은 다양한 Azure, M365 및 O365 API 엔드포인트와 함께 사용할 수 있습니다.
하지만 이 시점에서 MFA에 걸릴 수 있습니다. 이 경우 Outlook Web Access나 ActiveSync 같은 비-MFA 액세스를 활용하는 것이 가장 좋습니다. Dafthack의 MFASweep이 여기서 유용합니다.
Microsoft의 Smart Lockout 기능은 동일한 IP 주소에서 API 엔드포인트를 너무 빨리 호출하면 계정이 잠겼다고 잘못 판단하기 시작합니다. 이 문제를 피하려면 ustayready의 fireprox를 사용하는 것을 강력히 권장합니다. $url 변수를 다음과 같이 변경하면 됩니다:
$url="https://xxxxxxx.execute-api.us-east-1.amazonaws.com/fireprox/"+$requestid
하지만 특정 계정의 비밀번호를 무차별 대입하려는 경우에는 Smart Lockout을 우회할 수 없습니다.
이 코드의 거의 대부분은 Dr. Nestori Syynimaa의 훌륭한 AADInternals 프로젝트에서 차용했습니다.