0. AD RMS 개요


AD RMS는 Active Directory Rights Management Services의 약자로,

Windows 2008 이상의 OS에 기본 포함되어 "역할(Role)"로 설치/제거 가능한 서비스이다.


이 놈이 뭐냐면,

음...

좀 일반적인 개념으로 얘기하자면, 한마디로 DRM 서비스라고 볼 수 있다.

조금 늘여서 설명하자면 문서에 대한 저작권을 보호하기 위해 파일 암호화/보호 장치를 걸어주는 서비스.

좀 더 길게 설명하자면, 권한이 없는 사용자들이 문서를 열 수 없도록 하는 기본 보호 기능부터 시작해서 Active Directory 그룹 정책에 따라 아예 읽지 못하게 하거나 혹은 읽을 수는 있더라도 변경하지 못하도록 하는 등 문서에 대한 세세한 권한 제어가 가능하다.


그런데 이 AD RMS는 원래 Microsoft Office 제품군의 문서를 보호하기 위한 용도였다.

그것도 SharePoint Team/Portal Service를 통해 공유되는 Office 문서를 보호하기 위한 목적이 가장 컸다.(사실 그 외의 용도로는 쓸 일이 없었다) 그렇다 보니 국내 IT 환경에서는 실제로 쓸 일이 별로 없었다. SharePoint도 잘 안 쓸 뿐만 아니라 Office 문서를 암호화해서 보호할 정도로 보안의식이 투철한 기업들도 그렇게 많지 않으니까.




1. AD RMS SDK 2.1 + IPViewer


그런데, 최근 이 AD RMS를 이용해서 Office 문서 이외의 기타 다른 모든 형식의 문서들도 암호화하여 보호할 수 있는 SDK가 발표되었는데 그와 함께 윈도 탐색기와 통합하여 Protect/Unprotect를 간편하게 하게 해주는 도구가 공개되었다.


바로 AD RMS SDK 2.1 RC 버전에 포함되어 있는 File API와 Microsoft Information Protection Viewer(IPViewer)가 그것이다.


>> 참조: http://blogs.msdn.com/b/rms/archive/2013/03/06/announcing-ad-rms-sdk-2-1.aspx




재밌는 것은, 이 도구를 이용해서 .TXT 문서를 암호화하면 .PTXT 확장자로 바뀌어 기존 메모장에서는 열 수 없고 IPViewer로만 볼 수 있게 되는 식으로 암호화된 문서의 확장자는 기존 확장자 앞에 "P"가 붙거나 또는 ".pfile"이 뒤에 추가로 더 붙어 보호된 문서라는 것을 알 수 있게 되는데, 특이하게도 .PDF 문서를 암호화하면 그냥 .PDF 확장자 그대로 유지되어 외관으로 봐서는 보호가 됐는지 안됐는지 알 수 없다. 그런데 보호된 PDF 문서를 일반 PDF 뷰어에서 열어보면 아래 그림처럼 볼 수 없다는 경고가 표시된다.



이처럼 보호된 PDF는 별도 공개 PDF 뷰어로 보호를 해제하지 않은 상태에서 바로 볼 수 있는데 그 공개 소프트웨어는 바로 Foxit Reader이다.


>> 참조: Foxit Reader with the AD RMS 2.0




거기에다 WindowRT 및 iOS, Android에서도 사용할 수 있는 SDK 버전까지 공개되었다.


>> 참조: http://blogs.technet.com/b/rms/archive/2013/03/08/cross-post.aspx


물론 아직 정식 공개는 아니고, 빠르면 이달 말이나 다음 달 초(2003.04)에 정식 공개할 예정이라고 한다. 현재는 Microsoft Connect에 가입하고 난 다음, 아래 사이트에서 현재 마지막 빌드 버전을 받아서 돌려볼 수 있다.


>> 참조: https://connect.microsoft.com/site1170/Downloads




2. IPViewer 사용 데모


이 IPViewer를 이용해서 일반 텍스트 문서를 암호화하여 보호하는 데모를 간단히 진행해봤다.



1. 일반 텍스트 파일을 마우스 오른쪽 버튼으로 눌러보면 "Protect" 메뉴가 보인다. 이걸 클릭.




2. 그러면 Microsoft Information Protection 창이 나타난다. 사실 처음엔 AD RMS 로그인 창이 먼저 나타난다. 로그인을 하고 나면 위와 같이 RMS 서버에 등록되어 있는 권한 정책 템플릿들이 목록으로 나타나는데 적절한 템플릿을 선택하면 된다.




3. View only 옵션으로 텍스트 파일을 보호했다. 파일 확장자가 .ptxt로 바뀌어 저장되었다.




