• LSA , Local Security Authority     [ lsass.exe ]
  • SRM , Security Reference Monitor 
  • SAM , Security Account Manager 


SAM

windows 계정의 패스워드 해시를 저장하고 있는, *nix의 `` /etc/shadow``같은 파일이다.

SYSKEY로 암호화 되어있기 때문에 SYSKEY를 이용해서 복호화해야 password hash를 얻을 수 있다.

* 사실 단순히 password hash가 목적이라면 fgdump같은 툴을 사용해 memory에 올라가 있는 hash value를 바로 얻는 방법도 있다.


Format

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

```

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

```

%systemroot%\system32\config\SAM

%systemroot%\system32\config\SYSTEM

```

windows가 실행 중일 때는 이 파일에 접근할 수 없다.

다음 위치에 복사본이 있기는 하지만, 이 역시 system에서 열려있다며 복사 등의 작업이 불가능하다.

```

%systemroot%\system32\config\RegBack\

%systemroot%\system32\repair\

```


forecopy를 사용하면 system에서 사용중인 파일도 복사할 수 있다.

물론 pwdump의 copy기능, shadow copy 등을 사용해도 된다.