Post

Windows Authentication ( SAM )

  • LSA , Local Secu rity Authority [ lsass.exe ]
  • SRM , Security Reference Monitor
  • SAM , Security A ccount Manager

SAM

windows 계정의 패스워드 해시를 저장하고 있는, *nix의 /etc/shadow같은 파일이다. SYSKEY로 암호화 되어있기 때문에 SYSKEY를 이용해서 복호화해야 password hash를 얻을 수 있다. * 사실 단순히 password hash가 목적이라면 fgdump같은 툴을 사용해 memory에 올라가 있는 hash value를 바로 얻는 방법도 있다.

Format

SAM 암호화를 풀면, windows 계정 패스워드가 다음과 같은 형태로 저장되어 있다.

1
2
3
4
5
6
7
8
username:SID:LM hash:NTLM hash:::

  

e.g.
Administrator:500:611D6F6E763B902934544489FCC9192B:B71ED1E7F2B60ED5A2EDD28379D45C91:::

LM hash와 NTML hash는 같은 password를 각각 다른 hash function으로 hashing한 결과이기 때문에 하나만 크랙해도 password를 얻어낼 수 있다. LM hash는 rainbow table matching 확률이 높기 때문에 windows 7 이상은 NTLM hash만 사용한다. LM hash를 사용하지 않는 경우 LM hash 자리에 다음과 같이 들어간다.

  • NO PASSWORD\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
  • AAD3B435B51404EEAAD3B435B51404EE
  • 000.... (padding zero)

SYSKEY

SAM의 암호화에 사용된다. key size는 128bit( 16byte )이고, SYSTEM 파일에서 얻을 수 있다. 웬만한 버전에서는 SYSKEY가 기본으로 활성화 되어 있는데, 일단 SYSKEY가 활성화 되고 나면 비활성화 될 수 없다. 그러나 SYSTEM에서 SYSKEY를 얻어내는 과정이 그리 복잡하지 않아 큰 문제는 없다.

결과적으로 SAM에서 password hash를 얻어내기 위해서는 SAM과 SYSTEM file 둘 다 필요하다. pwdump7을 사용하면 자동으로 SYSKEY를 얻어내 SAM을 복호화해준다.

Location

1
2
3
4
%systemroot%\system32\config\SAM
%systemroot%\system32\config\SYSTEM

windows가 실행 중일 때는 이 파일에 접근할 수 없다. 다음 위치에 복사본이 있기는 하지만, 이 역시 system에서 열려있다며 복사 등의 작업이 불가능하다.

1
2
3
4
%systemroot%\system32\config\RegBack\
%systemroot%\system32\repair\

forecopy 를 사용하면 system에서 사용중인 파일도 복사할 수 있다. 물론 pwdump의 copy기능, shadow copy 등을 사용해도 된다.

This post is licensed under CC BY 4.0 by the author.