4. 실제 파일을 확인해보면 확장자가 바뀌어 있음을 알 수 있다. 파일의 크기도 꽤 커졌다.




5. 파일을 메모장으로 열어보니 그림과 같이 뭔가 복잡한 바이너리와 암호화된 XML의 조합으로 되어 있다.




6. 보호된 파일을 다시 마우스 오른쪽 버튼으로 클릭해보면 이번에는 "Unprotect" 메뉴가 보인다. 이미 보호된 파일인 경우 자동으로 나타나는 메뉴가 되겠다. 보호를 해제해 보도록 하겠다.




7. 보호가 해제된 텍스트 파일. 열어보면 일반 문자열이 저장된 원본 상태 그대로 나타난다.





3. AD RMS를 구내(On-Premises) 서비스로 설치하기


그런데, 기본적으로 이 RMS Client들은 내부적으로 Microsoft CA에서 발급한 공식 인증서 기반의 Windows Azure(Microsoft에서 제공하는 클라우드 서비스) AD RMS를 이용하도록 되어 있어 구내(On-Premises) 서버를 통해 자체 인증서를 이용하여 자체 서비스만 하려는 회사들이 사용하기엔 무리가 있다. 다만, Windows 버전에 한해서는 자체 AD RMS 서버를 이용해서 서비스할 수 있도록 구성하는 방법이 아래와 같이 별도로 정리되어 있으니 참고하면 되겠다.


>> 참조: http://msdn.microsoft.com/en-us//library/windows/desktop/hh971303(v=vs.85).aspx


위에 진행한 데모가 바로 구내 서비스용으로 설치/설정하고 테스트한 것이다.


위 참조 페이지에도 있지만 AD RMS 서버를 구내 서비스용으로 구성하는 방법은 여기서 확인할 수 있고,

AD RMS 클라이언트를 구내 서비스용으로 구성하는 방법은 여기서 확인할 수 있다.


해당 설정 부분만 그림으로 확인해보면 아래와 같다.



1. 클라이언트 PC에서 구내 서비스용 RMS 서버를 설정하는 레지스트리 설정 부분:

HKLM\SOFTWARE\Microsoft\MSIPC\ServiceLocation\EnterpriseCertification




2. 클라이언트 PC에서 구내 서비스용 RMS 서버를 설정하는 레지스트리 설정 부분:

HKLM\SOFTWARE\Microsoft\MSIPC\ServiceLocation\EnterprisePublishing




3. 클라이언트 PC에서 ISV Hierarchy로 설정하는 레지스트리 설정 부분:

HKLM\SOFTWARE\Microsoft\MSIPC - "Hierarchy" 값 설정

(ISV Hierarchy는 Microsoft CA 공개 인증서 체인을 사용하지 않고 테스트용 사설 인증서 체인을 사용하는 모드로, AD RMS SDK를 이용해서 새 응용 프로그램을 개발할 때 테스트 용도로 사용할 수 있다. 테스트가 끝나면 Microsoft로부터 공식 인증서를 받아 해당 응용 프로그램 Manifest를 발급해야 한다. 그렇지 않으면 RMS 관련 기능이 정상 동작하지 않는다.)




4. RMS 서버에서 ISV Hierarchy로 설정하는 레지스트리 설정 부분:

HKLM\SOFTWARE\Microsoft\DRMS - "Hierarchy" 값 설정

(새 RMS 응용 프로그램 개발/테스트를 위해 ISV Hierarchy 모드를 사용하려면 AD RMS 서버 역시 ISV Hierarchy 모드로 설치되어 있어야 한다.)



ISV Hierarchy 모드로 변경할 때 빼먹기 쉬운 중요한 것 한 가지!!

바로, AD RMS SDK 설치 폴더에 포함되어 있는 bin\x86(또는 bin\x64) 폴더에서 ipcsecproc_isv.dll 파일을 AD RMS Client 설치 폴더(보통 C:\Program Files (x86)\Active Directory Rights Management Services Client 2.1)로 복사해주어야 한다는 거. (ipcsecproc_ssp_isv.dll 파일은 굳이 필요없을 것 같은데... 뭐 암튼.) 이게 없으면 IPViewer 실행할 때 "0x80007002 파일을 찾을 수 없습니다"라는 오류가 발생한다.

* Production Hierarchy 모드로 변경할 때는 역순으로 제거해야 한다는 사실도 잊지 말 것.



위와 같이 서버 및 클라이언트 레지스트리에 구내 서버의 URL 및 기타 옵션들을 설정하고 나면 자체 구내 서비스만으로도 이용할 수 있게 된다.

