본문 바로가기

IT 살이/03. 관리 - 보안 관리

[연재 06] 레거시 프로그램과의 호환성 지원

Vista는 보안을 위해서 새로운 보안 모델을 내놨고 따라서 이전 Windows에서는 관리자 계정으로 로그온만 하면 잘 실행되던 프로그램이 이제는 관리자로 로그온하더라도 권한 부족으로 실행에 실패할 상황에 처하게 되었다. 따라서 Vista는 실행 권한이라는 측면에서 이전 프로그램과의 호환성을 해결할 필요가 있게 되었다. 앞 포스트에서는 개발자가 UAC의 토큰 판단에 영향을 미칠 수 있는 방법에 대해서 알아봤다. 개발자에게는 그것이 중요한 내용이라 본다. 이제 이 포스트에서는  UAC가 권한 상승을 스스로 판단하는 기능 그리고 어떻게 레거시 프로그램들과의 호환성을 지원하고 있는지에 대해서 알아보겠다. 여기서 다룰 것은 다음 3가지를 포함한다.

▶Vista의 인스톨러를 자동 인식하는 기능

▶PCA(Program Compatibility Assistant)

▶Application Compatibility DataBase

■ 인스톨러를 인식할 수 있는 Vista

대부분의 인스톨러 프로그램은 관리자 권한이 필요하다. 인스톨러들은 Program Files 또는 HKEY_LOCAL_MACHINE\SOFTWARE 또는 HKEY_LOCAL_MACHINE\SERVICES에 또는 Windows\System32에 뭔가를 쓰려고 한다. 그러나 일반 사용자들은 이곳에 접근해서 쓸 수 있는 권한이 없다. 그래서 이런 작업을 필요하는 프로그램을 그냥 아무 생각없이 실행시켰다가 실패하도록 놔 두는 것보다는 UAC는 다른 어플리케이션을 인스톨시키는 작업을 하려는 어플리케이션을 실행시키려고 하는 때를 추측해서 잡아내서 사용자에게 권한 상승을 동의하겠냐고 묻도록 만들어졌다.

근데, 인스톨러를 감지해내는 근거가 어떤 수학적인 계산 근거가 아닌 경험적인 근거를 바탕으로 하고 있다. 그 근거나 "추측(guess)"이라는 것이다( 컴퓨터 업계에서 "추측"이 근거가 되다니 !  그러나 그렇다.) 그 추측은 2가지를 통해서 이뤄진다. 하나는 인스톨러 프로그램의 실행(EXE) 파일의 이름이 "setup", "install", 또는 "update" 같은 단어를 포함하고 있으면 UAC는 동의 확인 창을 띄운다. 만약 누군가 "setup.exe"를 "apple.exe"로 변경해서 실행시킨다면 물론 권한 상승용 동의 확인 창이 뜨지 않을 것이다. 그러나 Program Files, System32 또는 레지스트리에 뭔가를 쓰려고 하면에러가 발생할 것이다. 다른 하나는, 인스톨 프로그램을 만드는 프로그램으로 가장 널리 알려진 Wise 또는 Installshield 인스톨러로 만들어진 프로그램으로 인식하게 되면(이런 상용 프로그램을 만들어진 인스톨 프로그램은 인식하기가 매우 쉽다고 한다.) UAC는 동의 확인 창을 띄우게 된다.

■ PCA(Program Compatibility Assistant)

이 기능은 인스톨 프로그램을 스스로 인식할 수 있는 기능이 "추측"을 근거로 하는 것이라면 이 방법은 그 추측 결과들을 기반으로 해서 좀더 "합리적"인 Vista의 지원이다(그런가...달봉이한테는 그런 것 같다).  Vista는 단순히 인스톨 프로그램을 실행시킬뿐만 아니라 나름대로의 진보된 추측을 하게 된다. 인스톨 프로그램이라면 그 프로그램이 어떤 것을 인스톨했는가에 대한 기록을 남겨야 한다. 그래서 나중에 제어판의 "프로그램 추가/제거"를 통해서 어떤 프로그램이 인스톨되었는가에 대한 기록을 볼 수 있게 되는 것이고 그리고 다시 그것을 어떻게 제거할 것인가를 알 수도 있게 되는 것이다. Vista는 어떤 인스톨 프로그램이 잘 실행이 되지 않았다고 추측을 하게 되면 "Program Compatibility Assistant"라 불리는 대화창을 띄운다.


[그림] Program Compatibility Assistant

이 대화창은 사용자에게 이런 표현을 하고 있는 것이다:"내가 보기에는 뭔가 의심스러운데 제대로 설치된 것 맞니? 원한다면 내가 권장하는 다른 방법으로 다시 설치해보지 않을래?" 사용자가 다시 설치하겠다고 허락을 하게 되면 어떤 일이 일어나는 것일까. Vista가 무슨 일을 하는지를 알아보려면 이전에 보았던 "호환성"탭을 보면 된다.

[그림] 호환성 탭의 내용

이 호환성을 탭을 사용하면 이전 Windows 프로그램들의 많은 일반적인 문제들을 손쉽게 빨리 해결할 수 있다. 예를 들어 어떤 프로그램은 Windows 95, XP SP2처럼 특정 OS와 관련된 정보를 하드 코딩했을 수 있다. 만약 그런 경우라면 "이 프로그램은 Windows 95에 맞게 실행시켜라"라는 선택을 함으로써 Vista에서도 실행될 수 있도록 할 수 있다. 또한 Vista의 데스크톱에게 스크린의 해상도와 관련된 내용들을 이전 프로그램에 맞도록 지정해 줄 수도 있다.

