Timeroasting
Last updated
Was this helpful?
Last updated
Was this helpful?
흔히 도메인 머신 계정의 패스워드 정책은 "30일마다 240바이트 랜덤 패스워드로 변경" 으로 알려져 있습니다. 이는 Windows 2000 이후의 모든 환경에서 동일하게 적용하는 보안 정책으로, 이러한 정책 덕분에 모의침투 시 컴퓨터 계정의 해시 패스워드는 그 가치를 인정받지 못했습니다. 하지만 Windows 2000 이전의 경우, 컴퓨터 계정의 이름에 자동으로 붙는 $
기호를 제거한 후 맨 앞부터 14글자까지를 소문자로 변경한 것을 기본 패스워드로 적용하는 규칙이 있었습니다. 예를 들어 THISISATESTMACHINE$
머신 계정이 Windows 2000 이전에 생성된 계정이라면, 기본 패스워드는 thisisatestmac
가 됩니다. 이러한 방식을 NT4 기본 컴퓨터 암호라 칭합니다.
알려진 지식과 상반되는 취약한 머신 계정의 기본 패스워드 정책 배경을 봤을 때, Windows 2000 이상 버전에서는 문제가 없지 않나 싶을 수는 있지만, 이것은 과거에만 국한되는 문제는 아닙니다. 다음 두가지 상황의 경우 최신 Active Directory 환경에서도 NT4 기본 컴퓨터 암호가 사용됩니다.
도메인 머신 계정을 Assign this computer account as a pre-Windows 2000 computer
속성을 체크하여 생성 시
생성된 도메인 머신 계정에 Reset Account
을 적용하여 리셋 시
해당 설정을 머신 계정에 적용할 시에는 도메인 조인 전, DC에서 컴퓨터를 미리 생성할 때만 유효합니다. 생성 시 Assign this computer account as a pre-Windows 2000 computer
속성을 체크하게 되면, 이 머신 계정은 Windows 2000 이전의 패스워드 정책을 따라 NT4 기본 컴퓨터 암호를 사용하게 됩니다.
자격 증명이 일치하지 않을 시 서버는 STATUS_LOGON_FAILURE
로 응답하는 반면, NT4를 통해 올바른 패스워드를 입력 시 STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT
메시지로 응답합니다. 실제로 SMB 원격 로그인에 실패하여 도메인 유저나 공유 폴더 목록을 열거하는 것은 불가능하지만, 자격 증명을 통해 티켓 발급은 가능합니다. 아래 사진은 NT4 패스워드를 사용하는 머신 계정의 TGT를 발급받아 커버로스팅을 진행한 과정입니다.
두번째 방법으로는 일반적인 과정으로 머신을 생성하거나 도메인에 이미 조인된 머신 계정에 대해 초기화를 진행하는 경우입니다. 위 사진에서 보이는 SQL02 머신 계정은 DC에서 생성한 계정이 아닌, 컴퓨터 계정을 도메인에 조인하여 등록한 경우로 실제 물리적인 머신입니다.
이 경우 240 바이트의 랜덤한 패스워드를 갖기 때문에 로그인에 실패합니다. 하지만 다음과 같이 머신 계정 리셋 적용 시 Windows 2000 이전의 NT4 패스워드로 적용되어 인증에 성공한 것을 확인할 수 있습니다.
도메인 환경에서 Kerberos 인증을 위해서는 도메인 컨트롤러와 요청하는 호스트 간의 시간 차이가 5분 이상 발생하면, 인증 과정에서 DC가 기대하는 범위 내의 타임스탬프 차이를 벗어나게 되어 요청은 거절됩니다. 정상적인 호스트라 하더라도 DC와의 시간 차이가 발생했을 경우를 대비하여 Network Time Protocol(NTP)를 통해 시간을 동기화 시키게 됩니다.
기존의 NTP 프로토콜 인증 과정에서는 누구나 인증 정보 없이 시간 동기화 요청을 보내고 응답 받을 수 있는 구조로 되어있었기 때문에, 공격자는 MitM 공격으로 시간을 위변조하여 클라이언트의 시간을 변경할 수 있었습니다. 이러한 공격을 방어하기 위해 Microsoft에서는 Microsoft's Secure NTP(MS-SNTP)를 도입하였습니다.
표준 NTP 헤더는 총 48바이트로 위와 같은 구조를 갖고 있습니다. MS-SNTP는 여기서 MAC을 생성할 때 사용한 사용자의 패스워드를 식별하기 위해 Key Identifier와 MD5(MD4((사용자 패스워드)(표준 NTP 헤더)))
정보인 MAC을 추가하여 최종적으로 68 바이트 크기로 구성됩니다. MAC은 사용자의 패스워드를 MD4 해시화 한 값과 Salt 값을 추가한 결과인데, Salt 값은 앞 48바이트(표준 NTP 헤더)를 그대로 사용하기 때문에 오프라인 브루트포스를 통한 크래킹이 가능합니다.
Tom Tervoort의 백서에서는 Timeroasting 계정을 식별하고, 해당 계정을 소문자로 변환하여 앞 14글자로 스프레이를 진행하는 과정에 대해 상세히 다루며, PoC를 깃허브로 공개하였습니다.