(설치 및 설정을 진행하다보면 각종 예기치 않은 에러가 발생할 수 있는데, 현재로선 워낙에 최신 기술이라 아직 인터넷을 통해 참조할 만한 참고자료들이 없다. 될 때까지 해보는 수밖에. -_-a 아! 위 Connect 사이트에 가면 Hyper-V 가상 디스크 이미지를 제공하니 그 이미지를 받아 돌리면서 하나하나 비교해보면 문제를 스스로 해결할 수 있다. 비록 가상 디스크에는 최신 버전이 아니라 2012년 버전이 들어있어서 조금 다르긴 하지만 그래도 문제 해결에 큰 도움이 될 수 있다.)


문제가 한 가지 있다.


이처럼 ISV Hierarchy 모드로 구내 서비스용으로 설정하여 AD RMS를 운용하면 Microsoft Office 제품군의 문서와는 호환되지 않는다. 즉, 구내 AD RMS 서버를 통해 DRM 걸린 파일을 Office 프로그램에서 열어볼 수 없다는 얘기다. Office IRM은 Production Hierarchy로 설정되어 있는 경우에만 호환되도록 구성되어 있다.(Office 2007 버전의 경우에 한해 Pre-Production 모드로 변경할 수 있는 방법도 있긴 하다.) 따라서 새 RMS 응용 프로그램을 새로 개발한 경우 Office 문서 보호와 호환이 되게 하려면 AD RMS 관련 설정을 Production Hierarchy로 설정하여 재설치하고 해당 RMS 응용 프로그램은 Microsoft로부터 공식 인증서를 받아 Manifest를 발급해야 한다.


단, 새 RMS 응용 프로그램을 개발하지 않고 SDK에 포함된 IPViewer만 이용해서 Protect/Unprotect할 경우에는 공식 인증서를 받을 필요 없이 Production Hierarchy 모드로 설정만 바꾸면 구내 AD RMS 사용이 가능하다. (특이한 점은, IPViewer는 Manifest 없이 어떻게 Pre-production과 Production Hierarchy 모드 모두에서 사용이 가능한 지에 대해서는 잘 모르겠다. 아마도 함께 제공된 IPViewerHelper.dll 파일이 뭔가 관련이 있지 않을까 하는 생각이 든다...)





4. AD RMS 서버 역할 설치/설정


앞의 참조 링크 페이지에 빠진 것이 AD RMS를 설치하는 방법에 대한 것인데 그것은 아래 페이지를 참조하면 된다.


>> 참조: http://technet.microsoft.com/ko-kr/library/cc770957.aspx


AD RMS 역할을 설치할 때, 애초에 IIS 및 AD RMS가 설치되어 있지 않은 깨끗한 상태였다면 별 무리없이 그냥 설치할 수 있지만

만일 AD RMS를 ISV(Pre-Production) Hierarchy 모드로 설치하려고 할 경우 혹은 IIS가 이미 설치되어 있는 환경이라면 다음을 주의해야 한다.


  1. IIS에 HTTPS 바인딩(:443)이 이미 되어 있다면, AD RMS 설치 중 HTTPS 인증서 선택 부분을 건너뛰든가, 아니면 IIS에서 HTTPS 바인딩을 제거한 다음 설치를 진행해야 한다.
  2. 기존에 이미 AD RMS가 설치되었었던 환경에서 AD RMS 제거 후 재설치하는 상황이라면, AD RMS 설치 중 마지막 SCP(서비스 연결 지점) 등록 부분은 건너뛰어야 한다. 그렇지 않으면 오류가 발생한다.
  3. ISV 계층 모드(Pre-Production)로 AD RMS를 설치하려면, AD RMS 설치 이전에 위 AD RMS 서버 구성 페이지 참조 링크에 있는 것과 같이 레지스트리 설정을 먼저 한 다음 설치해야 한다. 그렇지 않으면 ISV 계층 모드가 적용되지 않고 Production 모드가 되어 개발된 RMS 응용 프로그램을 테스트할 수 없게 된다.(Microsoft에서 인증서를 발급받아 Manifest를 생성하면 되긴 한다.)

- ISV: Independent Software Vendor (독립 소프트웨어 회사); OEM과 비교되는 개념, 여기서는 Windows Azure AD RMS 서비스를 이용하지 않는다는 의미로 사용되는 개념.



설치 후 AD RMS에서 권한 정책 템플릿을 설정하는 부분의 화면을 하나 더 캡쳐해봤다.



그림에 나타나 있는 두 가지 권한 정책 템플릿이 위에서 진행한 데모 화면에 적용되었다.





5. 보너스: AD RMS SDK - File API C# 소스코드 얻기


