ShimCache 란?

ShimCache 파일은 AppCompatCache라고도 불리기도 한다.

Windows 운영체제에서 응용 프로그램 간의 운영체제 버전 호환성 이슈를 관리 하고 트러블슈팅과 문제 해결을 위해서 만든 파일이다. 한번이라도 호환성 문제가 발생한 응용 프로그램의 정보는 ShimCache에 저장된다.

ShimCache 파일은 프리패치(Prefetch) 파일과 비슷한 응용프로그램의 실행 정보를 저장한다. 하지만 프리패치(Prefetch) 파일은 최대 128개의 파일만을 다룰수 있기 때문에 오래된 데이터는 사라졌을 가능성이 크다. 하지만 ShimCache 파일은 데이터의 개수에 제한이 없기 때문에 프리패치에 없는 데이터가 ShimCache에 있을 가능성이 있다.

호환성에 문제가 있다는 대화상자에 따라서 데이터 저장 경로가 달라진다. 또한 윈도우가 호환성 문제가 발생했음을 식별하는 방법은 응용프로그램 호환성 데이터베이스(SDB)가 식별해 준다.

응용프로그램 호환성 데이터베이스(SDB)란?

호환성 처리 모듈은 DLL로 구성되어 있고, 호환성 데이터베이스는 Appfix Package라는 형식의 **.sdb** 파일로 존재 하는데 아래의 경로에서 확인해 볼 수 있다.

Path : C:\\Windows\\AppPatch\\

Untitled

위의 SDB 파일은 sdb2xml 이라는 도구를 통해서 xml 파일로 내용을 확인해 보면 다양한 응용 프로그램 목록을 확인해 볼 수 있다.

SDB파일은 운영체제의 버전이 업그레이드 될 경우 신규 생성 또는 삭제되는 DLL의 모음인 API로 인해 프로그램 간 호환성 문제가 발생한다. Shim은 API 후킹의 형태로 응용 프로그램과 Windows 운영체제 사이에 위치한다.

Untitled

응용 프로그램이 실행될때 필요한 DLL을 Window 측에 요청을 하면 Windows 에서 DLL 파일을 직접 호출하는 것이 아닌 Shim을 이용해서 요청과 응답을 한다.

응용프로그램을 실행하면 kernel32.dll 의 CreateProcessInternalW 함수가 실행되고, 해당 함수의 내부에 존재하는 BasepCheckBadApp 익스포트 함수를 호출한다. BasepCheckBadApp 함수가 호환성의 문제를 해결하게 된다.

포렌식 관점에서의 아티팩트

응용 프로그램 실행 흔적으로 가장 많이 분석하는 프리패치(Prefetch) 파일의 한계점은 앞에서 이야기 했었다. 프리패치 개수가 최대 128개로 한정되어 있기 때문에 오래된 흔적을 찾기 어렵기 때문에 개수에 제한이 없는 ShimCache 데이터를 분석할 필요가 있다.

또한 ShimCache 데이터에는 응용프로그램 경로, 파일 크기, 파일의 마지막 수정 시간, 마지막 실행 시간 등이 저장되기 때문에 Prefetch 만큼 응용 프로그램의 실행 흔적을 확인하고 분석할 수 있다.

악성코드들은 실행 후 흔적을 지우기 위해서 아티팩트를 삭제 하는데, 대부분 Prefetch를 삭제하고 ShimCache 데이터는 삭제 하지 않는다.

그렇기 때문에 침해 사고 분석에 유용한 정보로 활용될 수 있다.