Silverlight를 설치하려면 여기를 클릭합니다.*
Korea 대한민국변경|Microsoft 전체 사이트
MSDN
|개발자 센터
MSDN 홈 > MSDN 칼럼 > Code Secure > 관리자로서 안전하게 웹을 검색 및 전자 메일 읽기 (2부)

관리자로서 안전하게 웹을 검색 및 전자 메일 읽기 (2부)

Michael Howard
Microsoft Security Engineering

요약: Michael Howard는 이전 기사에 이어서 관리자로서 실행 시 로컬 정책 또는 엔터프라이즈 정책과 함께 SAFER를 사용하여 잠재적 위협을 줄이는 방법을 설명합니다.

SetSAFER.msi 파일 다운로드 .


지난 번 관리자로서 안전하게 웹을 검색 및 전자 메일 읽기 기사에서 관리자로서 로그인한 경우에도 제한된 권한으로 실행되는 프로세스를 프로그래밍 방식으로 생성할 수 있는 방법에 대해 간단히 설명했습니다. 그 목적은 웹 브라우저와 전자 메일 클라이언트 등 인터넷 기능(가장 공격 받기 쉬운 응용 프로그램)을 수행하는 프로세스를 제한된 권한으로 실행하여 공격 벡터로 이러한 에이전트를 사용하는 모든 멀웨어로 인한 손상 가능성을 감소시키는 것입니다.

Windows XP 이상은 SAFER(Software Restriction Policies)라고 하는 기술을 사용하여 이 기능을 지원합니다. SAFER를 사용하는 방법에는 두 가지가 있습니다. 그 중 하나는 지난 번 기상에서 설명한 SaferCreateLevelSaferComputeTokenFromLevel과 같은 API를 사용하는 것입니다. 다른 하나는 이번 기상의 주제이기도 한 로컬 정책 또는 엔터프라이즈 정책을 사용하는 것입니다.

참고: 로컬 관리자만이 컴퓨터에 SAFE 정책을 설정할 수 있습니다.

그럼 자세히 살펴봅시다. MMC를 실행하고 그룹 정책 개체 스냅인을 추가하여 로컬 컴퓨터 정책을 열고 소프트웨어 제한 정책으로 이동합니다. 그림 1과 같은 화면이 나타납니다.

클릭하시면 더 큰 이미지를 보실 수 있습니다.

그림 1. 정책 스냅인. 확장되어 소프트웨어 제한 정책이 표시되었습니다.

두 보안 수준 허용되지 않음과 제한 없음이 표시됩니다. 허용되지 않음은 응용 프로그램이 실행되지 않도록 하며 Unrestricted는 사용자와 동일한 트러스트를 사용하여 응용 프로그램이 실행됨을 나타냅니다. 그러므로 사용자가 관리자일 경우 응용 프로그램이 전체 관리자 권한으로 실행됩니다.

실제로 설정해 봅시다. 다음 방법을 사용하여 설정합니다.

  • 추가 규칙을 마우스 오른쪽 단추로 클릭합니다.
  • 새 경로 규칙 만들기를 클릭합니다.
  • \Windows\System32 디렉토리에서 Notepad.exe를 찾습니다.
  • 보안 수준을 허용되지 않음으로 설정합니다.
  • 명령줄로 이동하여 gpupdate를 입력합니다. 정책이 적용되려면 몇 초 기다려야 합니다.
  • notepad.exe를 실행합니다.

그림 2와 같은 대화 상자가 나타납니다.

클릭하시면 더 큰 이미지를 보실 수 있습니다.

그림 2. 소프트웨어 제한 정책이 메모장이 실행되지 않도록 합니다.

뒤로 돌아가 정책을 삭제하고 gpupdate를 다시 실행합니다. 이제 메모장을 실행할 수 있습니다. 다시 몇 초를 기다려야 합니다.

