Digital Forensics/Web Browser

Login Data 패스워드 복호화

geunyeong 2020. 4. 7. 18:01

Chrome은 사용자의 편의를 위해 로그인할 수 있는 사이트마다 ID와 패스워드를 기억하는 기능을 제공한다. 다른 브라우저도 이 기능을 지원하긴 할텐데 개인적으로 오페라만 사용하다보니 확신은 못하겠다.

 

일반적으론 패스워드를 해시화 해 저장한다고 알고있지만, 위 기능처럼 패스워드를 평문으로 기억해야 할 필요가 있는 경우라면 해시화 해 저장할 수 없다. 해시값에서 원문으로 되돌릴 수 없기 때문이다.

 

Windows 용 Chrome에서는 DPAPI인 CryptProtectData를 사용해 패스워드를 암호화 한 다음 SQLite로 저장한다. DB 파일의 이름은 "Login Data"이며, History 파일과 같은 폴더에 위치해있다.

* %USERPROFILE%\AppData\Local\Google\Chrome\User Data\Default\Login Data

 

Windows의 DPAPI는 Windows 사용자 계정의 패스워드를 특수처리하여 데이터를 암호화하는 암호키를 만드는데 사용한다. 그리고 이 때 사용한 특수 처리 데이터를 MasterKey라고 하며 다음 위치에 저장한다.

* %APPDATA%\Microsoft\Protect\<SID>

 

SID는 Windows 계열 운영체제에서 사용자를 구분하기 위한 ID이다. Protect 폴더 밑에 SID를 이름으로 하는 폴더를 만들어 사용자별로 암호키를 관리한다. CryptProtectData를 호출할 때 Flags 값으로 CRYPTPROTECT_LOCAL_MACHINE를 넘겨주면 사용자가 아닌 컴퓨터 단위로 암호키 저장도 가능하다.

 

Preferred를 제외한 나머지 두 파일이 암호키를 만드는데 사용되는 MasterKey 파일이다. MSDN에 따르면 보안상 3개월 마다 마스터 키를 갱신한다고 한다. 실제로 위 그림 속 마스터 키 파일을 보면 3개월 차이로 만들어진 걸 볼 수 있다. 2019년 11월 6일에 만들어진 마스터 키는 만료되어 사용되지 않는다는 뜻이다.

 

로컬 시스템의 Login Data를 복호화 하는 글은 많다. OtterCTF의 메모리 덤프로 다른 시스템의 Login Data를 복호화해보자.

 

LogonUI의 LastLoggedOnUser엔 시스템에 마지막으로 로그인한 사용자 계정의 이름이 저장되어 있다. 현재 시스템에 로그인 중인 Windows 계정 이름은 "Rick"이다.

 

ProfileList 키 하위의 SID를 키 이름으로 사용하는 하위키를 들여다보면 해당 SID 사용자의 프로필 경로를 알 수 있다. 다행히 일반 사용자 SID는 하나 뿐이었는데, 이 일반 사용자의 프로필 경로는 "C:\Users\Rick"이다.

 

위 SID 프로필 경로에 있는 ntuser.dat 하이브 파일의 Volatile Environment 키를 보니 USERNAME 데이터에 Rick이 들어있다. 위에서 구한 SID는 Rick의 SID로 보인다.

 

lsadump 플러그인을 사용하면 Windows 기본 로그인 계정의 암호를 해독 할 수 있다. 기본 로그인 계정인 Rick의 패스워드는 "MortyIsReallyAnOtter"이다.

 

filescan 결과를 DPAPI 마스터 키가 저장되는 경로로 필터링하면 Preferred 하나만 나온다. 의도적으로 삭제한 것인지 알 수는 없지만 다른 방법이 있다.

 

mftparser 플러그인을 사용하면 크기가 작은 일부 파일은 hexdump 형태로 보여준다. 이 파일이 chrome에서 사용하는 DPAPI 마스터 키인지 확신할 수는 없지만 한번 시도해보자.

 

mimikatz를 실행하고 DPAPI 마스터 키 파일과 윈도우 계정의 SID와 패스워드를 입력한다.

 

dumpfiles로 덤프한 Chrome의 Login Data 파일을 복호화하면 Login Data의 logins 테이블에 저장된 계정들의 패스워드가 나타난다.

 

 

 

이상으로 다른 시스템의 Chrome Login Data 복호화 방법을 알아봤다. Login Data를 복호화 하기 위해선 DPAPI 마스터 키를 담고있는 파일이 필요하며, 이 파일을 해독하기 위해 Windows 계정의 SID와 패스워드가 필요하다는 걸 알 수 있다. Live Response를 수행해 메모리 덤프나 디스크 이미지를 확보했다면 큰 어려움 없이 사용자의 웹 ID와 패스워드를 알아낼 수 있다.

사용된 Chrome은 68.0.3440.84 버전이며, 환경은 Windows 7이다. Windows가 올라가며 DPAPI 내부 암호화 방법이 달라진 탓인지 최근 Chrome에서는 mimikatz를 사용해 복호화가 안되고 있다.

 

 

 

[수정사항]

2020-05-04 마스터 키 파일이 2개 존재하던 이유 수정