아쉽게도 이 AD RMS SDK - File API는 현재 C++ 샘플 코드만 제공하고 있다. 멀티 플랫폼을 지원하기 위해 만들어진 SDK 3.0 Beta 버전에서는 iOS, Android, WindowsRT 버전의 라이브러리 및 샘플 코드까지 제공하는데 정작 Windows C#에서 사용할 수 있는 라이브러리나 샘플 코드는 없다!


아, 물론 이전 버전인 AD RMS SDK 2.0 버전은 Interop Library라고 해서 C# 샘플 코드를 제공한다.


>> 참조: http://code.msdn.microsoft.com/windowsdesktop/AD-RMS-SDK-20-Interop-eb3fbce7


그러나 2.0버전에서는 File API 관련 부분에 대한 내용은 없으므로 무효.


그렇다면 C#으로 해당 관련 응용 프로그램(예를 들어 Protect/Unprotect 기능이 들어있는 Notepad?)을 만들려면 SDK 도움말 및 C++ 소스코드를 참고해가면서 열심히 맨땅에 헤딩하면서 만들어야 할까? 정답은 "아니오"다. 이미 만들어진 프로그램이 있다. IPViewer. 위에서 살펴본 바로 이 IPViewer가 .NET C# 4.0으로 만들어진 프로그램이다. Reflector를 이용해서 디컴파일하면 원하는 소스코드를 얻을 수 있다.



문제의 IPViewer. 이 프로그램을 디컴파일한다.





Reflector를 이용해서 소스코드를 내보내기하면 끝.





짜짠! 그림에서 보는 것과 같이 C# 소스 코드 확보!

소스 코드의 양이 상당히 많아 분석하는데에 시간이 꽤 걸리겠지만,

어쨌든 이제 원하는 프로그램은 뭐든 만들 수 있는 준비가 되었다. ^^!





6. 결론.


1) AD RMS SDK 2.1 / File API를 이용해서 Microsoft Office 문서를 포함한 모든 형식의 파일을 보호할 수 있음.

  - Office 문서 --> 내부 포맷 암호화(확장자 변경 없음)

  - .pdf --> .pdf (내부 포맷 암호화)

  - Native Protection 지원 문서 형식(txt, csv, xml, rtf, jpg, jpeg, png, tiff, bmp, gif, jpe, jfif, jif, zip, cab, rar, vsd, mpp, dwg, psd, mht) --> .pXXX로 기존 확장자 앞에 “p”가 하나 더 붙음

  - 기타 모든 파일들 --> .pfile 확장자 추가

  - 레지스트리 설정으로 확장자 부여 규칙 및 제외 파일 형식 설정 가능

  - (기타 상세한 내용은 SDK 2.1에 포함된 도움말 파일 참조: FILE API SDK.chm)


2) AD RMS SDK에 포함되어 있는 AD RMS 클라이언트 및 Microsoft Information Protection Viewer(이하 IPViewer)를 설치하면 윈도 탐색기 통합 메뉴를 통해 쉽게 DRM 파일 보호 / 보호 해제를 할 수 있음.

  - 마우스 오른쪽 버튼 클릭 --> Protect / Unprotect 메뉴 표시


3) 도메인에 소속된 컴퓨터에 대해서는 구내에 설치된 AD RMS의 정책을 적용하여 DRM 서비스를 곧바로 할 수 있음.


4) 기본적으로 (도메인에 참여하고 있지 않은) AD RMS 클라이언트는 Microsoft DRM online 서비스를 사용하도록 되어 있음. 따라서 구내에 설치된 AD RMS 서비스의 정책을 적용하려면 별도 클라이언트 설정 과정이 필요함.


5) AD RMS SDK 3.0 Beta 버전을 통해 iOS, Android, Windows RT(Metro) 클라이언트 버전을 지원. 그러나 이들 클라이언트는 Microsoft DRM online(Windows Azure AD RMS) 서비스만 사용하도록 되어 있고 Windows PC처럼 설정을 바꾸어 구내 AD RMS 정책을 적용하도록 바꿀 수 없음.


6) Microsoft의 AD RMS 인증서 체인 정책에 따라 별도 개발된 응용 프로그램은 SDK에 포함된 테스트 인증서를 이용하여 Pre-Production Hierarchy로 설정된 상태로만 테스트 가능. Production Hierarchy로 동작하도록 하기 위해서는 Microsoft로부터 정식 응용 프로그램 인증서를 받아 매니페스트 파일을 명시적으로 생성, 응용 프로그램과 함께 배포해야 함.(Production Hierarchy인 경우에만 Office IRM, Exchange IRM 등과 호환됨)

  - 참조1: http://msdn.microsoft.com/en-us/library/windows/desktop/hh971319(v=vs.85).aspx

  - 참조2: http://msdn.microsoft.com/en-us/library/windows/desktop/hh995037(v=vs.85).aspx





Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]