허용하지 않음 설정은 "모르는 위치에" 멀웨어가 있음을 알고 있을 때 미리 멀웨어가 실행되지 않도록 조치하려는 경우 매우 유용한 옵션입니다. nuke.exe라는 파일을 c:\windows\system32 디렉토리와 c:\ root 디렉토리에 추가하는 바이러스가 있다고 가정합시다. 그룹 정책에 c:\windows\system32\nuke.exe와 c:\nuke.exe에 대해 하나씩 두 허용하지 않음 규칙을 추가하고 정책을 전체 조직에 적용할 수 있습니다. 그러면 그 파일이 실행되지 않기 때문에 멀웨어로부터 보호됩니다. 디렉토리 이름을 지정하지 않고 nuke.exe를 추가할 수 있으나 정당한 nuke.exe가 차단됩니다. 물론 nuke.exe 라는 파일이 바이러스로 의심되지만. 그리고 하드 코드 경로 이름 대신에 %PROGRAMFILEs%와 같은 Windows 환경 변수를 사용할 수 있습니다.

그럼 이 기사의 목적으로 돌아가 다음 설명을 시작하겠습니다. 사실 허용하지 않음제한 없음 외에 세 가지의 SAFER 보안 수준이 있습니다. 그 세 가지 설정은 다음과 같습니다

  • 일반 사용자 (또는 기본 사용자라고 함)
  • 제약됨 (또한 제한됨이라고도 함)
  • 트러스트되지 않음

이 옵션을 주요 Switch문에서 참조하였기 때문에 지난 기사의 코드를 읽은 경우 이미 알고 있었을 것입니다.

switch(argv[2][0]) { 
    case 'C' : 
    case 'c' : hSaferLevel = SAFER_LEVELID_CONSTRAINED; break; 

    case 'U' : 
    case 'u' : hSaferLevel = SAFER_LEVELID_UNTRUSTED; break; 

    default  : hSaferLevel = SAFER_LEVELID_NORMALUSER; break; 
}

기본 사용자 보안 수준이 응용 프로그램 호환성과 보안성 면에서 가장 우수하므로 기본 사용자 보안 수준을 중심으로 설명하겠습니다. 지난 번 기사에 대한 독자 의견에 의하면 제약됨과 트러스트되지 않음은 디버깅하기 어려운 이상하고 놀라운 방식으로 많은 응용 프로그램을 중단시켰습니다. 이것을 인정합시다. 사용자에게 정확히 실패한 응용 프로그램과 그 원인을 통지하지 않을 때까지 그 방법으로 보안이 실행되지 않습니다. 그러므로 기본 사용자를 사용해 봅시다.

이 문제를 해결하기 위해 응용 프로그램을 기본 사용자보다 낮은 권한으로 실행할 수 있으나 문제가 발생할 수 있기 때문에 자신의 권한으로 실행합니다. 예를 들어 종종 공격 코드가 있는 사이트를 검색할 때 제약됨 모드로 Internet Explorer를 실행합니다. 다음과 같은 메시지가 표시됩니다. 제약됨트러스트되지 않음의 최종 효과의 일부를 호출해도 아무 문제가 없습니다.

  • HKCU가 읽기 전용입니다.
  • %USERPROFILE%에 액세스할 수 없습니다.
  • SSL 협상 등 일부 암호화 작업이 작동하지 않습니다.

첫 단계는 기본 사용자 설정을 활성화하는 것입니다. 레지스트리 조정을 통하여 이 설정을 활성화할 수 있습니다. 다음에 0x20000으로 설정된 Levels이라는 DWORD 값을 추가합니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers

그리고 MMC 스냅인을 다시 로드하고 그룹 정책 개체 편집기를 추가합니다. 그림 3과 같이 소프트웨어 제한 정책 아래에 기본 사용자가 나타납니다.

클릭하시면 더 큰 이미지를 보실 수 있습니다.

그림 3. 기본 사용자 보안 수준

이 다음이 핵심 단계입니다. 이제 웹 브라우저나 전자 메일 프로그램 등 응용 프로그램에 정책을 설정하여 응용 프로그램이 관리자 계정이 아닌 일반 낮은 권한의 사용자로서 실행할 수 있습니다. 예를 들어 Internet Explorer를 일반 사용자로서 실행하려면 그룹 정책 개체 스냅인을 로드한 후 다음 단계를 수행합니다.

  • 추가 규칙을 마우스 오른쪽 단추로 클릭합니다.
  • 새 경로 규칙 만들기를 클릭합니다.
  • c:\Program Files\Internet Explorer\iexplore.exe를 찾습니다.
  • 보안 수준을 기본 사용자로 설정합니다.