프로그램을 인스톨하다가 실패하면 PCA는 호환성 탭에 설정된 내용에 대해서 약간 똑똑한 추측을 하게 되는 것이다. 즉 PCA 대화창은 "내가 생각하기에는 이런 설정으로 인스톨을 하면 될 것 같은데, 어떻게 함 다시 해 보시것습니까~~"라고 묻는 것이다.

이 대화창에서 설정된 내용은 레지스트리에 저장되도록 설계되어있다. 그래서 해당 프로그램을 실행시킬때마다 묻지 않는다. 다음 키에 프로그램 목록을 저장한다.

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlas\Comptability Assistant\Persist

이 키 하위에 REG_DWORD타입의 엔트리를 만들고 EXE 실행 파일에 대한 풀 경로를 그 엔트리 이름으로 한다. 만약 호환성 탭에서 선택한 옵션들이 있다면 다음 키에 저장된다.

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlas\Layers

호환성 탭에는 "관리자 권한으로 이 프로그램 실행"이라는 체크 박스도 있는데 이것을 체크해 두면 다음 실행부터는 권한 상승 동의 확인창이 뜨게 된다. 호환성 탭을 통한 권한 수준 설정은 해당 프로그램 복사본에만 해당한다. 즉 그 프로그램을 다른 폴더로 복사해서 다른 설정을 할 수도 있다는 것이다. 메너페스트 파일을 프로그램에 추가하게 되면 그 프로그램이 어떤 위치에 있던 상관없이 그 권한 수준 설정이 적용되는 것과는 대조적이다.

■Application Compatibility Toolkit "Shim"

앞에서 본 PCS기능은 기본적으로 지금 설명할 Application Compatibility Toolkit의 라이트 버전이라고 볼 수 있다. Vista에는 "shim"이라는 것이 있는데 이것은 프로세스의 권한 상승을 요청하는 Vista의 마지막 요소이다.  "shim"은 Application Compatibility Toolkit라 불리는 것이 생성하게 된다. 앞에서 알아본 PCA는 Vista와 호환성의 문제를 갖는 프로그램들의 EXE 파일들에 대해서, 어떤 특정 환경에서 대화창을 띄워서 호환성 탭의 설정 내용을 수정하도록 하기 위해서 몇가지 규칙을 따른다. 현재 버전의 프로그램이 불편은 하지만 그렇다고 업그레이드하고 싶지는 않고 그래서 약간의 설정만으로도 내 필요에는 충분한 경우 PCA를 사용하는 것은 괜찮은 일이다. 그러나 호환성을 위해서 설정을 배포해야 하는 컴퓨터들이 수백, 수천대에 달하고 또한 호환성 탭에서 제공하는 옵션들보다 훨씬 많은 내용의 설정들을 적용할 필요가 있다면 어떻게 해야 하나.

이때 필요한 것이 ACT(Application Compatibility Toolkit)이다. ACT는 "온라인 상의 해결 프로그램들(online fixes)"을 호환성의 문제를 가지고 있는 프로그램들에 적용해서 Vista와 이전의 프로그램들을 모두 만족하도록 하는 일련의 프로그램들을 말한다. "온라인상의 해결 프로그램"을 공식적으로는 "shim"이라고 부른다.

shim이라는 용어는 Application Compatibility Toolkit에서만 사용되는 용어는 아니다. 여러 버전의 CLR이 설치되어 있는 경우에 어떤 프로그램이 제작된 버전을 선택하는 경우에도 이런 shim 프로그램이 작동을 하는데 이것에 대해서는 로딩되는 CLR 버전 경정하기라는 이전 포스트에서 언급했다.

ACT의 shim은 호환성이 필요한 해당 프로그램을 위한 shim을 직접 제작해서 그룹 정책으로 중앙에서 배포한다는 점에서 호환성 탭의 shim과 다르다고 볼 수 있다. 또한 호환성 탭은 몇가지의 가능한 문제점들에 대한 해결책 옵션만을 가지고 있지만 ACT는 그 보다 훨씬 많은 문제점들에 대한 해결책을 가지고 있다.

ACT는 해결책들에 대한 데이터베이스 파일을 가지고 있는데, 그 확장자가 .SDB("System DataBase")로 되어 있는 파일들이다.  예를 들면 Vista와 함께 배포되는 sysmain.sdb이 있는데 기본적으로 \Windows\AppPatch 폴더 아래에 놓이게 된다. 그러나 그 데이터베이스 파일을 볼 수 있는 방법은 없다. 이 데이터베이스 파일에는 어디서 듣도 보지도 못한 수많은 프로그램들이 들어 있다. 따라서 sysmain.sdb가 UAC에게 어떤 프로그램의 경우에 권한 상승을 요청하는지에 대해서 이야기한다는 것은 무의미할 것이라고 본다. 여기서는 ACT라는 기능의 프로그램이 있다는 것을 이해하는 것으로서 마치도록 한다.

■ 연재를 마치면서

지금까지 UAC의 권한 상승이 일어나는 경우와 그 메커니즘들을 알아보았다. 여기까지 해서 개발자로서 필요한 UAC에 대한 개념은 어느 정도 살펴보았다고 생각한다. 그러나 UAC와 관련해서 커스터마이징을 할 수 있는 여러 내용들이 있다는 것을 알게 되었다. 필요하다면 뒤에 올 포스트에서는 이런 설정들에 대한 내용을 올려 보려 한다.