SAFER API를 사용하는 방법에 비교할 때 이 방법의 장점은 프로세스가 시작될 때 운영 체제가 SAFER 정책 메커니즘을 적용한다는 점입니다. 그러므로 바탕 화면의 바로가기 또는 바탕 화면의 저장된 URL에서 Internet Explorer를 호출할 수 있으며 Internet Explorer는 사용자로서 실행됩니다. 물론 iexplore.exe를 바탕 화면으로 복사할 수 있으나 브라우저가 c:\program files\internet explorer 디렉토리에서 실행되지 않기 때문에 SAFER 정책이 적용되지 않습니다.

정책 스냅인을 사용하지 않고 SAFER 정책 설정

저는 SAFER 정책을 설정하는 SetSAFER라는 이름의 작은 프로그램을 작성했습니다. 이 프로그램은 XML 파일을 읽고 XML 파일에서 정의된 응용 프로그램에 대한 SAFER 정책을 활성화하거나 비활성화하도록 해당 레지스트리 키를 설정합니다. 물론 XML 파일에 응용 프로그램을 추가할 수 있습니다. 다음은 도구와 함께 제공되는 예제입니다.

<?xml version="1.0" encoding="UTF-8"?>
<safer>
  <app comment="Internet Explorer" 
    path="C:\Program Files\Internet Explorer" 
    user="true" />
  <app comment="Microsoft Office 2003" 
    path="C:\Program Files\Microsoft Office\OFFICE11" 
    user="true" />
  <app comment="MSN Messenger" 
    path="C:\Program Files\MSN Messenger\msnmsgr.exe" 
    user="true" />
</safer>

이 예제에서 응용 프로그램 이름이나 디렉토리를 사용할 수 있다는 것을 알 수 있습니다. 디렉토리에 SAFER 정책을 설정하면 그 디렉토리의 모든 실행 파일에 정책이 적용됩니다.

이 도구에 대해 알아야 할 매우 중요한 점이 있습니다. 이 도구는 레지스트리의 기존 기본 사용자 SAFER 설정을 모두 삭제하고 이 도구에 포함된 설정으로 설정합니다. 확실히 밝혀두지만 이것은 시험용 도구입니다. 잘 아셨지요!

그리고 이 도구는 Visual Studio .NET 2005 베타 2004년 5월 릴리스를 사용하고 작성하였으므로 이 도구를 실행하려면 .NET Runtime 2.0 베타가 필요합니다. 이 베타는 http://lab.msdn.microsoft.com/vs2005/downloads/default.aspx 에서 다운로드할 수 있습니다. 그리고 2004년 12월, 최신 커뮤니티 릴리스로 코드를 테스트했는데 정상적으로 실행되었습니다.

이 도구를 사용하고 싶지 않으면 레지스트리 키를 직접 설정하거나 앞에서 설명한 소프트웨어 제한 정책 스냅인을 사용할 수 있습니다. 레지스트리 키는 HKLM\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\131072에 있습니다. 각 파일 또는 디렉토리의 경우 {GUID}라는 새 키를 추가한 후 다음 값을 추가합니다. 여기에서 GUID는 일반 GUID 형식인 임의의 GUID(예: {cc845d85-f38e-426a-8644-9d2f90c830d8})입니다.

Description (REG_SZ) A comment about the rule.
ItemData (REG_SZ) Directory or filename
SaferFlags (REG_DWORD) 0x0

다음은 중요한 참고 사항입니다. 이 기술은 Longhorn에서 변경될 것이므로 이 도구와 소프트웨어 제한 정책 기술이 Windows XP와 Windows Server 2003에서 작동하는 것처럼 작동하지 않아도 놀라지 마십시오.

빠른 시작

당장 사용자로 실행되도록 Internet Explorer 브라우저를 설정하려면 다음 텍스트를 복사하여 LowRightsIE.reg 파일에 저장하십시오.

Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer
\CodeIdentifiers\131072\Paths\{effd8629-e248-4c3c-a06b-c178921c6745}]
"Description"="Internet Explorer"
"ItemData"="C:\\Program Files\\Internet Explorer"
"SaferFlags"=dword:00000000

일반 관리 계정으로 실행되도록 브라우저를 설정하려면 이 레지스트리 키를 제거하십시오. 또는 iexplore.exe를 바탕 화면으로 복사합니다. 기본적으로 Internet Explorer가 사용자로서 실행되지만 관리 작업을 수행해야 할 경우 바탕 화면에서 두 번 클릭할 수 있습니다.

성공 확인

어떻게 프로세스가 제한된 권한으로 실행되고 있는지 알 수 있습니까? 간단하게 확인할 수 있습니다. 프로세스와 연결된 토큰을 보십시오. 제 생각에 가장 좋은 도구는 Sysinternals(sysinternals.com.)의 Process Explorer입니다. 이 도구를 사용할 경우 해당 프로세스를 두 번 클릭한 다음 보안 탭을 클릭하십시오. 그러면 그림 4와 같은 대화 상자가 나타납니다. 관리자 SID거부로 설정되었으며 토큰에 잠재적으로 위험한 권한이 없습니다. 이 응용 프로그램은 관리자가 아닌 사용자로서 실행되고 있습니다.

그림 4. 관리자가 실행하는 비관리자 프로세스 토큰의 예

관리자로 응용 프로그램을 실행해야 할 경우 어떻게 합니까?

관리자로서 응용 프로그램을 실행해야 할 경우, 예를 들어 Internet Explorer에서 ActiveX 컨트롤을 로드하거나 Windows Update를 실행해야 할 경우 SetSAFER 도구를 실행하고 Internet Explorer 설정을 해제한 다음 다시 브라우저 인스턴스를 로드하십시오. 또는 레지스트리 키를 수동으로 제거할 수 있습니다.

이제 마지막 경고 사항입니다. 시스템 디렉토리에 SAFER 정책을 적용하지 마십시오. SetSAFER 도구는 이러한 실수를 방지하기 위해 시스템 디렉토리를 표시하지 않습니다.

이번에는 정말로 마지막 경고입니다. 이것은 비관리자로서 실행에 대한 대체 방법이 아니며 단지 필요할 경우 RunAs를 사용하여 승격하는 것에 대한 대체 방법입니다. 생각해 보십시오. 비관리자로서 일부 멀웨어가 실행되고 있을 경우 그 프로세스가 키 입력 또는 메시지를 처리하면 멀웨어가 키 입력을 다른 사람에게 전송할 수 있으며 높은 권한 프로세스도 전송할 수도 있습니다..

테스트한 응용 프로그램

Microsoft의 많은 직원이 SAFER를 사용하여 사용자로서 다음 응용 프로그램을 테스트했다는 사실을 지적하고 싶습니다. 테스트한 응용 프로그램은 다음과 같습니다.

  • Internet Explorer 5.x 및 6.x
  • Microsoft Office 2003(Outlook 포함)
  • Outlook Express(Windows XP SP1, Windows XP SP2 및 Windows Server 2003)
  • MSN Messenger 6 및 7 베타
  • Windows Messenger(Windows XP SP2 및 Windows Server 2003)
  • Windows Media Player 9 및 10

물론 SAFER를 사용하여 어느 응용 프로그램이나 실행할 수 있으나 위 목록의 응용 프로그램은 모두 인터넷 접속 클라이언트 응용 프로그램이고 공격에 노출되어 있기 때문에 위 목록이 테스트가 실시된 전부라는 것을 명심하십시오. 이러한 소프트웨어 제한 정책으로 응용 프로그램을 실행할 때 문제가 있을 경우 일반 사용자로 로그온하여 응용 프로그램을 다시 실행하십시오. 그래도 문제가 해결되지 않을 경우 어떻게 하더라도 응용 프로그램을 일반 사용자로서 실행되지 않습니다. 이미 알려진 문제에 대해 알아보려면 Aaron Margosis의 블로그(http://weblogs.asp.net/aaron_margosis )를 참조하십시오. 새로운 문제가 있을 경우 제 블로그(http://blogs.msdn.com/michael_howard )로 의견을 보내주십시오.


Michael Howard는 Microsoft Secure Engineering 그룹의 수석 보안 프로그램 매니저이며 Writing Secure Code (2판)의 공동 저자이고 Designing Secure Web-based Applications for Windows 2000의 주요 저자입니다. 또한 IEEE Security & Privacy Magazine의 Basic Training 공동 편집인입니다. 주요 관심사는 보안 시스템이 불충분한 상태에서 아무 것도 디자인, 작성, 테스트, 문서화하지 않도록 확인하는 것입니다. 가장 좋아하는 문구는 "한 사람에게 기능은 다른 사람에게는 공격이다"입니다.


Top of Page Top of Page


Microsoft